| 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
|
|
|