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

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: 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
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 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 233
234 const char kDockSideBottom[] = "bottom"; 234 const char kDockSideBottom[] = "bottom";
235 const char kDockSideRight[] = "right"; 235 const char kDockSideRight[] = "right";
236 const char kDockSideUndocked[] = "undocked"; 236 const char kDockSideUndocked[] = "undocked";
237 const char kDockSideMinimized[] = "minimized"; 237 const char kDockSideMinimized[] = "minimized";
238 238
239 static const char kFrontendHostId[] = "id"; 239 static const char kFrontendHostId[] = "id";
240 static const char kFrontendHostMethod[] = "method"; 240 static const char kFrontendHostMethod[] = "method";
241 static const char kFrontendHostParams[] = "params"; 241 static const char kFrontendHostParams[] = "params";
242 242
243 const int kMinContentsSize = 50;
244
245 std::string SkColorToRGBAString(SkColor color) { 243 std::string SkColorToRGBAString(SkColor color) {
246 // We avoid StringPrintf because it will use locale specific formatters for 244 // We avoid StringPrintf because it will use locale specific formatters for
247 // the double (e.g. ',' instead of '.' in German). 245 // the double (e.g. ',' instead of '.' in German).
248 return "rgba(" + base::IntToString(SkColorGetR(color)) + "," + 246 return "rgba(" + base::IntToString(SkColorGetR(color)) + "," +
249 base::IntToString(SkColorGetG(color)) + "," + 247 base::IntToString(SkColorGetG(color)) + "," +
250 base::IntToString(SkColorGetB(color)) + "," + 248 base::IntToString(SkColorGetB(color)) + "," +
251 base::DoubleToString(SkColorGetA(color) / 255.0) + ")"; 249 base::DoubleToString(SkColorGetA(color) / 255.0) + ")";
252 } 250 }
253 251
254 DictionaryValue* CreateFileSystemValue( 252 DictionaryValue* CreateFileSystemValue(
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 int y) { 453 int y) {
456 scoped_refptr<DevToolsAgentHost> agent( 454 scoped_refptr<DevToolsAgentHost> agent(
457 DevToolsAgentHost::GetOrCreateFor(inspected_rvh)); 455 DevToolsAgentHost::GetOrCreateFor(inspected_rvh));
458 agent->InspectElement(x, y); 456 agent->InspectElement(x, y);
459 // TODO(loislo): we should initiate DevTools window opening from within 457 // TODO(loislo): we should initiate DevTools window opening from within
460 // renderer. Otherwise, we still can hit a race condition here. 458 // renderer. Otherwise, we still can hit a race condition here.
461 OpenDevToolsWindow(inspected_rvh); 459 OpenDevToolsWindow(inspected_rvh);
462 } 460 }
463 461
464 // static 462 // static
465 int DevToolsWindow::GetMinimumWidth() {
466 const int kMinDevToolsWidth = 150;
467 return kMinDevToolsWidth;
468 }
469
470 // static
471 int DevToolsWindow::GetMinimumHeight() {
472 // Minimal height of devtools pane or content pane when devtools are docked
473 // to the browser window.
474 const int kMinDevToolsHeight = 50;
475 return kMinDevToolsHeight;
476 }
477
478 // static
479 int DevToolsWindow::GetMinimizedHeight() { 463 int DevToolsWindow::GetMinimizedHeight() {
480 const int kMinimizedDevToolsHeight = 24; 464 const int kMinimizedDevToolsHeight = 24;
481 return kMinimizedDevToolsHeight; 465 return kMinimizedDevToolsHeight;
482 } 466 }
483 467
484 void DevToolsWindow::InspectedContentsClosing() { 468 void DevToolsWindow::InspectedContentsClosing() {
485 intercepted_page_beforeunload_ = false; 469 intercepted_page_beforeunload_ = false;
486 web_contents_->GetRenderViewHost()->ClosePage(); 470 web_contents_->GetRenderViewHost()->ClosePage();
487 } 471 }
488 472
489 content::RenderViewHost* DevToolsWindow::GetRenderViewHost() { 473 content::RenderViewHost* DevToolsWindow::GetRenderViewHost() {
490 return web_contents_->GetRenderViewHost(); 474 return web_contents_->GetRenderViewHost();
491 } 475 }
492 476
493 content::DevToolsClientHost* DevToolsWindow::GetDevToolsClientHostForTest() { 477 content::DevToolsClientHost* DevToolsWindow::GetDevToolsClientHostForTest() {
494 return frontend_host_.get(); 478 return frontend_host_.get();
495 } 479 }
496 480
497 int DevToolsWindow::GetWidth(int container_width) { 481 gfx::Insets DevToolsWindow::GetContentsInsets() const {
498 if (width_ == -1) { 482 return contents_insets_;
499 width_ = profile_->GetPrefs()->
500 GetInteger(prefs::kDevToolsVSplitLocation);
501 }
502
503 // By default, size devtools as 1/3 of the browser window.
504 if (width_ == -1)
505 width_ = container_width / 3;
506
507 // Respect the minimum devtools width preset.
508 width_ = std::max(GetMinimumWidth(), width_);
509
510 // But it should never compromise the content window size unless the entire
511 // window is tiny.
512 width_ = std::min(container_width - kMinContentsSize, width_);
513 return width_;
514 } 483 }
515 484
516 int DevToolsWindow::GetHeight(int container_height) { 485 gfx::Size DevToolsWindow::GetMinimumSize() const {
517 if (height_ == -1) { 486 const gfx::Size kMinDevToolsSize = gfx::Size(200, 100);
518 height_ = profile_->GetPrefs()-> 487 return kMinDevToolsSize;
519 GetInteger(prefs::kDevToolsHSplitLocation);
520 }
521
522 // By default, size devtools as 1/3 of the browser window.
523 if (height_ == -1)
524 height_ = container_height / 3;
525
526 // Respect the minimum devtools width preset.
527 height_ = std::max(GetMinimumHeight(), height_);
528
529 // But it should never compromise the content window size.
530 height_ = std::min(container_height - kMinContentsSize, height_);
531 return height_;
532 }
533
534 void DevToolsWindow::SetWidth(int width) {
535 width_ = width;
536 profile_->GetPrefs()->SetInteger(prefs::kDevToolsVSplitLocation, width);
537 }
538
539 void DevToolsWindow::SetHeight(int height) {
540 height_ = height;
541 profile_->GetPrefs()->SetInteger(prefs::kDevToolsHSplitLocation, height);
542 } 488 }
543 489
544 void DevToolsWindow::Show(const DevToolsToggleAction& action) { 490 void DevToolsWindow::Show(const DevToolsToggleAction& action) {
545 if (IsDocked()) { 491 if (IsDocked()) {
546 Browser* inspected_browser = NULL; 492 Browser* inspected_browser = NULL;
547 int inspected_tab_index = -1; 493 int inspected_tab_index = -1;
548 // Tell inspected browser to update splitter and switch to inspected panel. 494 // Tell inspected browser to update splitter and switch to inspected panel.
549 if (!IsInspectedBrowserPopup() && 495 if (!IsInspectedBrowserPopup() &&
550 FindInspectedBrowserAndTabIndex(&inspected_browser, 496 FindInspectedBrowserAndTabIndex(&inspected_browser,
551 &inspected_tab_index)) { 497 &inspected_tab_index)) {
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
657 603
658 DevToolsWindow::DevToolsWindow(Profile* profile, 604 DevToolsWindow::DevToolsWindow(Profile* profile,
659 const GURL& url, 605 const GURL& url,
660 content::RenderViewHost* inspected_rvh, 606 content::RenderViewHost* inspected_rvh,
661 DevToolsDockSide dock_side) 607 DevToolsDockSide dock_side)
662 : profile_(profile), 608 : profile_(profile),
663 browser_(NULL), 609 browser_(NULL),
664 dock_side_(dock_side), 610 dock_side_(dock_side),
665 is_loaded_(false), 611 is_loaded_(false),
666 action_on_load_(DevToolsToggleAction::Show()), 612 action_on_load_(DevToolsToggleAction::Show()),
667 width_(-1),
668 height_(-1),
669 dock_side_before_minimized_(dock_side), 613 dock_side_before_minimized_(dock_side),
670 intercepted_page_beforeunload_(false), 614 intercepted_page_beforeunload_(false),
671 weak_factory_(this) { 615 weak_factory_(this) {
672 web_contents_ = 616 web_contents_ =
673 content::WebContents::Create(content::WebContents::CreateParams(profile)); 617 content::WebContents::Create(content::WebContents::CreateParams(profile));
674 frontend_contents_observer_.reset(new FrontendWebContentsObserver(this)); 618 frontend_contents_observer_.reset(new FrontendWebContentsObserver(this));
675 619
676 web_contents_->GetController().LoadURL(url, content::Referrer(), 620 web_contents_->GetController().LoadURL(url, content::Referrer(),
677 content::PAGE_TRANSITION_AUTO_TOPLEVEL, std::string()); 621 content::PAGE_TRANSITION_AUTO_TOPLEVEL, std::string());
678 622
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
742 "&textColor=" + 686 "&textColor=" +
743 SkColorToRGBAString(tp->GetColor(ThemeProperties::COLOR_BOOKMARK_TEXT))); 687 SkColorToRGBAString(tp->GetColor(ThemeProperties::COLOR_BOOKMARK_TEXT)));
744 if (shared_worker_frontend) 688 if (shared_worker_frontend)
745 url_string += "&isSharedWorker=true"; 689 url_string += "&isSharedWorker=true";
746 if (external_frontend) 690 if (external_frontend)
747 url_string += "&remoteFrontend=true"; 691 url_string += "&remoteFrontend=true";
748 if (CommandLine::ForCurrentProcess()->HasSwitch( 692 if (CommandLine::ForCurrentProcess()->HasSwitch(
749 switches::kEnableDevToolsExperiments)) 693 switches::kEnableDevToolsExperiments))
750 url_string += "&experiments=true"; 694 url_string += "&experiments=true";
751 url_string += "&updateAppcache"; 695 url_string += "&updateAppcache";
696 url_string += "&overlayContents=true";
752 return GURL(url_string); 697 return GURL(url_string);
753 } 698 }
754 699
755 // static 700 // static
756 DevToolsWindow* DevToolsWindow::FindDevToolsWindow( 701 DevToolsWindow* DevToolsWindow::FindDevToolsWindow(
757 DevToolsAgentHost* agent_host) { 702 DevToolsAgentHost* agent_host) {
758 DevToolsWindows* instances = &g_instances.Get(); 703 DevToolsWindows* instances = &g_instances.Get();
759 content::DevToolsManager* manager = content::DevToolsManager::GetInstance(); 704 content::DevToolsManager* manager = content::DevToolsManager::GetInstance();
760 for (DevToolsWindows::iterator it(instances->begin()); it != instances->end(); 705 for (DevToolsWindows::iterator it(instances->begin()); it != instances->end();
761 ++it) { 706 ++it) {
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
1008 } else { 953 } else {
1009 browser_->window()->Activate(); 954 browser_->window()->Activate();
1010 } 955 }
1011 } 956 }
1012 957
1013 void DevToolsWindow::CloseWindow() { 958 void DevToolsWindow::CloseWindow() {
1014 DCHECK(IsDocked()); 959 DCHECK(IsDocked());
1015 web_contents_->GetRenderViewHost()->FirePageBeforeUnload(false); 960 web_contents_->GetRenderViewHost()->FirePageBeforeUnload(false);
1016 } 961 }
1017 962
1018 void DevToolsWindow::SetWindowBounds(int x, int y, int width, int height) { 963 void DevToolsWindow::SetContentsInsets(
1019 if (!IsDocked()) 964 int top, int left, int bottom, int right) {
1020 browser_->window()->SetBounds(gfx::Rect(x, y, width, height)); 965 if (contents_insets_.top() == top &&
966 contents_insets_.left() == left &&
967 contents_insets_.bottom() == bottom &&
968 contents_insets_.right() == right) {
969 return;
970 }
971
972 contents_insets_ = gfx::Insets(top, left, bottom, right);
973 if (IsDocked()) {
974 // Update inspected window.
975 BrowserWindow* inspected_window = GetInspectedBrowserWindow();
976 if (inspected_window)
977 inspected_window->UpdateDevTools();
978 }
1021 } 979 }
1022 980
1023 void DevToolsWindow::MoveWindow(int x, int y) { 981 void DevToolsWindow::MoveWindow(int x, int y) {
1024 if (!IsDocked()) { 982 if (!IsDocked()) {
1025 gfx::Rect bounds = browser_->window()->GetBounds(); 983 gfx::Rect bounds = browser_->window()->GetBounds();
1026 bounds.Offset(x, y); 984 bounds.Offset(x, y);
1027 browser_->window()->SetBounds(bounds); 985 browser_->window()->SetBounds(bounds);
1028 } 986 }
1029 } 987 }
1030 988
(...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after
1513 return inspected_contents_observer_ ? 1471 return inspected_contents_observer_ ?
1514 inspected_contents_observer_->web_contents() : NULL; 1472 inspected_contents_observer_->web_contents() : NULL;
1515 } 1473 }
1516 1474
1517 void DevToolsWindow::DocumentOnLoadCompletedInMainFrame() { 1475 void DevToolsWindow::DocumentOnLoadCompletedInMainFrame() {
1518 is_loaded_ = true; 1476 is_loaded_ = true;
1519 UpdateTheme(); 1477 UpdateTheme();
1520 DoAction(); 1478 DoAction();
1521 AddDevToolsExtensionsToClient(); 1479 AddDevToolsExtensionsToClient();
1522 } 1480 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698