summaryrefslogtreecommitdiffstats
path: root/webkit/glue/webdevtoolsclient_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'webkit/glue/webdevtoolsclient_impl.cc')
-rw-r--r--webkit/glue/webdevtoolsclient_impl.cc238
1 files changed, 46 insertions, 192 deletions
diff --git a/webkit/glue/webdevtoolsclient_impl.cc b/webkit/glue/webdevtoolsclient_impl.cc
index b13e6c3..269b159 100644
--- a/webkit/glue/webdevtoolsclient_impl.cc
+++ b/webkit/glue/webdevtoolsclient_impl.cc
@@ -19,6 +19,10 @@
#include "base/string_util.h"
#include "base/values.h"
+#include "webkit/glue/devtools/devtools_rpc_js.h"
+#include "webkit/glue/devtools/dom_agent.h"
+#include "webkit/glue/devtools/net_agent.h"
+#include "webkit/glue/devtools/tools_agent.h"
#include "webkit/glue/glue_util.h"
#include "webkit/glue/webdevtoolsclient_delegate.h"
#include "webkit/glue/webdevtoolsclient_impl.h"
@@ -32,6 +36,13 @@ using WebCore::Node;
using WebCore::Page;
using WebCore::String;
+DEFINE_RPC_JS_BOUND_OBJ(DomAgent, DOM_AGENT_STRUCT,
+ DomAgentDelegate, DOM_AGENT_DELEGATE_STRUCT)
+DEFINE_RPC_JS_BOUND_OBJ(NetAgent, NET_AGENT_STRUCT,
+ NetAgentDelegate, NET_AGENT_DELEGATE_STRUCT)
+DEFINE_RPC_JS_BOUND_OBJ(ToolsAgent, TOOLS_AGENT_STRUCT,
+ ToolsAgentDelegate, TOOLS_AGENT_DELEGATE_STRUCT)
+
/*static*/
WebDevToolsClient* WebDevToolsClient::Create(
WebView* view,
@@ -43,212 +54,55 @@ WebDevToolsClientImpl::WebDevToolsClientImpl(
WebViewImpl* web_view_impl,
WebDevToolsClientDelegate* delegate)
: web_view_impl_(web_view_impl),
- delegate_(delegate),
- last_call_id_(1) {
- dom_agent_stub_.set(new DomAgentStub(this));
- net_agent_stub_.set(new NetAgentStub(this));
- tools_agent_stub_.set(new ToolsAgentStub(this));
-
- BindToJavascript(web_view_impl_->GetMainFrame(), L"DevToolsHost");
- BindMethod("getDocumentElement",
- &WebDevToolsClientImpl::JsGetDocumentElement);
- BindMethod("getChildNodes", &WebDevToolsClientImpl::JsGetChildNodes);
- BindMethod("setAttribute", &WebDevToolsClientImpl::JsSetAttribute);
- BindMethod("removeAttribute", &WebDevToolsClientImpl::JsRemoveAttribute);
- BindMethod("setTextNodeValue", &WebDevToolsClientImpl::JsSetTextNodeValue);
- BindMethod("highlightDOMNode", &WebDevToolsClientImpl::JsHighlightDOMNode);
- BindMethod("hideDOMNodeHighlight",
- &WebDevToolsClientImpl::JsHideDOMNodeHighlight);
-}
-
-WebDevToolsClientImpl::~WebDevToolsClientImpl() {
-}
-
-// DomAgent::DomAgentDelegate implementation.
-void WebDevToolsClientImpl::GetDocumentElementResult(
- int call_id,
- const std::string& root) {
- ProcessCallback(call_id, root);
-}
-
-void WebDevToolsClientImpl::GetChildNodesResult(
- int call_id,
- const std::string& list) {
- ProcessCallback(call_id, list);
-}
-
-void WebDevToolsClientImpl::AttributesUpdated(int id, const Value& attributes) {
- MakeJsCall("dom.setAttributes", id, &attributes);
-}
-
-void WebDevToolsClientImpl::ChildNodesUpdated(int id, const Value& children) {
- MakeJsCall("dom.setChildren", id, &children);
-}
-
-void WebDevToolsClientImpl::ChildNodeInserted(
- int parent_id,
- int prev_id,
- const Value& value) {
- MakeJsCall("dom.nodeInserted", parent_id, prev_id, &value);
-}
-
-void WebDevToolsClientImpl::ChildNodeRemoved(int parent_id, int id) {
- MakeJsCall("dom.nodeRemoved", parent_id, id);
-}
-
-void WebDevToolsClientImpl::HasChildrenUpdated(int id, bool new_value) {
- MakeJsCall("dom.setHasChildren", id, true);
-}
-
-// NetAgent::NetAgentDelegate implementation.
-void WebDevToolsClientImpl::WillSendRequest(
- int identifier,
- const Value& request) {
- MakeJsCall("net.willSendRequest", identifier, &request);
-}
-
-void WebDevToolsClientImpl::DidReceiveResponse(
- int identifier,
- const Value& response) {
- MakeJsCall("net.didReceiveResponse", identifier, &response);
-}
-
-void WebDevToolsClientImpl::DidFinishLoading(int identifier,
- const Value& response) {
- MakeJsCall("net.didFinishLoading", identifier, &response);
-}
-
-void WebDevToolsClientImpl::DidFailLoading(int identifier,
- const Value& response) {
- MakeJsCall("net.didFailLoading", identifier, &response);
-}
-
-void WebDevToolsClientImpl::GetResourceContentResult(
- int call_id,
- const std::string& content) {
- ProcessCallback(call_id, content);
-}
-
-void WebDevToolsClientImpl::UpdateFocusedNode(int node_id) {
- MakeJsCall("tools.updateFocusedNode", node_id);
-}
-
-void WebDevToolsClientImpl::ProcessCallback(
- int call_id,
- const std::string& data) {
- HashMap<int, CppVariant>::iterator it = callbacks_.find(call_id);
- if (it != callbacks_.end()) {
- CppVariant result;
- CppVariant args[2];
- args[0].Set(*GetAsCppVariant());
- args[1].Set(data);
- it->second.Invoke("call", args, 2, result);
- callbacks_.remove(call_id);
- }
-}
-
-void WebDevToolsClientImpl::JsGetResourceSource(
- const CppArgumentList& args,
- CppVariant* result) {
- int call_id = last_call_id_++;
- net_agent_stub_->GetResourceContent(call_id, args[0].ToInt32(),
- webkit_glue::StdStringToString(args[1].ToString()));
- callbacks_.set(call_id, args[1]);
-}
-
-void WebDevToolsClientImpl::JsGetDocumentElement(
- const CppArgumentList& args,
- CppVariant* result) {
- tools_agent_stub_->SetDomAgentEnabled(true);
- tools_agent_stub_->SetNetAgentEnabled(true);
- int call_id = last_call_id_++;
- dom_agent_stub_->GetDocumentElement(call_id);
- callbacks_.set(call_id, args[0]);
- result->SetNull();
-}
-
-void WebDevToolsClientImpl::JsGetChildNodes(
- const CppArgumentList& args,
- CppVariant* result) {
- int call_id = last_call_id_++;
- dom_agent_stub_->GetChildNodes(call_id, args[0].ToInt32());
- callbacks_.set(call_id, args[1]);
- result->SetNull();
-}
-
-void WebDevToolsClientImpl::JsSetAttribute(
- const CppArgumentList& args,
- CppVariant* result) {
- dom_agent_stub_->SetAttribute(args[0].ToInt32(),
- webkit_glue::StdStringToString(args[1].ToString()),
- webkit_glue::StdStringToString(args[2].ToString()));
- result->SetNull();
-}
-
-void WebDevToolsClientImpl::JsRemoveAttribute(
- const CppArgumentList& args,
- CppVariant* result) {
- dom_agent_stub_->RemoveAttribute(args[0].ToInt32(),
- webkit_glue::StdStringToString(args[1].ToString()));
- result->SetNull();
-}
-
-void WebDevToolsClientImpl::JsSetTextNodeValue(
- const CppArgumentList& args,
- CppVariant* result) {
- dom_agent_stub_->SetTextNodeValue(args[0].ToInt32(),
- webkit_glue::StdStringToString(args[1].ToString()));
- result->SetNull();
-}
+ delegate_(delegate) {
+ WebFrame* frame = web_view_impl_->GetMainFrame();
+ dom_agent_obj_.set(new JsDomAgentBoundObj(this, frame, L"RemoteDomAgent"));
+ net_agent_obj_.set(new JsNetAgentBoundObj(this, frame, L"RemoteNetAgent"));
+ tools_agent_obj_.set(new JsToolsAgentBoundObj(this, frame, L"RemoteToolsAgent"));
-void WebDevToolsClientImpl::JsHighlightDOMNode(
- const CppArgumentList& args,
- CppVariant* result) {
- tools_agent_stub_->HighlightDOMNode(args[0].ToInt32());
- result->SetNull();
+ BindToJavascript(frame, L"DevToolsHost");
+ BindMethod("addSourceToFrame", &WebDevToolsClientImpl::JsAddSourceToFrame);
}
-void WebDevToolsClientImpl::JsHideDOMNodeHighlight(const CppArgumentList& args,
- CppVariant* result) {
- tools_agent_stub_->HideDOMNodeHighlight();
- result->SetNull();
-}
-
-void WebDevToolsClientImpl::EvaluateJs(const std::string& expr) {
- web_view_impl_->GetMainFrame()->ExecuteScript(expr);
+WebDevToolsClientImpl::~WebDevToolsClientImpl() {
}
void WebDevToolsClientImpl::DispatchMessageFromAgent(
const std::string& raw_msg) {
OwnPtr<ListValue> message(
static_cast<ListValue*>(DevToolsRpc::ParseMessage(raw_msg)));
- if (DomAgentDelegateDispatch::Dispatch(this, *message.get()))
- return;
- if (NetAgentDelegateDispatch::Dispatch(this, *message.get()))
- return;
- if (ToolsAgentDelegateDispatch::Dispatch(this, *message.get()))
- return;
+
+ std::string expr;
+ if (dom_agent_obj_->Dispatch(*message.get(), &expr)
+ || net_agent_obj_->Dispatch(*message.get(), &expr)
+ || tools_agent_obj_->Dispatch(*message.get(), &expr)) {
+ web_view_impl_->GetMainFrame()->ExecuteScript(expr);
+ }
}
void WebDevToolsClientImpl::SendRpcMessage(const std::string& raw_msg) {
delegate_->SendMessageToAgent(raw_msg);
}
-// static
-std::string WebDevToolsClientImpl::ToJSON(const String& value) {
- StringValue str(webkit_glue::StringToStdString(value));
- return ToJSON(&str);
-}
-
-// static
-std::string WebDevToolsClientImpl::ToJSON(int value) {
- FundamentalValue fund(value);
- return ToJSON(&fund);
-}
+void WebDevToolsClientImpl::JsAddSourceToFrame(
+ const CppArgumentList& args,
+ CppVariant* result) {
+ std::string mime_type = args[0].ToString();
+ std::string source = args[1].ToString();
+ std::string node_id = args[2].ToString();
+
+ Page* page = web_view_impl_->page();
+ Document* document = page->mainFrame()->document();
+ Node* node = document->getElementById(
+ webkit_glue::StdStringToString(node_id));
+ if (!node) {
+ result->SetNull();
+ return;
+ }
-// static
-std::string WebDevToolsClientImpl::ToJSON(const Value* value) {
- std::string json;
- JSONWriter::Write(value, false, &json);
- return json;
+ page->inspectorController()->addSourceToFrame(
+ webkit_glue::StdStringToString(mime_type),
+ webkit_glue::StdStringToString(source),
+ node);
+ result->SetNull();
}