summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authoryurys@google.com <yurys@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-26 09:13:01 +0000
committeryurys@google.com <yurys@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-26 09:13:01 +0000
commit503683f23ea6fe3eb728f2d09f81f2603ffc7d6f (patch)
treef9bb89d453f8d1dbd4689f0d14c477ca10e2356f /chrome/browser
parentc8c4f954af8b55d12a3d76a0ef41def31594aceb (diff)
downloadchromium_src-503683f23ea6fe3eb728f2d09f81f2603ffc7d6f.zip
chromium_src-503683f23ea6fe3eb728f2d09f81f2603ffc7d6f.tar.gz
chromium_src-503683f23ea6fe3eb728f2d09f81f2603ffc7d6f.tar.bz2
Developer tools messages are forwarded as wrapped IPC::Messages(previously they were represented as int type+string body).
I stole IPC::Message serialization code from jam's CL(http://codereview.chromium.org/20413). jam: please look at message forwarding code. When tools messages are send from browser to renderer they are also wrapped(unlike worker messages which are unwrapped and sent as is). It allows to describe developer tools messages in its own file instead of putting all of them into render_messages_internal.h brettw: please check if it's OK to have ForwardMessageToToolsClient in WebContentsView Review URL: http://codereview.chromium.org/21540 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10455 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r--chrome/browser/browser.scons2
-rw-r--r--chrome/browser/browser.vcproj8
-rw-r--r--chrome/browser/debugger/debugger.scons8
-rw-r--r--chrome/browser/debugger/debugger.vcproj16
-rw-r--r--chrome/browser/debugger/dev_tools_view.cc88
-rw-r--r--chrome/browser/debugger/dev_tools_view.h79
-rw-r--r--chrome/browser/debugger/dev_tools_window.cc53
-rw-r--r--chrome/browser/debugger/dev_tools_window.h46
-rw-r--r--chrome/browser/dom_ui/dev_tools_ui.cc23
-rw-r--r--chrome/browser/dom_ui/dev_tools_ui.h26
-rw-r--r--chrome/browser/dom_ui/dom_ui.h3
-rw-r--r--chrome/browser/dom_ui/dom_ui_contents.cc8
-rw-r--r--chrome/browser/dom_ui/dom_ui_contents.h6
-rw-r--r--chrome/browser/renderer_host/render_view_host.cc30
-rw-r--r--chrome/browser/renderer_host/render_view_host.h13
-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.h7
24 files changed, 474 insertions, 3 deletions
diff --git a/chrome/browser/browser.scons b/chrome/browser/browser.scons
index 349dc4e..2b9d266 100644
--- a/chrome/browser/browser.scons
+++ b/chrome/browser/browser.scons
@@ -400,6 +400,8 @@ input_files = ChromeFileList([
MSVSFilter('DOM UI', [
'dom_ui/chrome_url_data_manager.cc',
'dom_ui/chrome_url_data_manager.h',
+ 'dom_ui/dev_tools_ui.cc',
+ 'dom_ui/dev_tools_ui.h',
'dom_ui/dom_ui.cc',
'dom_ui/dom_ui.h',
'dom_ui/dom_ui_contents.cc',
diff --git a/chrome/browser/browser.vcproj b/chrome/browser/browser.vcproj
index 317ed07..f618fbe 100644
--- a/chrome/browser/browser.vcproj
+++ b/chrome/browser/browser.vcproj
@@ -1490,6 +1490,14 @@
>
</File>
<File
+ RelativePath=".\dom_ui\dev_tools_ui.cc"
+ >
+ </File>
+ <File
+ RelativePath=".\dom_ui\dev_tools_ui.h"
+ >
+ </File>
+ <File
RelativePath=".\dom_ui\dom_ui.cc"
>
</File>
diff --git a/chrome/browser/debugger/debugger.scons b/chrome/browser/debugger/debugger.scons
index 11907f24..c1800f6 100644
--- a/chrome/browser/debugger/debugger.scons
+++ b/chrome/browser/debugger/debugger.scons
@@ -55,6 +55,10 @@ 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',
])
if env.Bit('linux'):
@@ -63,6 +67,8 @@ if env.Bit('linux'):
'debugger_contents.cc',
'debugger_view.cc',
'debugger_window.cc',
+ 'dev_tools_view.cc',
+ 'dev_tools_window.cc',
)
if env.Bit('mac'):
@@ -73,6 +79,8 @@ if env.Bit('mac'):
'debugger_node.cc',
'debugger_view.cc',
'debugger_window.cc',
+ 'dev_tools_view.cc',
+ 'dev_tools_window.cc',
)
if not env.Bit('mac'):
diff --git a/chrome/browser/debugger/debugger.vcproj b/chrome/browser/debugger/debugger.vcproj
index d72b86a..88af468 100644
--- a/chrome/browser/debugger/debugger.vcproj
+++ b/chrome/browser/debugger/debugger.vcproj
@@ -213,6 +213,22 @@
RelativePath=".\debugger_wrapper.h"
>
</File>
+ <File
+ RelativePath=".\dev_tools_view.cc"
+ >
+ </File>
+ <File
+ RelativePath=".\dev_tools_view.h"
+ >
+ </File>
+ <File
+ RelativePath=".\dev_tools_window.cc"
+ >
+ </File>
+ <File
+ RelativePath=".\dev_tools_window.h"
+ >
+ </File>
</Files>
<Globals>
</Globals>
diff --git a/chrome/browser/debugger/dev_tools_view.cc b/chrome/browser/debugger/dev_tools_view.cc
new file mode 100644
index 0000000..4eab83b
--- /dev/null
+++ b/chrome/browser/debugger/dev_tools_view.cc
@@ -0,0 +1,88 @@
+// 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_view.h"
+
+#include "chrome/browser/browser_list.h"
+#include "chrome/browser/profile.h"
+#include "chrome/browser/tab_contents/web_contents.h"
+#include "chrome/browser/views/tab_contents_container_view.h"
+#include "chrome/common/property_bag.h"
+#include "chrome/common/render_messages.h"
+
+DevToolsView::DevToolsView(int inspected_process_id, int inspected_view_id)
+ : inspected_process_id_(inspected_process_id),
+ inspected_view_id_(inspected_view_id),
+ web_contents_(NULL) {
+ web_container_ = new TabContentsContainerView();
+ AddChildView(web_container_);
+}
+
+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";
+}
+
+gfx::Size DevToolsView::GetPreferredSize() {
+ return gfx::Size(700, 400);
+}
+
+void DevToolsView::Layout() {
+ web_container_->SetBounds(0, 0, width(), height());
+}
+
+void DevToolsView::ViewHierarchyChanged(bool is_add,
+ views::View* parent,
+ views::View* child) {
+ if (is_add && child == this) {
+ DCHECK(GetWidget());
+ Init();
+ }
+}
+
+void DevToolsView::Init() {
+ // We can't create the WebContents until we've actually been put into a real
+ // view hierarchy somewhere.
+ Profile* profile = BrowserList::GetLastActive()->profile();
+
+ TabContents* tc = TabContents::CreateWithType(TAB_CONTENTS_DOM_UI, profile,
+ NULL);
+ web_contents_ = tc->AsWebContents();
+ web_contents_->SetupController(profile);
+ 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_);
+
+ GURL contents("chrome-ui://inspector/debugger-oop.html");
+ // this will call CreateRenderView to create renderer process
+ web_contents_->controller()->LoadURL(contents, GURL(),
+ PageTransition::START_PAGE);
+}
+
+void DevToolsView::OnWindowClosing() {
+ web_container_->SetTabContents(NULL); // detach last (and only) tab
+ web_contents_->CloseContents(); // destroy the tab and navigation controller
+}
+
+void DevToolsView::OpenURLFromTab(TabContents* source,
+ const GURL& url, const GURL& referrer,
+ WindowOpenDisposition disposition,
+ PageTransition::Type transition) {
+ NOTREACHED();
+}
+
diff --git a/chrome/browser/debugger/dev_tools_view.h b/chrome/browser/debugger/dev_tools_view.h
new file mode 100644
index 0000000..6c2c087
--- /dev/null
+++ b/chrome/browser/debugger/dev_tools_view.h
@@ -0,0 +1,79 @@
+// 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_VIEW_H_
+#define CHROME_BROWSER_DEBUGGER_DEV_TOOLS_VIEW_H_
+
+#include <string>
+
+#include "base/basictypes.h"
+#include "base/gfx/size.h"
+#include "chrome/browser/tab_contents/tab_contents_delegate.h"
+#include "chrome/views/view.h"
+
+namespace IPC {
+class Message;
+}
+class TabContentsContainerView;
+class WebContents;
+
+class DevToolsView : public views::View,
+ public TabContentsDelegate {
+ public:
+ explicit DevToolsView(int inspected_process_id, int inspected_view_id);
+ virtual ~DevToolsView();
+
+ void SendDevToolsClientMessage(const IPC::Message& message);
+
+ // Destroy content views when the window is closing.
+ void OnWindowClosing();
+
+ private:
+ // Overridden from TabContentsDelegate:
+ virtual void NavigationStateChanged(const TabContents* source,
+ unsigned changed_flags) {}
+ virtual void ReplaceContents(TabContents* source,
+ TabContents* new_contents) {}
+ virtual void AddNewContents(TabContents* source,
+ TabContents* new_contents,
+ WindowOpenDisposition disposition,
+ const gfx::Rect& initial_pos,
+ bool user_gesture) {}
+ virtual void ActivateContents(TabContents* contents) {}
+ virtual void LoadingStateChanged(TabContents* source) {}
+ virtual void CloseContents(TabContents* source) {}
+ virtual void MoveContents(TabContents* source, const gfx::Rect& pos) {}
+ virtual bool IsPopup(TabContents* source) { return false; }
+ virtual void ToolbarSizeChanged(TabContents* source, bool is_animating) {}
+ virtual void URLStarredChanged(TabContents* source, bool) {}
+ virtual void UpdateTargetURL(TabContents* source, const GURL& url) {}
+ virtual bool CanBlur() const { return false; }
+
+ // Opens a new URL inside the passed in TabContents, if source is 0 open
+ // in the current front-most tab.
+ virtual void OpenURLFromTab(TabContents* source,
+ const GURL& url, const GURL& referrer,
+ WindowOpenDisposition disposition,
+ PageTransition::Type transition);
+
+ // Overridden from views::View:
+ virtual std::string GetClassName() const;
+ virtual gfx::Size GetPreferredSize();
+ virtual void Layout();
+ virtual void ViewHierarchyChanged(bool is_add,
+ views::View* parent,
+ views::View* child);
+
+ void Init();
+
+ const int inspected_process_id_;
+ const int inspected_view_id_;
+ WebContents* web_contents_;
+ TabContentsContainerView* web_container_;
+
+ DISALLOW_COPY_AND_ASSIGN(DevToolsView);
+};
+
+#endif // CHROME_BROWSER_DEBUGGER_DEV_TOOLS_VIEW_H_
+
diff --git a/chrome/browser/debugger/dev_tools_window.cc b/chrome/browser/debugger/dev_tools_window.cc
new file mode 100644
index 0000000..a1f6959
--- /dev/null
+++ b/chrome/browser/debugger/dev_tools_window.cc
@@ -0,0 +1,53 @@
+// 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
new file mode 100644
index 0000000..3550c33
--- /dev/null
+++ b/chrome/browser/debugger/dev_tools_window.h
@@ -0,0 +1,46 @@
+// 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/dom_ui/dev_tools_ui.cc b/chrome/browser/dom_ui/dev_tools_ui.cc
new file mode 100644
index 0000000..327cd87
--- /dev/null
+++ b/chrome/browser/dom_ui/dev_tools_ui.cc
@@ -0,0 +1,23 @@
+// 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/dom_ui/dev_tools_ui.h"
+
+#include "chrome/browser/renderer_host/render_view_host.h"
+#include "chrome/common/render_messages.h"
+
+// DevToolsUI is accessible from chrome-ui://devtools.
+static const char kDevToolsHost[] = "devtools";
+
+// static
+GURL DevToolsUI::GetBaseURL() {
+ return GURL(DOMUIContents::GetScheme() + "://" + kDevToolsHost);
+}
+
+void DevToolsUI::RenderViewCreated(RenderViewHost* render_view_host) {
+ render_view_host->Send(new ViewMsg_SetupDevToolsClient(
+ render_view_host->routing_id()));
+}
+
+
diff --git a/chrome/browser/dom_ui/dev_tools_ui.h b/chrome/browser/dom_ui/dev_tools_ui.h
new file mode 100644
index 0000000..a13af96
--- /dev/null
+++ b/chrome/browser/dom_ui/dev_tools_ui.h
@@ -0,0 +1,26 @@
+// 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_DOM_UI_DEV_TOOLS_UI_H_
+#define CHROME_BROWSER_DOM_UI_DEV_TOOLS_UI_H_
+
+#include "chrome/browser/dom_ui/dom_ui.h"
+
+class DevToolsUI : public DOMUI {
+ public:
+ explicit DevToolsUI(DOMUIContents* contents) : DOMUI(contents) {}
+
+ // Return the URL for the front page of this UI.
+ static GURL GetBaseURL();
+
+ // DOMUI Implementation
+ virtual void Init() {}
+ virtual void RenderViewCreated(RenderViewHost* render_view_host);
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(DevToolsUI);
+};
+
+#endif // CHROME_BROWSER_DOM_UI_DEV_TOOLS_UI_H_
+
diff --git a/chrome/browser/dom_ui/dom_ui.h b/chrome/browser/dom_ui/dom_ui.h
index 1de9c42..c9d34ed 100644
--- a/chrome/browser/dom_ui/dom_ui.h
+++ b/chrome/browser/dom_ui/dom_ui.h
@@ -10,6 +10,7 @@
class DictionaryValue;
class DOMMessageHandler;
+class RenderViewHost;
class Value;
// A DOMUI sets up the datasources and message handlers for a given HTML-based
@@ -21,6 +22,8 @@ class DOMUI {
virtual ~DOMUI();
virtual void Init() = 0;
+ virtual void RenderViewCreated(RenderViewHost* render_view_host) {}
+
// Called from DOMUIContents.
void ProcessDOMUIMessage(const std::string& message,
const std::string& content);
diff --git a/chrome/browser/dom_ui/dom_ui_contents.cc b/chrome/browser/dom_ui/dom_ui_contents.cc
index f7b83a2..68b05d9 100644
--- a/chrome/browser/dom_ui/dom_ui_contents.cc
+++ b/chrome/browser/dom_ui/dom_ui_contents.cc
@@ -5,6 +5,7 @@
#include "chrome/browser/dom_ui/dom_ui_contents.h"
#include "chrome/browser/debugger/debugger_contents.h"
+#include "chrome/browser/dom_ui/dev_tools_ui.h"
#include "chrome/browser/dom_ui/dom_ui.h"
#include "chrome/browser/dom_ui/downloads_ui.h"
#include "chrome/browser/dom_ui/history_ui.h"
@@ -167,6 +168,11 @@ WebPreferences DOMUIContents::GetWebkitPrefs() {
return web_prefs;
}
+void DOMUIContents::RenderViewCreated(RenderViewHost* render_view_host) {
+ DCHECK(current_ui_);
+ current_ui_->RenderViewCreated(render_view_host);
+}
+
bool DOMUIContents::ShouldDisplayFavIcon() {
if (current_ui_)
return current_ui_->ShouldDisplayFavIcon();
@@ -238,6 +244,8 @@ DOMUI* DOMUIContents::GetDOMUIForURL(const GURL &url) {
return new DownloadsUI(this);
} else if (url.host() == DebuggerContents::GetBaseURL().host()) {
return new DebuggerContents(this);
+ } else if (url.host() == DevToolsUI::GetBaseURL().host()) {
+ return new DevToolsUI(this);
}
#else
NOTIMPLEMENTED();
diff --git a/chrome/browser/dom_ui/dom_ui_contents.h b/chrome/browser/dom_ui/dom_ui_contents.h
index 8220b175c..948ea6f 100644
--- a/chrome/browser/dom_ui/dom_ui_contents.h
+++ b/chrome/browser/dom_ui/dom_ui_contents.h
@@ -12,7 +12,7 @@
#include "webkit/glue/webpreferences.h"
class DOMUI;
-class render_view_host;
+class RenderViewHost;
// FavIconSource is the gateway between network-level chrome:
// requests for favicons and the history backend that serves these.
@@ -113,6 +113,8 @@ class DOMUIContents : public WebContents {
virtual void RequestOpenURL(const GURL& url, const GURL& referrer,
WindowOpenDisposition disposition);
+ virtual void RenderViewCreated(RenderViewHost* render_view_host);
+
//
// TabContents overrides
//
@@ -120,7 +122,7 @@ class DOMUIContents : public WebContents {
const ViewHostMsg_FrameNavigate_Params& params) { }
virtual bool NavigateToPendingEntry(bool reload);
- // Return the scheme used. We currently use chrome:
+ // Return the scheme used. We currently use chrome-ui:
static const std::string GetScheme();
private:
diff --git a/chrome/browser/renderer_host/render_view_host.cc b/chrome/browser/renderer_host/render_view_host.cc
index 5e644c2..35fd1fd 100644
--- a/chrome/browser/renderer_host/render_view_host.cc
+++ b/chrome/browser/renderer_host/render_view_host.cc
@@ -97,7 +97,9 @@ RenderViewHost::RenderViewHost(SiteInstance* instance,
run_modal_reply_msg_(NULL),
has_unload_listener_(false),
is_waiting_for_unload_ack_(false),
- are_javascript_messages_suppressed_(false) {
+ are_javascript_messages_suppressed_(false),
+ inspected_process_id_(-1),
+ inspected_view_id_(-1) {
DCHECK(instance_);
DCHECK(delegate_);
if (modal_dialog_event == NULL)
@@ -733,6 +735,10 @@ void RenderViewHost::OnMessageReceived(const IPC::Message& msg) {
IPC_MESSAGE_HANDLER(ViewHostMsg_AddMessageToConsole, OnAddMessageToConsole)
IPC_MESSAGE_HANDLER(ViewHostMsg_DebuggerOutput, OnDebuggerOutput);
IPC_MESSAGE_HANDLER(ViewHostMsg_DidDebugAttach, DidDebugAttach);
+ IPC_MESSAGE_HANDLER(ViewHostMsg_ForwardToDevToolsAgent,
+ OnForwardToDevToolsAgent);
+ IPC_MESSAGE_HANDLER(ViewHostMsg_ForwardToDevToolsClient,
+ OnForwardToDevToolsClient);
IPC_MESSAGE_HANDLER(ViewHostMsg_UserMetricsRecordAction,
OnUserMetricsRecordAction)
IPC_MESSAGE_HANDLER(ViewHostMsg_MissingPluginStatus, OnMissingPluginStatus);
@@ -1168,6 +1174,28 @@ 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);
+}
+
+void RenderViewHost::OnForwardToDevToolsClient(const IPC::Message& message) {
+ RenderViewHostDelegate::View* view = delegate_->GetViewDelegate();
+ if (view)
+ view->ForwardMessageToDevToolsClient(message);
+}
+
void RenderViewHost::OnUserMetricsRecordAction(const std::wstring& action) {
UserMetrics::RecordComputedAction(action.c_str(), process()->profile());
}
diff --git a/chrome/browser/renderer_host/render_view_host.h b/chrome/browser/renderer_host/render_view_host.h
index daf6044..812851c 100644
--- a/chrome/browser/renderer_host/render_view_host.h
+++ b/chrome/browser/renderer_host/render_view_host.h
@@ -320,6 +320,11 @@ class RenderViewHost : public RenderWidgetHost {
// Must be called before CreateRenderView().
void AllowDOMUIBindings();
+ // 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);
@@ -509,6 +514,8 @@ class RenderViewHost : public RenderWidgetHost {
const std::wstring& source_id);
void OnDebuggerOutput(const std::wstring& output);
void DidDebugAttach();
+ void OnForwardToDevToolsAgent(const IPC::Message& message);
+ void OnForwardToDevToolsClient(const IPC::Message& message);
void OnUserMetricsRecordAction(const std::wstring& action);
void OnMissingPluginStatus(int status);
void OnMessageReceived(IPC::Message* msg) { }
@@ -613,6 +620,12 @@ 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 5a70c78..cf78cf4 100644
--- a/chrome/browser/renderer_host/render_view_host_delegate.h
+++ b/chrome/browser/renderer_host/render_view_host_delegate.h
@@ -112,6 +112,11 @@ class RenderViewHostDelegate {
// specified events. This gives an opportunity to the browser to process the
// event (used for keyboard shortcuts).
virtual void HandleKeyboardEvent(const WebKeyboardEvent& 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 4511447..9781a0e 100644
--- a/chrome/browser/tab_contents/interstitial_page.cc
+++ b/chrome/browser/tab_contents/interstitial_page.cc
@@ -87,6 +87,7 @@ class InterstitialPage::InterstitialPageRVHViewDelegate
virtual void UpdateDragCursor(bool is_drop_target);
virtual void TakeFocus(bool reverse);
virtual void HandleKeyboardEvent(const WebKeyboardEvent& event);
+ virtual void ForwardMessageToDevToolsClient(const IPC::Message& message);
virtual void OnFindReply(int request_id,
int number_of_matches,
const gfx::Rect& selection_rect,
@@ -502,6 +503,11 @@ 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 1a8b4f6..f9d7075 100644
--- a/chrome/browser/tab_contents/web_contents_view.h
+++ b/chrome/browser/tab_contents/web_contents_view.h
@@ -108,6 +108,13 @@ 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;
+
protected:
WebContentsView() {} // Abstract interface.
diff --git a/chrome/browser/tab_contents/web_contents_view_gtk.cc b/chrome/browser/tab_contents/web_contents_view_gtk.cc
index 62fbd3a..e82b128 100644
--- a/chrome/browser/tab_contents/web_contents_view_gtk.cc
+++ b/chrome/browser/tab_contents/web_contents_view_gtk.cc
@@ -89,6 +89,15 @@ 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 a4273f5..ea5e38c 100644
--- a/chrome/browser/tab_contents/web_contents_view_gtk.h
+++ b/chrome/browser/tab_contents/web_contents_view_gtk.h
@@ -30,6 +30,8 @@ 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 d576605..44772a5 100644
--- a/chrome/browser/tab_contents/web_contents_view_mac.h
+++ b/chrome/browser/tab_contents/web_contents_view_mac.h
@@ -46,6 +46,8 @@ 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 c784ee0..a382bca 100644
--- a/chrome/browser/tab_contents/web_contents_view_mac.mm
+++ b/chrome/browser/tab_contents/web_contents_view_mac.mm
@@ -99,6 +99,15 @@ 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 b88a899..73602d7 100644
--- a/chrome/browser/tab_contents/web_contents_view_win.cc
+++ b/chrome/browser/tab_contents/web_contents_view_win.cc
@@ -9,6 +9,7 @@
#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/download/download_request_manager.h"
#include "chrome/browser/renderer_host/render_process_host.h"
#include "chrome/browser/renderer_host/render_view_host.h"
@@ -212,6 +213,26 @@ 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()->host_id(), 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::UpdateDragCursor(bool is_drop_target) {
drop_target_->set_is_drop_target(is_drop_target);
}
diff --git a/chrome/browser/tab_contents/web_contents_view_win.h b/chrome/browser/tab_contents/web_contents_view_win.h
index 6b891cf..afa2c3a 100644
--- a/chrome/browser/tab_contents/web_contents_view_win.h
+++ b/chrome/browser/tab_contents/web_contents_view_win.h
@@ -10,10 +10,12 @@
#include "chrome/browser/tab_contents/web_contents_view.h"
#include "chrome/views/widget_win.h"
+class DevToolsWindow;
class SadTabView;
struct WebDropData;
class WebDropTarget;
+
// Windows-specific implementation of the WebContentsView. It is a HWND that
// contains all of the contents of the tab and associated child views.
class WebContentsViewWin : public WebContentsView,
@@ -39,6 +41,8 @@ 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);
// Backend implementation of RenderViewHostDelegate::View.
virtual WebContents* CreateNewWindowInternal(
@@ -96,6 +100,9 @@ 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_;