Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(786)

Unified Diff: content/browser/devtools/protocol/service_worker_handler.cc

Issue 976353002: DevTools: land service worker handler (patch 1). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@worker2
Patch Set: review comments addressed Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/devtools/protocol/service_worker_handler.cc
diff --git a/content/browser/devtools/protocol/service_worker_handler.cc b/content/browser/devtools/protocol/service_worker_handler.cc
new file mode 100644
index 0000000000000000000000000000000000000000..dade0811c2bb16484916ceabae8270e5a3724527
--- /dev/null
+++ b/content/browser/devtools/protocol/service_worker_handler.cc
@@ -0,0 +1,125 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/devtools/protocol/service_worker_handler.h"
+
+#include "content/browser/devtools/service_worker_devtools_manager.h"
+#include "content/public/browser/devtools_agent_host.h"
+
+namespace content {
+namespace devtools {
+namespace service_worker {
+
+using Response = DevToolsProtocolClient::Response;
+
+ServiceWorkerHandler::ServiceWorkerHandler() {
+}
+
+ServiceWorkerHandler::~ServiceWorkerHandler() {
+ Disable();
+}
+
+void ServiceWorkerHandler::SetClient(
+ scoped_ptr<DevToolsProtocolClient> client) {
+ client_.swap(client);
+}
+
+void ServiceWorkerHandler::Detached() {
+ Disable();
+}
+
+Response ServiceWorkerHandler::Enable() {
+ DevToolsAgentHost::List agent_hosts;
+ ServiceWorkerDevToolsManager::GetInstance()->AddAllAgentHosts(&agent_hosts);
+ ServiceWorkerDevToolsManager::GetInstance()->AddObserver(this);
+ for (auto host : agent_hosts)
+ WorkerCreated(host.get());
+ return Response::OK();
+}
+
+Response ServiceWorkerHandler::Disable() {
+ ServiceWorkerDevToolsManager::GetInstance()->RemoveObserver(this);
+ for (const auto& pair : attached_hosts_)
+ pair.second->DetachClient();
+ attached_hosts_.clear();
+ return Response::OK();
+}
+
+Response ServiceWorkerHandler::SendMessage(
+ const std::string& worker_id,
+ const std::string& message) {
+ auto it = attached_hosts_.find(worker_id);
+ if (it == attached_hosts_.end())
+ return Response::InternalError("Not connected to the worker");
+
+ it->second->DispatchProtocolMessage(message);
+ return Response::OK();
+}
+
+Response ServiceWorkerHandler::Attach(const std::string& worker_id) {
+ scoped_refptr<DevToolsAgentHost> host =
+ DevToolsAgentHost::GetForId(worker_id);
+ if (!host)
+ return Response::InternalError("No such worker available");
+
+ if (host->IsAttached())
+ return Response::InternalError("Another client is already attached");
+
+ attached_hosts_[worker_id] = host;
+ host->AttachClient(this);
+ return Response::OK();
+}
+
+Response ServiceWorkerHandler::Detach(const std::string& worker_id) {
+ auto it = attached_hosts_.find(worker_id);
+ if (it == attached_hosts_.end())
+ return Response::InternalError("Not connected to the worker");
+
+ attached_hosts_.erase(worker_id);
+ it->second->DetachClient();
+ return Response::OK();
+}
+
+void ServiceWorkerHandler::DispatchProtocolMessage(
+ DevToolsAgentHost* host,
+ const std::string& message) {
+ auto it = attached_hosts_.find(host->GetId());
+ if (it == attached_hosts_.end())
+ return; // Already disconnected.
+
+ // TODO(pfeldman): uncomment once generator is in place.
+ // client_->DispatchMessage(
+ // DispatchMessageParams::Create()->
+ // set_worker_id(host->GetId())->
+ // set_message(message));
+}
+
+void ServiceWorkerHandler::AgentHostClosed(
+ DevToolsAgentHost* host,
+ bool replaced_with_another_client) {
+ WorkerDestroyed(host);
+}
+
+void ServiceWorkerHandler::WorkerCreated(
+ DevToolsAgentHost* host) {
+ // TODO(pfeldman): uncomment once generator is in place.
+ // client_->WorkerCreated(WorkerCreatedParams::Create()->
+ // set_worker_id(host->GetId())->
+ // set_url(host->GetURL().spec()));
+}
+
+void ServiceWorkerHandler::WorkerDestroyed(
+ DevToolsAgentHost* host) {
+ auto it = attached_hosts_.find(host->GetId());
+ if (it == attached_hosts_.end())
+ return;
+ // TODO(pfeldman): uncomment once generator is in place.
+ // client_->WorkerTerminated(WorkerTerminatedParams::Create()->
+ // set_worker_id(host->GetId()));
+ attached_hosts_.erase(it);
+}
+
+} // namespace service_worker
+} // namespace devtools
+} // namespace content

Powered by Google App Engine
This is Rietveld 408576698