| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #ifndef CHROME_BROWSER_DEBUGGER_DEVTOOLS_MANAGER_H_ | |
| 6 #define CHROME_BROWSER_DEBUGGER_DEVTOOLS_MANAGER_H_ | |
| 7 #pragma once | |
| 8 | |
| 9 #include <map> | |
| 10 #include <string> | |
| 11 | |
| 12 #include "base/memory/ref_counted.h" | |
| 13 #include "chrome/browser/debugger/devtools_client_host.h" | |
| 14 #include "chrome/browser/debugger/devtools_toggle_action.h" | |
| 15 #include "content/common/notification_observer.h" | |
| 16 #include "content/common/notification_registrar.h" | |
| 17 #include "webkit/glue/resource_loader_bridge.h" | |
| 18 | |
| 19 namespace IPC { | |
| 20 class Message; | |
| 21 } | |
| 22 | |
| 23 class DevToolsNetLogObserver; | |
| 24 class GURL; | |
| 25 class IOThread; | |
| 26 class PrefService; | |
| 27 class RenderViewHost; | |
| 28 class TabContentsWraper; | |
| 29 | |
| 30 using webkit_glue::ResourceLoaderBridge; | |
| 31 | |
| 32 typedef std::map<std::string, std::string> DevToolsRuntimeProperties; | |
| 33 | |
| 34 // This class is a singleton that manages DevToolsClientHost instances and | |
| 35 // routes messages between developer tools clients and agents. | |
| 36 class DevToolsManager : public DevToolsClientHost::CloseListener, | |
| 37 public NotificationObserver, | |
| 38 public base::RefCounted<DevToolsManager> { | |
| 39 public: | |
| 40 static DevToolsManager* GetInstance(); | |
| 41 | |
| 42 static void RegisterUserPrefs(PrefService* prefs); | |
| 43 | |
| 44 DevToolsManager(); | |
| 45 | |
| 46 // Returns DevToolsClientHost registered for |inspected_rvh| or NULL if | |
| 47 // there is no alive DevToolsClientHost registered for |inspected_rvh|. | |
| 48 DevToolsClientHost* GetDevToolsClientHostFor(RenderViewHost* inspected_rvh); | |
| 49 | |
| 50 // Registers new DevToolsClientHost for |inspected_rvh|. There must be no | |
| 51 // other DevToolsClientHosts registered for the RenderViewHost at the moment. | |
| 52 void RegisterDevToolsClientHostFor(RenderViewHost* inspected_rvh, | |
| 53 DevToolsClientHost* client_host); | |
| 54 void UnregisterDevToolsClientHostFor(RenderViewHost* inspected_rvh); | |
| 55 | |
| 56 void ForwardToDevToolsAgent(RenderViewHost* client_rvh, | |
| 57 const IPC::Message& message); | |
| 58 void ForwardToDevToolsAgent(DevToolsClientHost* from, | |
| 59 const IPC::Message& message); | |
| 60 void ForwardToDevToolsClient(RenderViewHost* inspected_rvh, | |
| 61 const IPC::Message& message); | |
| 62 | |
| 63 void ActivateWindow(RenderViewHost* client_rvn); | |
| 64 void CloseWindow(RenderViewHost* client_rvn); | |
| 65 void RequestDockWindow(RenderViewHost* client_rvn); | |
| 66 void RequestUndockWindow(RenderViewHost* client_rvn); | |
| 67 | |
| 68 void OpenDevToolsWindow(RenderViewHost* inspected_rvh); | |
| 69 void ToggleDevToolsWindow(RenderViewHost* inspected_rvh, | |
| 70 DevToolsToggleAction action); | |
| 71 void RuntimePropertyChanged(RenderViewHost* inspected_rvh, | |
| 72 const std::string& name, | |
| 73 const std::string& value); | |
| 74 | |
| 75 // Starts element inspection in the devtools client. | |
| 76 // Creates one by means of OpenDevToolsWindow if no client | |
| 77 // exists. | |
| 78 void InspectElement(RenderViewHost* inspected_rvh, int x, int y); | |
| 79 | |
| 80 // Sends 'Attach' message to the agent using |dest_rvh| in case | |
| 81 // there is a DevToolsClientHost registered for the |inspected_rvh|. | |
| 82 void OnNavigatingToPendingEntry(RenderViewHost* inspected_rvh, | |
| 83 RenderViewHost* dest_rvh, | |
| 84 const GURL& gurl); | |
| 85 | |
| 86 // Invoked when a tab is replaced by another tab. This is triggered by | |
| 87 // TabStripModel::ReplaceTabContentsAt. | |
| 88 void TabReplaced(TabContentsWrapper* old_tab, TabContentsWrapper* new_tab); | |
| 89 | |
| 90 // Detaches client host and returns cookie that can be used in | |
| 91 // AttachClientHost. | |
| 92 int DetachClientHost(RenderViewHost* from_rvh); | |
| 93 | |
| 94 // Attaches orphan client host to new render view host. | |
| 95 void AttachClientHost(int client_host_cookie, | |
| 96 RenderViewHost* to_rvh); | |
| 97 | |
| 98 // Closes all open developer tools windows. | |
| 99 void CloseAllClientHosts(); | |
| 100 | |
| 101 private: | |
| 102 friend class base::RefCounted<DevToolsManager>; | |
| 103 | |
| 104 virtual ~DevToolsManager(); | |
| 105 | |
| 106 // DevToolsClientHost::CloseListener override. | |
| 107 // This method will remove all references from the manager to the | |
| 108 // DevToolsClientHost and unregister all listeners related to the | |
| 109 // DevToolsClientHost. | |
| 110 virtual void ClientHostClosing(DevToolsClientHost* host); | |
| 111 | |
| 112 // Overridden from NotificationObserver: | |
| 113 virtual void Observe(NotificationType type, | |
| 114 const NotificationSource& source, | |
| 115 const NotificationDetails& details); | |
| 116 | |
| 117 // Returns RenderViewHost for the tab that is inspected by devtools | |
| 118 // client hosted by DevToolsClientHost. | |
| 119 RenderViewHost* GetInspectedRenderViewHost(DevToolsClientHost* client_host); | |
| 120 | |
| 121 void SendAttachToAgent(RenderViewHost* inspected_rvh); | |
| 122 void SendDetachToAgent(RenderViewHost* inspected_rvh); | |
| 123 | |
| 124 void ForceReopenWindow(); | |
| 125 | |
| 126 DevToolsClientHost* FindOwnerDevToolsClientHost(RenderViewHost* client_rvh); | |
| 127 | |
| 128 void ToggleDevToolsWindow(RenderViewHost* inspected_rvh, | |
| 129 bool force_open, | |
| 130 DevToolsToggleAction action); | |
| 131 | |
| 132 void ReopenWindow(RenderViewHost* client_rvh, bool docked); | |
| 133 | |
| 134 void BindClientHost(RenderViewHost* inspected_rvh, | |
| 135 DevToolsClientHost* client_host, | |
| 136 const DevToolsRuntimeProperties& runtime_properties); | |
| 137 | |
| 138 void UnbindClientHost(RenderViewHost* inspected_rvh, | |
| 139 DevToolsClientHost* client_host); | |
| 140 | |
| 141 // These two maps are for tracking dependencies between inspected tabs and | |
| 142 // their DevToolsClientHosts. They are useful for routing devtools messages | |
| 143 // and allow us to have at most one devtools client host per tab. | |
| 144 // | |
| 145 // DevToolsManager start listening to DevToolsClientHosts when they are put | |
| 146 // into these maps and removes them when they are closing. | |
| 147 typedef std::map<RenderViewHost*, DevToolsClientHost*> | |
| 148 InspectedRvhToClientHostMap; | |
| 149 InspectedRvhToClientHostMap inspected_rvh_to_client_host_; | |
| 150 | |
| 151 typedef std::map<DevToolsClientHost*, RenderViewHost*> | |
| 152 ClientHostToInspectedRvhMap; | |
| 153 ClientHostToInspectedRvhMap client_host_to_inspected_rvh_; | |
| 154 | |
| 155 typedef std::map<RenderViewHost*, DevToolsRuntimeProperties> | |
| 156 RuntimePropertiesMap; | |
| 157 RuntimePropertiesMap runtime_properties_map_; | |
| 158 | |
| 159 RenderViewHost* inspected_rvh_for_reopen_; | |
| 160 bool in_initial_show_; | |
| 161 | |
| 162 typedef std::map<int, | |
| 163 std::pair<DevToolsClientHost*, DevToolsRuntimeProperties> > | |
| 164 OrphanClientHosts; | |
| 165 OrphanClientHosts orphan_client_hosts_; | |
| 166 int last_orphan_cookie_; | |
| 167 | |
| 168 NotificationRegistrar registrar_; | |
| 169 | |
| 170 DISALLOW_COPY_AND_ASSIGN(DevToolsManager); | |
| 171 }; | |
| 172 | |
| 173 #endif // CHROME_BROWSER_DEBUGGER_DEVTOOLS_MANAGER_H_ | |
| OLD | NEW |