Index: content/browser/devtools/service_worker_devtools_manager.cc |
diff --git a/content/browser/devtools/service_worker_devtools_manager.cc b/content/browser/devtools/service_worker_devtools_manager.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..18b3eb56ff54cb94c24c70a0f524120f66a502de |
--- /dev/null |
+++ b/content/browser/devtools/service_worker_devtools_manager.cc |
@@ -0,0 +1,97 @@ |
+// Copyright 2014 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/service_worker_devtools_manager.h" |
+ |
+#include "content/browser/devtools/devtools_manager.h" |
+#include "content/browser/devtools/ipc_devtools_agent_host.h" |
+#include "content/browser/devtools/service_worker_devtools_agent_host.h" |
+#include "content/browser/devtools/shared_worker_devtools_agent_host.h" |
+#include "content/browser/shared_worker/shared_worker_instance.h" |
+#include "content/common/devtools_messages.h" |
+#include "content/public/browser/browser_thread.h" |
+#include "content/public/browser/render_process_host.h" |
+#include "content/public/browser/worker_service.h" |
+#include "ipc/ipc_listener.h" |
+ |
+namespace content { |
+ |
+ServiceWorkerDevToolsManager::ServiceWorkerIdentifier::ServiceWorkerIdentifier( |
+ const ServiceWorkerContextCore* context, |
+ base::WeakPtr<ServiceWorkerContextCore> context_weak, |
+ int64 version_id, |
+ const GURL& url) |
+ : context_(context), |
+ context_weak_(context_weak), |
+ version_id_(version_id), |
+ url_(url) { |
+} |
+ |
+ServiceWorkerDevToolsManager::ServiceWorkerIdentifier::ServiceWorkerIdentifier( |
+ const ServiceWorkerIdentifier& other) |
+ : context_(other.context_), |
+ context_weak_(other.context_weak_), |
+ version_id_(other.version_id_), |
+ url_(other.url_) { |
+} |
+ |
+ServiceWorkerDevToolsManager:: |
+ServiceWorkerIdentifier::~ServiceWorkerIdentifier() { |
+} |
+ |
+bool ServiceWorkerDevToolsManager::ServiceWorkerIdentifier::Matches( |
+ const ServiceWorkerIdentifier& other) const { |
+ return context_ == other.context_ && version_id_ == other.version_id_; |
+} |
+ |
+// static |
+ServiceWorkerDevToolsManager* ServiceWorkerDevToolsManager::GetInstance() { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ return Singleton<ServiceWorkerDevToolsManager>::get(); |
+} |
+ |
+bool ServiceWorkerDevToolsManager::WorkerCreated( |
+ int worker_process_id, |
+ int worker_route_id, |
+ const ServiceWorkerIdentifier& service_worker_id) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ const WorkerId id(worker_process_id, worker_route_id); |
+ AgentHostMap::iterator it = FindExistingWorkerAgentHost(service_worker_id); |
+ if (it == workers().end()) { |
+ workers()[id] = new ServiceWorkerDevToolsAgentHost( |
+ id, service_worker_id, debug_service_worker_on_start_); |
+ DevToolsManager::GetInstance()->AgentHostChanged(workers()[id]); |
+ return debug_service_worker_on_start_; |
+ } |
+ WorkerRestarted(id, it); |
+ return true; |
+} |
+ |
+void ServiceWorkerDevToolsManager::WorkerStopIgnored(int worker_process_id, |
+ int worker_route_id) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ // TODO(pfeldman): Show a console message to tell the user that UA didn't |
+ // terminate the worker because devtools is attached. |
+} |
+ |
+ServiceWorkerDevToolsManager::ServiceWorkerDevToolsManager() |
+ : debug_service_worker_on_start_(false) { |
+} |
+ |
+ServiceWorkerDevToolsManager::~ServiceWorkerDevToolsManager() { |
+} |
+ |
+ServiceWorkerDevToolsManager::AgentHostMap::iterator |
+ServiceWorkerDevToolsManager::FindExistingWorkerAgentHost( |
+ const ServiceWorkerIdentifier& service_worker_id) { |
+ AgentHostMap::iterator it = workers().begin(); |
+ for (; it != workers().end(); ++it) { |
+ if (static_cast<ServiceWorkerDevToolsAgentHost*>( |
+ it->second)->Matches(service_worker_id)) |
+ break; |
+ } |
+ return it; |
+} |
+ |
+} // namespace content |