| Index: chrome/browser/debugger/devtools_window.cc
|
| diff --git a/chrome/browser/debugger/devtools_window.cc b/chrome/browser/debugger/devtools_window.cc
|
| index 56541e7d631c9a29bd9dc83426373943514379ec..fc74431473821a720b29b9c4dee71a083643b1d5 100644
|
| --- a/chrome/browser/debugger/devtools_window.cc
|
| +++ b/chrome/browser/debugger/devtools_window.cc
|
| @@ -57,11 +57,12 @@ DevToolsWindow::DevToolsWindow(Profile* profile,
|
| browser_(NULL),
|
| docked_(docked),
|
| is_loaded_(false),
|
| - open_console_on_load_(false) {
|
| + action_on_load_(DEVTOOLS_TOGGLE_ACTION_NONE) {
|
| // Create TabContents with devtools.
|
| tab_contents_ = new TabContents(profile, NULL, MSG_ROUTING_NONE, NULL);
|
| tab_contents_->render_view_host()->AllowBindings(BindingsPolicy::DOM_UI);
|
| - tab_contents_->controller().LoadURL(GetDevToolsUrl(), GURL(), PageTransition::START_PAGE);
|
| + tab_contents_->controller().LoadURL(
|
| + GetDevToolsUrl(), GURL(), PageTransition::START_PAGE);
|
|
|
| // Wipe out page icon so that the default application icon is used.
|
| NavigationEntry* entry = tab_contents_->controller().GetActiveEntry();
|
| @@ -115,7 +116,7 @@ void DevToolsWindow::InspectedTabClosing() {
|
| }
|
| }
|
|
|
| -void DevToolsWindow::Show(bool open_console) {
|
| +void DevToolsWindow::Show(DevToolsToggleAction action) {
|
| if (docked_) {
|
| // Just tell inspected browser to update splitter.
|
| BrowserWindow* inspected_window = GetInspectedBrowserWindow();
|
| @@ -124,8 +125,7 @@ void DevToolsWindow::Show(bool open_console) {
|
| inspected_window->UpdateDevTools();
|
| SetAttachedWindow();
|
| tab_contents_->view()->SetInitialFocus();
|
| - if (open_console)
|
| - ScheduleOpenConsole();
|
| + ScheduleAction(action);
|
| return;
|
| } else {
|
| // Sometimes we don't know where to dock. Stay undocked.
|
| @@ -136,12 +136,17 @@ void DevToolsWindow::Show(bool open_console) {
|
| if (!browser_)
|
| CreateDevToolsBrowser();
|
|
|
| - browser_->window()->Show();
|
| + // Avoid consecutive window switching if the devtools window has been opened
|
| + // and the Inspect Element shortcut is pressed in the inspected tab.
|
| + bool should_show_window =
|
| + !browser_ || action != DEVTOOLS_TOGGLE_ACTION_INSPECT;
|
| + if (should_show_window)
|
| + browser_->window()->Show();
|
| SetAttachedWindow();
|
| - tab_contents_->view()->SetInitialFocus();
|
| + if (should_show_window)
|
| + tab_contents_->view()->SetInitialFocus();
|
|
|
| - if (open_console)
|
| - ScheduleOpenConsole();
|
| + ScheduleAction(action);
|
| }
|
|
|
| void DevToolsWindow::Activate() {
|
| @@ -180,7 +185,7 @@ void DevToolsWindow::SetDocked(bool docked) {
|
| inspected_window = NULL;
|
| }
|
| }
|
| - Show(false);
|
| + Show(DEVTOOLS_TOGGLE_ACTION_NONE);
|
| }
|
|
|
| RenderViewHost* DevToolsWindow::GetRenderViewHost() {
|
| @@ -244,10 +249,7 @@ void DevToolsWindow::Observe(NotificationType type,
|
| SetAttachedWindow();
|
| is_loaded_ = true;
|
| UpdateTheme();
|
| - if (open_console_on_load_) {
|
| - DoOpenConsole();
|
| - open_console_on_load_ = false;
|
| - }
|
| + DoAction();
|
| } else if (type == NotificationType::TAB_CLOSING) {
|
| if (Source<NavigationController>(source).ptr() ==
|
| &tab_contents_->controller()) {
|
| @@ -263,16 +265,30 @@ void DevToolsWindow::Observe(NotificationType type,
|
| }
|
| }
|
|
|
| -void DevToolsWindow::ScheduleOpenConsole() {
|
| +void DevToolsWindow::ScheduleAction(DevToolsToggleAction action) {
|
| + action_on_load_ = action;
|
| if (is_loaded_)
|
| - DoOpenConsole();
|
| - else
|
| - open_console_on_load_ = true;
|
| + DoAction();
|
| }
|
|
|
| -void DevToolsWindow::DoOpenConsole() {
|
| - tab_contents_->render_view_host()->
|
| - ExecuteJavascriptInWebFrame(L"", L"WebInspector.showConsole();");
|
| +void DevToolsWindow::DoAction() {
|
| + // TODO: these messages should be pushed through the WebKit API instead.
|
| + switch (action_on_load_) {
|
| + case DEVTOOLS_TOGGLE_ACTION_SHOW_CONSOLE:
|
| + tab_contents_->render_view_host()->
|
| + ExecuteJavascriptInWebFrame(L"", L"WebInspector.showConsole();");
|
| + break;
|
| + case DEVTOOLS_TOGGLE_ACTION_INSPECT:
|
| + tab_contents_->render_view_host()->
|
| + ExecuteJavascriptInWebFrame(
|
| + L"", L"WebInspector.toggleSearchingForNode();");
|
| + case DEVTOOLS_TOGGLE_ACTION_NONE:
|
| + // Do nothing.
|
| + break;
|
| + default:
|
| + NOTREACHED();
|
| + }
|
| + action_on_load_ = DEVTOOLS_TOGGLE_ACTION_NONE;
|
| }
|
|
|
| std::string SkColorToRGBAString(SkColor color) {
|
|
|