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 |
index b0c5c60b140bd08a2486b29fb9f3eb81f2156e89..b2780be82b725d5a5fb0ebfc8c9dbd8a65b9bc83 100644 |
--- a/content/browser/devtools/service_worker_devtools_manager.cc |
+++ b/content/browser/devtools/service_worker_devtools_manager.cc |
@@ -7,8 +7,6 @@ |
#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/public/browser/browser_thread.h" |
#include "content/public/browser/render_process_host.h" |
#include "content/public/browser/worker_service.h" |
@@ -50,6 +48,23 @@ ServiceWorkerDevToolsManager* ServiceWorkerDevToolsManager::GetInstance() { |
return Singleton<ServiceWorkerDevToolsManager>::get(); |
} |
+DevToolsAgentHostImpl* |
+ServiceWorkerDevToolsManager::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 ServiceWorkerDevToolsManager::AddAllAgentHosts( |
+ DevToolsAgentHost::List* result) { |
+ for (auto& worker : workers_) { |
+ if (!worker.second->IsTerminated()) |
+ result->push_back(worker.second); |
+ } |
+} |
+ |
bool ServiceWorkerDevToolsManager::WorkerCreated( |
int worker_process_id, |
int worker_route_id, |
@@ -57,16 +72,35 @@ bool ServiceWorkerDevToolsManager::WorkerCreated( |
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()) { |
- WorkerDevToolsManager::WorkerCreated(id, |
- new ServiceWorkerDevToolsAgentHost(id, service_worker_id, |
- debug_service_worker_on_start_)); |
+ if (it == workers_.end()) { |
+ workers_[id] = new ServiceWorkerDevToolsAgentHost( |
+ id, service_worker_id, debug_service_worker_on_start_); |
+ scoped_refptr<WorkerDevToolsAgentHost> protector(workers_[id]); |
+ FOR_EACH_OBSERVER(Observer, observer_list_, |
+ WorkerCreated(protector.get())); |
+ DevToolsManager::GetInstance()->AgentHostChanged(protector.get()); |
return debug_service_worker_on_start_; |
} |
- WorkerRestarted(id, it); |
+ |
+ // Worker was restarted. |
+ ServiceWorkerDevToolsAgentHost* agent_host = it->second; |
+ agent_host->WorkerRestarted(id); |
+ workers_.erase(it); |
+ workers_[id] = agent_host; |
+ DevToolsManager::GetInstance()->AgentHostChanged(agent_host); |
+ |
return it->second->IsAttached(); |
} |
+void ServiceWorkerDevToolsManager::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(); |
+} |
+ |
void ServiceWorkerDevToolsManager::WorkerStopIgnored(int worker_process_id, |
int worker_route_id) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
@@ -74,6 +108,31 @@ void ServiceWorkerDevToolsManager::WorkerStopIgnored(int worker_process_id, |
// terminate the worker because devtools is attached. |
} |
+void ServiceWorkerDevToolsManager::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); |
+ FOR_EACH_OBSERVER(Observer, observer_list_, WorkerDestroyed(it->second)); |
+ agent_host->WorkerDestroyed(); |
+ DevToolsManager::GetInstance()->AgentHostChanged(agent_host); |
+} |
+ |
+void ServiceWorkerDevToolsManager::RemoveInspectedWorkerData(WorkerId id) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ workers_.erase(id); |
+} |
+ |
+void ServiceWorkerDevToolsManager::AddObserver(Observer* observer) { |
+ observer_list_.AddObserver(observer); |
+} |
+ |
+void ServiceWorkerDevToolsManager::RemoveObserver(Observer* observer) { |
+ observer_list_.RemoveObserver(observer); |
+} |
+ |
ServiceWorkerDevToolsManager::ServiceWorkerDevToolsManager() |
: debug_service_worker_on_start_(false) { |
} |
@@ -84,8 +143,8 @@ ServiceWorkerDevToolsManager::~ServiceWorkerDevToolsManager() { |
ServiceWorkerDevToolsManager::AgentHostMap::iterator |
ServiceWorkerDevToolsManager::FindExistingWorkerAgentHost( |
const ServiceWorkerIdentifier& service_worker_id) { |
- AgentHostMap::iterator it = workers().begin(); |
- for (; it != workers().end(); ++it) { |
+ AgentHostMap::iterator it = workers_.begin(); |
+ for (; it != workers_.end(); ++it) { |
if (static_cast<ServiceWorkerDevToolsAgentHost*>( |
it->second)->Matches(service_worker_id)) |
break; |
@@ -93,4 +152,8 @@ ServiceWorkerDevToolsManager::FindExistingWorkerAgentHost( |
return it; |
} |
+void ServiceWorkerDevToolsManager::ResetForTesting() { |
+ workers_.clear(); |
+} |
+ |
} // namespace content |