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

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

Issue 343075: DevTools: support cross-navigation instrumentation. (Closed)
Patch Set: '' Created 11 years, 1 month 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
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/debugger/devtools_manager.h" 5 #include "chrome/browser/debugger/devtools_manager.h"
6 6
7 #include <vector>
8
7 #include "base/message_loop.h" 9 #include "base/message_loop.h"
8 #include "chrome/browser/browser_process.h" 10 #include "chrome/browser/browser_process.h"
9 #include "chrome/browser/browsing_instance.h" 11 #include "chrome/browser/browsing_instance.h"
10 #include "chrome/browser/child_process_security_policy.h" 12 #include "chrome/browser/child_process_security_policy.h"
11 #include "chrome/browser/debugger/devtools_window.h" 13 #include "chrome/browser/debugger/devtools_window.h"
12 #include "chrome/browser/debugger/devtools_client_host.h" 14 #include "chrome/browser/debugger/devtools_client_host.h"
13 #include "chrome/browser/profile.h" 15 #include "chrome/browser/profile.h"
14 #include "chrome/browser/renderer_host/render_view_host.h" 16 #include "chrome/browser/renderer_host/render_view_host.h"
15 #include "chrome/browser/renderer_host/site_instance.h" 17 #include "chrome/browser/renderer_host/site_instance.h"
16 #include "chrome/browser/tab_contents/tab_contents.h" 18 #include "chrome/browser/tab_contents/tab_contents.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 52
51 void DevToolsManager::RegisterDevToolsClientHostFor( 53 void DevToolsManager::RegisterDevToolsClientHostFor(
52 RenderViewHost* inspected_rvh, 54 RenderViewHost* inspected_rvh,
53 DevToolsClientHost* client_host) { 55 DevToolsClientHost* client_host) {
54 DCHECK(!GetDevToolsClientHostFor(inspected_rvh)); 56 DCHECK(!GetDevToolsClientHostFor(inspected_rvh));
55 57
56 inspected_rvh_to_client_host_[inspected_rvh] = client_host; 58 inspected_rvh_to_client_host_[inspected_rvh] = client_host;
57 client_host_to_inspected_rvh_[client_host] = inspected_rvh; 59 client_host_to_inspected_rvh_[client_host] = inspected_rvh;
58 client_host->set_close_listener(this); 60 client_host->set_close_listener(this);
59 61
60 SendAttachToAgent(inspected_rvh); 62 SendAttachToAgent(inspected_rvh, std::set<std::string>());
61 } 63 }
62 64
63 void DevToolsManager::ForwardToDevToolsAgent( 65 void DevToolsManager::ForwardToDevToolsAgent(
64 RenderViewHost* client_rvh, 66 RenderViewHost* client_rvh,
65 const IPC::Message& message) { 67 const IPC::Message& message) {
66 DevToolsClientHost* client_host = FindOnwerDevToolsClientHost(client_rvh); 68 DevToolsClientHost* client_host = FindOnwerDevToolsClientHost(client_rvh);
67 if (client_host) 69 if (client_host)
68 ForwardToDevToolsAgent(client_host, message); 70 ForwardToDevToolsAgent(client_host, message);
69 } 71 }
70 72
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 } 129 }
128 130
129 void DevToolsManager::OpenDevToolsWindow(RenderViewHost* inspected_rvh) { 131 void DevToolsManager::OpenDevToolsWindow(RenderViewHost* inspected_rvh) {
130 ToggleDevToolsWindow(inspected_rvh, true); 132 ToggleDevToolsWindow(inspected_rvh, true);
131 } 133 }
132 134
133 void DevToolsManager::ToggleDevToolsWindow(RenderViewHost* inspected_rvh) { 135 void DevToolsManager::ToggleDevToolsWindow(RenderViewHost* inspected_rvh) {
134 ToggleDevToolsWindow(inspected_rvh, false); 136 ToggleDevToolsWindow(inspected_rvh, false);
135 } 137 }
136 138
139 void DevToolsManager::RuntimeFeatureStateChanged(RenderViewHost* inspected_rvh,
140 const std::string& feature,
141 bool enabled) {
142 RuntimeFeaturesMap::iterator it = runtime_features_.find(inspected_rvh);
143 if (it == runtime_features_.end()) {
144 std::pair<RenderViewHost*, std::set<std::string> > value(
145 inspected_rvh,
146 std::set<std::string>());
147 it = runtime_features_.insert(value).first;
148 }
149 if (enabled)
150 it->second.insert(feature);
151 else
152 it->second.erase(feature);
153 }
154
137 void DevToolsManager::InspectElement(RenderViewHost* inspected_rvh, 155 void DevToolsManager::InspectElement(RenderViewHost* inspected_rvh,
138 int x, 156 int x,
139 int y) { 157 int y) {
140 OpenDevToolsWindow(inspected_rvh); 158 OpenDevToolsWindow(inspected_rvh);
141 IPC::Message* m = new DevToolsAgentMsg_InspectElement(x, y); 159 IPC::Message* m = new DevToolsAgentMsg_InspectElement(x, y);
142 m->set_routing_id(inspected_rvh->routing_id()); 160 m->set_routing_id(inspected_rvh->routing_id());
143 inspected_rvh->Send(m); 161 inspected_rvh->Send(m);
144 } 162 }
145 163
146 void DevToolsManager::ClientHostClosing(DevToolsClientHost* host) { 164 void DevToolsManager::ClientHostClosing(DevToolsClientHost* host) {
147 RenderViewHost* inspected_rvh = GetInspectedRenderViewHost(host); 165 RenderViewHost* inspected_rvh = GetInspectedRenderViewHost(host);
148 if (!inspected_rvh) 166 if (!inspected_rvh)
149 return; 167 return;
150 SendDetachToAgent(inspected_rvh); 168 SendDetachToAgent(inspected_rvh);
151 169
152 inspected_rvh_to_client_host_.erase(inspected_rvh); 170 inspected_rvh_to_client_host_.erase(inspected_rvh);
171 runtime_features_.erase(inspected_rvh);
153 client_host_to_inspected_rvh_.erase(host); 172 client_host_to_inspected_rvh_.erase(host);
154 } 173 }
155 174
156 RenderViewHost* DevToolsManager::GetInspectedRenderViewHost( 175 RenderViewHost* DevToolsManager::GetInspectedRenderViewHost(
157 DevToolsClientHost* client_host) { 176 DevToolsClientHost* client_host) {
158 ClientHostToInspectedRvhMap::iterator it = 177 ClientHostToInspectedRvhMap::iterator it =
159 client_host_to_inspected_rvh_.find(client_host); 178 client_host_to_inspected_rvh_.find(client_host);
160 if (it != client_host_to_inspected_rvh_.end()) 179 if (it != client_host_to_inspected_rvh_.end())
161 return it->second; 180 return it->second;
162 return NULL; 181 return NULL;
163 } 182 }
164 183
165 void DevToolsManager::UnregisterDevToolsClientHostFor( 184 void DevToolsManager::UnregisterDevToolsClientHostFor(
166 RenderViewHost* inspected_rvh) { 185 RenderViewHost* inspected_rvh) {
167 DevToolsClientHost* host = GetDevToolsClientHostFor(inspected_rvh); 186 DevToolsClientHost* host = GetDevToolsClientHostFor(inspected_rvh);
168 if (!host) 187 if (!host)
169 return; 188 return;
170 inspected_rvh_to_client_host_.erase(inspected_rvh); 189 inspected_rvh_to_client_host_.erase(inspected_rvh);
190 runtime_features_.erase(inspected_rvh);
191
171 client_host_to_inspected_rvh_.erase(host); 192 client_host_to_inspected_rvh_.erase(host);
172 if (inspected_rvh_for_reopen_ == inspected_rvh) 193 if (inspected_rvh_for_reopen_ == inspected_rvh)
173 inspected_rvh_for_reopen_ = NULL; 194 inspected_rvh_for_reopen_ = NULL;
174 195
175 // Issue tab closing event post unbound. 196 // Issue tab closing event post unbound.
176 host->InspectedTabClosing(); 197 host->InspectedTabClosing();
177 198
178 int process_id = inspected_rvh->process()->id(); 199 int process_id = inspected_rvh->process()->id();
179 for (InspectedRvhToClientHostMap::iterator it = 200 for (InspectedRvhToClientHostMap::iterator it =
180 inspected_rvh_to_client_host_.begin(); 201 inspected_rvh_to_client_host_.begin();
(...skipping 10 matching lines...) Expand all
191 RenderViewHost* dest_rvh, 212 RenderViewHost* dest_rvh,
192 const GURL& gurl) { 213 const GURL& gurl) {
193 if (in_initial_show_) { 214 if (in_initial_show_) {
194 // Mute this even in case it is caused by the initial show routines. 215 // Mute this even in case it is caused by the initial show routines.
195 return; 216 return;
196 } 217 }
197 DevToolsClientHost* client_host = 218 DevToolsClientHost* client_host =
198 GetDevToolsClientHostFor(rvh); 219 GetDevToolsClientHostFor(rvh);
199 if (client_host) { 220 if (client_host) {
200 // Navigating to URL in the inspected window. 221 // Navigating to URL in the inspected window.
222 std::set<std::string> runtime_features = runtime_features_[rvh];
201 inspected_rvh_to_client_host_.erase(rvh); 223 inspected_rvh_to_client_host_.erase(rvh);
224 runtime_features_.erase(rvh);
202 inspected_rvh_to_client_host_[dest_rvh] = client_host; 225 inspected_rvh_to_client_host_[dest_rvh] = client_host;
203 client_host_to_inspected_rvh_[client_host] = dest_rvh; 226 client_host_to_inspected_rvh_[client_host] = dest_rvh;
204 SendAttachToAgent(dest_rvh); 227 SendAttachToAgent(dest_rvh, runtime_features);
205 return; 228 return;
206 } 229 }
207 230
208 // Iterate over client hosts and if there is one that has render view host 231 // Iterate over client hosts and if there is one that has render view host
209 // changing, reopen entire client window (this must be caused by the user 232 // changing, reopen entire client window (this must be caused by the user
210 // manually refreshing its content). 233 // manually refreshing its content).
211 for (ClientHostToInspectedRvhMap::iterator it = 234 for (ClientHostToInspectedRvhMap::iterator it =
212 client_host_to_inspected_rvh_.begin(); 235 client_host_to_inspected_rvh_.begin();
213 it != client_host_to_inspected_rvh_.end(); ++it) { 236 it != client_host_to_inspected_rvh_.end(); ++it) {
214 DevToolsWindow* window = it->first->AsDevToolsWindow(); 237 DevToolsWindow* window = it->first->AsDevToolsWindow();
215 if (window && window->GetRenderViewHost() == rvh) { 238 if (window && window->GetRenderViewHost() == rvh) {
216 inspected_rvh_for_reopen_ = it->second; 239 inspected_rvh_for_reopen_ = it->second;
217 MessageLoop::current()->PostTask(FROM_HERE, 240 MessageLoop::current()->PostTask(FROM_HERE,
218 NewRunnableMethod(this, 241 NewRunnableMethod(this,
219 &DevToolsManager::ForceReopenWindow)); 242 &DevToolsManager::ForceReopenWindow));
220 return; 243 return;
221 } 244 }
222 } 245 }
223 } 246 }
224 247
225 void DevToolsManager::SendAttachToAgent(RenderViewHost* inspected_rvh) { 248 void DevToolsManager::SendAttachToAgent(
249 RenderViewHost* inspected_rvh,
250 const std::set<std::string>& runtime_features) {
226 if (inspected_rvh) { 251 if (inspected_rvh) {
227 ChildProcessSecurityPolicy::GetInstance()->GrantReadRawCookies( 252 ChildProcessSecurityPolicy::GetInstance()->GrantReadRawCookies(
228 inspected_rvh->process()->id()); 253 inspected_rvh->process()->id());
229 IPC::Message* m = new DevToolsAgentMsg_Attach(); 254 std::vector<std::string> features(runtime_features.begin(),
255 runtime_features.end());
256 IPC::Message* m = new DevToolsAgentMsg_Attach(features);
230 m->set_routing_id(inspected_rvh->routing_id()); 257 m->set_routing_id(inspected_rvh->routing_id());
231 inspected_rvh->Send(m); 258 inspected_rvh->Send(m);
232 } 259 }
233 } 260 }
234 261
235 void DevToolsManager::SendDetachToAgent(RenderViewHost* inspected_rvh) { 262 void DevToolsManager::SendDetachToAgent(RenderViewHost* inspected_rvh) {
236 if (inspected_rvh) { 263 if (inspected_rvh) {
237 IPC::Message* m = new DevToolsAgentMsg_Detach(); 264 IPC::Message* m = new DevToolsAgentMsg_Detach();
238 m->set_routing_id(inspected_rvh->routing_id()); 265 m->set_routing_id(inspected_rvh->routing_id());
239 inspected_rvh->Send(m); 266 inspected_rvh->Send(m);
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 } 339 }
313 } 340 }
314 341
315 void DevToolsManager::CloseWindow(DevToolsClientHost* client_host) { 342 void DevToolsManager::CloseWindow(DevToolsClientHost* client_host) {
316 RenderViewHost* inspected_rvh = GetInspectedRenderViewHost(client_host); 343 RenderViewHost* inspected_rvh = GetInspectedRenderViewHost(client_host);
317 DCHECK(inspected_rvh); 344 DCHECK(inspected_rvh);
318 SendDetachToAgent(inspected_rvh); 345 SendDetachToAgent(inspected_rvh);
319 346
320 UnregisterDevToolsClientHostFor(inspected_rvh); 347 UnregisterDevToolsClientHostFor(inspected_rvh);
321 } 348 }
OLDNEW
« no previous file with comments | « chrome/browser/debugger/devtools_manager.h ('k') | chrome/browser/renderer_host/render_view_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698