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

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 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 WebContents* inspected_contents = 164 WebContents* inspected_contents =
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
175 } // namespace 174 } // namespace
176 175
177 // DevToolsEventForwarder ----------------------------------------------------- 176 // DevToolsEventForwarder -----------------------------------------------------
178 177
179 class DevToolsEventForwarder { 178 class DevToolsEventForwarder {
180 public: 179 public:
181 explicit DevToolsEventForwarder(DevToolsWindow* window) 180 explicit DevToolsEventForwarder(DevToolsWindow* window)
182 : devtools_window_(window) {} 181 : devtools_window_(window) {}
183 182
184 // Registers whitelisted shortcuts with the forwarder. 183 // 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(); 380 for (DevToolsWindows::iterator it(instances->begin()); it != instances->end();
382 ++it) { 381 ++it) {
383 if ((*it)->main_web_contents_ == web_contents || 382 if ((*it)->main_web_contents_ == web_contents ||
384 (*it)->toolbox_web_contents_ == web_contents) 383 (*it)->toolbox_web_contents_ == web_contents)
385 return true; 384 return true;
386 } 385 }
387 return false; 386 return false;
388 } 387 }
389 388
390 // static 389 // static
391 DevToolsWindow* DevToolsWindow::OpenDevToolsWindowForWorker( 390 void DevToolsWindow::OpenDevToolsWindowForWorker(
392 Profile* profile, 391 Profile* profile,
393 const scoped_refptr<DevToolsAgentHost>& worker_agent) { 392 const scoped_refptr<DevToolsAgentHost>& worker_agent) {
394 DevToolsWindow* window = FindDevToolsWindow(worker_agent.get()); 393 DevToolsWindow* window = FindDevToolsWindow(worker_agent.get());
395 if (!window) { 394 if (!window) {
396 window = DevToolsWindow::CreateDevToolsWindowForWorker(profile); 395 window = DevToolsWindow::CreateDevToolsWindowForWorker(profile);
397 DCHECK(window); 396 if (!window)
397 return;
398 window->bindings_->AttachTo(worker_agent); 398 window->bindings_->AttachTo(worker_agent);
399 } 399 }
400 window->ScheduleShow(DevToolsToggleAction::Show()); 400 window->ScheduleShow(DevToolsToggleAction::Show());
401 return window;
402 } 401 }
403 402
404 // static 403 // static
405 DevToolsWindow* DevToolsWindow::CreateDevToolsWindowForWorker( 404 DevToolsWindow* DevToolsWindow::CreateDevToolsWindowForWorker(
406 Profile* profile) { 405 Profile* profile) {
407 content::RecordAction(base::UserMetricsAction("DevTools_InspectWorker")); 406 content::RecordAction(base::UserMetricsAction("DevTools_InspectWorker"));
408 return Create(profile, GURL(), NULL, true, std::string(), false, ""); 407 return Create(profile, GURL(), NULL, true, std::string(), false, "");
409 } 408 }
410 409
411 // static 410 // static
412 DevToolsWindow* DevToolsWindow::OpenDevToolsWindow( 411 void DevToolsWindow::OpenDevToolsWindow(
413 content::WebContents* inspected_web_contents) { 412 content::WebContents* inspected_web_contents) {
414 return ToggleDevToolsWindow( 413 ToggleDevToolsWindow(
415 inspected_web_contents, true, DevToolsToggleAction::Show(), ""); 414 inspected_web_contents, true, DevToolsToggleAction::Show(), "");
416 } 415 }
417 416
418 // static 417 // static
419 DevToolsWindow* DevToolsWindow::OpenDevToolsWindow( 418 void DevToolsWindow::OpenDevToolsWindow(
420 content::WebContents* inspected_web_contents, 419 content::WebContents* inspected_web_contents,
421 const DevToolsToggleAction& action) { 420 const DevToolsToggleAction& action) {
422 return ToggleDevToolsWindow(inspected_web_contents, true, action, ""); 421 ToggleDevToolsWindow(inspected_web_contents, true, action, "");
423 } 422 }
424 423
425 // static 424 // static
426 DevToolsWindow* DevToolsWindow::OpenDevToolsWindow( 425 void DevToolsWindow::OpenDevToolsWindow(
427 Profile* profile, 426 Profile* profile,
428 const scoped_refptr<content::DevToolsAgentHost>& agent_host) { 427 const scoped_refptr<content::DevToolsAgentHost>& agent_host) {
429 DevToolsWindow* window = FindDevToolsWindow(agent_host.get()); 428 DevToolsWindow* window = FindDevToolsWindow(agent_host.get());
430 if (!window) { 429 if (!window) {
431 window = DevToolsWindow::Create( 430 window = DevToolsWindow::Create(
432 profile, GURL(), nullptr, false, std::string(), false, std::string()); 431 profile, GURL(), nullptr, false, std::string(), false, std::string());
433 DCHECK(window); 432 if (!window)
433 return;
434 window->bindings_->AttachTo(agent_host); 434 window->bindings_->AttachTo(agent_host);
435 } 435 }
436 window->ScheduleShow(DevToolsToggleAction::Show()); 436 window->ScheduleShow(DevToolsToggleAction::Show());
437 return window;
438 } 437 }
439 438
440 // static 439 // static
441 DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow( 440 void DevToolsWindow::ToggleDevToolsWindow(
442 Browser* browser, 441 Browser* browser,
443 const DevToolsToggleAction& action) { 442 const DevToolsToggleAction& action) {
444 if (action.type() == DevToolsToggleAction::kToggle && 443 if (action.type() == DevToolsToggleAction::kToggle &&
445 browser->is_devtools()) { 444 browser->is_devtools()) {
446 browser->tab_strip_model()->CloseAllTabs(); 445 browser->tab_strip_model()->CloseAllTabs();
447 return NULL; 446 return;
448 } 447 }
449 448
450 return ToggleDevToolsWindow( 449 ToggleDevToolsWindow(
451 browser->tab_strip_model()->GetActiveWebContents(), 450 browser->tab_strip_model()->GetActiveWebContents(),
452 action.type() == DevToolsToggleAction::kInspect, 451 action.type() == DevToolsToggleAction::kInspect,
453 action, ""); 452 action, "");
454 } 453 }
455 454
456 // static 455 // static
457 void DevToolsWindow::OpenExternalFrontend( 456 void DevToolsWindow::OpenExternalFrontend(
458 Profile* profile, 457 Profile* profile,
459 const std::string& frontend_url, 458 const std::string& frontend_url,
460 const scoped_refptr<content::DevToolsAgentHost>& agent_host, 459 const scoped_refptr<content::DevToolsAgentHost>& agent_host,
461 bool isWorker) { 460 bool isWorker) {
462 DevToolsWindow* window = FindDevToolsWindow(agent_host.get()); 461 DevToolsWindow* window = FindDevToolsWindow(agent_host.get());
463 if (!window) { 462 if (!window) {
464 window = Create(profile, GURL(), nullptr, isWorker, 463 window = Create(profile, GURL(), nullptr, isWorker,
465 DevToolsUI::GetProxyURL(frontend_url).spec(), false, std::string()); 464 DevToolsUI::GetProxyURL(frontend_url).spec(), false, std::string());
466 if (window) 465 if (!window)
467 window->bindings_->AttachTo(agent_host); 466 return;
467 window->bindings_->AttachTo(agent_host);
468 } 468 }
469 if (window) 469
470 window->ScheduleShow(DevToolsToggleAction::Show()); 470 window->ScheduleShow(DevToolsToggleAction::Show());
471 } 471 }
472 472
473 // static 473 // static
474 DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow( 474 void DevToolsWindow::ToggleDevToolsWindow(
475 content::WebContents* inspected_web_contents, 475 content::WebContents* inspected_web_contents,
476 bool force_open, 476 bool force_open,
477 const DevToolsToggleAction& action, 477 const DevToolsToggleAction& action,
478 const std::string& settings) { 478 const std::string& settings) {
479 scoped_refptr<DevToolsAgentHost> agent( 479 scoped_refptr<DevToolsAgentHost> agent(
480 DevToolsAgentHost::GetOrCreateFor(inspected_web_contents)); 480 DevToolsAgentHost::GetOrCreateFor(inspected_web_contents));
481 DevToolsWindow* window = FindDevToolsWindow(agent.get()); 481 DevToolsWindow* window = FindDevToolsWindow(agent.get());
482 bool do_open = force_open; 482 bool do_open = force_open;
483 if (!window) { 483 if (!window) {
484 Profile* profile = Profile::FromBrowserContext( 484 Profile* profile = Profile::FromBrowserContext(
485 inspected_web_contents->GetBrowserContext()); 485 inspected_web_contents->GetBrowserContext());
486 content::RecordAction( 486 content::RecordAction(
487 base::UserMetricsAction("DevTools_InspectRenderer")); 487 base::UserMetricsAction("DevTools_InspectRenderer"));
488 window = Create(profile, GURL(), inspected_web_contents, 488 window = Create(profile, GURL(), inspected_web_contents,
489 false, std::string(), true, settings); 489 false, std::string(), true, settings);
490 DCHECK(window); 490 if (!window)
491 return;
491 window->bindings_->AttachTo(agent.get()); 492 window->bindings_->AttachTo(agent.get());
492 do_open = true; 493 do_open = true;
493 } 494 }
494 495
495 // Update toolbar to reflect DevTools changes. 496 // Update toolbar to reflect DevTools changes.
496 window->UpdateBrowserToolbar(); 497 window->UpdateBrowserToolbar();
497 498
498 // If window is docked and visible, we hide it on toggle. If window is 499 // If window is docked and visible, we hide it on toggle. If window is
499 // undocked, we show (activate) it. 500 // undocked, we show (activate) it.
500 if (!window->is_docked_ || do_open) 501 if (!window->is_docked_ || do_open)
501 window->ScheduleShow(action); 502 window->ScheduleShow(action);
502 else 503 else
503 window->CloseWindow(); 504 window->CloseWindow();
504
505 return window;
506 } 505 }
507 506
508 // static 507 // static
509 void DevToolsWindow::InspectElement( 508 void DevToolsWindow::InspectElement(
510 content::WebContents* inspected_web_contents, 509 content::WebContents* inspected_web_contents,
511 int x, 510 int x,
512 int y) { 511 int y) {
513 scoped_refptr<DevToolsAgentHost> agent( 512 scoped_refptr<DevToolsAgentHost> agent(
514 DevToolsAgentHost::GetOrCreateFor(inspected_web_contents)); 513 DevToolsAgentHost::GetOrCreateFor(inspected_web_contents));
515 agent->InspectElement(x, y); 514 agent->InspectElement(x, y);
516 bool should_measure_time = FindDevToolsWindow(agent.get()) == NULL; 515 bool should_measure_time = FindDevToolsWindow(agent.get()) == NULL;
517 base::TimeTicks start_time = base::TimeTicks::Now(); 516 base::TimeTicks start_time = base::TimeTicks::Now();
518 // TODO(loislo): we should initiate DevTools window opening from within 517 // TODO(loislo): we should initiate DevTools window opening from within
519 // renderer. Otherwise, we still can hit a race condition here. 518 // renderer. Otherwise, we still can hit a race condition here.
520 DevToolsWindow* window = OpenDevToolsWindow(inspected_web_contents); 519 OpenDevToolsWindow(inspected_web_contents);
521 if (should_measure_time) 520
521 DevToolsWindow* window = FindDevToolsWindow(agent.get());
522 if (should_measure_time && window)
522 window->inspect_element_start_time_ = start_time; 523 window->inspect_element_start_time_ = start_time;
523 } 524 }
524 525
525 void DevToolsWindow::ScheduleShow(const DevToolsToggleAction& action) { 526 void DevToolsWindow::ScheduleShow(const DevToolsToggleAction& action) {
526 if (life_stage_ == kLoadCompleted) { 527 if (life_stage_ == kLoadCompleted) {
527 Show(action); 528 Show(action);
528 return; 529 return;
529 } 530 }
530 531
531 // Action will be done only after load completed. 532 // Action will be done only after load completed.
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
715 716
716 // static 717 // static
717 DevToolsWindow* DevToolsWindow::Create( 718 DevToolsWindow* DevToolsWindow::Create(
718 Profile* profile, 719 Profile* profile,
719 const GURL& frontend_url, 720 const GURL& frontend_url,
720 content::WebContents* inspected_web_contents, 721 content::WebContents* inspected_web_contents,
721 bool shared_worker_frontend, 722 bool shared_worker_frontend,
722 const std::string& remote_frontend, 723 const std::string& remote_frontend,
723 bool can_dock, 724 bool can_dock,
724 const std::string& settings) { 725 const std::string& settings) {
726 // If development tools disabled by policy don't open the window.
dgozman 2015/03/11 10:32:31 nit: "development" -> "developer"
727 if (profile->GetPrefs()->GetBoolean(prefs::kDevToolsDisabled))
728 return nullptr;
729
725 if (inspected_web_contents) { 730 if (inspected_web_contents) {
726 // Check for a place to dock. 731 // Check for a place to dock.
727 Browser* browser = NULL; 732 Browser* browser = NULL;
728 int tab; 733 int tab;
729 if (!FindInspectedBrowserAndTabIndex(inspected_web_contents, 734 if (!FindInspectedBrowserAndTabIndex(inspected_web_contents,
730 &browser, &tab) || 735 &browser, &tab) ||
731 browser->is_type_popup()) { 736 browser->is_type_popup()) {
732 can_dock = false; 737 can_dock = false;
733 } 738 }
734 } 739 }
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after
1220 closure.Run(); 1225 closure.Run();
1221 return; 1226 return;
1222 } 1227 }
1223 load_completed_callback_ = closure; 1228 load_completed_callback_ = closure;
1224 } 1229 }
1225 1230
1226 bool DevToolsWindow::ForwardKeyboardEvent( 1231 bool DevToolsWindow::ForwardKeyboardEvent(
1227 const content::NativeWebKeyboardEvent& event) { 1232 const content::NativeWebKeyboardEvent& event) {
1228 return event_forwarder_->ForwardEvent(event); 1233 return event_forwarder_->ForwardEvent(event);
1229 } 1234 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698