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

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: Fixed conflict 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 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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698