OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/devtools/devtools_window.h" | 5 #include "chrome/browser/devtools/devtools_window.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/json/json_reader.h" | 9 #include "base/json/json_reader.h" |
10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
165 inspected_contents_observer_->web_contents(); | 165 inspected_contents_observer_->web_contents(); |
166 if (!inspected_contents) | 166 if (!inspected_contents) |
167 return NULL; | 167 return NULL; |
168 Browser* browser = NULL; | 168 Browser* browser = NULL; |
169 int tab = 0; | 169 int tab = 0; |
170 if (FindInspectedBrowserAndTabIndex(inspected_contents, &browser, &tab)) | 170 if (FindInspectedBrowserAndTabIndex(inspected_contents, &browser, &tab)) |
171 return browser->window(); | 171 return browser->window(); |
172 return NULL; | 172 return NULL; |
173 } | 173 } |
174 | 174 |
175 bool AreDeveloperToolsDisabled( | |
176 const WebContents* const inspected_web_contents) { | |
177 Profile* profile = | |
178 Profile::FromBrowserContext(inspected_web_contents->GetBrowserContext()); | |
179 return profile->GetPrefs()->GetBoolean(prefs::kDevToolsDisabled); | |
180 } | |
181 | |
175 } // namespace | 182 } // namespace |
176 | 183 |
177 // DevToolsEventForwarder ----------------------------------------------------- | 184 // DevToolsEventForwarder ----------------------------------------------------- |
178 | 185 |
179 class DevToolsEventForwarder { | 186 class DevToolsEventForwarder { |
180 public: | 187 public: |
181 explicit DevToolsEventForwarder(DevToolsWindow* window) | 188 explicit DevToolsEventForwarder(DevToolsWindow* window) |
182 : devtools_window_(window) {} | 189 : devtools_window_(window) {} |
183 | 190 |
184 // Registers whitelisted shortcuts with the forwarder. | 191 // Registers whitelisted shortcuts with the forwarder. |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
395 if (!window) { | 402 if (!window) { |
396 window = DevToolsWindow::CreateDevToolsWindowForWorker(profile); | 403 window = DevToolsWindow::CreateDevToolsWindowForWorker(profile); |
397 DCHECK(window); | 404 DCHECK(window); |
398 window->bindings_->AttachTo(worker_agent); | 405 window->bindings_->AttachTo(worker_agent); |
399 } | 406 } |
400 window->ScheduleShow(DevToolsToggleAction::Show()); | 407 window->ScheduleShow(DevToolsToggleAction::Show()); |
401 return window; | 408 return window; |
402 } | 409 } |
403 | 410 |
404 // static | 411 // static |
405 DevToolsWindow* DevToolsWindow::CreateDevToolsWindowForWorker( | 412 DevToolsWindow* DevToolsWindow::CreateDevToolsWindowForWorker( |
dgozman
2015/03/10 05:43:23
This one should check for policy as well.
| |
406 Profile* profile) { | 413 Profile* profile) { |
407 content::RecordAction(base::UserMetricsAction("DevTools_InspectWorker")); | 414 content::RecordAction(base::UserMetricsAction("DevTools_InspectWorker")); |
408 return Create(profile, GURL(), NULL, true, std::string(), false, ""); | 415 return Create(profile, GURL(), NULL, true, std::string(), false, ""); |
409 } | 416 } |
410 | 417 |
411 // static | 418 // static |
412 DevToolsWindow* DevToolsWindow::OpenDevToolsWindow( | 419 void DevToolsWindow::OpenDevToolsWindow( |
413 content::WebContents* inspected_web_contents) { | 420 content::WebContents* inspected_web_contents) { |
414 return ToggleDevToolsWindow( | 421 DevToolsWindow::OpenDevToolsWindow(inspected_web_contents, |
415 inspected_web_contents, true, DevToolsToggleAction::Show(), ""); | 422 DevToolsToggleAction::Show()); |
416 } | 423 } |
417 | 424 |
418 // static | 425 // static |
419 DevToolsWindow* DevToolsWindow::OpenDevToolsWindow( | 426 void DevToolsWindow::OpenDevToolsWindow( |
420 content::WebContents* inspected_web_contents, | 427 content::WebContents* inspected_web_contents, |
421 const DevToolsToggleAction& action) { | 428 const DevToolsToggleAction& action) { |
422 return ToggleDevToolsWindow(inspected_web_contents, true, action, ""); | 429 ToggleDevToolsWindow(inspected_web_contents, true, action, ""); |
423 } | 430 } |
424 | 431 |
425 // static | 432 // static |
426 DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow( | 433 void DevToolsWindow::ToggleDevToolsWindow( |
427 Browser* browser, | 434 Browser* browser, |
428 const DevToolsToggleAction& action) { | 435 const DevToolsToggleAction& action) { |
429 if (action.type() == DevToolsToggleAction::kToggle && | 436 if (action.type() == DevToolsToggleAction::kToggle && |
430 browser->is_devtools()) { | 437 browser->is_devtools()) { |
431 browser->tab_strip_model()->CloseAllTabs(); | 438 browser->tab_strip_model()->CloseAllTabs(); |
432 return NULL; | 439 return; |
433 } | 440 } |
434 | 441 |
435 return ToggleDevToolsWindow( | 442 ToggleDevToolsWindow( |
436 browser->tab_strip_model()->GetActiveWebContents(), | 443 browser->tab_strip_model()->GetActiveWebContents(), |
437 action.type() == DevToolsToggleAction::kInspect, | 444 action.type() == DevToolsToggleAction::kInspect, |
438 action, ""); | 445 action, ""); |
439 } | 446 } |
440 | 447 |
441 // static | 448 // static |
442 void DevToolsWindow::OpenExternalFrontend( | 449 void DevToolsWindow::OpenExternalFrontend( |
443 Profile* profile, | 450 Profile* profile, |
444 const std::string& frontend_url, | 451 const std::string& frontend_url, |
445 const scoped_refptr<content::DevToolsAgentHost>& agent_host, | 452 const scoped_refptr<content::DevToolsAgentHost>& agent_host, |
446 bool isWorker) { | 453 bool isWorker) { |
447 DevToolsWindow* window = FindDevToolsWindow(agent_host.get()); | 454 DevToolsWindow* window = FindDevToolsWindow(agent_host.get()); |
448 if (!window) { | 455 if (!window) { |
449 window = Create(profile, GURL(), nullptr, isWorker, | 456 window = Create(profile, GURL(), nullptr, isWorker, |
dgozman
2015/03/10 05:43:24
This one should check for policy as well. We shoul
| |
450 DevToolsUI::GetProxyURL(frontend_url).spec(), false, std::string()); | 457 DevToolsUI::GetProxyURL(frontend_url).spec(), false, std::string()); |
451 if (window) | 458 if (window) |
452 window->bindings_->AttachTo(agent_host); | 459 window->bindings_->AttachTo(agent_host); |
453 } | 460 } |
454 if (window) | 461 if (window) |
455 window->ScheduleShow(DevToolsToggleAction::Show()); | 462 window->ScheduleShow(DevToolsToggleAction::Show()); |
456 } | 463 } |
457 | 464 |
458 // static | 465 // static |
459 DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow( | 466 void DevToolsWindow::ToggleDevToolsWindow( |
460 content::WebContents* inspected_web_contents, | 467 content::WebContents* inspected_web_contents, |
461 bool force_open, | 468 bool force_open, |
462 const DevToolsToggleAction& action, | 469 const DevToolsToggleAction& action, |
463 const std::string& settings) { | 470 const std::string& settings) { |
471 // If development tools disabled by policy don't open the window. | |
472 if (AreDeveloperToolsDisabled(inspected_web_contents)) | |
473 return; | |
474 | |
464 scoped_refptr<DevToolsAgentHost> agent( | 475 scoped_refptr<DevToolsAgentHost> agent( |
465 DevToolsAgentHost::GetOrCreateFor(inspected_web_contents)); | 476 DevToolsAgentHost::GetOrCreateFor(inspected_web_contents)); |
466 DevToolsWindow* window = FindDevToolsWindow(agent.get()); | 477 DevToolsWindow* window = FindDevToolsWindow(agent.get()); |
467 bool do_open = force_open; | 478 bool do_open = force_open; |
468 if (!window) { | 479 if (!window) { |
469 Profile* profile = Profile::FromBrowserContext( | 480 Profile* profile = Profile::FromBrowserContext( |
470 inspected_web_contents->GetBrowserContext()); | 481 inspected_web_contents->GetBrowserContext()); |
471 content::RecordAction( | 482 content::RecordAction( |
472 base::UserMetricsAction("DevTools_InspectRenderer")); | 483 base::UserMetricsAction("DevTools_InspectRenderer")); |
473 window = Create(profile, GURL(), inspected_web_contents, | 484 window = Create(profile, GURL(), inspected_web_contents, |
474 false, std::string(), true, settings); | 485 false, std::string(), true, settings); |
475 DCHECK(window); | 486 DCHECK(window); |
476 window->bindings_->AttachTo(agent.get()); | 487 window->bindings_->AttachTo(agent.get()); |
477 do_open = true; | 488 do_open = true; |
478 } | 489 } |
479 | 490 |
480 // Update toolbar to reflect DevTools changes. | 491 // Update toolbar to reflect DevTools changes. |
481 window->UpdateBrowserToolbar(); | 492 window->UpdateBrowserToolbar(); |
482 | 493 |
483 // If window is docked and visible, we hide it on toggle. If window is | 494 // If window is docked and visible, we hide it on toggle. If window is |
484 // undocked, we show (activate) it. | 495 // undocked, we show (activate) it. |
485 if (!window->is_docked_ || do_open) | 496 if (!window->is_docked_ || do_open) |
486 window->ScheduleShow(action); | 497 window->ScheduleShow(action); |
487 else | 498 else |
488 window->CloseWindow(); | 499 window->CloseWindow(); |
489 | |
490 return window; | |
491 } | 500 } |
492 | 501 |
493 // static | 502 // static |
494 void DevToolsWindow::InspectElement( | 503 void DevToolsWindow::InspectElement( |
495 content::WebContents* inspected_web_contents, | 504 content::WebContents* inspected_web_contents, |
496 int x, | 505 int x, |
497 int y) { | 506 int y) { |
498 scoped_refptr<DevToolsAgentHost> agent( | 507 scoped_refptr<DevToolsAgentHost> agent( |
499 DevToolsAgentHost::GetOrCreateFor(inspected_web_contents)); | 508 DevToolsAgentHost::GetOrCreateFor(inspected_web_contents)); |
500 agent->InspectElement(x, y); | 509 agent->InspectElement(x, y); |
501 bool should_measure_time = FindDevToolsWindow(agent.get()) == NULL; | 510 bool should_measure_time = FindDevToolsWindow(agent.get()) == NULL; |
502 base::TimeTicks start_time = base::TimeTicks::Now(); | 511 base::TimeTicks start_time = base::TimeTicks::Now(); |
503 // TODO(loislo): we should initiate DevTools window opening from within | 512 // TODO(loislo): we should initiate DevTools window opening from within |
504 // renderer. Otherwise, we still can hit a race condition here. | 513 // renderer. Otherwise, we still can hit a race condition here. |
505 DevToolsWindow* window = OpenDevToolsWindow(inspected_web_contents); | 514 OpenDevToolsWindow(inspected_web_contents); |
506 if (should_measure_time) | 515 |
516 DevToolsWindow* window = FindDevToolsWindow(agent.get()); | |
517 if (should_measure_time && window) | |
507 window->inspect_element_start_time_ = start_time; | 518 window->inspect_element_start_time_ = start_time; |
508 } | 519 } |
509 | 520 |
510 void DevToolsWindow::ScheduleShow(const DevToolsToggleAction& action) { | 521 void DevToolsWindow::ScheduleShow(const DevToolsToggleAction& action) { |
511 if (life_stage_ == kLoadCompleted) { | 522 if (life_stage_ == kLoadCompleted) { |
512 Show(action); | 523 Show(action); |
513 return; | 524 return; |
514 } | 525 } |
515 | 526 |
516 // Action will be done only after load completed. | 527 // Action will be done only after load completed. |
(...skipping 686 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1203 closure.Run(); | 1214 closure.Run(); |
1204 return; | 1215 return; |
1205 } | 1216 } |
1206 load_completed_callback_ = closure; | 1217 load_completed_callback_ = closure; |
1207 } | 1218 } |
1208 | 1219 |
1209 bool DevToolsWindow::ForwardKeyboardEvent( | 1220 bool DevToolsWindow::ForwardKeyboardEvent( |
1210 const content::NativeWebKeyboardEvent& event) { | 1221 const content::NativeWebKeyboardEvent& event) { |
1211 return event_forwarder_->ForwardEvent(event); | 1222 return event_forwarder_->ForwardEvent(event); |
1212 } | 1223 } |
OLD | NEW |