summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/automation/testing_automation_provider.cc2
-rw-r--r--chrome/browser/chrome_content_browser_client.cc4
-rw-r--r--chrome/browser/chrome_content_browser_client.h1
-rw-r--r--chrome/browser/debugger/devtools_file_util.cc107
-rw-r--r--chrome/browser/debugger/devtools_file_util.h29
-rw-r--r--chrome/browser/debugger/devtools_toggle_action.h15
-rw-r--r--chrome/browser/debugger/devtools_window.cc601
-rw-r--r--chrome/browser/debugger/devtools_window.h129
-rw-r--r--chrome/browser/extensions/extension_debugger_api.cc6
-rw-r--r--chrome/browser/extensions/extension_devtools_bridge.cc3
-rw-r--r--chrome/browser/extensions/extension_devtools_bridge.h2
-rw-r--r--chrome/browser/extensions/extensions_ui.cc2
-rw-r--r--chrome/browser/external_tab_container_win.cc4
-rw-r--r--chrome/browser/prefs/browser_prefs.cc4
-rw-r--r--chrome/browser/printing/print_dialog_cloud.cc2
-rw-r--r--chrome/browser/renderer_host/render_process_host_chrome_browsertest.cc2
-rw-r--r--chrome/browser/tab_contents/render_view_context_menu.cc2
-rw-r--r--chrome/browser/ui/browser.cc7
-rw-r--r--chrome/browser/ui/browser.h2
-rw-r--r--chrome/browser/ui/cocoa/dev_tools_controller.mm2
-rw-r--r--chrome/browser/ui/cocoa/extensions/extension_popup_controller.mm2
-rw-r--r--chrome/browser/ui/cocoa/tabpose_window.mm2
-rw-r--r--chrome/browser/ui/cocoa/tabs/tab_strip_controller.mm2
-rw-r--r--chrome/browser/ui/gtk/browser_window_gtk.cc2
-rw-r--r--chrome/browser/ui/gtk/extensions/extension_popup_gtk.cc2
-rw-r--r--chrome/browser/ui/views/extensions/extension_popup.cc2
-rw-r--r--chrome/browser/ui/views/frame/browser_view.cc2
-rw-r--r--chrome/chrome.gyp14
28 files changed, 920 insertions, 34 deletions
diff --git a/chrome/browser/automation/testing_automation_provider.cc b/chrome/browser/automation/testing_automation_provider.cc
index a150ee0..8c956cf 100644
--- a/chrome/browser/automation/testing_automation_provider.cc
+++ b/chrome/browser/automation/testing_automation_provider.cc
@@ -42,6 +42,7 @@
#include "chrome/browser/browser_process.h"
#include "chrome/browser/browser_shutdown.h"
#include "chrome/browser/content_settings/host_content_settings_map.h"
+#include "chrome/browser/debugger/devtools_window.h"
#include "chrome/browser/download/download_prefs.h"
#include "chrome/browser/download/save_package_file_picker.h"
#include "chrome/browser/extensions/extension_host.h"
@@ -95,7 +96,6 @@
#include "chrome/common/pref_names.h"
#include "chrome/common/render_messages.h"
#include "chrome/common/url_constants.h"
-#include "content/browser/debugger/devtools_window.h"
#include "content/browser/renderer_host/render_process_host.h"
#include "content/browser/renderer_host/render_view_host.h"
#include "content/browser/tab_contents/interstitial_page.h"
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 5ff62fe..c2f46ad 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -660,6 +660,10 @@ MHTMLGenerationManager*
return g_browser_process->mhtml_generation_manager();
}
+DevToolsManager* ChromeContentBrowserClient::GetDevToolsManager() {
+ return g_browser_process->devtools_manager();
+}
+
bool ChromeContentBrowserClient::IsFastShutdownPossible() {
const CommandLine& browser_command_line = *CommandLine::ForCurrentProcess();
return !browser_command_line.HasSwitch(switches::kChromeFrame);
diff --git a/chrome/browser/chrome_content_browser_client.h b/chrome/browser/chrome_content_browser_client.h
index 870563c..b60848c 100644
--- a/chrome/browser/chrome_content_browser_client.h
+++ b/chrome/browser/chrome_content_browser_client.h
@@ -93,6 +93,7 @@ class ChromeContentBrowserClient : public content::ContentBrowserClient {
virtual ResourceDispatcherHost* GetResourceDispatcherHost() OVERRIDE;
virtual ui::Clipboard* GetClipboard() OVERRIDE;
virtual MHTMLGenerationManager* GetMHTMLGenerationManager() OVERRIDE;
+ virtual DevToolsManager* GetDevToolsManager() OVERRIDE;
virtual bool IsFastShutdownPossible() OVERRIDE;
virtual WebPreferences GetWebkitPrefs(Profile* profile,
bool is_web_ui) OVERRIDE;
diff --git a/chrome/browser/debugger/devtools_file_util.cc b/chrome/browser/debugger/devtools_file_util.cc
new file mode 100644
index 0000000..1e4217d
--- /dev/null
+++ b/chrome/browser/debugger/devtools_file_util.cc
@@ -0,0 +1,107 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/debugger/devtools_file_util.h"
+
+#include "base/file_util.h"
+#include "base/memory/ref_counted.h"
+
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/download/download_prefs.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/shell_dialogs.h"
+
+namespace {
+
+class SaveAsDialog : public SelectFileDialog::Listener,
+ public base::RefCounted<SaveAsDialog> {
+ public:
+ SaveAsDialog() {
+ select_file_dialog_ = SelectFileDialog::Create(this);
+ }
+
+ void Show(Profile* profile,
+ const std::string& suggested_file_name,
+ const std::string& content) {
+ AddRef(); // Balanced in the three listener outcomes.
+
+ content_ = content;
+
+ FilePath default_path;
+
+ std::string file_name;
+ if (suggested_file_name.length() > 20)
+ file_name = suggested_file_name.substr(0, 20);
+ else
+ file_name = suggested_file_name;
+
+ if (!last_save_path_.empty()) {
+ default_path = last_save_path_.DirName().AppendASCII(suggested_file_name);
+ } else {
+ DownloadPrefs prefs(profile->GetPrefs());
+ default_path = prefs.download_path().AppendASCII(suggested_file_name);
+ }
+
+ select_file_dialog_->SelectFile(SelectFileDialog::SELECT_SAVEAS_FILE,
+ string16(),
+ default_path,
+ NULL,
+ 0,
+ FILE_PATH_LITERAL(""),
+ NULL,
+ NULL,
+ NULL);
+ }
+
+ // SelectFileDialog::Listener implementation.
+ virtual void FileSelected(const FilePath& path,
+ int index, void* params) {
+ last_save_path_ = path;
+
+ BrowserThread::PostTask(
+ BrowserThread::FILE, FROM_HERE,
+ NewRunnableFunction(
+ &SaveAsDialog::WriteFile,
+ path,
+ content_));
+ Release(); // Balanced in ::Show.
+ }
+
+ virtual void MultiFilesSelected(
+ const std::vector<FilePath>& files, void* params) {
+ Release(); // Balanced in ::Show.
+ NOTREACHED() << "Should not be able to select multiple files";
+ }
+
+ virtual void FileSelectionCanceled(void* params) {
+ Release(); // Balanced in ::Show.
+ }
+
+ private:
+ friend class base::RefCounted<SaveAsDialog>;
+ virtual ~SaveAsDialog() {}
+
+ static void WriteFile(FilePath path, const std::string& content) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+ DCHECK(!path.empty());
+
+ file_util::WriteFile(path, content.c_str(), content.length());
+ }
+ scoped_refptr<SelectFileDialog> select_file_dialog_;
+ static FilePath last_save_path_;
+ std::string content_;
+};
+
+// static
+FilePath SaveAsDialog::last_save_path_;
+
+} // namespace
+
+// static
+void DevToolsFileUtil::SaveAs(Profile* profile,
+ const std::string& suggested_file_name,
+ const std::string& content) {
+ scoped_refptr<SaveAsDialog> dialog = new SaveAsDialog();
+ dialog->Show(profile, suggested_file_name, content);
+}
diff --git a/chrome/browser/debugger/devtools_file_util.h b/chrome/browser/debugger/devtools_file_util.h
new file mode 100644
index 0000000..a70c8af
--- /dev/null
+++ b/chrome/browser/debugger/devtools_file_util.h
@@ -0,0 +1,29 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_DEBUGGER_DEVTOOLS_FILE_UTIL_H_
+#define CHROME_BROWSER_DEBUGGER_DEVTOOLS_FILE_UTIL_H_
+#pragma once
+
+#include <string>
+
+#include "base/basictypes.h"
+
+class Profile;
+
+class DevToolsFileUtil {
+ public:
+
+ // Shows Save As dialog using default save location from the |profile| prefs,
+ // |suggested_file_name| as the default name and saves |content| to the given
+ // location.
+ static void SaveAs(Profile* profile,
+ const std::string& suggested_file_name,
+ const std::string& content);
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(DevToolsFileUtil);
+};
+
+#endif // CHROME_BROWSER_DEBUGGER_DEVTOOLS_FILE_UTIL_H_
diff --git a/chrome/browser/debugger/devtools_toggle_action.h b/chrome/browser/debugger/devtools_toggle_action.h
new file mode 100644
index 0000000..f3435e0
--- /dev/null
+++ b/chrome/browser/debugger/devtools_toggle_action.h
@@ -0,0 +1,15 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_DEBUGGER_DEVTOOLS_TOGGLE_ACTION_H_
+#define CHROME_BROWSER_DEBUGGER_DEVTOOLS_TOGGLE_ACTION_H_
+#pragma once
+
+enum DevToolsToggleAction {
+ DEVTOOLS_TOGGLE_ACTION_NONE,
+ DEVTOOLS_TOGGLE_ACTION_SHOW_CONSOLE,
+ DEVTOOLS_TOGGLE_ACTION_INSPECT
+};
+
+#endif // CHROME_BROWSER_DEBUGGER_DEVTOOLS_TOGGLE_ACTION_H_
diff --git a/chrome/browser/debugger/devtools_window.cc b/chrome/browser/debugger/devtools_window.cc
new file mode 100644
index 0000000..b5161da
--- /dev/null
+++ b/chrome/browser/debugger/devtools_window.cc
@@ -0,0 +1,601 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <algorithm>
+
+#include "base/command_line.h"
+#include "base/json/json_writer.h"
+#include "base/stringprintf.h"
+#include "base/string_number_conversions.h"
+#include "base/utf_string_conversions.h"
+#include "base/values.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/debugger/devtools_file_util.h"
+#include "chrome/browser/debugger/devtools_window.h"
+#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/prefs/pref_service.h"
+#include "chrome/browser/prefs/scoped_user_pref_update.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/sessions/restore_tab_helper.h"
+#include "chrome/browser/tabs/tab_strip_model.h"
+#include "chrome/browser/themes/theme_service.h"
+#include "chrome/browser/themes/theme_service_factory.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_list.h"
+#include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
+#include "chrome/common/chrome_notification_types.h"
+#include "chrome/common/pref_names.h"
+#include "chrome/common/render_messages.h"
+#include "chrome/common/url_constants.h"
+#include "content/browser/browsing_instance.h"
+#include "content/browser/debugger/devtools_manager.h"
+#include "content/browser/in_process_webkit/session_storage_namespace.h"
+#include "content/browser/load_notification_details.h"
+#include "content/browser/renderer_host/render_view_host.h"
+#include "content/browser/tab_contents/navigation_controller.h"
+#include "content/browser/tab_contents/navigation_entry.h"
+#include "content/browser/tab_contents/tab_contents.h"
+#include "content/browser/tab_contents/tab_contents_view.h"
+#include "content/common/bindings_policy.h"
+#include "content/common/notification_service.h"
+#include "grit/generated_resources.h"
+
+const char DevToolsWindow::kDevToolsApp[] = "DevToolsApp";
+
+// static
+void DevToolsWindow::RegisterUserPrefs(PrefService* prefs) {
+ prefs->RegisterBooleanPref(prefs::kDevToolsOpenDocked,
+ true,
+ PrefService::UNSYNCABLE_PREF);
+}
+
+// static
+TabContentsWrapper* DevToolsWindow::GetDevToolsContents(
+ TabContents* inspected_tab) {
+ if (!inspected_tab)
+ return NULL;
+
+ DevToolsManager* manager = DevToolsManager::GetInstance();
+ if (!manager)
+ return NULL; // Happens only in tests.
+
+ DevToolsClientHost* client_host = manager->
+ GetDevToolsClientHostFor(inspected_tab->render_view_host());
+ DevToolsWindow* window = AsDevToolsWindow(client_host);
+ if (!window || !window->is_docked())
+ return NULL;
+ return window->tab_contents();
+}
+
+// static
+DevToolsWindow* DevToolsWindow::FindDevToolsWindow(
+ RenderViewHost* window_rvh) {
+ DevToolsClientHost* client_host =
+ DevToolsClientHost::FindOwnerClientHost(window_rvh);
+ return client_host != NULL ? DevToolsWindow::AsDevToolsWindow(client_host)
+ : NULL;
+}
+
+// static
+DevToolsWindow* DevToolsWindow::CreateDevToolsWindowForWorker(
+ Profile* profile) {
+ return new DevToolsWindow(profile, NULL, false, true);
+}
+
+// static
+DevToolsWindow* DevToolsWindow::OpenDevToolsWindow(
+ RenderViewHost* inspected_rvh) {
+ return ToggleDevToolsWindow(inspected_rvh, true,
+ DEVTOOLS_TOGGLE_ACTION_NONE);
+}
+
+// static
+DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow(
+ RenderViewHost* inspected_rvh,
+ DevToolsToggleAction action) {
+ return ToggleDevToolsWindow(inspected_rvh, false, action);
+}
+
+void DevToolsWindow::InspectElement(RenderViewHost* inspected_rvh,
+ int x,
+ int y) {
+ DevToolsManager::GetInstance()->SendInspectElement(inspected_rvh, x, y);
+ // TODO(loislo): we should initiate DevTools window opening from within
+ // renderer. Otherwise, we still can hit a race condition here.
+ OpenDevToolsWindow(inspected_rvh);
+}
+
+
+DevToolsWindow::DevToolsWindow(Profile* profile,
+ RenderViewHost* inspected_rvh,
+ bool docked,
+ bool shared_worker_frontend)
+ : profile_(profile),
+ inspected_tab_(NULL),
+ browser_(NULL),
+ docked_(docked),
+ is_loaded_(false),
+ action_on_load_(DEVTOOLS_TOGGLE_ACTION_NONE),
+ shared_worker_frontend_(shared_worker_frontend) {
+ // Create TabContents with devtools.
+ tab_contents_ =
+ Browser::TabContentsFactory(profile, NULL, MSG_ROUTING_NONE, NULL, NULL);
+ tab_contents_->tab_contents()->
+ render_view_host()->AllowBindings(BindingsPolicy::WEB_UI);
+ 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();
+ entry->favicon().set_bitmap(SkBitmap());
+ entry->favicon().set_is_valid(true);
+
+ // Register on-load actions.
+ registrar_.Add(this,
+ content::NOTIFICATION_LOAD_STOP,
+ Source<NavigationController>(&tab_contents_->controller()));
+ registrar_.Add(this,
+ content::NOTIFICATION_TAB_CLOSING,
+ Source<NavigationController>(&tab_contents_->controller()));
+ registrar_.Add(
+ this,
+ chrome::NOTIFICATION_BROWSER_THEME_CHANGED,
+ Source<ThemeService>(ThemeServiceFactory::GetForProfile(profile_)));
+ // There is no inspected_rvh in case of shared workers.
+ if (inspected_rvh) {
+ TabContents* tab = inspected_rvh->delegate()->GetAsTabContents();
+ if (tab)
+ inspected_tab_ = TabContentsWrapper::GetCurrentWrapperForContents(tab);
+ }
+}
+
+DevToolsWindow::~DevToolsWindow() {
+}
+
+void DevToolsWindow::SendMessageToClient(const IPC::Message& message) {
+ RenderViewHost* target_host =
+ tab_contents_->tab_contents()->render_view_host();
+ IPC::Message* m = new IPC::Message(message);
+ m->set_routing_id(target_host->routing_id());
+ target_host->Send(m);
+}
+
+void DevToolsWindow::InspectedTabClosing() {
+ if (docked_) {
+ // Update dev tools to reflect removed dev tools window.
+
+ BrowserWindow* inspected_window = GetInspectedBrowserWindow();
+ if (inspected_window)
+ inspected_window->UpdateDevTools();
+ // In case of docked tab_contents we own it, so delete here.
+ delete tab_contents_;
+
+ delete this;
+ } else {
+ // First, initiate self-destruct to free all the registrars.
+ // Then close all tabs. Browser will take care of deleting tab_contents
+ // for us.
+ Browser* browser = browser_;
+ delete this;
+ browser->CloseAllTabs();
+ }
+}
+
+void DevToolsWindow::TabReplaced(TabContents* new_tab) {
+ TabContentsWrapper* new_tab_wrapper =
+ TabContentsWrapper::GetCurrentWrapperForContents(new_tab);
+ DCHECK(new_tab_wrapper);
+ if (!new_tab_wrapper)
+ return;
+ DCHECK_EQ(profile_, new_tab_wrapper->profile());
+ inspected_tab_ = new_tab_wrapper;
+}
+
+RenderViewHost* DevToolsWindow::GetClientRenderViewHost() {
+ return tab_contents_->render_view_host();
+}
+
+void DevToolsWindow::Show(DevToolsToggleAction action) {
+ if (docked_) {
+ Browser* inspected_browser;
+ int inspected_tab_index;
+ // Tell inspected browser to update splitter and switch to inspected panel.
+ if (!IsInspectedBrowserPopupOrPanel() &&
+ FindInspectedBrowserAndTabIndex(&inspected_browser,
+ &inspected_tab_index)) {
+ BrowserWindow* inspected_window = inspected_browser->window();
+ tab_contents_->tab_contents()->set_delegate(this);
+ inspected_window->UpdateDevTools();
+ tab_contents_->view()->SetInitialFocus();
+ inspected_window->Show();
+ TabStripModel* tabstrip_model = inspected_browser->tabstrip_model();
+ tabstrip_model->ActivateTabAt(inspected_tab_index, true);
+ ScheduleAction(action);
+ return;
+ } else {
+ // Sometimes we don't know where to dock. Stay undocked.
+ docked_ = false;
+ UpdateFrontendAttachedState();
+ }
+ }
+
+ // 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 (!browser_)
+ CreateDevToolsBrowser();
+
+ if (should_show_window) {
+ browser_->window()->Show();
+ tab_contents_->view()->SetInitialFocus();
+ }
+
+ ScheduleAction(action);
+}
+
+void DevToolsWindow::Activate() {
+ if (!docked_) {
+ if (!browser_->window()->IsActive()) {
+ browser_->window()->Activate();
+ }
+ } else {
+ BrowserWindow* inspected_window = GetInspectedBrowserWindow();
+ if (inspected_window)
+ tab_contents_->view()->Focus();
+ }
+}
+
+void DevToolsWindow::SetDocked(bool docked) {
+ if (docked_ == docked)
+ return;
+
+ if (!inspected_tab_)
+ return;
+
+ profile_->GetPrefs()->SetBoolean(prefs::kDevToolsOpenDocked, docked);
+
+ if (docked && (!GetInspectedBrowserWindow() ||
+ IsInspectedBrowserPopupOrPanel())) {
+ // Cannot dock, avoid window flashing due to close-reopen cycle.
+ return;
+ }
+ docked_ = docked;
+
+ if (docked) {
+ // Detach window from the external devtools browser. It will lead to
+ // the browser object's close and delete. Remove observer first.
+ TabStripModel* tabstrip_model = browser_->tabstrip_model();
+ tabstrip_model->DetachTabContentsAt(
+ tabstrip_model->GetIndexOfTabContents(tab_contents_));
+ browser_ = NULL;
+ } else {
+ // Update inspected window to hide split and reset it.
+ BrowserWindow* inspected_window = GetInspectedBrowserWindow();
+ if (inspected_window) {
+ inspected_window->UpdateDevTools();
+ inspected_window = NULL;
+ }
+ }
+ Show(DEVTOOLS_TOGGLE_ACTION_NONE);
+}
+
+void DevToolsWindow::Close() {
+ DCHECK(docked_);
+ NotifyCloseListener();
+ InspectedTabClosing();
+}
+
+void DevToolsWindow::SaveAs(const std::string& suggested_file_name,
+ const std::string& content) {
+ DevToolsFileUtil::SaveAs(tab_contents_->profile(),
+ suggested_file_name,
+ content);
+}
+
+RenderViewHost* DevToolsWindow::GetRenderViewHost() {
+ return tab_contents_->render_view_host();
+}
+
+void DevToolsWindow::CreateDevToolsBrowser() {
+ // TODO(pfeldman): Make browser's getter for this key static.
+ std::string wp_key;
+ wp_key.append(prefs::kBrowserWindowPlacement);
+ wp_key.append("_");
+ wp_key.append(kDevToolsApp);
+
+ PrefService* prefs = profile_->GetPrefs();
+ if (!prefs->FindPreference(wp_key.c_str())) {
+ prefs->RegisterDictionaryPref(wp_key.c_str(), PrefService::UNSYNCABLE_PREF);
+ }
+
+ const DictionaryValue* wp_pref = prefs->GetDictionary(wp_key.c_str());
+ if (!wp_pref || wp_pref->empty()) {
+ DictionaryPrefUpdate update(prefs, wp_key.c_str());
+ DictionaryValue* defaults = update.Get();
+ defaults->SetInteger("left", 100);
+ defaults->SetInteger("top", 100);
+ defaults->SetInteger("right", 740);
+ defaults->SetInteger("bottom", 740);
+ defaults->SetBoolean("maximized", false);
+ defaults->SetBoolean("always_on_top", false);
+ }
+
+ browser_ = Browser::CreateForDevTools(profile_);
+ browser_->tabstrip_model()->AddTabContents(
+ tab_contents_, -1, PageTransition::START_PAGE, TabStripModel::ADD_ACTIVE);
+}
+
+bool DevToolsWindow::FindInspectedBrowserAndTabIndex(Browser** browser,
+ int* tab) {
+ if (!inspected_tab_)
+ return false;
+
+ const NavigationController& controller = inspected_tab_->controller();
+ for (BrowserList::const_iterator it = BrowserList::begin();
+ it != BrowserList::end(); ++it) {
+ int tab_index = (*it)->GetIndexOfController(&controller);
+ if (tab_index != TabStripModel::kNoTab) {
+ *browser = *it;
+ *tab = tab_index;
+ return true;
+ }
+ }
+ return false;
+}
+
+BrowserWindow* DevToolsWindow::GetInspectedBrowserWindow() {
+ Browser* browser = NULL;
+ int tab;
+ return FindInspectedBrowserAndTabIndex(&browser, &tab) ?
+ browser->window() : NULL;
+}
+
+bool DevToolsWindow::IsInspectedBrowserPopupOrPanel() {
+ Browser* browser = NULL;
+ int tab;
+ if (!FindInspectedBrowserAndTabIndex(&browser, &tab))
+ return false;
+
+ return browser->is_type_popup() || browser->is_type_panel();
+}
+
+void DevToolsWindow::UpdateFrontendAttachedState() {
+ tab_contents_->render_view_host()->ExecuteJavascriptInWebFrame(
+ string16(),
+ docked_ ? ASCIIToUTF16("WebInspector.setAttachedWindow(true);")
+ : ASCIIToUTF16("WebInspector.setAttachedWindow(false);"));
+}
+
+
+void DevToolsWindow::AddDevToolsExtensionsToClient() {
+ if (inspected_tab_) {
+ FundamentalValue tabId(
+ inspected_tab_->restore_tab_helper()->session_id().id());
+ CallClientFunction(ASCIIToUTF16("WebInspector.setInspectedTabId"), tabId);
+ }
+ ListValue results;
+ const ExtensionService* extension_service =
+ tab_contents_->tab_contents()->profile()->
+ GetOriginalProfile()->GetExtensionService();
+ if (!extension_service)
+ return;
+
+ const ExtensionList* extensions = extension_service->extensions();
+
+ for (ExtensionList::const_iterator extension = extensions->begin();
+ extension != extensions->end(); ++extension) {
+ if ((*extension)->devtools_url().is_empty())
+ continue;
+ DictionaryValue* extension_info = new DictionaryValue();
+ extension_info->Set("startPage",
+ new StringValue((*extension)->devtools_url().spec()));
+ results.Append(extension_info);
+ }
+ CallClientFunction(ASCIIToUTF16("WebInspector.addExtensions"), results);
+}
+
+void DevToolsWindow::OpenURLFromTab(TabContents* source,
+ const GURL& url,
+ const GURL& referrer,
+ WindowOpenDisposition disposition,
+ PageTransition::Type transition) {
+ if (inspected_tab_) {
+ inspected_tab_->tab_contents()->OpenURL(
+ url, GURL(), NEW_FOREGROUND_TAB, PageTransition::LINK);
+ }
+}
+
+void DevToolsWindow::CallClientFunction(const string16& function_name,
+ const Value& arg) {
+ std::string json;
+ base::JSONWriter::Write(&arg, false, &json);
+ string16 javascript = function_name + char16('(') + UTF8ToUTF16(json) +
+ ASCIIToUTF16(");");
+ tab_contents_->render_view_host()->
+ ExecuteJavascriptInWebFrame(string16(), javascript);
+}
+
+void DevToolsWindow::Observe(int type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ if (type == content::NOTIFICATION_LOAD_STOP && !is_loaded_) {
+ is_loaded_ = true;
+ UpdateTheme();
+ DoAction();
+ AddDevToolsExtensionsToClient();
+ } else if (type == content::NOTIFICATION_TAB_CLOSING) {
+ if (Source<NavigationController>(source).ptr() ==
+ &tab_contents_->controller()) {
+ // This happens when browser closes all of its tabs as a result
+ // of window.Close event.
+ // Notify manager that this DevToolsClientHost no longer exists and
+ // initiate self-destuct here.
+ NotifyCloseListener();
+ delete this;
+ }
+ } else if (type == chrome::NOTIFICATION_BROWSER_THEME_CHANGED) {
+ UpdateTheme();
+ }
+}
+
+void DevToolsWindow::ScheduleAction(DevToolsToggleAction action) {
+ action_on_load_ = action;
+ if (is_loaded_)
+ DoAction();
+}
+
+void DevToolsWindow::DoAction() {
+ UpdateFrontendAttachedState();
+ // 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(
+ string16(), ASCIIToUTF16("WebInspector.showConsole();"));
+ break;
+ case DEVTOOLS_TOGGLE_ACTION_INSPECT:
+ tab_contents_->render_view_host()->ExecuteJavascriptInWebFrame(
+ string16(), ASCIIToUTF16("WebInspector.toggleSearchingForNode();"));
+ case DEVTOOLS_TOGGLE_ACTION_NONE:
+ // Do nothing.
+ break;
+ default:
+ NOTREACHED();
+ }
+ action_on_load_ = DEVTOOLS_TOGGLE_ACTION_NONE;
+}
+
+std::string SkColorToRGBAString(SkColor color) {
+ // We convert the alpha using DoubleToString because StringPrintf will use
+ // locale specific formatters (e.g., use , instead of . in German).
+ return StringPrintf("rgba(%d,%d,%d,%s)", SkColorGetR(color),
+ SkColorGetG(color), SkColorGetB(color),
+ base::DoubleToString(SkColorGetA(color) / 255.0).c_str());
+}
+
+GURL DevToolsWindow::GetDevToolsUrl() {
+ ThemeService* tp = ThemeServiceFactory::GetForProfile(profile_);
+ CHECK(tp);
+
+ SkColor color_toolbar =
+ tp->GetColor(ThemeService::COLOR_TOOLBAR);
+ SkColor color_tab_text =
+ tp->GetColor(ThemeService::COLOR_BOOKMARK_TEXT);
+
+ std::string url_string = StringPrintf(
+ "%sdevtools.html?docked=%s&toolbarColor=%s&textColor=%s%s",
+ chrome::kChromeUIDevToolsURL,
+ docked_ ? "true" : "false",
+ SkColorToRGBAString(color_toolbar).c_str(),
+ SkColorToRGBAString(color_tab_text).c_str(),
+ shared_worker_frontend_ ? "&isSharedWorker=true" : "");
+ return GURL(url_string);
+}
+
+void DevToolsWindow::UpdateTheme() {
+ ThemeService* tp = ThemeServiceFactory::GetForProfile(profile_);
+ CHECK(tp);
+
+ SkColor color_toolbar =
+ tp->GetColor(ThemeService::COLOR_TOOLBAR);
+ SkColor color_tab_text =
+ tp->GetColor(ThemeService::COLOR_BOOKMARK_TEXT);
+ std::string command = StringPrintf(
+ "WebInspector.setToolbarColors(\"%s\", \"%s\")",
+ SkColorToRGBAString(color_toolbar).c_str(),
+ SkColorToRGBAString(color_tab_text).c_str());
+ tab_contents_->render_view_host()->
+ ExecuteJavascriptInWebFrame(string16(), UTF8ToUTF16(command));
+}
+
+void DevToolsWindow::AddNewContents(TabContents* source,
+ TabContents* new_contents,
+ WindowOpenDisposition disposition,
+ const gfx::Rect& initial_pos,
+ bool user_gesture) {
+ if (inspected_tab_) {
+ inspected_tab_->tab_contents()->delegate()->AddNewContents(
+ source, new_contents, disposition, initial_pos, user_gesture);
+ }
+}
+
+bool DevToolsWindow::CanReloadContents(TabContents* source) const {
+ return false;
+}
+
+bool DevToolsWindow::PreHandleKeyboardEvent(
+ const NativeWebKeyboardEvent& event, bool* is_keyboard_shortcut) {
+ if (docked_) {
+ BrowserWindow* inspected_window = GetInspectedBrowserWindow();
+ if (inspected_window)
+ return inspected_window->PreHandleKeyboardEvent(
+ event, is_keyboard_shortcut);
+ }
+ return false;
+}
+
+void DevToolsWindow::HandleKeyboardEvent(const NativeWebKeyboardEvent& event) {
+ if (docked_) {
+ if (event.windowsKeyCode == 0x08) {
+ // Do not navigate back in history on Windows (http://crbug.com/74156).
+ return;
+ }
+ BrowserWindow* inspected_window = GetInspectedBrowserWindow();
+ if (inspected_window)
+ inspected_window->HandleKeyboardEvent(event);
+ }
+}
+
+// static
+DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow(
+ RenderViewHost* inspected_rvh,
+ bool force_open,
+ DevToolsToggleAction action) {
+ DevToolsManager* manager = DevToolsManager::GetInstance();
+
+ DevToolsClientHost* host = manager->GetDevToolsClientHostFor(inspected_rvh);
+ DevToolsWindow* window = AsDevToolsWindow(host);
+ if (host != NULL && window == NULL) {
+ // Break remote debugging / extension debugging session.
+ manager->UnregisterDevToolsClientHostFor(inspected_rvh);
+ }
+
+ bool do_open = force_open;
+ if (!window) {
+ Profile* profile = inspected_rvh->process()->profile();
+ bool docked = profile->GetPrefs()->GetBoolean(prefs::kDevToolsOpenDocked);
+ window = new DevToolsWindow(profile, inspected_rvh, docked, false);
+ manager->RegisterDevToolsClientHostFor(inspected_rvh, window);
+ do_open = true;
+ }
+
+ // 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)
+ window->Show(action);
+ else
+ manager->UnregisterDevToolsClientHostFor(inspected_rvh);
+
+ return window;
+}
+
+// static
+DevToolsWindow* DevToolsWindow::AsDevToolsWindow(
+ DevToolsClientHost* client_host) {
+ if (!client_host)
+ return NULL;
+ if (client_host->GetClientRenderViewHost() != NULL)
+ return static_cast<DevToolsWindow*>(client_host);
+ return NULL;
+}
+
+content::JavaScriptDialogCreator* DevToolsWindow::GetJavaScriptDialogCreator() {
+ if (inspected_tab_ && inspected_tab_->tab_contents()->delegate()) {
+ return inspected_tab_->tab_contents()->delegate()->
+ GetJavaScriptDialogCreator();
+ }
+ return TabContentsDelegate::GetJavaScriptDialogCreator();
+}
diff --git a/chrome/browser/debugger/devtools_window.h b/chrome/browser/debugger/devtools_window.h
new file mode 100644
index 0000000..5daac3d
--- /dev/null
+++ b/chrome/browser/debugger/devtools_window.h
@@ -0,0 +1,129 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_DEBUGGER_DEVTOOLS_WINDOW_H_
+#define CHROME_BROWSER_DEBUGGER_DEVTOOLS_WINDOW_H_
+#pragma once
+
+#include <string>
+#include <vector>
+
+#include "base/basictypes.h"
+#include "chrome/browser/debugger/devtools_toggle_action.h"
+#include "content/browser/debugger/devtools_client_host.h"
+#include "content/browser/tab_contents/tab_contents_delegate.h"
+#include "content/common/notification_observer.h"
+#include "content/common/notification_registrar.h"
+
+namespace IPC {
+class Message;
+}
+
+class Browser;
+class BrowserWindow;
+class PrefService;
+class Profile;
+class RenderViewHost;
+class TabContentsWrapper;
+
+namespace base {
+class Value;
+}
+
+class DevToolsWindow
+ : public DevToolsClientHost,
+ public NotificationObserver,
+ public TabContentsDelegate {
+ public:
+ static const char kDevToolsApp[];
+ static void RegisterUserPrefs(PrefService* prefs);
+ static TabContentsWrapper* GetDevToolsContents(TabContents* inspected_tab);
+ static DevToolsWindow* FindDevToolsWindow(RenderViewHost* window_rvh);
+
+ static DevToolsWindow* CreateDevToolsWindowForWorker(Profile* profile);
+ static DevToolsWindow* OpenDevToolsWindow(RenderViewHost* inspected_rvh);
+ static DevToolsWindow* ToggleDevToolsWindow(RenderViewHost* inspected_rvh,
+ DevToolsToggleAction action);
+ static void InspectElement(RenderViewHost* inspected_rvh, int x, int y);
+
+ virtual ~DevToolsWindow();
+
+ // Overridden from DevToolsClientHost.
+ virtual void SendMessageToClient(const IPC::Message& message);
+ virtual void InspectedTabClosing();
+ virtual void TabReplaced(TabContents* new_tab);
+ virtual RenderViewHost* GetClientRenderViewHost();
+ void Activate();
+ void SetDocked(bool docked);
+ void Close();
+ virtual void SaveAs(const std::string& suggested_file_name,
+ const std::string& content);
+ RenderViewHost* GetRenderViewHost();
+
+ void Show(DevToolsToggleAction action);
+
+ TabContentsWrapper* tab_contents() { return tab_contents_; }
+ Browser* browser() { return browser_; } // For tests.
+ bool is_docked() { return docked_; }
+
+ private:
+ DevToolsWindow(Profile* profile, RenderViewHost* inspected_rvh, bool docked,
+ bool shared_worker_frontend);
+
+ void CreateDevToolsBrowser();
+ bool FindInspectedBrowserAndTabIndex(Browser**, int* tab);
+ BrowserWindow* GetInspectedBrowserWindow();
+ bool IsInspectedBrowserPopupOrPanel();
+ void UpdateFrontendAttachedState();
+
+ // Overridden from NotificationObserver.
+ virtual void Observe(int type,
+ const NotificationSource& source,
+ const NotificationDetails& details);
+
+ void ScheduleAction(DevToolsToggleAction action);
+ void DoAction();
+ GURL GetDevToolsUrl();
+ void UpdateTheme();
+ void AddDevToolsExtensionsToClient();
+ void CallClientFunction(const string16& function_name,
+ const base::Value& arg);
+ // Overridden from TabContentsDelegate.
+ virtual void OpenURLFromTab(TabContents* source,
+ const GURL& url,
+ const GURL& referrer,
+ WindowOpenDisposition disposition,
+ PageTransition::Type transition);
+ virtual void AddNewContents(TabContents* source,
+ TabContents* new_contents,
+ WindowOpenDisposition disposition,
+ const gfx::Rect& initial_pos,
+ bool user_gesture);
+ virtual void CloseContents(TabContents* source) {}
+ virtual bool CanReloadContents(TabContents* source) const;
+ virtual bool PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event,
+ bool* is_keyboard_shortcut);
+ virtual void HandleKeyboardEvent(const NativeWebKeyboardEvent& event);
+ virtual content::JavaScriptDialogCreator* GetJavaScriptDialogCreator();
+
+ virtual void FrameNavigating(const std::string& url) {}
+
+ static DevToolsWindow* ToggleDevToolsWindow(RenderViewHost* inspected_rvh,
+ bool force_open,
+ DevToolsToggleAction action);
+ static DevToolsWindow* AsDevToolsWindow(DevToolsClientHost*);
+
+ Profile* profile_;
+ TabContentsWrapper* inspected_tab_;
+ TabContentsWrapper* tab_contents_;
+ Browser* browser_;
+ bool docked_;
+ bool is_loaded_;
+ DevToolsToggleAction action_on_load_;
+ const bool shared_worker_frontend_;
+ NotificationRegistrar registrar_;
+ DISALLOW_COPY_AND_ASSIGN(DevToolsWindow);
+};
+
+#endif // CHROME_BROWSER_DEBUGGER_DEVTOOLS_WINDOW_H_
diff --git a/chrome/browser/extensions/extension_debugger_api.cc b/chrome/browser/extensions/extension_debugger_api.cc
index c087336..3a694cb 100644
--- a/chrome/browser/extensions/extension_debugger_api.cc
+++ b/chrome/browser/extensions/extension_debugger_api.cc
@@ -49,7 +49,7 @@ class ExtensionDevToolsClientHost : public DevToolsClientHost,
// DevToolsClientHost interface
virtual void InspectedTabClosing();
virtual void SendMessageToClient(const IPC::Message& msg);
- virtual void TabReplaced(TabContentsWrapper* tab_contents);
+ virtual void TabReplaced(TabContents* tab_contents);
virtual void FrameNavigating(const std::string& url) {}
private:
@@ -166,8 +166,8 @@ void ExtensionDevToolsClientHost::SendMessageToClient(
}
void ExtensionDevToolsClientHost::TabReplaced(
- TabContentsWrapper* tab_contents) {
- tab_contents_ = tab_contents->tab_contents();
+ TabContents* tab_contents) {
+ tab_contents_ = tab_contents;
}
void ExtensionDevToolsClientHost::Close() {
diff --git a/chrome/browser/extensions/extension_devtools_bridge.cc b/chrome/browser/extensions/extension_devtools_bridge.cc
index a6740be..2233777 100644
--- a/chrome/browser/extensions/extension_devtools_bridge.cc
+++ b/chrome/browser/extensions/extension_devtools_bridge.cc
@@ -118,8 +118,7 @@ void ExtensionDevToolsBridge::SendMessageToClient(const IPC::Message& msg) {
IPC_END_MESSAGE_MAP()
}
-void ExtensionDevToolsBridge::TabReplaced(TabContentsWrapper* new_tab) {
- DCHECK_EQ(profile_, new_tab->profile());
+void ExtensionDevToolsBridge::TabReplaced(TabContents* new_tab) {
// We don't update the tab id as it needs to remain the same so that we can
// properly unregister.
}
diff --git a/chrome/browser/extensions/extension_devtools_bridge.h b/chrome/browser/extensions/extension_devtools_bridge.h
index 983a9d2..6f9115d 100644
--- a/chrome/browser/extensions/extension_devtools_bridge.h
+++ b/chrome/browser/extensions/extension_devtools_bridge.h
@@ -31,7 +31,7 @@ class ExtensionDevToolsBridge : public DevToolsClientHost {
// DevToolsClientHost, called to send a message to this host.
virtual void SendMessageToClient(const IPC::Message& msg);
- virtual void TabReplaced(TabContentsWrapper* new_tab);
+ virtual void TabReplaced(TabContents* new_tab);
private:
void OnDispatchOnInspectorFrontend(const std::string& data);
diff --git a/chrome/browser/extensions/extensions_ui.cc b/chrome/browser/extensions/extensions_ui.cc
index 31c946c..8eb68c8 100644
--- a/chrome/browser/extensions/extensions_ui.cc
+++ b/chrome/browser/extensions/extensions_ui.cc
@@ -15,6 +15,7 @@
#include "base/threading/thread.h"
#include "base/utf_string_conversions.h"
#include "base/version.h"
+#include "chrome/browser/debugger/devtools_window.h"
#include "chrome/browser/extensions/crx_installer.h"
#include "chrome/browser/extensions/extension_disabled_infobar_delegate.h"
#include "chrome/browser/extensions/extension_error_reporter.h"
@@ -37,7 +38,6 @@
#include "chrome/common/jstemplate_builder.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/url_constants.h"
-#include "content/browser/debugger/devtools_window.h"
#include "content/browser/renderer_host/render_process_host.h"
#include "content/browser/renderer_host/render_view_host.h"
#include "content/browser/renderer_host/render_widget_host.h"
diff --git a/chrome/browser/external_tab_container_win.cc b/chrome/browser/external_tab_container_win.cc
index c8a7187..24d3590 100644
--- a/chrome/browser/external_tab_container_win.cc
+++ b/chrome/browser/external_tab_container_win.cc
@@ -14,6 +14,8 @@
#include "chrome/app/chrome_command_ids.h"
#include "chrome/app/chrome_dll_resource.h"
#include "chrome/browser/automation/automation_provider.h"
+#include "chrome/browser/debugger/devtools_toggle_action.h"
+#include "chrome/browser/debugger/devtools_window.h"
#include "chrome/browser/google/google_util.h"
#include "chrome/browser/history/history_types.h"
#include "chrome/browser/history/history_tab_helper.h"
@@ -34,8 +36,6 @@
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/render_messages.h"
#include "chrome/common/url_constants.h"
-#include "content/browser/debugger/devtools_toggle_action.h"
-#include "content/browser/debugger/devtools_window.h"
#include "content/browser/load_notification_details.h"
#include "content/browser/renderer_host/render_process_host.h"
#include "content/browser/renderer_host/render_view_host.h"
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index 3c78aef..fbaa81c 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -13,6 +13,7 @@
#include "chrome/browser/browser_shutdown.h"
#include "chrome/browser/content_settings/host_content_settings_map.h"
#include "chrome/browser/custom_handlers/protocol_handler_registry.h"
+#include "chrome/browser/debugger/devtools_window.h"
#include "chrome/browser/download/download_prefs.h"
#include "chrome/browser/extensions/apps_promo.h"
#include "chrome/browser/extensions/extension_prefs.h"
@@ -57,7 +58,6 @@
#include "chrome/browser/upgrade_detector.h"
#include "chrome/browser/web_resource/promo_resource_service.h"
#include "chrome/common/pref_names.h"
-#include "content/browser/debugger/devtools_manager.h"
#include "content/browser/host_zoom_map.h"
#include "content/browser/renderer_host/browser_render_process_host.h"
#include "content/browser/ssl/ssl_manager.h"
@@ -151,7 +151,7 @@ void RegisterUserPrefs(PrefService* user_prefs) {
ProfileImpl::RegisterUserPrefs(user_prefs);
PromoResourceService::RegisterUserPrefs(user_prefs);
HostContentSettingsMap::RegisterUserPrefs(user_prefs);
- DevToolsManager::RegisterUserPrefs(user_prefs);
+ DevToolsWindow::RegisterUserPrefs(user_prefs);
PinnedTabCodec::RegisterUserPrefs(user_prefs);
ExtensionPrefs::RegisterUserPrefs(user_prefs);
GeolocationContentSettingsMap::RegisterUserPrefs(user_prefs);
diff --git a/chrome/browser/printing/print_dialog_cloud.cc b/chrome/browser/printing/print_dialog_cloud.cc
index edd9881..95787ef 100644
--- a/chrome/browser/printing/print_dialog_cloud.cc
+++ b/chrome/browser/printing/print_dialog_cloud.cc
@@ -11,6 +11,7 @@
#include "base/json/json_reader.h"
#include "base/utf_string_conversions.h"
#include "base/values.h"
+#include "chrome/browser/debugger/devtools_window.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/printing/cloud_print/cloud_print_url.h"
#include "chrome/browser/profiles/profile.h"
@@ -22,7 +23,6 @@
#include "chrome/common/print_messages.h"
#include "chrome/common/url_constants.h"
#include "content/browser/browser_thread.h"
-#include "content/browser/debugger/devtools_window.h"
#include "content/browser/renderer_host/render_view_host.h"
#include "content/browser/tab_contents/tab_contents.h"
#include "content/browser/tab_contents/tab_contents_view.h"
diff --git a/chrome/browser/renderer_host/render_process_host_chrome_browsertest.cc b/chrome/browser/renderer_host/render_process_host_chrome_browsertest.cc
index 3673e37..1aca87a 100644
--- a/chrome/browser/renderer_host/render_process_host_chrome_browsertest.cc
+++ b/chrome/browser/renderer_host/render_process_host_chrome_browsertest.cc
@@ -5,11 +5,11 @@
#include "content/browser/renderer_host/render_process_host_browsertest.h"
#include "base/command_line.h"
+#include "chrome/browser/debugger/devtools_window.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/url_constants.h"
#include "chrome/test/ui_test_utils.h"
-#include "content/browser/debugger/devtools_window.h"
#include "content/browser/renderer_host/render_process_host.h"
#include "content/browser/renderer_host/render_view_host.h"
#include "content/browser/renderer_host/render_view_host_delegate.h"
diff --git a/chrome/browser/tab_contents/render_view_context_menu.cc b/chrome/browser/tab_contents/render_view_context_menu.cc
index 3cbbcea..bb0177f 100644
--- a/chrome/browser/tab_contents/render_view_context_menu.cc
+++ b/chrome/browser/tab_contents/render_view_context_menu.cc
@@ -19,6 +19,7 @@
#include "chrome/browser/autocomplete/autocomplete_edit.h"
#include "chrome/browser/autocomplete/autocomplete_match.h"
#include "chrome/browser/browser_process.h"
+#include "chrome/browser/debugger/devtools_window.h"
#include "chrome/browser/download/download_manager.h"
#include "chrome/browser/download/download_util.h"
#include "chrome/browser/extensions/extension_event_router.h"
@@ -49,7 +50,6 @@
#include "chrome/common/spellcheck_messages.h"
#include "chrome/common/url_constants.h"
#include "content/browser/child_process_security_policy.h"
-#include "content/browser/debugger/devtools_window.h"
#include "content/browser/download/save_package.h"
#include "content/browser/renderer_host/render_view_host.h"
#include "content/browser/renderer_host/render_widget_host_view.h"
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
index 34c7cdd..be90b94 100644
--- a/chrome/browser/ui/browser.cc
+++ b/chrome/browser/ui/browser.cc
@@ -31,6 +31,8 @@
#include "chrome/browser/browser_process.h"
#include "chrome/browser/browser_shutdown.h"
#include "chrome/browser/character_encoding.h"
+#include "chrome/browser/debugger/devtools_toggle_action.h"
+#include "chrome/browser/debugger/devtools_window.h"
#include "chrome/browser/download/download_item.h"
#include "chrome/browser/download/download_item_model.h"
#include "chrome/browser/download/download_manager.h"
@@ -107,8 +109,6 @@
#include "chrome/common/web_apps.h"
#include "content/browser/browser_url_handler.h"
#include "content/browser/debugger/devtools_manager.h"
-#include "content/browser/debugger/devtools_toggle_action.h"
-#include "content/browser/debugger/devtools_window.h"
#include "content/browser/download/save_package.h"
#include "content/browser/host_zoom_map.h"
#include "content/browser/renderer_host/render_view_host.h"
@@ -2997,7 +2997,8 @@ void Browser::TabReplacedAt(TabStripModel* tab_strip_model,
DevToolsManager* devtools_manager = DevToolsManager::GetInstance();
if (devtools_manager) // NULL in unit tests.
- devtools_manager->TabReplaced(old_contents, new_contents);
+ devtools_manager->TabReplaced(old_contents->tab_contents(),
+ new_contents->tab_contents());
}
void Browser::TabPinnedStateChanged(TabContentsWrapper* contents, int index) {
diff --git a/chrome/browser/ui/browser.h b/chrome/browser/ui/browser.h
index b4c98c9..e06f848 100644
--- a/chrome/browser/ui/browser.h
+++ b/chrome/browser/ui/browser.h
@@ -18,6 +18,7 @@
#include "base/string16.h"
#include "base/task.h"
#include "chrome/browser/command_updater.h"
+#include "chrome/browser/debugger/devtools_toggle_action.h"
#include "chrome/browser/instant/instant_delegate.h"
#include "chrome/browser/prefs/pref_member.h"
#include "chrome/browser/prefs/pref_change_registrar.h"
@@ -37,7 +38,6 @@
#include "chrome/browser/ui/toolbar/toolbar_model.h"
#include "chrome/common/content_settings_types.h"
#include "chrome/common/extensions/extension_constants.h"
-#include "content/browser/debugger/devtools_toggle_action.h"
#include "content/browser/tab_contents/page_navigator.h"
#include "content/browser/tab_contents/tab_contents_delegate.h"
#include "content/common/notification_registrar.h"
diff --git a/chrome/browser/ui/cocoa/dev_tools_controller.mm b/chrome/browser/ui/cocoa/dev_tools_controller.mm
index 59fe8ba..838d9fe 100644
--- a/chrome/browser/ui/cocoa/dev_tools_controller.mm
+++ b/chrome/browser/ui/cocoa/dev_tools_controller.mm
@@ -9,12 +9,12 @@
#include <Cocoa/Cocoa.h>
#include "chrome/browser/browser_process.h"
+#include "chrome/browser/debugger/devtools_window.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
#import "chrome/browser/ui/cocoa/view_id_util.h"
#include "chrome/common/pref_names.h"
-#include "content/browser/debugger/devtools_window.h"
#include "content/browser/tab_contents/tab_contents.h"
namespace {
diff --git a/chrome/browser/ui/cocoa/extensions/extension_popup_controller.mm b/chrome/browser/ui/cocoa/extensions/extension_popup_controller.mm
index 9d44e3b..85bee4f 100644
--- a/chrome/browser/ui/cocoa/extensions/extension_popup_controller.mm
+++ b/chrome/browser/ui/cocoa/extensions/extension_popup_controller.mm
@@ -6,6 +6,7 @@
#include <algorithm>
+#include "chrome/browser/debugger/devtools_window.h"
#include "chrome/browser/extensions/extension_host.h"
#include "chrome/browser/extensions/extension_process_manager.h"
#include "chrome/browser/profiles/profile.h"
@@ -14,7 +15,6 @@
#import "chrome/browser/ui/cocoa/extensions/extension_view_mac.h"
#import "chrome/browser/ui/cocoa/info_bubble_window.h"
#include "chrome/common/chrome_notification_types.h"
-#include "content/browser/debugger/devtools_window.h"
#include "content/common/notification_details.h"
#include "content/common/notification_registrar.h"
#include "content/common/notification_source.h"
diff --git a/chrome/browser/ui/cocoa/tabpose_window.mm b/chrome/browser/ui/cocoa/tabpose_window.mm
index e64e7d5..8448d24 100644
--- a/chrome/browser/ui/cocoa/tabpose_window.mm
+++ b/chrome/browser/ui/cocoa/tabpose_window.mm
@@ -14,6 +14,7 @@
#include "base/sys_string_conversions.h"
#include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/browser_process.h"
+#include "chrome/browser/debugger/devtools_window.h"
#include "chrome/browser/extensions/extension_tab_helper.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/profiles/profile.h"
@@ -29,7 +30,6 @@
#import "chrome/browser/ui/cocoa/tabs/tab_strip_model_observer_bridge.h"
#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
#include "chrome/common/pref_names.h"
-#import "content/browser/debugger/devtools_window.h"
#include "content/browser/renderer_host/backing_store_mac.h"
#include "content/browser/renderer_host/render_view_host.h"
#include "content/browser/tab_contents/tab_contents.h"
diff --git a/chrome/browser/ui/cocoa/tabs/tab_strip_controller.mm b/chrome/browser/ui/cocoa/tabs/tab_strip_controller.mm
index 3f375a5..27c1e20 100644
--- a/chrome/browser/ui/cocoa/tabs/tab_strip_controller.mm
+++ b/chrome/browser/ui/cocoa/tabs/tab_strip_controller.mm
@@ -16,6 +16,7 @@
#include "chrome/browser/autocomplete/autocomplete.h"
#include "chrome/browser/autocomplete/autocomplete_classifier.h"
#include "chrome/browser/autocomplete/autocomplete_match.h"
+#include "chrome/browser/debugger/devtools_window.h"
#include "chrome/browser/extensions/extension_tab_helper.h"
#include "chrome/browser/favicon/favicon_tab_helper.h"
#include "chrome/browser/net/url_fixer_upper.h"
@@ -47,7 +48,6 @@
#include "chrome/browser/ui/tabs/tab_menu_model.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/pref_names.h"
-#include "content/browser/debugger/devtools_window.h"
#include "content/browser/tab_contents/navigation_controller.h"
#include "content/browser/tab_contents/navigation_entry.h"
#include "content/browser/tab_contents/tab_contents.h"
diff --git a/chrome/browser/ui/gtk/browser_window_gtk.cc b/chrome/browser/ui/gtk/browser_window_gtk.cc
index 6b770a5..38fe1b3 100644
--- a/chrome/browser/ui/gtk/browser_window_gtk.cc
+++ b/chrome/browser/ui/gtk/browser_window_gtk.cc
@@ -25,6 +25,7 @@
#include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/bookmarks/bookmark_utils.h"
#include "chrome/browser/browser_process.h"
+#include "chrome/browser/debugger/devtools_window.h"
#include "chrome/browser/download/download_item_model.h"
#include "chrome/browser/download/download_manager.h"
#include "chrome/browser/page_info_window.h"
@@ -78,7 +79,6 @@
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/pref_names.h"
-#include "content/browser/debugger/devtools_window.h"
#include "content/browser/renderer_host/render_view_host.h"
#include "content/browser/renderer_host/render_widget_host_view.h"
#include "content/browser/tab_contents/tab_contents.h"
diff --git a/chrome/browser/ui/gtk/extensions/extension_popup_gtk.cc b/chrome/browser/ui/gtk/extensions/extension_popup_gtk.cc
index 556f3eb..ac258d7 100644
--- a/chrome/browser/ui/gtk/extensions/extension_popup_gtk.cc
+++ b/chrome/browser/ui/gtk/extensions/extension_popup_gtk.cc
@@ -10,6 +10,7 @@
#include "base/i18n/rtl.h"
#include "base/message_loop.h"
+#include "chrome/browser/debugger/devtools_window.h"
#include "chrome/browser/extensions/extension_host.h"
#include "chrome/browser/extensions/extension_process_manager.h"
#include "chrome/browser/profiles/profile.h"
@@ -17,7 +18,6 @@
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/gtk/gtk_theme_service.h"
-#include "content/browser/debugger/devtools_window.h"
#include "chrome/common/chrome_notification_types.h"
#include "content/browser/renderer_host/render_view_host.h"
#include "content/common/notification_details.h"
diff --git a/chrome/browser/ui/views/extensions/extension_popup.cc b/chrome/browser/ui/views/extensions/extension_popup.cc
index 8c87527..9d1a5ad 100644
--- a/chrome/browser/ui/views/extensions/extension_popup.cc
+++ b/chrome/browser/ui/views/extensions/extension_popup.cc
@@ -6,6 +6,7 @@
#include <vector>
+#include "chrome/browser/debugger/devtools_window.h"
#include "chrome/browser/extensions/extension_host.h"
#include "chrome/browser/extensions/extension_process_manager.h"
#include "chrome/browser/profiles/profile.h"
@@ -14,7 +15,6 @@
#include "chrome/browser/ui/views/frame/browser_view.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/extensions/extension.h"
-#include "content/browser/debugger/devtools_window.h"
#include "content/browser/renderer_host/render_view_host.h"
#include "content/browser/renderer_host/render_widget_host_view.h"
#include "content/common/notification_details.h"
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index 4e852a1..34959c3 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -21,6 +21,7 @@
#include "chrome/browser/automation/ui_controls.h"
#include "chrome/browser/bookmarks/bookmark_utils.h"
#include "chrome/browser/browser_process.h"
+#include "chrome/browser/debugger/devtools_window.h"
#include "chrome/browser/download/download_manager.h"
#include "chrome/browser/extensions/extension_tab_helper.h"
#include "chrome/browser/extensions/extension_tts_api.h"
@@ -75,7 +76,6 @@
#include "chrome/common/native_window_notification_source.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/url_constants.h"
-#include "content/browser/debugger/devtools_window.h"
#include "content/browser/renderer_host/render_view_host.h"
#include "content/browser/renderer_host/render_widget_host_view.h"
#include "content/browser/tab_contents/tab_contents.h"
diff --git a/chrome/chrome.gyp b/chrome/chrome.gyp
index eaf8c7a..9990fef 100644
--- a/chrome/chrome.gyp
+++ b/chrome/chrome.gyp
@@ -453,8 +453,8 @@
'../content/browser/debugger/debugger_remote_service.h',
'../content/browser/debugger/devtools_client_host.cc',
'../content/browser/debugger/devtools_client_host.h',
- '../content/browser/debugger/devtools_file_util.cc',
- '../content/browser/debugger/devtools_file_util.h',
+ '../content/browser/debugger/devtools_handler.cc',
+ '../content/browser/debugger/devtools_handler.h',
'../content/browser/debugger/devtools_http_protocol_handler.cc',
'../content/browser/debugger/devtools_http_protocol_handler.h',
'../content/browser/debugger/devtools_manager.cc',
@@ -470,11 +470,6 @@
'../content/browser/debugger/devtools_remote_message.h',
'../content/browser/debugger/devtools_remote_service.cc',
'../content/browser/debugger/devtools_remote_service.h',
- '../content/browser/debugger/devtools_handler.cc',
- '../content/browser/debugger/devtools_handler.h',
- '../content/browser/debugger/devtools_toggle_action.h',
- '../content/browser/debugger/devtools_window.cc',
- '../content/browser/debugger/devtools_window.h',
'../content/browser/debugger/extension_ports_remote_service.cc',
'../content/browser/debugger/extension_ports_remote_service.h',
'../content/browser/debugger/inspectable_tab_proxy.cc',
@@ -483,6 +478,11 @@
'../content/browser/debugger/worker_devtools_manager_io.h',
'../content/browser/debugger/worker_devtools_message_filter.cc',
'../content/browser/debugger/worker_devtools_message_filter.h',
+ 'browser/debugger/devtools_file_util.cc',
+ 'browser/debugger/devtools_file_util.h',
+ 'browser/debugger/devtools_toggle_action.h',
+ 'browser/debugger/devtools_window.cc',
+ 'browser/debugger/devtools_window.h',
],
'conditions': [
['toolkit_uses_gtk == 1', {