Chromium Code Reviews| 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()); |