Index: content/browser/devtools/embedded_worker_devtools_manager.cc |
diff --git a/content/browser/devtools/embedded_worker_devtools_manager.cc b/content/browser/devtools/embedded_worker_devtools_manager.cc |
index 3ba61aafeea20e9b12ec8973ef32aa1e3f5cd7cb..e6282acbbb8f119e25787db71fd6938cd1dac1eb 100644 |
--- a/content/browser/devtools/embedded_worker_devtools_manager.cc |
+++ b/content/browser/devtools/embedded_worker_devtools_manager.cc |
@@ -90,7 +90,7 @@ class EmbeddedWorkerDevToolsManager::EmbeddedWorkerDevToolsAgentHost |
public: |
explicit EmbeddedWorkerDevToolsAgentHost(WorkerId worker_id) |
: worker_id_(worker_id), worker_attached_(false) { |
- AttachToWorker(); |
+ WorkerCreated(); |
} |
// DevToolsAgentHost override. |
@@ -139,6 +139,13 @@ class EmbeddedWorkerDevToolsManager::EmbeddedWorkerDevToolsAgentHost |
worker_attached_ = false; |
if (RenderProcessHost* host = RenderProcessHost::FromID(worker_id_.first)) |
host->RemoveRoute(worker_id_.second); |
+ } |
+ |
+ void WorkerCreated() { |
+ AddRef(); |
+ } |
+ |
+ void WorkerDestroyed() { |
Release(); |
} |
@@ -162,7 +169,6 @@ class EmbeddedWorkerDevToolsManager::EmbeddedWorkerDevToolsAgentHost |
if (worker_attached_) |
return; |
worker_attached_ = true; |
- AddRef(); |
if (RenderProcessHost* host = RenderProcessHost::FromID(worker_id_.first)) |
host->AddRoute(worker_id_.second, this); |
} |
@@ -258,26 +264,24 @@ void EmbeddedWorkerDevToolsManager::WorkerDestroyed(int worker_process_id, |
WorkerInfoMap::iterator it = workers_.find(id); |
DCHECK(it != workers_.end()); |
WorkerInfo* info = it->second; |
+ EmbeddedWorkerDevToolsAgentHost* agent_host = info->agent_host(); |
switch (info->state()) { |
case WORKER_UNINSPECTED: |
case WORKER_PAUSED_FOR_DEBUG_ON_START: |
workers_.erase(it); |
break; |
case WORKER_INSPECTED: { |
- EmbeddedWorkerDevToolsAgentHost* agent_host = info->agent_host(); |
info->set_state(WORKER_TERMINATED); |
- if (!agent_host->IsAttached()) { |
+ if (agent_host->IsAttached()) { |
+ // Client host is debugging this worker agent host. |
+ std::string notification = |
+ DevToolsProtocol::CreateNotification( |
+ devtools::Worker::disconnectedFromWorker::kName, NULL) |
+ ->Serialize(); |
+ DevToolsManagerImpl::GetInstance()->DispatchOnInspectorFrontend( |
+ agent_host, notification); |
agent_host->DetachFromWorker(); |
- return; |
} |
- // Client host is debugging this worker agent host. |
- std::string notification = |
- DevToolsProtocol::CreateNotification( |
- devtools::Worker::disconnectedFromWorker::kName, NULL) |
- ->Serialize(); |
- DevToolsManagerImpl::GetInstance()->DispatchOnInspectorFrontend( |
- agent_host, notification); |
- agent_host->DetachFromWorker(); |
break; |
} |
case WORKER_TERMINATED: |
@@ -291,6 +295,8 @@ void EmbeddedWorkerDevToolsManager::WorkerDestroyed(int worker_process_id, |
break; |
} |
} |
+ if (agent_host) |
+ agent_host->WorkerDestroyed(); |
} |
void EmbeddedWorkerDevToolsManager::WorkerContextStarted(int worker_process_id, |
@@ -369,6 +375,8 @@ void EmbeddedWorkerDevToolsManager::MoveToPausedState( |
DCHECK_EQ(WORKER_TERMINATED, it->second->state()); |
scoped_ptr<WorkerInfo> info = workers_.take_and_erase(it); |
info->set_state(WORKER_PAUSED_FOR_REATTACH); |
+ if (EmbeddedWorkerDevToolsAgentHost* agent_host = info->agent_host()) |
+ agent_host->WorkerCreated(); |
dgozman
2014/07/21 13:41:16
Why do we call WorkerCreated from within MoveToPau
vkuzkokov
2014/08/05 16:00:50
MoveToPausedState is renamed to WorkerRestarted
|
workers_.set(id, info.Pass()); |
} |