Index: content/browser/devtools/worker_devtools_manager.cc |
diff --git a/content/browser/devtools/worker_devtools_manager.cc b/content/browser/devtools/worker_devtools_manager.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ad21c9ac973c5fb2524de0fc5587a9d7c3c535e2 |
--- /dev/null |
+++ b/content/browser/devtools/worker_devtools_manager.cc |
@@ -0,0 +1,84 @@ |
+// 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/worker_devtools_manager.h" |
+ |
+#include "content/browser/devtools/devtools_manager.h" |
+#include "content/browser/devtools/service_worker_devtools_manager.h" |
+#include "content/browser/devtools/shared_worker_devtools_manager.h" |
+#include "content/browser/devtools/worker_devtools_agent_host.h" |
+#include "content/public/browser/browser_thread.h" |
+ |
+namespace content { |
+ |
+// Called on the UI thread. |
+// static |
+scoped_refptr<DevToolsAgentHost> DevToolsAgentHost::GetForWorker( |
+ int worker_process_id, |
+ int worker_route_id) { |
+ if (scoped_refptr<DevToolsAgentHost> host = |
+ SharedWorkerDevToolsManager::GetInstance() |
+ ->GetDevToolsAgentHostForWorker(worker_process_id, worker_route_id)) { |
+ return host; |
+ } |
+ return ServiceWorkerDevToolsManager::GetInstance() |
+ ->GetDevToolsAgentHostForWorker(worker_process_id, worker_route_id); |
+} |
+ |
+DevToolsAgentHostImpl* |
+WorkerDevToolsManager::GetDevToolsAgentHostForWorker(int worker_process_id, |
+ int worker_route_id) { |
+ AgentHostMap::iterator it = workers_.find( |
+ WorkerId(worker_process_id, worker_route_id)); |
+ return it == workers_.end() ? NULL : it->second; |
+} |
+ |
+void WorkerDevToolsManager::AddAllAgentHosts(DevToolsAgentHost::List* result) { |
+ for (auto& worker : workers_) { |
+ if (!worker.second->IsTerminated()) |
+ result->push_back(worker.second); |
+ } |
+} |
+ |
+void WorkerDevToolsManager::WorkerDestroyed(int worker_process_id, |
+ int worker_route_id) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ const WorkerId id(worker_process_id, worker_route_id); |
+ AgentHostMap::iterator it = workers_.find(id); |
+ DCHECK(it != workers_.end()); |
+ scoped_refptr<WorkerDevToolsAgentHost> agent_host(it->second); |
+ agent_host->WorkerDestroyed(); |
+ DevToolsManager::GetInstance()->AgentHostChanged(agent_host); |
+} |
+ |
+void WorkerDevToolsManager::WorkerReadyForInspection(int worker_process_id, |
+ int worker_route_id) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ const WorkerId id(worker_process_id, worker_route_id); |
+ AgentHostMap::iterator it = workers_.find(id); |
+ DCHECK(it != workers_.end()); |
+ it->second->WorkerReadyForInspection(); |
+} |
+ |
+WorkerDevToolsManager::WorkerDevToolsManager() { |
+} |
+ |
+WorkerDevToolsManager::~WorkerDevToolsManager() { |
+} |
+ |
+void WorkerDevToolsManager::RemoveInspectedWorkerData(WorkerId id) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ workers_.erase(id); |
+} |
+ |
+void WorkerDevToolsManager::WorkerRestarted(const WorkerId& id, |
+ const AgentHostMap::iterator& it) { |
+ WorkerDevToolsAgentHost* agent_host = it->second; |
+ agent_host->WorkerRestarted(id); |
+ workers_.erase(it); |
+ workers_[id] = agent_host; |
+ DevToolsManager::GetInstance()->AgentHostChanged(agent_host); |
+} |
+ |
+} // namespace content |