Chromium Code Reviews| Index: content/worker/worker_devtools_agent.cc |
| diff --git a/content/worker/worker_devtools_agent.cc b/content/worker/worker_devtools_agent.cc |
| index af00871357b73326316bec9ac0753e3a5583b4cb..af92a7a8f4551da4e7ebc898997d631f4cd87d62 100644 |
| --- a/content/worker/worker_devtools_agent.cc |
| +++ b/content/worker/worker_devtools_agent.cc |
| @@ -7,51 +7,98 @@ |
| #include "content/common/devtools_messages.h" |
| #include "content/worker/worker_thread.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebCString.h" |
| +#include "third_party/WebKit/Source/WebKit/chromium/public/WebSharedWorker.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebWorker.h" |
| +using WebKit::WebSharedWorker; |
| using WebKit::WebString; |
| using WebKit::WebWorker; |
| -WorkerDevToolsAgent::WorkerDevToolsAgent(int route_id, WebWorker* webworker) |
| - : route_id_(route_id), |
| - webworker_(webworker) { |
| +namespace { |
| + |
| +template<class T> |
| +class WorkerDevToolsAgentImpl : public WorkerDevToolsAgent { |
| + public: |
| + WorkerDevToolsAgentImpl(int route_id, T* webworker) |
| + : WorkerDevToolsAgent(route_id), |
| + webworker_(webworker) {} |
| + |
| + private: |
| + virtual ~WorkerDevToolsAgentImpl() {} |
| + |
| + // Called on the Worker thread. |
| + virtual bool OnMessageReceived(const IPC::Message& message) { |
| + bool handled = true; |
| + IPC_BEGIN_MESSAGE_MAP(WorkerDevToolsAgentImpl, message) |
| + IPC_MESSAGE_HANDLER(WorkerDevToolsAgentMsg_Attach, OnAttach) |
| + IPC_MESSAGE_HANDLER(WorkerDevToolsAgentMsg_Detach, OnDetach) |
| + IPC_MESSAGE_HANDLER(DevToolsAgentMsg_DispatchOnInspectorBackend, |
| + OnDispatchOnInspectorBackend) |
| + IPC_MESSAGE_UNHANDLED(handled = false) |
| + IPC_END_MESSAGE_MAP() |
| + return handled; |
| + } |
| + |
| + virtual void SendDevToolsMessage(const WebKit::WebString& message); |
| + |
| + void OnAttach() { |
| + webworker_->attachDevTools(); |
| + } |
| + |
| + void OnDetach() { |
| + webworker_->detachDevTools(); |
| + } |
| + |
| + void OnDispatchOnInspectorBackend( |
| + const std::string& message) { |
| + webworker_->dispatchDevToolsMessage(WebString::fromUTF8(message)); |
| + } |
| + |
| + T* webworker_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(WorkerDevToolsAgentImpl); |
| +}; |
| + |
| + |
| +template<> |
| +void WorkerDevToolsAgentImpl<WebWorker>::SendDevToolsMessage( |
|
jam
2011/07/12 18:19:55
nit: it might be easier to read if the constructor
|
| + const WebKit::WebString& message) { |
| + Send(new DevToolsAgentMsg_DispatchMessageFromWorker(route_id_, |
| + message.utf8())); |
| } |
| -WorkerDevToolsAgent::~WorkerDevToolsAgent() { |
| +template<> |
| +void WorkerDevToolsAgentImpl<WebSharedWorker>::SendDevToolsMessage( |
| + const WebKit::WebString& message) { |
| + IPC::Message m = DevToolsClientMsg_DispatchOnInspectorFrontend( |
| + message.utf8()); |
| + m.set_routing_id(route_id_); |
| + Send(new DevToolsHostMsg_ForwardToClient(route_id_, m)); |
| } |
| -// Called on the Worker thread. |
| -bool WorkerDevToolsAgent::OnMessageReceived(const IPC::Message& message) { |
| - bool handled = true; |
| - IPC_BEGIN_MESSAGE_MAP(WorkerDevToolsAgent, message) |
| - IPC_MESSAGE_HANDLER(WorkerDevToolsAgentMsg_Attach, OnAttach) |
| - IPC_MESSAGE_HANDLER(WorkerDevToolsAgentMsg_Detach, OnDetach) |
| - IPC_MESSAGE_HANDLER(WorkerDevToolsAgentMsg_DispatchOnInspectorBackend, |
| - OnDispatchOnInspectorBackend) |
| - IPC_MESSAGE_UNHANDLED(handled = false) |
| - IPC_END_MESSAGE_MAP() |
| - return handled; |
| +} // namespace |
| + |
| +WorkerDevToolsAgent::WorkerDevToolsAgent(int route_id) |
| + : route_id_(route_id) { |
| } |
| -void WorkerDevToolsAgent::OnAttach() { |
| - webworker_->attachDevTools(); |
| +WorkerDevToolsAgent* WorkerDevToolsAgent::CreateForDedicatedWorker( |
| + int route_id, |
| + WebWorker* webworker) { |
| + return new WorkerDevToolsAgentImpl<WebWorker>(route_id, webworker); |
| } |
| -void WorkerDevToolsAgent::OnDetach() { |
| - webworker_->detachDevTools(); |
| +WorkerDevToolsAgent* WorkerDevToolsAgent::CreateForSharedWorker( |
| + int route_id, |
| + WebSharedWorker* webshared_worker) { |
| + return new WorkerDevToolsAgentImpl<WebSharedWorker>(route_id, |
| + webshared_worker); |
| } |
| -void WorkerDevToolsAgent::OnDispatchOnInspectorBackend( |
| - const std::string& message) { |
| - webworker_->dispatchDevToolsMessage(WebString::fromUTF8(message)); |
| +WorkerDevToolsAgent::~WorkerDevToolsAgent() { |
| } |
| bool WorkerDevToolsAgent::Send(IPC::Message* message) { |
| return WorkerThread::current()->Send(message); |
| } |
| - |
| -void WorkerDevToolsAgent::SendDevToolsMessage(const WebString& message) { |
| - Send(new DevToolsAgentMsg_DispatchMessageFromWorker(route_id_, |
| - message.utf8())); |
| -} |