diff options
Diffstat (limited to 'chrome')
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', { |