Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(49)

Side by Side Diff: chrome/browser/debugger/devtools_manager.h

Issue 7274031: Wholesale move of debugger sources to content. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add OWNERS and DEPS. Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(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_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698