summaryrefslogtreecommitdiffstats
path: root/content/browser/devtools/service_worker_devtools_manager.cc
diff options
context:
space:
mode:
Diffstat (limited to 'content/browser/devtools/service_worker_devtools_manager.cc')
-rw-r--r--content/browser/devtools/service_worker_devtools_manager.cc81
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