summaryrefslogtreecommitdiffstats
path: root/chrome/browser/debugger/devtools_manager.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/debugger/devtools_manager.h')
-rw-r--r--chrome/browser/debugger/devtools_manager.h108
1 files changed, 44 insertions, 64 deletions
diff --git a/chrome/browser/debugger/devtools_manager.h b/chrome/browser/debugger/devtools_manager.h
index ce6ee73..fe1c803 100644
--- a/chrome/browser/debugger/devtools_manager.h
+++ b/chrome/browser/debugger/devtools_manager.h
@@ -9,104 +9,84 @@
#include "base/basictypes.h"
#include "base/scoped_ptr.h"
+#include "chrome/browser/debugger/devtools_client_host.h"
#include "chrome/common/notification_service.h"
namespace IPC {
class Message;
}
-class DevToolsInstanceDescriptor;
-class DevToolsInstanceDescriptorImpl;
-class DevToolsWindow;
-class DevToolsWindowFactory;
+class DevToolsClientHost;
class NavigationController;
class NotificationRegistrar;
class RenderViewHost;
class WebContents;
-// This class is a singleton that manages DevToolsWindow instances and routes
-// messages between developer tools clients and agents.
-class DevToolsManager : public NotificationObserver {
+// This class is a singleton that manages DevToolsClientHost instances and
+// routes messages between developer tools clients and agents.
+class DevToolsManager : public NotificationObserver,
+ public DevToolsClientHost::CloseListener {
public:
- // If the factory is NULL, this will create DevToolsWindow objects using
- // DevToolsWindow::Create static method.
- DevToolsManager(DevToolsWindowFactory* factory);
+ DevToolsManager();
virtual ~DevToolsManager();
- // Opend developer tools window for |web_contents|. If there is already
- // one it will be revealed otherwise a new instance will be created. The
- // devtools window is actually opened for the tab owning |web_contents|. If
- // navigation occurs in it causing change of contents in the tab the devtools
- // window will attach to the new contents. When the tab is closed the manager
- // will close related devtools window.
- void ShowDevToolsForWebContents(WebContents* web_contents);
+ // Returns DevToolsClientHost registered for |web_contents| or NULL if
+ // there is no alive DevToolsClientHost registered for |web_contents|.
+ DevToolsClientHost* GetDevToolsClientHostFor(const WebContents& web_contents);
- void ForwardToDevToolsAgent(RenderViewHost* from,
+ // Registers new DevToolsClientHost for |web_contents|. There must be no
+ // other DevToolsClientHosts registered for the WebContents at the moment.
+ void RegisterDevToolsClientHostFor(const WebContents& web_contents,
+ DevToolsClientHost* client_host);
+
+ void ForwardToDevToolsAgent(const RenderViewHost& client_rvh,
+ const IPC::Message& message);
+ void ForwardToDevToolsAgent(const DevToolsClientHost& from,
const IPC::Message& message);
- void ForwardToDevToolsClient(RenderViewHost* from,
+ void ForwardToDevToolsClient(const RenderViewHost& from,
const IPC::Message& message);
private:
- // Creates a DevToolsWindow using devtools_window_factory_ or by calling
- // DevToolsWindow::Create, if the factory is NULL. All DevToolsWindows should
- // be created by means of this method.
- DevToolsWindow* CreateDevToolsWindow(DevToolsInstanceDescriptor* descriptor);
-
// NotificationObserver override.
virtual void Observe(NotificationType type,
const NotificationSource& source,
const NotificationDetails& details);
- friend class DevToolsInstanceDescriptorImpl;
+ // DevToolsClientHost::CloseListener override.
+ // This method will remove all references from the manager to the
+ // DevToolsClientHost and unregister all listeners related to the
+ // DevToolsClientHost.
+ virtual void ClientHostClosing(DevToolsClientHost* host);
- // This method is called by DevToolsInstanceDescriptorImpl when it's about
- // to be destroyed. It will remove all references from the manager to the
- // descriptor and unregister all listeners related to the descriptor.
- void RemoveDescriptor(DevToolsInstanceDescriptorImpl* descriptor);
+ // Returns NavigationController for the tab that is inspected by devtools
+ // client hosted by DevToolsClientHost.
+ NavigationController* GetDevToolsAgentNavigationController(
+ const DevToolsClientHost& client_host);
void StartListening(NavigationController* navigation_controller);
void StopListening(NavigationController* navigation_controller);
- // This object is not NULL iff there is at least one open DevToolsWindow.
+ // This object is not NULL iff there is at least one registered
+ // DevToolsClientHost.
scoped_ptr<NotificationRegistrar> web_contents_listeners_;
- // This maps is for tracking devtools instances opened for browser tabs. It
- // allows us to have at most one devtools window per tab.
- // We use NavigationController* as key because it survives crosee-site
- // navigation in cases when tab contents may change.
+ // These two maps are for tracking dependencies between inspected tabs and
+ // their DevToolsClientHosts. They are usful for routing devtools messages
+ // and allow us to have at most one devtools client host per tab. We use
+ // NavigationController* as key because it survives crosee-site navigation in
+ // cases when tab contents may change.
//
- // This map doesn't own its values but DevToolsInstanceDescriptorImpl is
- // expected to call RemoveDescriptor before dying to remove itself from the
- // map.
- typedef std::map<NavigationController*,
- DevToolsInstanceDescriptorImpl*> DescriptorMap;
- DescriptorMap navcontroller_to_descriptor_;
- DevToolsWindowFactory* devtools_window_factory_;
-
- DISALLOW_COPY_AND_ASSIGN(DevToolsManager);
-};
+ // DevToolsManager start listening to DevToolsClientHosts when they are put
+ // into these maps and removes them when they are closing.
+ typedef std::map<const NavigationController*,
+ DevToolsClientHost*> ClientHostMap;
+ ClientHostMap navcontroller_to_client_host_;
+ typedef std::map<const DevToolsClientHost*,
+ NavigationController*> NavControllerMap;
+ NavControllerMap client_host_to_navcontroller_;
-// Incapsulates information about devtools window instance necessary for
-// routing devtools messages and managing the window. It should be initialized
-// by DevToolsWindow concrete implementation.
-class DevToolsInstanceDescriptor {
- public:
- DevToolsInstanceDescriptor() {}
-
- virtual void SetDevToolsHost(RenderViewHost* render_view_host) = 0;
- virtual void SetDevToolsWindow(DevToolsWindow* window) = 0;
-
- // This method is called when DevToolsWindow is closing and the descriptor
- // becomes invalid. It will clean up DevToolsManager and delete this instance.
- virtual void Destroy() = 0;
-
- protected:
- // This method should be called from Destroy only.
- virtual ~DevToolsInstanceDescriptor() {}
-
- private:
- DISALLOW_COPY_AND_ASSIGN(DevToolsInstanceDescriptor);
+ DISALLOW_COPY_AND_ASSIGN(DevToolsManager);
};
#endif // CHROME_BROWSER_DEBUGGER_DEVTOOLS_MANAGER_H_