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

Side by Side Diff: chrome/browser/devtools/devtools_window.cc

Issue 972123003: Fixed behavior in case of disabled devtools (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 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
OLDNEW
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
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 if (!inspected_web_contents) return false;
178 Profile* profile =
179 Profile::FromBrowserContext(inspected_web_contents->GetBrowserContext());
180 return profile->GetPrefs()->GetBoolean(prefs::kDevToolsDisabled);
181 }
182
175 } // namespace 183 } // namespace
176 184
177 // DevToolsEventForwarder ----------------------------------------------------- 185 // DevToolsEventForwarder -----------------------------------------------------
178 186
179 class DevToolsEventForwarder { 187 class DevToolsEventForwarder {
180 public: 188 public:
181 explicit DevToolsEventForwarder(DevToolsWindow* window) 189 explicit DevToolsEventForwarder(DevToolsWindow* window)
182 : devtools_window_(window) {} 190 : devtools_window_(window) {}
183 191
184 // Registers whitelisted shortcuts with the forwarder. 192 // Registers whitelisted shortcuts with the forwarder.
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 for (DevToolsWindows::iterator it(instances->begin()); it != instances->end(); 389 for (DevToolsWindows::iterator it(instances->begin()); it != instances->end();
382 ++it) { 390 ++it) {
383 if ((*it)->main_web_contents_ == web_contents || 391 if ((*it)->main_web_contents_ == web_contents ||
384 (*it)->toolbox_web_contents_ == web_contents) 392 (*it)->toolbox_web_contents_ == web_contents)
385 return true; 393 return true;
386 } 394 }
387 return false; 395 return false;
388 } 396 }
389 397
390 // static 398 // static
391 DevToolsWindow* DevToolsWindow::OpenDevToolsWindowForWorker( 399 void DevToolsWindow::OpenDevToolsWindowForWorker(
392 Profile* profile, 400 Profile* profile,
393 const scoped_refptr<DevToolsAgentHost>& worker_agent) { 401 const scoped_refptr<DevToolsAgentHost>& worker_agent) {
394 DevToolsWindow* window = FindDevToolsWindow(worker_agent.get()); 402 DevToolsWindow* window = FindDevToolsWindow(worker_agent.get());
395 if (!window) { 403 if (!window) {
396 window = DevToolsWindow::CreateDevToolsWindowForWorker(profile); 404 window = DevToolsWindow::CreateDevToolsWindowForWorker(profile);
405
397 DCHECK(window); 406 DCHECK(window);
dgozman 2015/03/10 19:36:34 Remove DCHECK.
407 if (!window)
408 return;
409
398 window->bindings_->AttachTo(worker_agent); 410 window->bindings_->AttachTo(worker_agent);
399 } 411 }
400 window->ScheduleShow(DevToolsToggleAction::Show()); 412 window->ScheduleShow(DevToolsToggleAction::Show());
401 return window;
402 } 413 }
403 414
404 // static 415 // static
405 DevToolsWindow* DevToolsWindow::CreateDevToolsWindowForWorker( 416 DevToolsWindow* DevToolsWindow::CreateDevToolsWindowForWorker(
406 Profile* profile) { 417 Profile* profile) {
407 content::RecordAction(base::UserMetricsAction("DevTools_InspectWorker")); 418 content::RecordAction(base::UserMetricsAction("DevTools_InspectWorker"));
408 return Create(profile, GURL(), NULL, true, std::string(), false, ""); 419 return Create(profile, GURL(), NULL, true, std::string(), false, "");
409 } 420 }
410 421
411 // static 422 // static
412 DevToolsWindow* DevToolsWindow::OpenDevToolsWindow( 423 void DevToolsWindow::OpenDevToolsWindow(
413 content::WebContents* inspected_web_contents) { 424 content::WebContents* inspected_web_contents) {
414 return ToggleDevToolsWindow( 425 DevToolsWindow::OpenDevToolsWindow(inspected_web_contents,
dgozman 2015/03/10 19:36:34 nit: let's revert back to ToggleDevToolsWindow
415 inspected_web_contents, true, DevToolsToggleAction::Show(), ""); 426 DevToolsToggleAction::Show());
416 } 427 }
417 428
418 // static 429 // static
419 DevToolsWindow* DevToolsWindow::OpenDevToolsWindow( 430 void DevToolsWindow::OpenDevToolsWindow(
420 content::WebContents* inspected_web_contents, 431 content::WebContents* inspected_web_contents,
421 const DevToolsToggleAction& action) { 432 const DevToolsToggleAction& action) {
422 return ToggleDevToolsWindow(inspected_web_contents, true, action, ""); 433 ToggleDevToolsWindow(inspected_web_contents, true, action, "");
423 } 434 }
424 435
425 // static 436 // static
426 DevToolsWindow* DevToolsWindow::OpenDevToolsWindow( 437 void DevToolsWindow::OpenDevToolsWindow(
427 Profile* profile, 438 Profile* profile,
428 const scoped_refptr<content::DevToolsAgentHost>& agent_host) { 439 const scoped_refptr<content::DevToolsAgentHost>& agent_host) {
429 DevToolsWindow* window = FindDevToolsWindow(agent_host.get()); 440 DevToolsWindow* window = FindDevToolsWindow(agent_host.get());
430 if (!window) { 441 if (!window) {
431 window = DevToolsWindow::Create( 442 window = DevToolsWindow::Create(
432 profile, GURL(), nullptr, false, std::string(), false, std::string()); 443 profile, GURL(), nullptr, false, std::string(), false, std::string());
444
433 DCHECK(window); 445 DCHECK(window);
dgozman 2015/03/10 19:36:34 remove DCHECK
446 if (!window)
447 return;
448
434 window->bindings_->AttachTo(agent_host); 449 window->bindings_->AttachTo(agent_host);
435 } 450 }
436 window->ScheduleShow(DevToolsToggleAction::Show()); 451 window->ScheduleShow(DevToolsToggleAction::Show());
437 return window;
438 } 452 }
439 453
440 // static 454 // static
441 DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow( 455 void DevToolsWindow::ToggleDevToolsWindow(
442 Browser* browser, 456 Browser* browser,
443 const DevToolsToggleAction& action) { 457 const DevToolsToggleAction& action) {
444 if (action.type() == DevToolsToggleAction::kToggle && 458 if (action.type() == DevToolsToggleAction::kToggle &&
445 browser->is_devtools()) { 459 browser->is_devtools()) {
446 browser->tab_strip_model()->CloseAllTabs(); 460 browser->tab_strip_model()->CloseAllTabs();
447 return NULL; 461 return;
448 } 462 }
449 463
450 return ToggleDevToolsWindow( 464 ToggleDevToolsWindow(
451 browser->tab_strip_model()->GetActiveWebContents(), 465 browser->tab_strip_model()->GetActiveWebContents(),
452 action.type() == DevToolsToggleAction::kInspect, 466 action.type() == DevToolsToggleAction::kInspect,
453 action, ""); 467 action, "");
454 } 468 }
455 469
456 // static 470 // static
457 void DevToolsWindow::OpenExternalFrontend( 471 void DevToolsWindow::OpenExternalFrontend(
458 Profile* profile, 472 Profile* profile,
459 const std::string& frontend_url, 473 const std::string& frontend_url,
460 const scoped_refptr<content::DevToolsAgentHost>& agent_host, 474 const scoped_refptr<content::DevToolsAgentHost>& agent_host,
461 bool isWorker) { 475 bool isWorker) {
462 DevToolsWindow* window = FindDevToolsWindow(agent_host.get()); 476 DevToolsWindow* window = FindDevToolsWindow(agent_host.get());
463 if (!window) { 477 if (!window) {
464 window = Create(profile, GURL(), nullptr, isWorker, 478 window = Create(profile, GURL(), nullptr, isWorker,
465 DevToolsUI::GetProxyURL(frontend_url).spec(), false, std::string()); 479 DevToolsUI::GetProxyURL(frontend_url).spec(), false, std::string());
466 if (window) 480
467 window->bindings_->AttachTo(agent_host); 481 if (!window)
482 return;
483
484 window->bindings_->AttachTo(agent_host);
468 } 485 }
469 if (window) 486
470 window->ScheduleShow(DevToolsToggleAction::Show()); 487 window->ScheduleShow(DevToolsToggleAction::Show());
471 } 488 }
472 489
473 // static 490 // static
474 DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow( 491 void DevToolsWindow::ToggleDevToolsWindow(
475 content::WebContents* inspected_web_contents, 492 content::WebContents* inspected_web_contents,
476 bool force_open, 493 bool force_open,
477 const DevToolsToggleAction& action, 494 const DevToolsToggleAction& action,
478 const std::string& settings) { 495 const std::string& settings) {
479 scoped_refptr<DevToolsAgentHost> agent( 496 scoped_refptr<DevToolsAgentHost> agent(
480 DevToolsAgentHost::GetOrCreateFor(inspected_web_contents)); 497 DevToolsAgentHost::GetOrCreateFor(inspected_web_contents));
481 DevToolsWindow* window = FindDevToolsWindow(agent.get()); 498 DevToolsWindow* window = FindDevToolsWindow(agent.get());
482 bool do_open = force_open; 499 bool do_open = force_open;
483 if (!window) { 500 if (!window) {
484 Profile* profile = Profile::FromBrowserContext( 501 Profile* profile = Profile::FromBrowserContext(
485 inspected_web_contents->GetBrowserContext()); 502 inspected_web_contents->GetBrowserContext());
486 content::RecordAction( 503 content::RecordAction(
487 base::UserMetricsAction("DevTools_InspectRenderer")); 504 base::UserMetricsAction("DevTools_InspectRenderer"));
488 window = Create(profile, GURL(), inspected_web_contents, 505 window = Create(profile, GURL(), inspected_web_contents,
489 false, std::string(), true, settings); 506 false, std::string(), true, settings);
507
490 DCHECK(window); 508 DCHECK(window);
dgozman 2015/03/10 19:36:34 remove DCHECK
509 if (!window)
510 return;
511
491 window->bindings_->AttachTo(agent.get()); 512 window->bindings_->AttachTo(agent.get());
492 do_open = true; 513 do_open = true;
493 } 514 }
494 515
495 // Update toolbar to reflect DevTools changes. 516 // Update toolbar to reflect DevTools changes.
496 window->UpdateBrowserToolbar(); 517 window->UpdateBrowserToolbar();
497 518
498 // If window is docked and visible, we hide it on toggle. If window is 519 // If window is docked and visible, we hide it on toggle. If window is
499 // undocked, we show (activate) it. 520 // undocked, we show (activate) it.
500 if (!window->is_docked_ || do_open) 521 if (!window->is_docked_ || do_open)
501 window->ScheduleShow(action); 522 window->ScheduleShow(action);
502 else 523 else
503 window->CloseWindow(); 524 window->CloseWindow();
504
505 return window;
506 } 525 }
507 526
508 // static 527 // static
509 void DevToolsWindow::InspectElement( 528 void DevToolsWindow::InspectElement(
510 content::WebContents* inspected_web_contents, 529 content::WebContents* inspected_web_contents,
511 int x, 530 int x,
512 int y) { 531 int y) {
513 scoped_refptr<DevToolsAgentHost> agent( 532 scoped_refptr<DevToolsAgentHost> agent(
514 DevToolsAgentHost::GetOrCreateFor(inspected_web_contents)); 533 DevToolsAgentHost::GetOrCreateFor(inspected_web_contents));
515 agent->InspectElement(x, y); 534 agent->InspectElement(x, y);
516 bool should_measure_time = FindDevToolsWindow(agent.get()) == NULL; 535 bool should_measure_time = FindDevToolsWindow(agent.get()) == NULL;
517 base::TimeTicks start_time = base::TimeTicks::Now(); 536 base::TimeTicks start_time = base::TimeTicks::Now();
518 // TODO(loislo): we should initiate DevTools window opening from within 537 // TODO(loislo): we should initiate DevTools window opening from within
519 // renderer. Otherwise, we still can hit a race condition here. 538 // renderer. Otherwise, we still can hit a race condition here.
520 DevToolsWindow* window = OpenDevToolsWindow(inspected_web_contents); 539 OpenDevToolsWindow(inspected_web_contents);
521 if (should_measure_time) 540
541 DevToolsWindow* window = FindDevToolsWindow(agent.get());
542 if (should_measure_time && window)
522 window->inspect_element_start_time_ = start_time; 543 window->inspect_element_start_time_ = start_time;
523 } 544 }
524 545
525 void DevToolsWindow::ScheduleShow(const DevToolsToggleAction& action) { 546 void DevToolsWindow::ScheduleShow(const DevToolsToggleAction& action) {
526 if (life_stage_ == kLoadCompleted) { 547 if (life_stage_ == kLoadCompleted) {
527 Show(action); 548 Show(action);
528 return; 549 return;
529 } 550 }
530 551
531 // Action will be done only after load completed. 552 // Action will be done only after load completed.
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
715 736
716 // static 737 // static
717 DevToolsWindow* DevToolsWindow::Create( 738 DevToolsWindow* DevToolsWindow::Create(
718 Profile* profile, 739 Profile* profile,
719 const GURL& frontend_url, 740 const GURL& frontend_url,
720 content::WebContents* inspected_web_contents, 741 content::WebContents* inspected_web_contents,
721 bool shared_worker_frontend, 742 bool shared_worker_frontend,
722 const std::string& remote_frontend, 743 const std::string& remote_frontend,
723 bool can_dock, 744 bool can_dock,
724 const std::string& settings) { 745 const std::string& settings) {
746 // If development tools disabled by policy don't open the window.
747 if (AreDeveloperToolsDisabled(inspected_web_contents))
dgozman 2015/03/10 19:36:34 I'd just inline the function here. Note that |prof
748 return nullptr;
725 if (inspected_web_contents) { 749 if (inspected_web_contents) {
726 // Check for a place to dock. 750 // Check for a place to dock.
727 Browser* browser = NULL; 751 Browser* browser = NULL;
728 int tab; 752 int tab;
729 if (!FindInspectedBrowserAndTabIndex(inspected_web_contents, 753 if (!FindInspectedBrowserAndTabIndex(inspected_web_contents,
730 &browser, &tab) || 754 &browser, &tab) ||
731 browser->is_type_popup()) { 755 browser->is_type_popup()) {
732 can_dock = false; 756 can_dock = false;
733 } 757 }
734 } 758 }
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after
1220 closure.Run(); 1244 closure.Run();
1221 return; 1245 return;
1222 } 1246 }
1223 load_completed_callback_ = closure; 1247 load_completed_callback_ = closure;
1224 } 1248 }
1225 1249
1226 bool DevToolsWindow::ForwardKeyboardEvent( 1250 bool DevToolsWindow::ForwardKeyboardEvent(
1227 const content::NativeWebKeyboardEvent& event) { 1251 const content::NativeWebKeyboardEvent& event) {
1228 return event_forwarder_->ForwardEvent(event); 1252 return event_forwarder_->ForwardEvent(event);
1229 } 1253 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698