summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryurys@google.com <yurys@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-16 13:42:47 +0000
committeryurys@google.com <yurys@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-16 13:42:47 +0000
commit40ecc904994be903e4a24d26650739275e5f0f4b (patch)
tree643f495251032ba20b9d66cc151e03d21017593c
parentb92626f5fba89d0996abfa8955e49e8d88587869 (diff)
downloadchromium_src-40ecc904994be903e4a24d26650739275e5f0f4b.zip
chromium_src-40ecc904994be903e4a24d26650739275e5f0f4b.tar.gz
chromium_src-40ecc904994be903e4a24d26650739275e5f0f4b.tar.bz2
DevToolsManager is a service in the browser process that manages all open developer tools windows. It's supposed to route devtoools messages. Also it will notify DevToolsClient when inspected renderer crashes or when it's changes due to cross-site navigation. Currently when inspected tab is closed it will close devtools window as well.
Devtools state moved from RenderViewHost and WebContentsView to the manager. Please look at devtools_manager.{h,cc} in the first place. Review URL: http://codereview.chromium.org/42076 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11727 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/browser.cc3
-rw-r--r--chrome/browser/browser_process.h2
-rw-r--r--chrome/browser/browser_process_impl.cc8
-rw-r--r--chrome/browser/browser_process_impl.h11
-rw-r--r--chrome/browser/debugger/debugger.scons22
-rw-r--r--chrome/browser/debugger/debugger.vcproj20
-rw-r--r--chrome/browser/debugger/dev_tools_window.cc52
-rw-r--r--chrome/browser/debugger/dev_tools_window.h45
-rw-r--r--chrome/browser/debugger/devtools_manager.cc202
-rw-r--r--chrome/browser/debugger/devtools_manager.h102
-rw-r--r--chrome/browser/debugger/devtools_view.cc (renamed from chrome/browser/debugger/dev_tools_view.cc)26
-rw-r--r--chrome/browser/debugger/devtools_view.h (renamed from chrome/browser/debugger/dev_tools_view.h)17
-rw-r--r--chrome/browser/debugger/devtools_window.h28
-rw-r--r--chrome/browser/debugger/devtools_window_gtk.cc13
-rw-r--r--chrome/browser/debugger/devtools_window_mac.cc13
-rw-r--r--chrome/browser/debugger/devtools_window_win.cc70
-rw-r--r--chrome/browser/debugger/devtools_window_win.h44
-rw-r--r--chrome/browser/renderer_host/render_view_host.cc23
-rw-r--r--chrome/browser/renderer_host/render_view_host.h11
-rw-r--r--chrome/browser/renderer_host/render_view_host_delegate.h5
-rw-r--r--chrome/browser/tab_contents/interstitial_page.cc6
-rw-r--r--chrome/browser/tab_contents/web_contents_view.h7
-rw-r--r--chrome/browser/tab_contents/web_contents_view_gtk.cc9
-rw-r--r--chrome/browser/tab_contents/web_contents_view_gtk.h2
-rw-r--r--chrome/browser/tab_contents/web_contents_view_mac.h2
-rw-r--r--chrome/browser/tab_contents/web_contents_view_mac.mm9
-rw-r--r--chrome/browser/tab_contents/web_contents_view_win.cc21
-rw-r--r--chrome/browser/tab_contents/web_contents_view_win.h6
-rw-r--r--chrome/chrome.gyp20
-rw-r--r--chrome/test/testing_browser_process.h4
30 files changed, 561 insertions, 242 deletions
diff --git a/chrome/browser/browser.cc b/chrome/browser/browser.cc
index 452e94d..baf46a6 100644
--- a/chrome/browser/browser.cc
+++ b/chrome/browser/browser.cc
@@ -14,6 +14,7 @@
#include "chrome/browser/browser_shutdown.h"
#include "chrome/browser/browser_window.h"
#include "chrome/browser/character_encoding.h"
+#include "chrome/browser/debugger/devtools_manager.h"
#include "chrome/browser/dom_ui/downloads_ui.h"
#include "chrome/browser/dom_ui/history_ui.h"
#include "chrome/browser/dom_ui/new_tab_ui.h"
@@ -941,7 +942,7 @@ void Browser::OpenDebuggerWindow() {
if (CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableOutOfProcessDevTools)) {
WebContents* wc = current_tab->AsWebContents();
- wc->view()->OpenDeveloperTools();
+ g_browser_process->devtools_manager()->ShowDevToolsForWebContents(wc);
} else {
// Only one debugger instance can exist at a time right now.
// TODO(erikkay): need an alert, dialog, something
diff --git a/chrome/browser/browser_process.h b/chrome/browser/browser_process.h
index 6eee7a7..d5758f0 100644
--- a/chrome/browser/browser_process.h
+++ b/chrome/browser/browser_process.h
@@ -17,6 +17,7 @@
class AutomationProviderList;
class ClipboardService;
+class DevToolsManager;
class DownloadRequestManager;
class GoogleURLTracker;
class IconManager;
@@ -77,6 +78,7 @@ class BrowserProcess {
virtual ProfileManager* profile_manager() = 0;
virtual PrefService* local_state() = 0;
virtual DebuggerWrapper* debugger_wrapper() = 0;
+ virtual DevToolsManager* devtools_manager() = 0;
virtual ClipboardService* clipboard_service() = 0;
// Returns the thread that we perform I/O coordination on (network requests,
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc
index 4730c93..d11ae1d 100644
--- a/chrome/browser/browser_process_impl.cc
+++ b/chrome/browser/browser_process_impl.cc
@@ -11,6 +11,7 @@
#include "chrome/browser/browser_trial.h"
#include "chrome/browser/chrome_thread.h"
#include "chrome/browser/debugger/debugger_wrapper.h"
+#include "chrome/browser/debugger/devtools_manager.h"
#include "chrome/browser/download/download_file.h"
#include "chrome/browser/download/save_file_manager.h"
#include "chrome/browser/google_url_tracker.h"
@@ -105,6 +106,7 @@ BrowserProcessImpl::BrowserProcessImpl(const CommandLine& command_line)
broker_services_(NULL),
created_icon_manager_(false),
created_debugger_wrapper_(false),
+ created_devtools_manager_(false),
module_ref_count_(0),
memory_model_(MEDIUM_MEMORY_MODEL),
checked_for_new_frames_(false),
@@ -358,6 +360,12 @@ void BrowserProcessImpl::CreateDebuggerWrapper(int port) {
debugger_wrapper_ = new DebuggerWrapper(port);
}
+void BrowserProcessImpl::CreateDevToolsManager() {
+ DCHECK(!devtools_manager_.get());
+ created_devtools_manager_ = true;
+ devtools_manager_.reset(new DevToolsManager());
+}
+
void BrowserProcessImpl::CreateAcceleratorHandler() {
#if defined(OS_WIN)
DCHECK(accelerator_handler_.get() == NULL);
diff --git a/chrome/browser/browser_process_impl.h b/chrome/browser/browser_process_impl.h
index 882b890..313abad 100644
--- a/chrome/browser/browser_process_impl.h
+++ b/chrome/browser/browser_process_impl.h
@@ -102,6 +102,13 @@ class BrowserProcessImpl : public BrowserProcess, public NonThreadSafe {
return debugger_wrapper_.get();
}
+ virtual DevToolsManager* devtools_manager() {
+ DCHECK(CalledOnValidThread());
+ if (!created_devtools_manager_)
+ CreateDevToolsManager();
+ return devtools_manager_.get();
+ }
+
virtual ClipboardService* clipboard_service() {
DCHECK(CalledOnValidThread());
return clipboard_service_.get();
@@ -191,6 +198,7 @@ class BrowserProcessImpl : public BrowserProcess, public NonThreadSafe {
void CreateViewedPageTracker();
void CreateIconManager();
void CreateDebuggerWrapper(int port);
+ void CreateDevToolsManager();
void CreateAcceleratorHandler();
void CreateGoogleURLTracker();
@@ -226,6 +234,9 @@ class BrowserProcessImpl : public BrowserProcess, public NonThreadSafe {
bool created_debugger_wrapper_;
scoped_refptr<DebuggerWrapper> debugger_wrapper_;
+ bool created_devtools_manager_;
+ scoped_ptr<DevToolsManager> devtools_manager_;
+
scoped_ptr<ClipboardService> clipboard_service_;
scoped_ptr<AutomationProviderList> automation_provider_list_;
diff --git a/chrome/browser/debugger/debugger.scons b/chrome/browser/debugger/debugger.scons
index 3b0cb2f..adcc4a7 100644
--- a/chrome/browser/debugger/debugger.scons
+++ b/chrome/browser/debugger/debugger.scons
@@ -53,10 +53,11 @@ input_files = ChromeFileList([
'debugger_window.h',
'debugger_wrapper.cc',
'debugger_wrapper.h',
- 'dev_tools_view.cc',
- 'dev_tools_view.h',
- 'dev_tools_window.cc',
- 'dev_tools_window.h',
+ 'devtools_manager.h',
+ 'devtools_manager.cc',
+ 'devtools_view.cc',
+ 'devtools_view.h',
+ 'devtools_window.h',
])
if env.Bit('linux'):
@@ -64,8 +65,10 @@ if env.Bit('linux'):
input_files.Remove(
'debugger_view.cc',
'debugger_window.cc',
- 'dev_tools_view.cc',
- 'dev_tools_window.cc',
+ 'devtools_view.cc',
+ )
+ input_files.Append(
+ 'devtools_window_gtk.cc',
)
if env.Bit('mac'):
@@ -76,10 +79,13 @@ if env.Bit('mac'):
'debugger_node.cc',
'debugger_view.cc',
'debugger_window.cc',
- 'dev_tools_view.cc',
- 'dev_tools_window.cc',
+ 'devtools_view.cc',
+ )
+ input_files.Append(
+ 'devtools_window_mac.cc',
)
+
if not env.Bit('mac'):
# TODO(port): Enable for Mac.
env.ChromeLibrary('debugger', input_files)
diff --git a/chrome/browser/debugger/debugger.vcproj b/chrome/browser/debugger/debugger.vcproj
index 3cd3e16..8fdb2f5 100644
--- a/chrome/browser/debugger/debugger.vcproj
+++ b/chrome/browser/debugger/debugger.vcproj
@@ -206,19 +206,31 @@
>
</File>
<File
- RelativePath=".\dev_tools_view.cc"
+ RelativePath=".\devtools_manager.cc"
>
</File>
<File
- RelativePath=".\dev_tools_view.h"
+ RelativePath=".\devtools_manager.h"
>
</File>
<File
- RelativePath=".\dev_tools_window.cc"
+ RelativePath=".\devtools_view.cc"
>
</File>
<File
- RelativePath=".\dev_tools_window.h"
+ RelativePath=".\devtools_view.h"
+ >
+ </File>
+ <File
+ RelativePath=".\devtools_window.h"
+ >
+ </File>
+ <File
+ RelativePath=".\devtools_window_win.cc"
+ >
+ </File>
+ <File
+ RelativePath=".\devtools_window_win.h"
>
</File>
</Files>
diff --git a/chrome/browser/debugger/dev_tools_window.cc b/chrome/browser/debugger/dev_tools_window.cc
deleted file mode 100644
index 9add6d0..0000000
--- a/chrome/browser/debugger/dev_tools_window.cc
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright (c) 2009 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/dev_tools_window.h"
-
-#include "chrome/browser/debugger/dev_tools_view.h"
-#include "chrome/views/window.h"
-
-DevToolsWindow::DevToolsWindow() : window_(NULL), tools_view_(NULL) {
-}
-
-DevToolsWindow::~DevToolsWindow() {
-}
-
-void DevToolsWindow::Show(int inspected_process_id,
- int inspected_view_id) {
- if (window_) {
- window_->Show();
- return;
- }
-
- tools_view_ = new DevToolsView(inspected_process_id, inspected_view_id);
- window_ = views::Window::CreateChromeWindow(NULL, gfx::Rect(), this);
- window_->Show();
-}
-
-void DevToolsWindow::SendDevToolsClientMessage(const IPC::Message& message) {
- if (!tools_view_)
- return;
- tools_view_->SendDevToolsClientMessage(message);
-}
-
-std::wstring DevToolsWindow::GetWindowTitle() const {
- return L"Developer Tools";
-}
-
-void DevToolsWindow::WindowClosing() {
- if (tools_view_) {
- tools_view_->OnWindowClosing();
- tools_view_ = NULL;
- window_ = NULL;
- }
-}
-
-bool DevToolsWindow::CanResize() const {
- return true;
-}
-
-views::View* DevToolsWindow::GetContentsView() {
- return tools_view_;
-}
diff --git a/chrome/browser/debugger/dev_tools_window.h b/chrome/browser/debugger/dev_tools_window.h
deleted file mode 100644
index d20a801..0000000
--- a/chrome/browser/debugger/dev_tools_window.h
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (c) 2009 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_DEV_TOOLS_WINDOW_H_
-#define CHROME_BROWSER_DEBUGGER_DEV_TOOLS_WINDOW_H_
-
-#include "base/basictypes.h"
-
-#include "chrome/views/window_delegate.h"
-
-namespace IPC {
-class Message;
-}
-namespace views {
-class Window;
-}
-class DevToolsView;
-class TabContents;
-
-class DevToolsWindow : public views::WindowDelegate {
- public:
- DevToolsWindow();
- virtual ~DevToolsWindow();
-
- // Show inspector window for the tab
- void Show(int inspected_process_id,
- int inspected_view_id);
-
- void SendDevToolsClientMessage(const IPC::Message& message);
-
- private:
- // views::WindowDelegate methods:
- virtual std::wstring GetWindowTitle() const;
- virtual void WindowClosing();
- virtual bool CanResize() const;
- virtual views::View* GetContentsView();
-
- views::Window* window_;
- DevToolsView* tools_view_;
-
- DISALLOW_COPY_AND_ASSIGN(DevToolsWindow);
-};
-
-#endif // CHROME_BROWSER_DEBUGGER_DEV_TOOLS_WINDOW_H_
diff --git a/chrome/browser/debugger/devtools_manager.cc b/chrome/browser/debugger/devtools_manager.cc
new file mode 100644
index 0000000..41d0f7a
--- /dev/null
+++ b/chrome/browser/debugger/devtools_manager.cc
@@ -0,0 +1,202 @@
+// Copyright (c) 2009 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_manager.h"
+
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/debugger/devtools_window.h"
+#include "chrome/browser/renderer_host/render_view_host.h"
+#include "chrome/browser/tab_contents/render_view_host_manager.h"
+#include "chrome/browser/tab_contents/tab_contents.h"
+#include "chrome/browser/tab_contents/web_contents.h"
+#include "chrome/common/notification_registrar.h"
+#include "chrome/common/notification_type.h"
+
+
+class DevToolsInstanceDescriptorImpl : public DevToolsInstanceDescriptor {
+ public:
+ explicit DevToolsInstanceDescriptorImpl(
+ NavigationController* navigation_controller)
+ : navigation_controller_(navigation_controller),
+ devtools_host_(NULL),
+ devtools_window_(NULL) {
+ }
+ virtual ~DevToolsInstanceDescriptorImpl() {}
+
+ virtual void SetDevToolsHost(RenderViewHost* render_view_host) {
+ devtools_host_ = render_view_host;
+ }
+
+ virtual void SetDevToolsWindow(DevToolsWindow* window) {
+ devtools_window_ = window;
+ }
+
+ virtual void Destroy() {
+ DevToolsManager* manager = g_browser_process->devtools_manager();
+ DCHECK(manager);
+ if (manager) {
+ manager->RemoveDescriptor(this);
+ }
+ delete this;
+ }
+
+ RenderViewHost* devtools_host() const {
+ return devtools_host_;
+ }
+
+ DevToolsWindow* devtools_window() const {
+ return devtools_window_;
+ }
+
+ NavigationController* navigation_controller() const {
+ return navigation_controller_;
+ }
+
+ private:
+ NavigationController* navigation_controller_;
+ RenderViewHost* devtools_host_;
+ DevToolsWindow* devtools_window_;
+
+ DISALLOW_COPY_AND_ASSIGN(DevToolsInstanceDescriptorImpl);
+};
+
+DevToolsManager::DevToolsManager() : web_contents_listeners_(NULL) {
+}
+
+DevToolsManager::~DevToolsManager() {
+ DCHECK(!web_contents_listeners_.get()) <<
+ "All devtools windows must alredy have been closed.";
+}
+
+void DevToolsManager::Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ DCHECK(type == NotificationType::WEB_CONTENTS_DISCONNECTED);
+ Source<WebContents> src(source);
+ NavigationController* controller = src->controller();
+ DescriptorMap::const_iterator it =
+ navcontroller_to_descriptor_.find(controller);
+ if (it == navcontroller_to_descriptor_.end()) {
+ return;
+ }
+ bool active = (controller->active_contents() == src.ptr());
+ if (!active) {
+ return;
+ }
+ // Active tab contents disconnecting from its renderer means that the tab
+ // is closing so we are closing devtools as well.
+ it->second->devtools_window()->Close();
+}
+
+void DevToolsManager::ShowDevToolsForWebContents(WebContents* web_contents) {
+ NavigationController* navigation_controller = web_contents->controller();
+
+ DevToolsWindow* window(NULL);
+ DevToolsInstanceDescriptorImpl* desc(NULL);
+ DescriptorMap::const_iterator it =
+ navcontroller_to_descriptor_.find(navigation_controller);
+ if (it != navcontroller_to_descriptor_.end()) {
+ desc = it->second;
+ window = desc->devtools_window();
+ } else {
+ desc = new DevToolsInstanceDescriptorImpl(navigation_controller);
+ navcontroller_to_descriptor_[navigation_controller] = desc;
+
+ StartListening(navigation_controller);
+
+ window = DevToolsWindow::Create(desc);
+ }
+
+ window->Show();
+}
+
+void DevToolsManager::ForwardToDevToolsAgent(RenderViewHost* from,
+ const IPC::Message& message) {
+ NavigationController* nav_controller(NULL);
+ for (DescriptorMap::const_iterator it = navcontroller_to_descriptor_.begin();
+ it != navcontroller_to_descriptor_.end();
+ ++it) {
+ if (it->second->devtools_host() == from) {
+ nav_controller = it->second->navigation_controller();
+ break;
+ }
+ }
+
+ if (!nav_controller) {
+ NOTREACHED();
+ return;
+ }
+
+ // TODO(yurys): notify client that the agent is no longer available
+ TabContents* tc = nav_controller->active_contents();
+ if (!tc) {
+ return;
+ }
+ WebContents* wc = tc->AsWebContents();
+ if (!wc) {
+ return;
+ }
+ RenderViewHost* target_host = wc->render_view_host();
+ if (!target_host) {
+ return;
+ }
+
+ IPC::Message* m = new IPC::Message(message);
+ m->set_routing_id(target_host->routing_id());
+ target_host->Send(m);
+}
+
+void DevToolsManager::ForwardToDevToolsClient(RenderViewHost* from,
+ const IPC::Message& message) {
+ WebContents* wc = from->delegate()->GetAsWebContents();
+ if (!wc) {
+ NOTREACHED();
+ return;
+ }
+
+ NavigationController* navigation_controller = wc->controller();
+
+ DescriptorMap::const_iterator it =
+ navcontroller_to_descriptor_.find(navigation_controller);
+ if (it == navcontroller_to_descriptor_.end()) {
+ NOTREACHED();
+ return;
+ }
+
+ RenderViewHost* target_host = it->second->devtools_host();
+ IPC::Message* m = new IPC::Message(message);
+ m->set_routing_id(target_host->routing_id());
+ target_host->Send(m);
+}
+
+void DevToolsManager::RemoveDescriptor(
+ DevToolsInstanceDescriptorImpl* descriptor) {
+ NavigationController* navigation_controller =
+ descriptor->navigation_controller();
+ // This should be done before StopListening as the latter checks number of
+ // alive devtools instances.
+ navcontroller_to_descriptor_.erase(navigation_controller);
+ StopListening(navigation_controller);
+}
+
+
+void DevToolsManager::StartListening(
+ NavigationController* navigation_controller) {
+ // TODO(yurys): add render host change listener
+ if (!web_contents_listeners_.get()) {
+ web_contents_listeners_.reset(new NotificationRegistrar);
+ web_contents_listeners_->Add(
+ this,
+ NotificationType::WEB_CONTENTS_DISCONNECTED,
+ NotificationService::AllSources());
+ }
+}
+
+void DevToolsManager::StopListening(
+ NavigationController* navigation_controller) {
+ DCHECK(web_contents_listeners_.get());
+ if (navcontroller_to_descriptor_.empty()) {
+ web_contents_listeners_.reset();
+ }
+}
diff --git a/chrome/browser/debugger/devtools_manager.h b/chrome/browser/debugger/devtools_manager.h
new file mode 100644
index 0000000..ebacc5e
--- /dev/null
+++ b/chrome/browser/debugger/devtools_manager.h
@@ -0,0 +1,102 @@
+// Copyright (c) 2009 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_MANAGER_H_
+#define CHROME_BROWSER_DEBUGGER_DEVTOOLS_MANAGER_H_
+
+#include <map>
+
+#include "base/basictypes.h"
+#include "base/scoped_ptr.h"
+#include "chrome/common/notification_service.h"
+
+namespace IPC {
+class Message;
+}
+
+class DevToolsInstanceDescriptorImpl;
+class DevToolsWindow;
+class NavigationController;
+class NotificationRegistrar;
+class RenderViewHost;
+class WebContents;
+
+// This class is a singleton that manages DevToolsWindow instances and routes
+// messages between developer tools clients and agents.
+class DevToolsManager : public NotificationObserver {
+ public:
+ DevToolsManager();
+ virtual ~DevToolsManager();
+
+ // Opend developer tools window for |web_contents|. If there is already
+ // one it will be revealed otherwise a new instance will be created. The
+ // devtools window is actually opened for the tab owning |web_contents|. If
+ // navigation occurs in it causing change of contents in the tab the devtools
+ // window will attach to the new contents. When the tab is closed the manager
+ // will close related devtools window.
+ void ShowDevToolsForWebContents(WebContents* web_contents);
+
+ void ForwardToDevToolsAgent(RenderViewHost* from,
+ const IPC::Message& message);
+ void ForwardToDevToolsClient(RenderViewHost* from,
+ const IPC::Message& message);
+
+ private:
+ // NotificationObserver override.
+ virtual void Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details);
+
+ friend class DevToolsInstanceDescriptorImpl;
+
+ // This method is called by DevToolsInstanceDescriptorImpl when it's about
+ // to be destroyed. It will remove all references from the manager to the
+ // descriptor and unregister all listeners related to the descriptor.
+ void RemoveDescriptor(DevToolsInstanceDescriptorImpl* descriptor);
+
+ void StartListening(NavigationController* navigation_controller);
+ void StopListening(NavigationController* navigation_controller);
+
+ // This object is not NULL iff there is at least one open DevToolsWindow.
+ scoped_ptr<NotificationRegistrar> web_contents_listeners_;
+
+ // This maps is for tracking devtools instances opened for browser tabs. It
+ // allows us to have at most one devtools window per tab.
+ // We use NavigationController* as key because it survives crosee-site
+ // navigation in cases when tab contents may change.
+ //
+ // This map doesn't own its values but DevToolsInstanceDescriptorImpl is
+ // expected to call RemoveDescriptor before dying to remove itself from the
+ // map.
+ typedef std::map<NavigationController*,
+ DevToolsInstanceDescriptorImpl*> DescriptorMap;
+ DescriptorMap navcontroller_to_descriptor_;
+
+ DISALLOW_COPY_AND_ASSIGN(DevToolsManager);
+};
+
+
+// Incapsulates information about devtools window instance necessary for
+// routing devtools messages and managing the window. It should be initialized
+// by DevToolsWindow concrete implementation.
+class DevToolsInstanceDescriptor {
+ public:
+ DevToolsInstanceDescriptor() {}
+
+ virtual void SetDevToolsHost(RenderViewHost* render_view_host) = 0;
+ virtual void SetDevToolsWindow(DevToolsWindow* window) = 0;
+
+ // This method is called when DevToolsWindow is closing and the descriptor
+ // becomes invalid. It will clean up DevToolsManager and delete this instance.
+ virtual void Destroy() = 0;
+
+ protected:
+ // This method should be called from Destroy only.
+ virtual ~DevToolsInstanceDescriptor() {}
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(DevToolsInstanceDescriptor);
+};
+
+#endif // CHROME_BROWSER_DEBUGGER_DEVTOOLS_MANAGER_H_
diff --git a/chrome/browser/debugger/dev_tools_view.cc b/chrome/browser/debugger/devtools_view.cc
index f0f6234..8305f2a 100644
--- a/chrome/browser/debugger/dev_tools_view.cc
+++ b/chrome/browser/debugger/devtools_view.cc
@@ -2,11 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/debugger/dev_tools_view.h"
+#include "chrome/browser/debugger/devtools_view.h"
#include <string>
#include "chrome/browser/browser_list.h"
+#include "chrome/browser/debugger/devtools_manager.h"
#include "chrome/browser/profile.h"
#include "chrome/browser/tab_contents/web_contents.h"
#include "chrome/browser/views/tab_contents_container_view.h"
@@ -14,9 +15,8 @@
#include "chrome/common/render_messages.h"
#include "chrome/common/url_constants.h"
-DevToolsView::DevToolsView(int inspected_process_id, int inspected_view_id)
- : inspected_process_id_(inspected_process_id),
- inspected_view_id_(inspected_view_id),
+DevToolsView::DevToolsView(DevToolsInstanceDescriptor* descriptor)
+ : descriptor_(descriptor),
web_contents_(NULL) {
web_container_ = new TabContentsContainerView();
AddChildView(web_container_);
@@ -25,16 +25,6 @@ DevToolsView::DevToolsView(int inspected_process_id, int inspected_view_id)
DevToolsView::~DevToolsView() {
}
-void DevToolsView::SendDevToolsClientMessage(const IPC::Message& message) {
- if (!web_contents_) {
- NOTREACHED();
- return;
- }
- IPC::Message* copy = new IPC::Message(message);
- copy->set_routing_id(web_contents_->render_view_host()->routing_id());
- web_contents_->render_view_host()->Send(copy);
-}
-
std::string DevToolsView::GetClassName() const {
return "DevToolsView";
}
@@ -68,8 +58,7 @@ void DevToolsView::Init() {
web_contents_->set_delegate(this);
web_container_->SetTabContents(web_contents_);
web_contents_->render_view_host()->AllowDOMUIBindings();
- web_contents_->render_view_host()->SetInspectedView(inspected_process_id_,
- inspected_view_id_);
+ descriptor_->SetDevToolsHost(web_contents_->render_view_host());
// chrome-ui://devtools/tools.html
GURL contents(std::string(chrome::kChromeUIScheme) + "://" +
@@ -81,6 +70,11 @@ void DevToolsView::Init() {
}
void DevToolsView::OnWindowClosing() {
+ DCHECK(descriptor_) << "OnWindowClosing is called twice";
+ if (descriptor_) {
+ descriptor_->Destroy();
+ descriptor_ = NULL;
+ }
web_container_->SetTabContents(NULL); // detach last (and only) tab
web_contents_->CloseContents(); // destroy the tab and navigation controller
}
diff --git a/chrome/browser/debugger/dev_tools_view.h b/chrome/browser/debugger/devtools_view.h
index 2ab0a37..2dc956c 100644
--- a/chrome/browser/debugger/dev_tools_view.h
+++ b/chrome/browser/debugger/devtools_view.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CHROME_BROWSER_DEBUGGER_DEV_TOOLS_VIEW_H_
-#define CHROME_BROWSER_DEBUGGER_DEV_TOOLS_VIEW_H_
+#ifndef CHROME_BROWSER_DEBUGGER_DEVTOOLS_VIEW_H_
+#define CHROME_BROWSER_DEBUGGER_DEVTOOLS_VIEW_H_
#include <string>
@@ -12,20 +12,16 @@
#include "chrome/browser/tab_contents/tab_contents_delegate.h"
#include "chrome/views/view.h"
-namespace IPC {
-class Message;
-}
+class DevToolsInstanceDescriptor;
class TabContentsContainerView;
class WebContents;
class DevToolsView : public views::View,
public TabContentsDelegate {
public:
- explicit DevToolsView(int inspected_process_id, int inspected_view_id);
+ explicit DevToolsView(DevToolsInstanceDescriptor* descriptor);
virtual ~DevToolsView();
- void SendDevToolsClientMessage(const IPC::Message& message);
-
// Destroy content views when the window is closing.
void OnWindowClosing();
@@ -67,12 +63,11 @@ class DevToolsView : public views::View,
void Init();
- const int inspected_process_id_;
- const int inspected_view_id_;
+ DevToolsInstanceDescriptor* descriptor_;
WebContents* web_contents_;
TabContentsContainerView* web_container_;
DISALLOW_COPY_AND_ASSIGN(DevToolsView);
};
-#endif // CHROME_BROWSER_DEBUGGER_DEV_TOOLS_VIEW_H_
+#endif // CHROME_BROWSER_DEBUGGER_DEVTOOLS_VIEW_H_
diff --git a/chrome/browser/debugger/devtools_window.h b/chrome/browser/debugger/devtools_window.h
new file mode 100644
index 0000000..fb6379bca
--- /dev/null
+++ b/chrome/browser/debugger/devtools_window.h
@@ -0,0 +1,28 @@
+// Copyright (c) 2009 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_DEV_TOOLS_WINDOW_H_
+#define CHROME_BROWSER_DEBUGGER_DEV_TOOLS_WINDOW_H_
+
+#include "base/basictypes.h"
+
+class DevToolsInstanceDescriptor;
+
+class DevToolsWindow {
+ public:
+ static DevToolsWindow* Create(DevToolsInstanceDescriptor* descriptor);
+ virtual ~DevToolsWindow() {}
+
+ // Show developer tools window.
+ virtual void Show() = 0;
+ virtual void Close() = 0;
+
+ protected:
+ DevToolsWindow() {}
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(DevToolsWindow);
+};
+
+#endif // CHROME_BROWSER_DEBUGGER_DEV_TOOLS_WINDOW_H_
diff --git a/chrome/browser/debugger/devtools_window_gtk.cc b/chrome/browser/debugger/devtools_window_gtk.cc
new file mode 100644
index 0000000..be7096d
--- /dev/null
+++ b/chrome/browser/debugger/devtools_window_gtk.cc
@@ -0,0 +1,13 @@
+// Copyright (c) 2009 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_window.h"
+
+#include "base/logging.h"
+
+// static
+DevToolsWindow* DevToolsWindow::Create(DevToolsInstanceDescriptor* descriptor) {
+ NOTIMPLEMENTED();
+ return NULL;
+}
diff --git a/chrome/browser/debugger/devtools_window_mac.cc b/chrome/browser/debugger/devtools_window_mac.cc
new file mode 100644
index 0000000..be7096d
--- /dev/null
+++ b/chrome/browser/debugger/devtools_window_mac.cc
@@ -0,0 +1,13 @@
+// Copyright (c) 2009 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_window.h"
+
+#include "base/logging.h"
+
+// static
+DevToolsWindow* DevToolsWindow::Create(DevToolsInstanceDescriptor* descriptor) {
+ NOTIMPLEMENTED();
+ return NULL;
+}
diff --git a/chrome/browser/debugger/devtools_window_win.cc b/chrome/browser/debugger/devtools_window_win.cc
new file mode 100644
index 0000000..4b258e7
--- /dev/null
+++ b/chrome/browser/debugger/devtools_window_win.cc
@@ -0,0 +1,70 @@
+// Copyright (c) 2009 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_window_win.h"
+
+#include "chrome/browser/debugger/devtools_manager.h"
+#include "chrome/browser/debugger/devtools_view.h"
+#include "chrome/views/window.h"
+
+
+// static
+DevToolsWindow* DevToolsWindow::Create(DevToolsInstanceDescriptor* descriptor) {
+ DevToolsView* view = new DevToolsView(descriptor);
+ DevToolsWindowWin* window = new DevToolsWindowWin(view);
+ descriptor->SetDevToolsWindow(window);
+ views::Window::CreateChromeWindow(NULL, gfx::Rect(), window);
+ return window;
+}
+
+DevToolsWindowWin::DevToolsWindowWin(DevToolsView* view)
+ : tools_view_(view) {
+}
+
+DevToolsWindowWin::~DevToolsWindowWin() {
+ DCHECK(!tools_view_);
+}
+
+void DevToolsWindowWin::Show() {
+ if (window()) {
+ window()->Show();
+ } else {
+ NOTREACHED();
+ }
+}
+
+void DevToolsWindowWin::Close() {
+ if (window()) {
+ window()->Close();
+ } else {
+ NOTREACHED();
+ }
+}
+
+std::wstring DevToolsWindowWin::GetWindowTitle() const {
+ return L"Developer Tools";
+}
+
+void DevToolsWindowWin::WindowClosing() {
+ if (tools_view_) {
+ ReleaseWindow();
+ tools_view_->OnWindowClosing();
+ tools_view_ = NULL;
+ } else {
+ NOTREACHED() << "WindowClosing called twice.";
+ }
+}
+
+bool DevToolsWindowWin::CanResize() const {
+ return true;
+}
+
+views::View* DevToolsWindowWin::GetContentsView() {
+ return tools_view_;
+}
+
+void DevToolsWindowWin::DeleteDelegate() {
+ DCHECK(!tools_view_) << "WindowClosing should have been called.";
+ delete this;
+}
diff --git a/chrome/browser/debugger/devtools_window_win.h b/chrome/browser/debugger/devtools_window_win.h
new file mode 100644
index 0000000..f7be1aa
--- /dev/null
+++ b/chrome/browser/debugger/devtools_window_win.h
@@ -0,0 +1,44 @@
+// Copyright (c) 2009 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_WIN_H_
+#define CHROME_BROWSER_DEBUGGER_DEVTOOLS_WINDOW_WIN_H_
+
+#include "base/basictypes.h"
+#include "chrome/browser/debugger/devtools_window.h"
+#include "chrome/views/window_delegate.h"
+
+namespace views {
+class Window;
+}
+class DevToolsInstanceDescriptor;
+class DevToolsView;
+class TabContents;
+
+class DevToolsWindowWin : public DevToolsWindow,
+ public views::WindowDelegate {
+ public:
+ virtual ~DevToolsWindowWin();
+
+ // Show developer tools window.
+ virtual void Show();
+ virtual void Close();
+
+ private:
+ friend class DevToolsWindow;
+ explicit DevToolsWindowWin(DevToolsView* view);
+
+ // views::WindowDelegate methods:
+ virtual std::wstring GetWindowTitle() const;
+ virtual void WindowClosing();
+ virtual bool CanResize() const;
+ virtual views::View* GetContentsView();
+ virtual void DeleteDelegate();
+
+ DevToolsView* tools_view_;
+
+ DISALLOW_COPY_AND_ASSIGN(DevToolsWindowWin);
+};
+
+#endif // CHROME_BROWSER_DEBUGGER_DEVTOOLS_WINDOW_WIN_H_
diff --git a/chrome/browser/renderer_host/render_view_host.cc b/chrome/browser/renderer_host/render_view_host.cc
index 8e2beec..04855e4 100644
--- a/chrome/browser/renderer_host/render_view_host.cc
+++ b/chrome/browser/renderer_host/render_view_host.cc
@@ -13,6 +13,7 @@
#include "chrome/browser/browser_process.h"
#include "chrome/browser/cross_site_request_manager.h"
#include "chrome/browser/debugger/debugger_wrapper.h"
+#include "chrome/browser/debugger/devtools_manager.h"
#include "chrome/browser/profile.h"
#include "chrome/browser/metrics/user_metrics.h"
#include "chrome/browser/renderer_host/renderer_security_policy.h"
@@ -97,9 +98,7 @@ RenderViewHost::RenderViewHost(SiteInstance* instance,
run_modal_reply_msg_(NULL),
has_unload_listener_(false),
is_waiting_for_unload_ack_(false),
- are_javascript_messages_suppressed_(false),
- inspected_process_id_(-1),
- inspected_view_id_(-1) {
+ are_javascript_messages_suppressed_(false) {
DCHECK(instance_);
DCHECK(delegate_);
if (modal_dialog_event == NULL)
@@ -1188,26 +1187,12 @@ void RenderViewHost::DidDebugAttach() {
}
}
-void RenderViewHost::SetInspectedView(int inspected_process_id,
- int inspected_view_id) {
- inspected_process_id_ = inspected_process_id;
- inspected_view_id_ = inspected_view_id;
-}
-
void RenderViewHost::OnForwardToDevToolsAgent(const IPC::Message& message) {
- RenderViewHost* host = RenderViewHost::FromID(inspected_process_id_,
- inspected_view_id_);
- if (!host)
- return;
- IPC::Message* m = new IPC::Message(message);
- m->set_routing_id(inspected_view_id_);
- host->Send(m);
+ g_browser_process->devtools_manager()->ForwardToDevToolsAgent(this, message);
}
void RenderViewHost::OnForwardToDevToolsClient(const IPC::Message& message) {
- RenderViewHostDelegate::View* view = delegate_->GetViewDelegate();
- if (view)
- view->ForwardMessageToDevToolsClient(message);
+ g_browser_process->devtools_manager()->ForwardToDevToolsClient(this, message);
}
void RenderViewHost::OnUserMetricsRecordAction(const std::wstring& action) {
diff --git a/chrome/browser/renderer_host/render_view_host.h b/chrome/browser/renderer_host/render_view_host.h
index a050a63..0ac63f8 100644
--- a/chrome/browser/renderer_host/render_view_host.h
+++ b/chrome/browser/renderer_host/render_view_host.h
@@ -326,11 +326,6 @@ class RenderViewHost : public RenderWidgetHost {
// Must be called before CreateRenderView().
void AllowExtensionBindings();
- // Tells the renderer which render view should be inspected by developer
- // tools loaded in it. This method should be called before renderer is
- // created.
- void SetInspectedView(int inspected_process_id, int inspected_view_id);
-
// Sets a property with the given name and value on the DOM UI binding object.
// Must call AllowDOMUIBindings() on this renderer first.
void SetDOMUIProperty(const std::string& name, const std::string& value);
@@ -628,12 +623,6 @@ class RenderViewHost : public RenderWidgetHost {
bool are_javascript_messages_suppressed_;
- // When this renderer hosts developer tools this two fields contain rerndeder
- // process id and render view id of the page being inspected. Both fieldes
- // are -1 if the content of this renderer is not developer tools frontend.
- int inspected_process_id_;
- int inspected_view_id_;
-
DISALLOW_EVIL_CONSTRUCTORS(RenderViewHost);
};
diff --git a/chrome/browser/renderer_host/render_view_host_delegate.h b/chrome/browser/renderer_host/render_view_host_delegate.h
index ebd9202..9215f6a 100644
--- a/chrome/browser/renderer_host/render_view_host_delegate.h
+++ b/chrome/browser/renderer_host/render_view_host_delegate.h
@@ -115,11 +115,6 @@ class RenderViewHostDelegate {
// specified events. This gives an opportunity to the browser to process the
// event (used for keyboard shortcuts).
virtual void HandleKeyboardEvent(const NativeWebKeyboardEvent& event) = 0;
-
- // Forwards message to DevToolsClient in developer tools window open for
- // this page.
- virtual void ForwardMessageToDevToolsClient(
- const IPC::Message& message) = 0;
};
// Interface for saving web pages.
diff --git a/chrome/browser/tab_contents/interstitial_page.cc b/chrome/browser/tab_contents/interstitial_page.cc
index a4e4f5b..2a63a41 100644
--- a/chrome/browser/tab_contents/interstitial_page.cc
+++ b/chrome/browser/tab_contents/interstitial_page.cc
@@ -84,7 +84,6 @@ class InterstitialPage::InterstitialPageRVHViewDelegate
virtual void UpdateDragCursor(bool is_drop_target);
virtual void TakeFocus(bool reverse);
virtual void HandleKeyboardEvent(const NativeWebKeyboardEvent& event);
- virtual void ForwardMessageToDevToolsClient(const IPC::Message& message);
virtual void OnFindReply(int request_id,
int number_of_matches,
const gfx::Rect& selection_rect,
@@ -486,11 +485,6 @@ void InterstitialPage::InterstitialPageRVHViewDelegate::HandleKeyboardEvent(
interstitial_page_->tab()->GetViewDelegate()->HandleKeyboardEvent(event);
}
-void InterstitialPage::InterstitialPageRVHViewDelegate::
- ForwardMessageToDevToolsClient(const IPC::Message& message) {
- NOTREACHED() << "InterstitialPage does not support developer tools content.";
-}
-
void InterstitialPage::InterstitialPageRVHViewDelegate::OnFindReply(
int request_id, int number_of_matches, const gfx::Rect& selection_rect,
int active_match_ordinal, bool final_update) {
diff --git a/chrome/browser/tab_contents/web_contents_view.h b/chrome/browser/tab_contents/web_contents_view.h
index 52fceba..f63a3ee 100644
--- a/chrome/browser/tab_contents/web_contents_view.h
+++ b/chrome/browser/tab_contents/web_contents_view.h
@@ -108,13 +108,6 @@ class WebContentsView : public RenderViewHostDelegate::View {
// RenderWidgetHost is deleted. Removes |host| from internal maps.
void RenderWidgetHostDestroyed(RenderWidgetHost* host);
- // Opens developer tools window for the page.
- virtual void OpenDeveloperTools() = 0;
-
- // Forwards message to DevToolsClient in developer tools window open for this
- // page.
- virtual void ForwardMessageToDevToolsClient(const IPC::Message& message) = 0;
-
// Sets focus to the appropriate element when the tab contents is shown the
// first time.
virtual void SetInitialFocus() = 0;
diff --git a/chrome/browser/tab_contents/web_contents_view_gtk.cc b/chrome/browser/tab_contents/web_contents_view_gtk.cc
index e550174..7b6cf18 100644
--- a/chrome/browser/tab_contents/web_contents_view_gtk.cc
+++ b/chrome/browser/tab_contents/web_contents_view_gtk.cc
@@ -121,15 +121,6 @@ void WebContentsViewGtk::SizeContents(const gfx::Size& size) {
NOTIMPLEMENTED();
}
-void WebContentsViewGtk::OpenDeveloperTools() {
- NOTIMPLEMENTED();
-}
-
-void WebContentsViewGtk::ForwardMessageToDevToolsClient(
- const IPC::Message& message) {
- NOTIMPLEMENTED();
-}
-
void WebContentsViewGtk::FindInPage(const Browser& browser,
bool find_next, bool forward_direction) {
NOTIMPLEMENTED();
diff --git a/chrome/browser/tab_contents/web_contents_view_gtk.h b/chrome/browser/tab_contents/web_contents_view_gtk.h
index ec71c49..f218fee 100644
--- a/chrome/browser/tab_contents/web_contents_view_gtk.h
+++ b/chrome/browser/tab_contents/web_contents_view_gtk.h
@@ -33,8 +33,6 @@ class WebContentsViewGtk : public WebContentsView {
virtual void SetPageTitle(const std::wstring& title);
virtual void Invalidate();
virtual void SizeContents(const gfx::Size& size);
- virtual void OpenDeveloperTools();
- virtual void ForwardMessageToDevToolsClient(const IPC::Message& message);
virtual void FindInPage(const Browser& browser,
bool find_next, bool forward_direction);
virtual void HideFindBar(bool end_session);
diff --git a/chrome/browser/tab_contents/web_contents_view_mac.h b/chrome/browser/tab_contents/web_contents_view_mac.h
index e7bffac..352f5bc 100644
--- a/chrome/browser/tab_contents/web_contents_view_mac.h
+++ b/chrome/browser/tab_contents/web_contents_view_mac.h
@@ -50,8 +50,6 @@ class WebContentsViewMac : public WebContentsView,
virtual void SetPageTitle(const std::wstring& title);
virtual void Invalidate();
virtual void SizeContents(const gfx::Size& size);
- virtual void OpenDeveloperTools();
- virtual void ForwardMessageToDevToolsClient(const IPC::Message& message);
virtual void FindInPage(const Browser& browser,
bool find_next, bool forward_direction);
virtual void HideFindBar(bool end_session);
diff --git a/chrome/browser/tab_contents/web_contents_view_mac.mm b/chrome/browser/tab_contents/web_contents_view_mac.mm
index b607697..efde5a5 100644
--- a/chrome/browser/tab_contents/web_contents_view_mac.mm
+++ b/chrome/browser/tab_contents/web_contents_view_mac.mm
@@ -104,15 +104,6 @@ void WebContentsViewMac::SizeContents(const gfx::Size& size) {
NOTIMPLEMENTED(); // Leaving the hack unimplemented.
}
-void WebContentsViewMac::OpenDeveloperTools() {
- NOTIMPLEMENTED();
-}
-
-void WebContentsViewMac::ForwardMessageToDevToolsClient(
- const IPC::Message& message) {
- NOTIMPLEMENTED();
-}
-
void WebContentsViewMac::FindInPage(const Browser& browser,
bool find_next, bool forward_direction) {
if (!find_bar_.get()) {
diff --git a/chrome/browser/tab_contents/web_contents_view_win.cc b/chrome/browser/tab_contents/web_contents_view_win.cc
index 927f612..f087a2c 100644
--- a/chrome/browser/tab_contents/web_contents_view_win.cc
+++ b/chrome/browser/tab_contents/web_contents_view_win.cc
@@ -9,7 +9,6 @@
#include "chrome/browser/bookmarks/bookmark_drag_data.h"
#include "chrome/browser/browser.h" // TODO(beng): this dependency is awful.
#include "chrome/browser/browser_process.h"
-#include "chrome/browser/debugger/dev_tools_window.h"
#include "chrome/browser/dom_ui/dom_ui_host.h"
#include "chrome/browser/download/download_request_manager.h"
#include "chrome/browser/renderer_host/render_process_host.h"
@@ -224,26 +223,6 @@ void WebContentsViewWin::SizeContents(const gfx::Size& size) {
WasSized(size);
}
-void WebContentsViewWin::OpenDeveloperTools() {
- if (!dev_tools_window_.get())
- dev_tools_window_.reset(new DevToolsWindow);
-
- RenderViewHost* host = web_contents_->render_view_host();
- if (!host)
- return;
-
- dev_tools_window_->Show(host->process()->pid(), host->routing_id());
-}
-
-void WebContentsViewWin::ForwardMessageToDevToolsClient(
- const IPC::Message& message) {
- if (!dev_tools_window_.get()) {
- NOTREACHED() << "Developer tools window is not open.";
- return;
- }
- dev_tools_window_->SendDevToolsClientMessage(message);
-}
-
void WebContentsViewWin::SetInitialFocus() {
if (web_contents_->AsDOMUIContents())
web_contents_->AsDOMUIContents()->SetInitialFocus();
diff --git a/chrome/browser/tab_contents/web_contents_view_win.h b/chrome/browser/tab_contents/web_contents_view_win.h
index cd26bb7..e4f9e45 100644
--- a/chrome/browser/tab_contents/web_contents_view_win.h
+++ b/chrome/browser/tab_contents/web_contents_view_win.h
@@ -10,7 +10,6 @@
#include "chrome/browser/tab_contents/web_contents_view.h"
#include "chrome/views/widget_win.h"
-class DevToolsWindow;
class SadTabView;
struct WebDropData;
class WebDropTarget;
@@ -41,8 +40,6 @@ class WebContentsViewWin : public WebContentsView,
virtual void SetPageTitle(const std::wstring& title);
virtual void Invalidate();
virtual void SizeContents(const gfx::Size& size);
- virtual void OpenDeveloperTools();
- virtual void ForwardMessageToDevToolsClient(const IPC::Message& message);
virtual void SetInitialFocus();
virtual void StoreFocus();
virtual void RestoreFocus();
@@ -103,9 +100,6 @@ class WebContentsViewWin : public WebContentsView,
WebContents* web_contents_;
- // Allows to show exactly one developer tools window for this page.
- scoped_ptr<DevToolsWindow> dev_tools_window_;
-
// A drop target object that handles drags over this WebContents.
scoped_refptr<WebDropTarget> drop_target_;
diff --git a/chrome/chrome.gyp b/chrome/chrome.gyp
index f8990f4..a11cccc 100644
--- a/chrome/chrome.gyp
+++ b/chrome/chrome.gyp
@@ -528,10 +528,14 @@
'browser/debugger/debugger_window.h',
'browser/debugger/debugger_wrapper.cc',
'browser/debugger/debugger_wrapper.h',
- 'browser/debugger/dev_tools_window.cc',
- 'browser/debugger/dev_tools_window.h',
- 'browser/debugger/dev_tools_view.cc',
- 'browser/debugger/dev_tools_view.h',
+ 'browser/debugger/devtools_manager.h',
+ 'browser/debugger/devtools_manager.cc',
+ 'browser/debugger/devtools_window.h',
+ 'browser/debugger/devtools_window_gtk.cc',
+ 'browser/debugger/devtools_window_mac.cc',
+ 'browser/debugger/devtools_window_win.cc',
+ 'browser/debugger/devtools_view.cc',
+ 'browser/debugger/devtools_view.h',
'browser/dock_info.cc',
'browser/dock_info.h',
'browser/dom_operation_notification_details.h',
@@ -1269,10 +1273,10 @@
'browser/browser_accessibility_manager.cc',
'browser/debugger/debugger_view.cc',
'browser/debugger/debugger_window.cc',
- 'browser/debugger/dev_tools_view.cc',
- 'browser/debugger/dev_tools_view.h',
- 'browser/debugger/dev_tools_window.cc',
- 'browser/debugger/dev_tools_window.h',
+ 'browser/debugger/devtools_view.cc',
+ 'browser/debugger/devtools_view.h',
+ 'browser/debugger/devtools_window_gtk.cc',
+ 'browser/debugger/devtools_window_win.cc',
'browser/dock_info.cc',
'browser/dom_ui/html_dialog_contents.cc',
'browser/drag_utils.cc',
diff --git a/chrome/test/testing_browser_process.h b/chrome/test/testing_browser_process.h
index 0cbe91b..e2fff16 100644
--- a/chrome/test/testing_browser_process.h
+++ b/chrome/test/testing_browser_process.h
@@ -75,6 +75,10 @@ class TestingBrowserProcess : public BrowserProcess {
return NULL;
}
+ virtual DevToolsManager* devtools_manager() {
+ return NULL;
+ }
+
virtual ClipboardService* clipboard_service() {
return NULL;
}