diff options
Diffstat (limited to 'content/browser/devtools/service_worker_devtools_manager.cc')
-rw-r--r-- | content/browser/devtools/service_worker_devtools_manager.cc | 81 |
1 files changed, 72 insertions, 9 deletions
diff --git a/content/browser/devtools/service_worker_devtools_manager.cc b/content/browser/devtools/service_worker_devtools_manager.cc index b0c5c60..b2780be 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 |