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 7d804f704e12e3896c2cd9979ddcc07d2b204461..0f53ed4af59f3d72174857d8885cba567463c8df 100644 |
--- a/content/browser/devtools/embedded_worker_devtools_manager.cc |
+++ b/content/browser/devtools/embedded_worker_devtools_manager.cc |
@@ -178,8 +178,10 @@ DevToolsAgentHost* EmbeddedWorkerDevToolsManager::GetDevToolsAgentHostForWorker( |
return NULL; |
WorkerInfo* info = it->second; |
- if (info->state() != WORKER_UNINSPECTED) |
+ if (info->state() != WORKER_UNINSPECTED && |
+ info->state() != WORKER_PAUSED_FOR_DEBUG_ON_START) { |
return info->agent_host(); |
+ } |
EmbeddedWorkerDevToolsAgentHost* agent_host = |
new EmbeddedWorkerDevToolsAgentHost(id); |
@@ -197,7 +199,8 @@ EmbeddedWorkerDevToolsManager::GetDevToolsAgentHostForServiceWorker( |
return GetDevToolsAgentHostForWorker(it->first.first, it->first.second); |
} |
-EmbeddedWorkerDevToolsManager::EmbeddedWorkerDevToolsManager() { |
+EmbeddedWorkerDevToolsManager::EmbeddedWorkerDevToolsManager() |
+ : debug_service_worker_on_start_(false) { |
} |
EmbeddedWorkerDevToolsManager::~EmbeddedWorkerDevToolsManager() { |
@@ -228,8 +231,10 @@ bool EmbeddedWorkerDevToolsManager::ServiceWorkerCreated( |
WorkerInfoMap::iterator it = FindExistingServiceWorkerInfo(service_worker_id); |
if (it == workers_.end()) { |
scoped_ptr<WorkerInfo> info(new WorkerInfo(service_worker_id)); |
+ if (debug_service_worker_on_start_) |
+ info->set_state(WORKER_PAUSED_FOR_DEBUG_ON_START); |
workers_.set(id, info.Pass()); |
- return false; |
+ return debug_service_worker_on_start_; |
} |
MoveToPausedState(id, it); |
return true; |
@@ -267,7 +272,10 @@ void EmbeddedWorkerDevToolsManager::WorkerDestroyed(int worker_process_id, |
case WORKER_TERMINATED: |
NOTREACHED(); |
break; |
- case WORKER_PAUSED: { |
+ case WORKER_PAUSED_FOR_DEBUG_ON_START: |
yurys
2014/05/28 10:54:53
case WORKER_PAUSED_FOR_DEBUG_ON_START: can be plac
horo
2014/05/28 11:04:17
Done.
|
+ workers_.erase(it); |
+ break; |
+ case WORKER_PAUSED_FOR_REATTACH: { |
scoped_ptr<WorkerInfo> worker_info = workers_.take_and_erase(it); |
worker_info->set_state(WORKER_TERMINATED); |
const WorkerId old_id = worker_info->agent_host()->worker_id(); |
@@ -284,10 +292,16 @@ void EmbeddedWorkerDevToolsManager::WorkerContextStarted(int worker_process_id, |
WorkerInfoMap::iterator it = workers_.find(id); |
DCHECK(it != workers_.end()); |
WorkerInfo* info = it->second; |
- if (info->state() != WORKER_PAUSED) |
- return; |
- info->agent_host()->ReattachToWorker(id); |
- info->set_state(WORKER_INSPECTED); |
+ if (info->state() == WORKER_PAUSED_FOR_DEBUG_ON_START) { |
+ RenderProcessHost* rph = RenderProcessHost::FromID(worker_process_id); |
+ scoped_refptr<DevToolsAgentHost> agent_host( |
+ GetDevToolsAgentHostForWorker(worker_process_id, worker_route_id)); |
+ DevToolsManagerImpl::GetInstance()->Inspect(rph->GetBrowserContext(), |
+ agent_host.get()); |
+ } else if (info->state() == WORKER_PAUSED_FOR_REATTACH) { |
+ info->agent_host()->ReattachToWorker(id); |
+ info->set_state(WORKER_INSPECTED); |
+ } |
} |
void EmbeddedWorkerDevToolsManager::RemoveInspectedWorkerData( |
@@ -302,7 +316,7 @@ void EmbeddedWorkerDevToolsManager::RemoveInspectedWorkerData( |
for (WorkerInfoMap::iterator it = workers_.begin(); it != workers_.end(); |
++it) { |
if (it->second->agent_host() == agent_host) { |
- DCHECK_EQ(WORKER_PAUSED, it->second->state()); |
+ DCHECK_EQ(WORKER_PAUSED_FOR_REATTACH, it->second->state()); |
SendMessageToWorker( |
it->first, |
new DevToolsAgentMsg_ResumeWorkerContext(it->first.second)); |
@@ -340,7 +354,7 @@ void EmbeddedWorkerDevToolsManager::MoveToPausedState( |
const WorkerInfoMap::iterator& it) { |
DCHECK_EQ(WORKER_TERMINATED, it->second->state()); |
scoped_ptr<WorkerInfo> info = workers_.take_and_erase(it); |
- info->set_state(WORKER_PAUSED); |
+ info->set_state(WORKER_PAUSED_FOR_REATTACH); |
workers_.set(id, info.Pass()); |
} |