diff options
author | pfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-24 13:54:28 +0000 |
---|---|---|
committer | pfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-24 13:54:28 +0000 |
commit | d0ef30f4636680ba1ca213d72bb13540fb5ce7f2 (patch) | |
tree | 5c76b111a2e8a54e7d6343cdf56d6eec4b3cd75b /chrome | |
parent | 8ee332ca459d463eecb7807ecd966eda13be0456 (diff) | |
download | chromium_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.cc | 10 | ||||
-rw-r--r-- | chrome/browser/debugger/devtools_manager.cc | 23 | ||||
-rw-r--r-- | chrome/browser/debugger/devtools_manager.h | 7 | ||||
-rw-r--r-- | chrome/browser/tab_contents/render_view_context_menu.cc | 9 | ||||
-rw-r--r-- | chrome/renderer/devtools_agent.cc | 6 | ||||
-rw-r--r-- | chrome/renderer/devtools_agent.h | 1 | ||||
-rw-r--r-- | chrome/renderer/devtools_messages_internal.h | 5 |
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) |