| // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_DEBUGGER_INSPECTABLE_TAB_PROXY_H_ |
| #define CHROME_BROWSER_DEBUGGER_INSPECTABLE_TAB_PROXY_H_ |
| #pragma once |
| |
| #include <string> |
| |
| #include "base/basictypes.h" |
| #include "base/hash_tables.h" |
| #include "chrome/browser/debugger/devtools_client_host.h" |
| |
| class DebuggerRemoteService; |
| class DevToolsClientHost; |
| class DevToolsClientHostImpl; |
| class NavigationController; |
| struct DevToolsMessageData; |
| |
| // Proxies debugged tabs' NavigationControllers using their UIDs. |
| // Keeps track of tabs being debugged so that we can detach from |
| // them on remote debugger connection loss. |
| class InspectableTabProxy { |
| public: |
| typedef base::hash_map<int32, NavigationController*> ControllersMap; |
| typedef base::hash_map<int32, DevToolsClientHostImpl*> IdToClientHostMap; |
| |
| InspectableTabProxy(); |
| virtual ~InspectableTabProxy(); |
| |
| // Returns a map of NavigationControllerKeys to NavigationControllers |
| // for all Browser instances. Clients should not keep the result around |
| // for extended periods of time as tabs might get closed thus invalidating |
| // the map. |
| const ControllersMap& controllers_map(); |
| |
| // Returns a DevToolsClientHostImpl for the given tab |id|. |
| DevToolsClientHostImpl* ClientHostForTabId(int32 id); |
| |
| // Creates a new DevToolsClientHost implementor instance. |
| // |id| is the UID of the tab to debug. |
| // |service| is the DebuggerRemoteService instance the DevToolsClient |
| // messages shall be dispatched to. |
| DevToolsClientHost* NewClientHost(int32 id, |
| DebuggerRemoteService* service); |
| |
| // Gets invoked when a remote debugger is detached. In this case we should |
| // send the corresponding message to the V8 debugger for each of the tabs |
| // the debugger is attached to, and invoke InspectedTabClosing(). |
| void OnRemoteDebuggerDetached(); |
| |
| private: |
| ControllersMap controllers_map_; |
| IdToClientHostMap id_to_client_host_map_; |
| DISALLOW_COPY_AND_ASSIGN(InspectableTabProxy); |
| }; |
| |
| |
| // An internal implementation of DevToolsClientHost that delegates |
| // messages sent for DevToolsClient to a DebuggerShell instance. |
| class DevToolsClientHostImpl : public DevToolsClientHost { |
| public: |
| DevToolsClientHostImpl( |
| int32 id, |
| DebuggerRemoteService* service, |
| InspectableTabProxy::IdToClientHostMap* map); |
| ~DevToolsClientHostImpl(); |
| |
| DebuggerRemoteService* debugger_remote_service() { |
| return service_; |
| } |
| |
| void Close(); |
| |
| // DevToolsClientHost interface |
| virtual void InspectedTabClosing(); |
| virtual void SendMessageToClient(const IPC::Message& msg); |
| virtual void TabReplaced(TabContentsWrapper* new_tab); |
| |
| private: |
| // Message handling routines |
| void OnDebuggerOutput(const std::string& msg); |
| virtual void FrameNavigating(const std::string& url); |
| void TabClosed(); |
| |
| int32 id_; |
| DebuggerRemoteService* service_; |
| InspectableTabProxy::IdToClientHostMap* map_; |
| }; |
| |
| #endif // CHROME_BROWSER_DEBUGGER_INSPECTABLE_TAB_PROXY_H_ |