diff options
Diffstat (limited to 'content/browser/devtools/shared_worker_devtools_manager.cc')
-rw-r--r-- | content/browser/devtools/shared_worker_devtools_manager.cc | 79 |
1 files changed, 66 insertions, 13 deletions
diff --git a/content/browser/devtools/shared_worker_devtools_manager.cc b/content/browser/devtools/shared_worker_devtools_manager.cc index e85dfc7..d297698 100644 --- a/content/browser/devtools/shared_worker_devtools_manager.cc +++ b/content/browser/devtools/shared_worker_devtools_manager.cc @@ -17,39 +17,92 @@ SharedWorkerDevToolsManager* SharedWorkerDevToolsManager::GetInstance() { return Singleton<SharedWorkerDevToolsManager>::get(); } +DevToolsAgentHostImpl* +SharedWorkerDevToolsManager::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 SharedWorkerDevToolsManager::AddAllAgentHosts( + DevToolsAgentHost::List* result) { + for (auto& worker : workers_) { + if (!worker.second->IsTerminated()) + result->push_back(worker.second); + } +} + bool SharedWorkerDevToolsManager::WorkerCreated( int worker_process_id, int worker_route_id, const SharedWorkerInstance& instance) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); const WorkerId id(worker_process_id, worker_route_id); - AgentHostMap::iterator it = FindExistingWorkerAgentHost(instance); - if (it == workers().end()) { - WorkerDevToolsManager::WorkerCreated( - id, - new SharedWorkerDevToolsAgentHost(id, instance)); + AgentHostMap::iterator it = + FindExistingWorkerAgentHost(instance); + if (it == workers_.end()) { + workers_[id] = new SharedWorkerDevToolsAgentHost(id, instance); + DevToolsManager::GetInstance()->AgentHostChanged(workers_[id]); return false; } - WorkerRestarted(id, it); + + // Worker restarted. + SharedWorkerDevToolsAgentHost* agent_host = it->second; + agent_host->WorkerRestarted(id); + workers_.erase(it); + workers_[id] = agent_host; + DevToolsManager::GetInstance()->AgentHostChanged(agent_host); return true; } +void SharedWorkerDevToolsManager::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 SharedWorkerDevToolsManager::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<SharedWorkerDevToolsAgentHost> agent_host(it->second); + agent_host->WorkerDestroyed(); + DevToolsManager::GetInstance()->AgentHostChanged(agent_host); +} + +void SharedWorkerDevToolsManager::RemoveInspectedWorkerData(WorkerId id) { + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); + workers_.erase(id); +} +SharedWorkerDevToolsManager::SharedWorkerDevToolsManager() { +} + +SharedWorkerDevToolsManager::~SharedWorkerDevToolsManager() { +} + SharedWorkerDevToolsManager::AgentHostMap::iterator SharedWorkerDevToolsManager::FindExistingWorkerAgentHost( const SharedWorkerInstance& instance) { - AgentHostMap::iterator it = workers().begin(); - for (; it != workers().end(); ++it) { - if (static_cast<SharedWorkerDevToolsAgentHost*>( - it->second)->Matches(instance)) + AgentHostMap::iterator it = workers_.begin(); + for (; it != workers_.end(); ++it) { + if (it->second->Matches(instance)) break; } return it; } -SharedWorkerDevToolsManager::SharedWorkerDevToolsManager() { +void SharedWorkerDevToolsManager::ResetForTesting() { + workers_.clear(); } -SharedWorkerDevToolsManager::~SharedWorkerDevToolsManager() { -} } // namespace content |