[webkit-reviews] review requested: [Bug 39302] [Chromium] WebDevToolsAgentClient::sendMessageToFrontendOnIOThread needs to be implemented as virtual function : [Attachment 58812] proposed patch

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Tue Jun 15 13:29:02 PDT 2010


Mikhail Naganov <mnaganov at chromium.org> has asked  for review:
Bug 39302: [Chromium] WebDevToolsAgentClient::sendMessageToFrontendOnIOThread
needs to be implemented as virtual function
https://bugs.webkit.org/show_bug.cgi?id=39302

Attachment 58812: proposed patch
https://bugs.webkit.org/attachment.cgi?id=58812&action=review

------- Additional Comments from Mikhail Naganov <mnaganov at chromium.org>
Below is the corresponding Chromium change. After applying it, a cleanup change
to WebKit will be required.
Also, after applying the WebKit patch, Heap snapshots will stop working until
Chromium change will be applied.
I see no other good way of dealing with it, as sendMessageToFrontendOnIOThread
is declared and used in
WebKit, but defined in Chromium. Thus, to remove it, we first need to remove
its usage (WebKit), then
definition (Chromium), then declaration (WebKit again).

diff --git a/chrome/renderer/devtools_agent.cc
b/chrome/renderer/devtools_agent.cc
index 5adfa09..42f32e2 100644
--- a/chrome/renderer/devtools_agent.cc
+++ b/chrome/renderer/devtools_agent.cc
@@ -57,12 +57,14 @@ DevToolsAgent::DevToolsAgent(int routing_id, RenderView*
render_view)
     : routing_id_(routing_id),
       render_view_(render_view) {
   agent_for_routing_id_[routing_id] = this;
+  DevToolsAgentFilter::SetDevToolsAgent(this);
 
   CommandLine* cmd = CommandLine::ForCurrentProcess();
   expose_v8_debugger_protocol_ =cmd->HasSwitch(switches::kRemoteShellPort);
 }
 
 DevToolsAgent::~DevToolsAgent() {
+  DevToolsAgentFilter::SetDevToolsAgent(NULL);
   agent_for_routing_id_.erase(routing_id_);
 }
 
@@ -96,6 +98,13 @@ void DevToolsAgent::sendMessageToFrontend(
   render_view_->Send(m);
 }
 
+
+void DevToolsAgent::sendMessageToFrontendFromIOThread(
+    const WebKit::WebDevToolsMessageData& data) {
+  DevToolsAgentFilter::SendRpcMessage(DevToolsMessageData(data));
+}
+
+
 int DevToolsAgent::hostIdentifier() {
   return routing_id_;
 }
@@ -195,9 +204,3 @@ WebDevToolsAgent* DevToolsAgent::GetWebAgent() {
     return NULL;
   return web_view->devToolsAgent();
 }
-
-// static
-void WebKit::WebDevToolsAgentClient::sendMessageToFrontendOnIOThread(
-    const WebDevToolsMessageData& data) {
-  DevToolsAgentFilter::SendRpcMessage(DevToolsMessageData(data));
-}
diff --git a/chrome/renderer/devtools_agent.h
b/chrome/renderer/devtools_agent.h
index 23fa10c..f1262d0 100644
--- a/chrome/renderer/devtools_agent.h
+++ b/chrome/renderer/devtools_agent.h
@@ -40,6 +40,8 @@ class DevToolsAgent : public WebKit::WebDevToolsAgentClient {

   // WebDevToolsAgentClient implementation
   virtual void sendMessageToFrontend(
       const WebKit::WebDevToolsMessageData& data);
+  virtual void sendMessageToFrontendFromIOThread(
+      const WebKit::WebDevToolsMessageData& data);
 
   virtual int hostIdentifier();
   virtual void forceRepaint();
diff --git a/chrome/renderer/devtools_agent_filter.cc
b/chrome/renderer/devtools_agent_filter.cc
index 5eb54ed..01c1be0 100644
--- a/chrome/renderer/devtools_agent_filter.cc
+++ b/chrome/renderer/devtools_agent_filter.cc
@@ -28,6 +28,8 @@ void DevToolsAgentFilter::DispatchMessageLoop() {
 }
 
 // static
+DevToolsAgent* DevToolsAgentFilter::agent_ = NULL;
+// static
 IPC::Channel* DevToolsAgentFilter::channel_ = NULL;
 // static
 int DevToolsAgentFilter::current_routing_id_ = 0;
@@ -65,8 +67,13 @@ void DevToolsAgentFilter::OnDebuggerPauseScript() {
 }
 
 void DevToolsAgentFilter::OnRpcMessage(const DevToolsMessageData& data) {
-  message_handled_ = WebDevToolsAgent::dispatchMessageFromFrontendOnIOThread(
-      data.ToWebDevToolsMessageData());
+  if (agent_ != NULL) {
+    message_handled_ =
WebDevToolsAgent::dispatchMessageFromFrontendOnIOThread(
+	 agent_,
+	 data.ToWebDevToolsMessageData());
+  } else {
+    message_handled_ = false;
+  }
 }
 
 // static
diff --git a/chrome/renderer/devtools_agent_filter.h
b/chrome/renderer/devtools_agent_filter.h
index 8d23918..caae82b 100644
--- a/chrome/renderer/devtools_agent_filter.h
+++ b/chrome/renderer/devtools_agent_filter.h
@@ -10,6 +10,7 @@
 
 #include "ipc/ipc_channel_proxy.h"
 
+class DevToolsAgent;
 struct DevToolsMessageData;
 
 // DevToolsAgentFilter is registered as an IPC filter in order to be able to
@@ -25,6 +26,7 @@ class DevToolsAgentFilter : public
IPC::ChannelProxy::MessageFilter {
   virtual ~DevToolsAgentFilter();
 
   static void SendRpcMessage(const DevToolsMessageData& data);
+  static void SetDevToolsAgent(DevToolsAgent* agent) { agent_ = agent; }
 
  private:
   // IPC::ChannelProxy::MessageFilter override. Called on IO thread.
@@ -46,6 +48,7 @@ class DevToolsAgentFilter : public
IPC::ChannelProxy::MessageFilter {
   // from IO thread.
   static int current_routing_id_;
   static IPC::Channel* channel_;
+  static DevToolsAgent* agent_;
 
   DISALLOW_COPY_AND_ASSIGN(DevToolsAgentFilter);
 };


More information about the webkit-reviews mailing list