summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorpfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-24 13:54:28 +0000
committerpfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-24 13:54:28 +0000
commitd0ef30f4636680ba1ca213d72bb13540fb5ce7f2 (patch)
tree5c76b111a2e8a54e7d6343cdf56d6eec4b3cd75b /chrome
parent8ee332ca459d463eecb7807ecd966eda13be0456 (diff)
downloadchromium_src-d0ef30f4636680ba1ca213d72bb13540fb5ce7f2.zip
chromium_src-d0ef30f4636680ba1ca213d72bb13540fb5ce7f2.tar.gz
chromium_src-d0ef30f4636680ba1ca213d72bb13540fb5ce7f2.tar.bz2
Wire 'Inspect Element' action to the new DevTools (depending on the devtools flag):
- Add new devtools IPC message - Expose WebView's hit target - Refactor dom_agent interaction not to send information known to client - Collect incoming messages on the client until frontend is loaded - Add Inspect Element scenario into the devtools_host_stub Review URL: http://codereview.chromium.org/45022 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@12355 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/browser.cc10
-rw-r--r--chrome/browser/debugger/devtools_manager.cc23
-rw-r--r--chrome/browser/debugger/devtools_manager.h7
-rw-r--r--chrome/browser/tab_contents/render_view_context_menu.cc9
-rw-r--r--chrome/renderer/devtools_agent.cc6
-rw-r--r--chrome/renderer/devtools_agent.h1
-rw-r--r--chrome/renderer/devtools_messages_internal.h5
7 files changed, 51 insertions, 10 deletions
diff --git a/chrome/browser/browser.cc b/chrome/browser/browser.cc
index 8c7ed5a..eecdd1a 100644
--- a/chrome/browser/browser.cc
+++ b/chrome/browser/browser.cc
@@ -16,7 +16,6 @@
#include "chrome/browser/browser_window.h"
#include "chrome/browser/character_encoding.h"
#include "chrome/browser/debugger/devtools_manager.h"
-#include "chrome/browser/debugger/devtools_window.h"
#include "chrome/browser/location_bar.h"
#include "chrome/browser/metrics/user_metrics.h"
#include "chrome/browser/net/url_fixer_upper.h"
@@ -947,14 +946,7 @@ void Browser::OpenDebuggerWindow() {
if (CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableOutOfProcessDevTools)) {
DevToolsManager* manager = g_browser_process->devtools_manager();
- DevToolsClientHost* host = manager->GetDevToolsClientHostFor(*wc);
- if (!host) {
- host = DevToolsWindow::Create();
- manager->RegisterDevToolsClientHostFor(*wc, host);
- }
- DevToolsWindow* window = host->AsDevToolsWindow();
- if (window)
- window->Show();
+ manager->OpenDevToolsWindow(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/debugger/devtools_manager.cc b/chrome/browser/debugger/devtools_manager.cc
index 470fb5c..9f63a97 100644
--- a/chrome/browser/debugger/devtools_manager.cc
+++ b/chrome/browser/debugger/devtools_manager.cc
@@ -11,6 +11,7 @@
#include "chrome/browser/tab_contents/web_contents.h"
#include "chrome/common/notification_registrar.h"
#include "chrome/common/notification_type.h"
+#include "chrome/renderer/devtools_messages.h"
DevToolsManager::DevToolsManager() : web_contents_listeners_(NULL) {
}
@@ -127,6 +128,28 @@ void DevToolsManager::ForwardToDevToolsClient(const RenderViewHost& from,
target_host->SendMessageToClient(message);
}
+void DevToolsManager::OpenDevToolsWindow(WebContents* wc) {
+ DevToolsClientHost* host = GetDevToolsClientHostFor(*wc);
+ if (!host) {
+ host = DevToolsWindow::Create();
+ RegisterDevToolsClientHostFor(*wc, host);
+ }
+ DevToolsWindow* window = host->AsDevToolsWindow();
+ if (window)
+ window->Show();
+}
+
+void DevToolsManager::InspectElement(WebContents* wc, int x, int y) {
+ OpenDevToolsWindow(wc);
+ RenderViewHost* target_host = wc->render_view_host();
+ if (!target_host) {
+ return;
+ }
+ IPC::Message* m = new DevToolsAgentMsg_InspectElement(x, y);
+ m->set_routing_id(target_host->routing_id());
+ target_host->Send(m);
+}
+
void DevToolsManager::ClientHostClosing(DevToolsClientHost* host) {
NavigationController* controller = GetDevToolsAgentNavigationController(
*host);
diff --git a/chrome/browser/debugger/devtools_manager.h b/chrome/browser/debugger/devtools_manager.h
index fe1c803..1f9200f 100644
--- a/chrome/browser/debugger/devtools_manager.h
+++ b/chrome/browser/debugger/devtools_manager.h
@@ -46,6 +46,13 @@ class DevToolsManager : public NotificationObserver,
void ForwardToDevToolsClient(const RenderViewHost& from,
const IPC::Message& message);
+ void OpenDevToolsWindow(WebContents* wc);
+
+ // Starts element inspection in the devtools client.
+ // Creates one by means of OpenDevToolsWindow if no client
+ // exists.
+ void InspectElement(WebContents* web_contents, int x, int y);
+
private:
// NotificationObserver override.
virtual void Observe(NotificationType type,
diff --git a/chrome/browser/tab_contents/render_view_context_menu.cc b/chrome/browser/tab_contents/render_view_context_menu.cc
index 3f94dc7..e6ac8eb 100644
--- a/chrome/browser/tab_contents/render_view_context_menu.cc
+++ b/chrome/browser/tab_contents/render_view_context_menu.cc
@@ -9,6 +9,7 @@
#include "base/scoped_clipboard_writer.h"
#include "chrome/app/chrome_dll_resource.h"
#include "chrome/browser/browser_process.h"
+#include "chrome/browser/debugger/devtools_manager.h"
#include "chrome/browser/download/download_manager.h"
#include "chrome/browser/profile.h"
#include "chrome/browser/search_engines/template_url_model.h"
@@ -621,7 +622,13 @@ void RenderViewContextMenu::CopyImageAt(int x, int y) {
}
void RenderViewContextMenu::Inspect(int x, int y) {
- source_web_contents_->render_view_host()->InspectElementAt(x, y);
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableOutOfProcessDevTools)) {
+ g_browser_process->devtools_manager()->InspectElement(
+ source_web_contents_, x, y);
+ } else {
+ source_web_contents_->render_view_host()->InspectElementAt(x, y);
+ }
}
void RenderViewContextMenu::WriteTextToClipboard(
diff --git a/chrome/renderer/devtools_agent.cc b/chrome/renderer/devtools_agent.cc
index 449b250..4d52fca1 100644
--- a/chrome/renderer/devtools_agent.cc
+++ b/chrome/renderer/devtools_agent.cc
@@ -87,6 +87,7 @@ bool DevToolsAgent::OnMessageReceived(const IPC::Message& message) {
IPC_MESSAGE_HANDLER(DevToolsAgentMsg_DebugBreak, OnDebugBreak)
IPC_MESSAGE_HANDLER(DevToolsAgentMsg_DebugCommand, OnDebugCommand)
IPC_MESSAGE_HANDLER(DevToolsAgentMsg_RpcMessage, OnRpcMessage)
+ IPC_MESSAGE_HANDLER(DevToolsAgentMsg_InspectElement, OnInspectElement)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
@@ -175,6 +176,11 @@ void DevToolsAgent::OnRpcMessage(const std::string& raw_msg) {
this, &DevToolsAgent::DispatchRpcMessage, raw_msg));
}
+void DevToolsAgent::OnInspectElement(int x, int y) {
+ WebDevToolsAgent* web_agent = view_->webview()->GetWebDevToolsAgent();
+ web_agent->InspectElement(x, y);
+}
+
void DevToolsAgent::DispatchRpcMessage(const std::string& raw_msg) {
WebDevToolsAgent* web_agent = view_->webview()->GetWebDevToolsAgent();
web_agent->DispatchMessageFromClient(raw_msg);
diff --git a/chrome/renderer/devtools_agent.h b/chrome/renderer/devtools_agent.h
index f285e69..a0c7bfa 100644
--- a/chrome/renderer/devtools_agent.h
+++ b/chrome/renderer/devtools_agent.h
@@ -66,6 +66,7 @@ class DevToolsAgent : public IPC::ChannelProxy::MessageFilter,
void OnDebugBreak(bool force);
void OnDebugCommand(const std::wstring& cmd);
void OnRpcMessage(const std::string& raw_msg);
+ void OnInspectElement(int x, int y);
scoped_refptr<DebuggerBridge> debugger_;
diff --git a/chrome/renderer/devtools_messages_internal.h b/chrome/renderer/devtools_messages_internal.h
index 49eee11..685daa3 100644
--- a/chrome/renderer/devtools_messages_internal.h
+++ b/chrome/renderer/devtools_messages_internal.h
@@ -83,4 +83,9 @@ IPC_BEGIN_MESSAGES(DevToolsAgent)
IPC_MESSAGE_CONTROL1(DevToolsAgentMsg_RpcMessage,
std::string /* raw_msg */)
+ // Inspect element with the given coordinates.
+ IPC_MESSAGE_CONTROL2(DevToolsAgentMsg_InspectElement,
+ int /* x */,
+ int /* y */)
+
IPC_END_MESSAGES(DevToolsAgent)