// 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::GetForWorker( int worker_process_id, int worker_route_id) { if (scoped_refptr 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 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