Index: content/browser/devtools/service_worker_devtools_agent_host.cc |
diff --git a/content/browser/devtools/service_worker_devtools_agent_host.cc b/content/browser/devtools/service_worker_devtools_agent_host.cc |
index a8cc6a29f38f9f00890fbbddb87bcfa765b65c6c..7183f28bc77943df629bab81f60988faa4842e01 100644 |
--- a/content/browser/devtools/service_worker_devtools_agent_host.cc |
+++ b/content/browser/devtools/service_worker_devtools_agent_host.cc |
@@ -4,11 +4,15 @@ |
#include "content/browser/devtools/service_worker_devtools_agent_host.h" |
+#include "base/json/json_writer.h" |
#include "base/strings/stringprintf.h" |
+#include "content/browser/devtools/devtools_manager.h" |
+#include "content/browser/devtools/protocol/devtools_protocol_handler.h" |
#include "content/browser/devtools/service_worker_devtools_manager.h" |
#include "content/browser/service_worker/service_worker_context_core.h" |
#include "content/browser/service_worker/service_worker_version.h" |
#include "content/public/browser/browser_thread.h" |
+#include "content/public/browser/devtools_manager_delegate.h" |
#include "content/public/browser/render_process_host.h" |
namespace content { |
@@ -54,7 +58,11 @@ ServiceWorkerDevToolsAgentHost::ServiceWorkerDevToolsAgentHost( |
WorkerId worker_id, |
const ServiceWorkerIdentifier& service_worker) |
: WorkerDevToolsAgentHost(worker_id), |
- service_worker_(new ServiceWorkerIdentifier(service_worker)) { |
+ service_worker_(new ServiceWorkerIdentifier(service_worker)), |
+ protocol_handler_(new DevToolsProtocolHandler( |
+ base::Bind( |
+ &ServiceWorkerDevToolsAgentHost::DispatchOnInspectorFrontend, |
+ base::Unretained(this)))) { |
} |
DevToolsAgentHost::Type ServiceWorkerDevToolsAgentHost::GetType() { |
@@ -92,6 +100,32 @@ void ServiceWorkerDevToolsAgentHost::UnregisterWorker() { |
service_worker_->version_id())); |
} |
+void ServiceWorkerDevToolsAgentHost::DispatchProtocolMessage( |
pfeldman
2015/03/23 09:05:25
Lets have this implemented in the devtools_agent_h
|
+ const std::string& message) { |
+ scoped_ptr<base::DictionaryValue> command = |
+ protocol_handler_->ParseCommand(message); |
+ if (!command) |
+ return; |
+ |
+ DevToolsManagerDelegate* delegate = |
+ DevToolsManager::GetInstance()->delegate(); |
+ if (delegate) { |
+ scoped_ptr<base::DictionaryValue> response( |
+ delegate->HandleCommand(this, command.get())); |
+ if (response) { |
+ std::string json_response; |
+ base::JSONWriter::Write(response.get(), &json_response); |
+ DispatchOnInspectorFrontend(json_response); |
+ return; |
+ } |
+ } |
+ |
+ if (protocol_handler_->HandleOptionalCommand(command.Pass())) |
+ return; |
+ |
+ IPCDevToolsAgentHost::DispatchProtocolMessage(message); |
+} |
+ |
void ServiceWorkerDevToolsAgentHost::OnClientAttached() { |
WorkerDevToolsAgentHost::OnClientAttached(); |
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
@@ -115,6 +149,13 @@ bool ServiceWorkerDevToolsAgentHost::Matches( |
return service_worker_->Matches(other); |
} |
+void ServiceWorkerDevToolsAgentHost::DispatchOnInspectorFrontend( |
+ const std::string& message) { |
+ if (!IsAttached()) |
+ return; |
+ SendMessageToClient(message); |
+} |
+ |
ServiceWorkerDevToolsAgentHost::~ServiceWorkerDevToolsAgentHost() { |
ServiceWorkerDevToolsManager::GetInstance()->RemoveInspectedWorkerData( |
worker_id()); |