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

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

Issue 63173016: DevTools: place DevTools WebContents underneath inspected WebContents. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 7 years 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
« no previous file with comments | « chrome/browser/devtools/devtools_window.h ('k') | chrome/browser/prefs/browser_prefs.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/command_line.h" 9 #include "base/command_line.h"
10 #include "base/json/json_reader.h" 10 #include "base/json/json_reader.h"
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 234
235 const char kDockSideBottom[] = "bottom"; 235 const char kDockSideBottom[] = "bottom";
236 const char kDockSideRight[] = "right"; 236 const char kDockSideRight[] = "right";
237 const char kDockSideUndocked[] = "undocked"; 237 const char kDockSideUndocked[] = "undocked";
238 const char kDockSideMinimized[] = "minimized"; 238 const char kDockSideMinimized[] = "minimized";
239 239
240 static const char kFrontendHostId[] = "id"; 240 static const char kFrontendHostId[] = "id";
241 static const char kFrontendHostMethod[] = "method"; 241 static const char kFrontendHostMethod[] = "method";
242 static const char kFrontendHostParams[] = "params"; 242 static const char kFrontendHostParams[] = "params";
243 243
244 const int kMinContentsSize = 50;
245
246 std::string SkColorToRGBAString(SkColor color) { 244 std::string SkColorToRGBAString(SkColor color) {
247 // We avoid StringPrintf because it will use locale specific formatters for 245 // We avoid StringPrintf because it will use locale specific formatters for
248 // the double (e.g. ',' instead of '.' in German). 246 // the double (e.g. ',' instead of '.' in German).
249 return "rgba(" + base::IntToString(SkColorGetR(color)) + "," + 247 return "rgba(" + base::IntToString(SkColorGetR(color)) + "," +
250 base::IntToString(SkColorGetG(color)) + "," + 248 base::IntToString(SkColorGetG(color)) + "," +
251 base::IntToString(SkColorGetB(color)) + "," + 249 base::IntToString(SkColorGetB(color)) + "," +
252 base::DoubleToString(SkColorGetA(color) / 255.0) + ")"; 250 base::DoubleToString(SkColorGetA(color) / 255.0) + ")";
253 } 251 }
254 252
255 DictionaryValue* CreateFileSystemValue( 253 DictionaryValue* CreateFileSystemValue(
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 int y) { 455 int y) {
458 scoped_refptr<DevToolsAgentHost> agent( 456 scoped_refptr<DevToolsAgentHost> agent(
459 DevToolsAgentHost::GetOrCreateFor(inspected_rvh)); 457 DevToolsAgentHost::GetOrCreateFor(inspected_rvh));
460 agent->InspectElement(x, y); 458 agent->InspectElement(x, y);
461 // TODO(loislo): we should initiate DevTools window opening from within 459 // TODO(loislo): we should initiate DevTools window opening from within
462 // renderer. Otherwise, we still can hit a race condition here. 460 // renderer. Otherwise, we still can hit a race condition here.
463 OpenDevToolsWindow(inspected_rvh); 461 OpenDevToolsWindow(inspected_rvh);
464 } 462 }
465 463
466 // static 464 // static
467 int DevToolsWindow::GetMinimumWidth() {
468 const int kMinDevToolsWidth = 150;
469 return kMinDevToolsWidth;
470 }
471
472 // static
473 int DevToolsWindow::GetMinimumHeight() {
474 // Minimal height of devtools pane or content pane when devtools are docked
475 // to the browser window.
476 const int kMinDevToolsHeight = 50;
477 return kMinDevToolsHeight;
478 }
479
480 // static
481 int DevToolsWindow::GetMinimizedHeight() { 465 int DevToolsWindow::GetMinimizedHeight() {
482 const int kMinimizedDevToolsHeight = 24; 466 const int kMinimizedDevToolsHeight = 24;
483 return kMinimizedDevToolsHeight; 467 return kMinimizedDevToolsHeight;
484 } 468 }
485 469
486 void DevToolsWindow::InspectedContentsClosing() { 470 void DevToolsWindow::InspectedContentsClosing() {
487 intercepted_page_beforeunload_ = false; 471 intercepted_page_beforeunload_ = false;
488 web_contents_->GetRenderViewHost()->ClosePage(); 472 web_contents_->GetRenderViewHost()->ClosePage();
489 } 473 }
490 474
491 content::RenderViewHost* DevToolsWindow::GetRenderViewHost() { 475 content::RenderViewHost* DevToolsWindow::GetRenderViewHost() {
492 return web_contents_->GetRenderViewHost(); 476 return web_contents_->GetRenderViewHost();
493 } 477 }
494 478
495 content::DevToolsClientHost* DevToolsWindow::GetDevToolsClientHostForTest() { 479 content::DevToolsClientHost* DevToolsWindow::GetDevToolsClientHostForTest() {
496 return frontend_host_.get(); 480 return frontend_host_.get();
497 } 481 }
498 482
499 int DevToolsWindow::GetWidth(int container_width) { 483 gfx::Insets DevToolsWindow::GetContentsInsets() const {
500 if (width_ == -1) { 484 return contents_insets_;
501 width_ = profile_->GetPrefs()->
502 GetInteger(prefs::kDevToolsVSplitLocation);
503 }
504
505 // By default, size devtools as 1/3 of the browser window.
506 if (width_ == -1)
507 width_ = container_width / 3;
508
509 // Respect the minimum devtools width preset.
510 width_ = std::max(GetMinimumWidth(), width_);
511
512 // But it should never compromise the content window size unless the entire
513 // window is tiny.
514 width_ = std::min(container_width - kMinContentsSize, width_);
515 return width_;
516 } 485 }
517 486
518 int DevToolsWindow::GetHeight(int container_height) { 487 gfx::Size DevToolsWindow::GetMinimumSize() const {
519 if (height_ == -1) { 488 const gfx::Size kMinDevToolsSize = gfx::Size(200, 100);
520 height_ = profile_->GetPrefs()-> 489 return kMinDevToolsSize;
521 GetInteger(prefs::kDevToolsHSplitLocation);
522 }
523
524 // By default, size devtools as 1/3 of the browser window.
525 if (height_ == -1)
526 height_ = container_height / 3;
527
528 // Respect the minimum devtools width preset.
529 height_ = std::max(GetMinimumHeight(), height_);
530
531 // But it should never compromise the content window size.
532 height_ = std::min(container_height - kMinContentsSize, height_);
533 return height_;
534 }
535
536 void DevToolsWindow::SetWidth(int width) {
537 width_ = width;
538 profile_->GetPrefs()->SetInteger(prefs::kDevToolsVSplitLocation, width);
539 }
540
541 void DevToolsWindow::SetHeight(int height) {
542 height_ = height;
543 profile_->GetPrefs()->SetInteger(prefs::kDevToolsHSplitLocation, height);
544 } 490 }
545 491
546 void DevToolsWindow::Show(const DevToolsToggleAction& action) { 492 void DevToolsWindow::Show(const DevToolsToggleAction& action) {
547 if (IsDocked()) { 493 if (IsDocked()) {
548 Browser* inspected_browser = NULL; 494 Browser* inspected_browser = NULL;
549 int inspected_tab_index = -1; 495 int inspected_tab_index = -1;
550 // Tell inspected browser to update splitter and switch to inspected panel. 496 // Tell inspected browser to update splitter and switch to inspected panel.
551 if (!IsInspectedBrowserPopup() && 497 if (!IsInspectedBrowserPopup() &&
552 FindInspectedBrowserAndTabIndex(GetInspectedWebContents(), 498 FindInspectedBrowserAndTabIndex(GetInspectedWebContents(),
553 &inspected_browser, 499 &inspected_browser,
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
660 606
661 DevToolsWindow::DevToolsWindow(Profile* profile, 607 DevToolsWindow::DevToolsWindow(Profile* profile,
662 const GURL& url, 608 const GURL& url,
663 content::RenderViewHost* inspected_rvh, 609 content::RenderViewHost* inspected_rvh,
664 DevToolsDockSide dock_side) 610 DevToolsDockSide dock_side)
665 : profile_(profile), 611 : profile_(profile),
666 browser_(NULL), 612 browser_(NULL),
667 dock_side_(dock_side), 613 dock_side_(dock_side),
668 is_loaded_(false), 614 is_loaded_(false),
669 action_on_load_(DevToolsToggleAction::Show()), 615 action_on_load_(DevToolsToggleAction::Show()),
670 width_(-1),
671 height_(-1),
672 dock_side_before_minimized_(dock_side), 616 dock_side_before_minimized_(dock_side),
673 intercepted_page_beforeunload_(false), 617 intercepted_page_beforeunload_(false),
674 weak_factory_(this) { 618 weak_factory_(this) {
675 web_contents_ = 619 web_contents_ =
676 content::WebContents::Create(content::WebContents::CreateParams(profile)); 620 content::WebContents::Create(content::WebContents::CreateParams(profile));
677 frontend_contents_observer_.reset(new FrontendWebContentsObserver(this)); 621 frontend_contents_observer_.reset(new FrontendWebContentsObserver(this));
678 622
679 web_contents_->GetController().LoadURL(url, content::Referrer(), 623 web_contents_->GetController().LoadURL(url, content::Referrer(),
680 content::PAGE_TRANSITION_AUTO_TOPLEVEL, std::string()); 624 content::PAGE_TRANSITION_AUTO_TOPLEVEL, std::string());
681 625
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
763 if (shared_worker_frontend) 707 if (shared_worker_frontend)
764 url_string += "&isSharedWorker=true"; 708 url_string += "&isSharedWorker=true";
765 if (external_frontend) 709 if (external_frontend)
766 url_string += "&remoteFrontend=true"; 710 url_string += "&remoteFrontend=true";
767 if (can_dock) 711 if (can_dock)
768 url_string += "&can_dock=true"; 712 url_string += "&can_dock=true";
769 if (CommandLine::ForCurrentProcess()->HasSwitch( 713 if (CommandLine::ForCurrentProcess()->HasSwitch(
770 switches::kEnableDevToolsExperiments)) 714 switches::kEnableDevToolsExperiments))
771 url_string += "&experiments=true"; 715 url_string += "&experiments=true";
772 url_string += "&updateAppcache"; 716 url_string += "&updateAppcache";
717 url_string += "&overlayContents=true";
773 return GURL(url_string); 718 return GURL(url_string);
774 } 719 }
775 720
776 // static 721 // static
777 DevToolsWindow* DevToolsWindow::FindDevToolsWindow( 722 DevToolsWindow* DevToolsWindow::FindDevToolsWindow(
778 DevToolsAgentHost* agent_host) { 723 DevToolsAgentHost* agent_host) {
779 DevToolsWindows* instances = &g_instances.Get(); 724 DevToolsWindows* instances = &g_instances.Get();
780 content::DevToolsManager* manager = content::DevToolsManager::GetInstance(); 725 content::DevToolsManager* manager = content::DevToolsManager::GetInstance();
781 for (DevToolsWindows::iterator it(instances->begin()); it != instances->end(); 726 for (DevToolsWindows::iterator it(instances->begin()); it != instances->end();
782 ++it) { 727 ++it) {
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
1030 } else { 975 } else {
1031 browser_->window()->Activate(); 976 browser_->window()->Activate();
1032 } 977 }
1033 } 978 }
1034 979
1035 void DevToolsWindow::CloseWindow() { 980 void DevToolsWindow::CloseWindow() {
1036 DCHECK(IsDocked()); 981 DCHECK(IsDocked());
1037 web_contents_->GetRenderViewHost()->FirePageBeforeUnload(false); 982 web_contents_->GetRenderViewHost()->FirePageBeforeUnload(false);
1038 } 983 }
1039 984
1040 void DevToolsWindow::SetWindowBounds(int x, int y, int width, int height) { 985 void DevToolsWindow::SetContentsInsets(
1041 if (!IsDocked()) 986 int top, int left, int bottom, int right) {
1042 browser_->window()->SetBounds(gfx::Rect(x, y, width, height)); 987 if (contents_insets_.top() == top &&
988 contents_insets_.left() == left &&
989 contents_insets_.bottom() == bottom &&
990 contents_insets_.right() == right) {
991 return;
992 }
993
994 contents_insets_ = gfx::Insets(top, left, bottom, right);
995 if (IsDocked()) {
996 // Update inspected window.
997 BrowserWindow* inspected_window = GetInspectedBrowserWindow();
998 if (inspected_window)
999 inspected_window->UpdateDevTools();
1000 }
1043 } 1001 }
1044 1002
1045 void DevToolsWindow::MoveWindow(int x, int y) { 1003 void DevToolsWindow::MoveWindow(int x, int y) {
1046 if (!IsDocked()) { 1004 if (!IsDocked()) {
1047 gfx::Rect bounds = browser_->window()->GetBounds(); 1005 gfx::Rect bounds = browser_->window()->GetBounds();
1048 bounds.Offset(x, y); 1006 bounds.Offset(x, y);
1049 browser_->window()->SetBounds(bounds); 1007 browser_->window()->SetBounds(bounds);
1050 } 1008 }
1051 } 1009 }
1052 1010
(...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after
1537 return inspected_contents_observer_ ? 1495 return inspected_contents_observer_ ?
1538 inspected_contents_observer_->web_contents() : NULL; 1496 inspected_contents_observer_->web_contents() : NULL;
1539 } 1497 }
1540 1498
1541 void DevToolsWindow::DocumentOnLoadCompletedInMainFrame() { 1499 void DevToolsWindow::DocumentOnLoadCompletedInMainFrame() {
1542 is_loaded_ = true; 1500 is_loaded_ = true;
1543 UpdateTheme(); 1501 UpdateTheme();
1544 DoAction(); 1502 DoAction();
1545 AddDevToolsExtensionsToClient(); 1503 AddDevToolsExtensionsToClient();
1546 } 1504 }
OLDNEW
« no previous file with comments | « chrome/browser/devtools/devtools_window.h ('k') | chrome/browser/prefs/browser_prefs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698