diff options
author | yurys@google.com <yurys@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-27 11:54:39 +0000 |
---|---|---|
committer | yurys@google.com <yurys@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-27 11:54:39 +0000 |
commit | 87b603ad919c43e94758d36fd0ba0d3eca2382d5 (patch) | |
tree | 7ae907cbe7bd215324ca8203f605e109aa6e124c /webkit/glue/webdevtoolsagent_impl.cc | |
parent | c13fcbd8fa1d88271f31da179fe920bb08007c55 (diff) | |
download | chromium_src-87b603ad919c43e94758d36fd0ba0d3eca2382d5.zip chromium_src-87b603ad919c43e94758d36fd0ba0d3eca2382d5.tar.gz chromium_src-87b603ad919c43e94758d36fd0ba0d3eca2382d5.tar.bz2 |
1. Implemented an agent providing RPC interface to v8 debugger of the inspected page.
2. Introduce new devtools IPC message to distinguish debugger messages and process them on IO thread so that debugger commands can be processed when v8 is stopped on a breakpoint bloking the render thread.
3. Added RPC message to allow devtool client evaluating JS expressions in the context of the inspected page.
Review URL: http://codereview.chromium.org/42594
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@12639 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue/webdevtoolsagent_impl.cc')
-rw-r--r-- | webkit/glue/webdevtoolsagent_impl.cc | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/webkit/glue/webdevtoolsagent_impl.cc b/webkit/glue/webdevtoolsagent_impl.cc index 1c41145..a096152 100644 --- a/webkit/glue/webdevtoolsagent_impl.cc +++ b/webkit/glue/webdevtoolsagent_impl.cc @@ -12,10 +12,13 @@ #include "Node.h" #include "Page.h" #include "PlatformString.h" +#include "ScriptValue.h" #include <wtf/OwnPtr.h> #undef LOG #include "base/values.h" +#include "webkit/glue/devtools/debugger_agent_impl.h" +#include "webkit/glue/devtools/debugger_agent_manager.h" #include "webkit/glue/devtools/dom_agent_impl.h" #include "webkit/glue/devtools/net_agent_impl.h" #include "webkit/glue/glue_util.h" @@ -29,6 +32,7 @@ using WebCore::Document; using WebCore::InspectorController; using WebCore::Node; using WebCore::Page; +using WebCore::ScriptValue; using WebCore::String; WebDevToolsAgentImpl::WebDevToolsAgentImpl( @@ -38,6 +42,7 @@ WebDevToolsAgentImpl::WebDevToolsAgentImpl( web_view_impl_(web_view_impl), document_(NULL), enabled_(false) { + debugger_agent_delegate_stub_.reset(new DebuggerAgentDelegateStub(this)); dom_agent_delegate_stub_.reset(new DomAgentDelegateStub(this)); net_agent_delegate_stub_.reset(new NetAgentDelegateStub(this)); tools_agent_delegate_stub_.reset(new ToolsAgentDelegateStub(this)); @@ -48,6 +53,8 @@ WebDevToolsAgentImpl::~WebDevToolsAgentImpl() { void WebDevToolsAgentImpl::SetEnabled(bool enabled) { if (enabled && !enabled_) { + debugger_agent_impl_.reset(new DebuggerAgentImpl( + debugger_agent_delegate_stub_.get())); dom_agent_impl_.reset(new DomAgentImpl(dom_agent_delegate_stub_.get())); net_agent_impl_.reset(new NetAgentImpl(net_agent_delegate_stub_.get())); if (document_) { @@ -56,6 +63,7 @@ void WebDevToolsAgentImpl::SetEnabled(bool enabled) { } enabled_ = true; } else if (!enabled) { + debugger_agent_impl_.reset(NULL); dom_agent_impl_.reset(NULL); net_agent_impl_.reset(NULL); enabled_ = false; @@ -108,6 +116,19 @@ void WebDevToolsAgentImpl::HideDOMNodeHighlight() { page->inspectorController()->hideHighlight(); } +void WebDevToolsAgentImpl::EvaluateJavaSctipt(int call_id, const String& js) { + Page* page = web_view_impl_->page(); + if (!page->mainFrame()) { + return; + } + ScriptValue result = page->mainFrame()->loader()->executeScript(js); + String result_string; + if (!result.hasNoValue()) { + result_string = result.toString(NULL); + } + tools_agent_delegate_stub_->DidEvaluateJavaSctipt(call_id, result_string); +} + void WebDevToolsAgentImpl::DispatchMessageFromClient( const std::string& raw_msg) { OwnPtr<ListValue> message( @@ -117,6 +138,13 @@ void WebDevToolsAgentImpl::DispatchMessageFromClient( if (!enabled_) return; + + if (debugger_agent_impl_.get() && + DebuggerAgentDispatch::Dispatch( + debugger_agent_impl_.get(), + *message.get())) + return; + if (DomAgentDispatch::Dispatch(dom_agent_impl_.get(), *message.get())) return; if (NetAgentDispatch::Dispatch(net_agent_impl_.get(), *message.get())) @@ -136,3 +164,8 @@ void WebDevToolsAgentImpl::InspectElement(int x, int y) { void WebDevToolsAgentImpl::SendRpcMessage(const std::string& raw_msg) { delegate_->SendMessageToClient(raw_msg); } + +// static +void WebDevToolsAgent::ExecuteDebuggerCommand(const std::string& command) { + DebuggerAgentManager::ExecuteDebuggerCommand(command); +} |