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

Unified Diff: chrome/browser/devtools/devtools_window.cc

Issue 1228863006: devtools: avoid relying on the internal variables for browser (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add DetachFromBrowser() Created 5 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/devtools/devtools_window.h ('k') | chrome/browser/devtools/devtools_window_testing.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/devtools/devtools_window.cc
diff --git a/chrome/browser/devtools/devtools_window.cc b/chrome/browser/devtools/devtools_window.cc
index 23e8e80c37c36bf2ef95d56918a4c12f6bcaa05a..5c2b4fb3e9ecf06b95d4b7a4cdac5384c405b2bb 100644
--- a/chrome/browser/devtools/devtools_window.cc
+++ b/chrome/browser/devtools/devtools_window.cc
@@ -20,6 +20,7 @@
#include "chrome/browser/task_management/web_contents_tags.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_dialogs.h"
+#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/browser_iterator.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/browser_tabstrip.h"
@@ -353,14 +354,14 @@ content::WebContents* DevToolsWindow::GetInTabWebContents(
return NULL;
// Undocked window should have toolbox web contents.
- if (!window->is_docked_ && !window->toolbox_web_contents_)
+ if (!window->IsDocked() && !window->toolbox_web_contents_)
return NULL;
if (out_strategy)
out_strategy->CopyFrom(window->contents_resizing_strategy_);
- return window->is_docked_ ? window->main_web_contents_ :
- window->toolbox_web_contents_;
+ return window->IsDocked() ? window->main_web_contents_
+ : window->toolbox_web_contents_;
}
// static
@@ -503,7 +504,7 @@ void DevToolsWindow::ToggleDevToolsWindow(
// If window is docked and visible, we hide it on toggle. If window is
// undocked, we show (activate) it.
- if (!window->is_docked_ || do_open)
+ if (!window->IsDocked() || do_open)
window->ScheduleShow(action);
else
window->CloseWindow();
@@ -539,7 +540,7 @@ void DevToolsWindow::ScheduleShow(const DevToolsToggleAction& action) {
if (!can_dock_) {
// No harm to show always-undocked window right away.
- is_docked_ = false;
+ dock_requested_ = false;
Show(DevToolsToggleAction::Show());
}
}
@@ -551,7 +552,7 @@ void DevToolsWindow::Show(const DevToolsToggleAction& action) {
if (action.type() == DevToolsToggleAction::kNoOp)
return;
- if (is_docked_) {
+ if (IsDocked()) {
DCHECK(can_dock_);
Browser* inspected_browser = NULL;
int inspected_tab_index = -1;
@@ -585,14 +586,15 @@ void DevToolsWindow::Show(const DevToolsToggleAction& action) {
// Avoid consecutive window switching if the devtools window has been opened
// and the Inspect Element shortcut is pressed in the inspected tab.
+ Browser* browser = GetBrowser();
bool should_show_window =
- !browser_ || (action.type() != DevToolsToggleAction::kInspect);
+ !browser || (action.type() != DevToolsToggleAction::kInspect);
- if (!browser_)
- CreateDevToolsBrowser();
+ if (!browser)
+ browser = CreateDevToolsBrowser();
if (should_show_window) {
- browser_->window()->Show();
+ browser->window()->Show();
main_web_contents_->SetInitialFocus();
}
if (toolbox_web_contents_)
@@ -679,8 +681,7 @@ DevToolsWindow::DevToolsWindow(Profile* profile,
main_web_contents_(main_web_contents),
toolbox_web_contents_(nullptr),
bindings_(bindings),
- browser_(nullptr),
- is_docked_(true),
+ dock_requested_(true),
can_dock_(can_dock),
// This initialization allows external front-end to work without changes.
// We don't wait for docking call, but instead immediately show undocked.
@@ -846,12 +847,13 @@ WebContents* DevToolsWindow::OpenURLFromTab(
}
void DevToolsWindow::ActivateContents(WebContents* contents) {
- if (is_docked_) {
+ Browser* browser = GetBrowser();
+ if (browser == nullptr) {
WebContents* inspected_tab = GetInspectedWebContents();
if (inspected_tab)
inspected_tab->GetDelegate()->ActivateContents(inspected_tab);
- } else if (browser_) {
- browser_->window()->Activate();
+ } else {
+ browser->window()->Activate();
}
}
@@ -903,7 +905,7 @@ void DevToolsWindow::WebContentsCreated(WebContents* source_contents,
}
void DevToolsWindow::CloseContents(WebContents* source) {
- CHECK(is_docked_);
+ CHECK(IsDocked());
life_stage_ = kClosing;
UpdateBrowserWindow();
// In case of docked main_web_contents_, we own it so delete here.
@@ -913,7 +915,7 @@ void DevToolsWindow::CloseContents(WebContents* source) {
}
void DevToolsWindow::ContentsZoomChange(bool zoom_in) {
- DCHECK(is_docked_);
+ DCHECK(IsDocked());
ui_zoom::PageZoom::Zoom(main_web_contents_, zoom_in ? content::PAGE_ZOOM_IN
: content::PAGE_ZOOM_OUT);
}
@@ -998,14 +1000,18 @@ bool DevToolsWindow::PreHandleGestureEvent(
void DevToolsWindow::ActivateWindow() {
if (life_stage_ != kLoadCompleted)
return;
- if (is_docked_ && GetInspectedBrowserWindow())
+ bool is_docked = IsDocked();
+ if (is_docked && GetInspectedBrowserWindow()) {
main_web_contents_->Focus();
- else if (!is_docked_ && !browser_->window()->IsActive())
- browser_->window()->Activate();
+ } else if (!is_docked) {
+ Browser* browser = GetBrowser();
+ if (!browser->window()->IsActive())
+ browser->window()->Activate();
+ }
}
void DevToolsWindow::CloseWindow() {
- DCHECK(is_docked_);
+ DCHECK(IsDocked());
life_stage_ = kClosing;
main_web_contents_->DispatchBeforeUnload(false);
}
@@ -1035,8 +1041,8 @@ void DevToolsWindow::SetIsDocked(bool dock_requested) {
if (!can_dock_)
dock_requested = false;
- bool was_docked = is_docked_;
- is_docked_ = dock_requested;
+ bool was_docked = IsDocked();
+ dock_requested_ = dock_requested;
if (life_stage_ != kLoadCompleted) {
// This is a first time call we waited for to initialize.
@@ -1050,12 +1056,7 @@ void DevToolsWindow::SetIsDocked(bool dock_requested) {
return;
if (dock_requested && !was_docked) {
- // Detach window from the external devtools browser. It will lead to
- // the browser object's close and delete. Remove observer first.
- TabStripModel* tab_strip_model = browser_->tab_strip_model();
- tab_strip_model->DetachWebContentsAt(
- tab_strip_model->GetIndexOfWebContents(main_web_contents_));
- browser_ = NULL;
+ DetachFromBrowser();
} else if (!dock_requested && was_docked) {
UpdateBrowserWindow();
}
@@ -1069,8 +1070,9 @@ void DevToolsWindow::OpenInNewTab(const std::string& url) {
ui::PAGE_TRANSITION_LINK, false);
WebContents* inspected_web_contents = GetInspectedWebContents();
if (!inspected_web_contents || !inspected_web_contents->OpenURL(params)) {
+ Browser* browser = GetBrowser();
chrome::HostDesktopType host_desktop_type =
- browser_ ? browser_->host_desktop_type() : chrome::GetActiveDesktop();
+ browser ? browser->host_desktop_type() : chrome::GetActiveDesktop();
chrome::ScopedTabbedBrowserDisplayer displayer(profile_, host_desktop_type);
chrome::AddSelectedTabWithURL(displayer.browser(), GURL(url),
@@ -1090,19 +1092,18 @@ void DevToolsWindow::InspectedContentsClosing() {
}
InfoBarService* DevToolsWindow::GetInfoBarService() {
- return is_docked_ ?
- InfoBarService::FromWebContents(GetInspectedWebContents()) :
- InfoBarService::FromWebContents(main_web_contents_);
+ return IsDocked() ? InfoBarService::FromWebContents(GetInspectedWebContents())
+ : InfoBarService::FromWebContents(main_web_contents_);
}
void DevToolsWindow::RenderProcessGone(bool crashed) {
// Docked DevToolsWindow owns its main_web_contents_ and must delete it.
// Undocked main_web_contents_ are owned and handled by browser.
// see crbug.com/369932
- if (is_docked_) {
+ if (IsDocked()) {
CloseContents(main_web_contents_);
- } else if (browser_ && crashed) {
- browser_->window()->Close();
+ } else if (crashed) {
+ DetachFromBrowser();
}
}
@@ -1132,7 +1133,7 @@ void DevToolsWindow::OnLoadCompleted() {
LoadCompleted();
}
-void DevToolsWindow::CreateDevToolsBrowser() {
+Browser* DevToolsWindow::CreateDevToolsBrowser() {
PrefService* prefs = profile_->GetPrefs();
if (!prefs->GetDictionary(prefs::kAppWindowPlacement)->HasKey(kDevToolsApp)) {
DictionaryPrefUpdate update(prefs, prefs::kAppWindowPlacement);
@@ -1147,14 +1148,14 @@ void DevToolsWindow::CreateDevToolsBrowser() {
dev_tools_defaults->SetBoolean("always_on_top", false);
}
- browser_ = new Browser(Browser::CreateParams::CreateForDevTools(
- profile_,
- chrome::GetHostDesktopTypeForNativeView(
- main_web_contents_->GetNativeView())));
- browser_->tab_strip_model()->AddWebContents(
- main_web_contents_, -1, ui::PAGE_TRANSITION_AUTO_TOPLEVEL,
- TabStripModel::ADD_ACTIVE);
+ Browser* browser = new Browser(Browser::CreateParams::CreateForDevTools(
+ profile_, chrome::GetHostDesktopTypeForNativeView(
+ main_web_contents_->GetNativeView())));
+ browser->tab_strip_model()->AddWebContents(main_web_contents_, -1,
+ ui::PAGE_TRANSITION_AUTO_TOPLEVEL,
+ TabStripModel::ADD_ACTIVE);
main_web_contents_->GetRenderViewHost()->SyncRendererPrefs();
+ return browser;
}
BrowserWindow* DevToolsWindow::GetInspectedBrowserWindow() {
@@ -1212,6 +1213,27 @@ void DevToolsWindow::UpdateBrowserWindow() {
inspected_window->UpdateDevTools();
}
+Browser* DevToolsWindow::GetBrowser() {
+ return chrome::FindBrowserWithWebContents(main_web_contents_);
+}
+
+bool DevToolsWindow::IsDocked() {
+ if (GetBrowser() != nullptr)
+ return false;
+ return dock_requested_;
+}
+
+void DevToolsWindow::DetachFromBrowser() {
+ Browser* browser = GetBrowser();
+ if (browser) {
+ // Detach window from the external devtools browser. It will lead to
+ // the browser object's close and delete. Remove observer first.
+ TabStripModel* tab_strip_model = browser->tab_strip_model();
+ tab_strip_model->DetachWebContentsAt(
+ tab_strip_model->GetIndexOfWebContents(main_web_contents_));
+ }
+}
+
WebContents* DevToolsWindow::GetInspectedWebContents() {
return inspected_contents_observer_
? inspected_contents_observer_->web_contents()
« no previous file with comments | « chrome/browser/devtools/devtools_window.h ('k') | chrome/browser/devtools/devtools_window_testing.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698