| Index: chrome/browser/debugger/devtools_manager.h
|
| ===================================================================
|
| --- chrome/browser/debugger/devtools_manager.h (revision 12273)
|
| +++ chrome/browser/debugger/devtools_manager.h (working copy)
|
| @@ -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 ForwardToDevToolsClient(RenderViewHost* from,
|
| + void ForwardToDevToolsAgent(const DevToolsClientHost& from,
|
| + const IPC::Message& message);
|
| + 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_;
|
| + // 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_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(DevToolsManager);
|
| };
|
|
|
| -
|
| -// 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);
|
| -};
|
| -
|
| #endif // CHROME_BROWSER_DEBUGGER_DEVTOOLS_MANAGER_H_
|
|
|