Chromium Code Reviews| 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..abb4ac03aeb08b57a660c54afe065b994d0091d3 100644 |
| --- a/content/browser/devtools/embedded_worker_devtools_manager.cc |
| +++ b/content/browser/devtools/embedded_worker_devtools_manager.cc |
| @@ -56,13 +56,16 @@ bool EmbeddedWorkerDevToolsManager::ServiceWorkerIdentifier::Matches( |
| EmbeddedWorkerDevToolsManager::WorkerInfo::WorkerInfo( |
| const SharedWorkerInstance& instance) |
| : shared_worker_instance_(new SharedWorkerInstance(instance)), |
| + debug_on_start_(false), |
| state_(WORKER_UNINSPECTED), |
| agent_host_(NULL) { |
| } |
| EmbeddedWorkerDevToolsManager::WorkerInfo::WorkerInfo( |
| - const ServiceWorkerIdentifier& service_worker_id) |
| + const ServiceWorkerIdentifier& service_worker_id, |
| + bool debug_on_start) |
| : service_worker_id_(new ServiceWorkerIdentifier(service_worker_id)), |
| + debug_on_start_(debug_on_start), |
| state_(WORKER_UNINSPECTED), |
| agent_host_(NULL) { |
| } |
| @@ -88,8 +91,10 @@ class EmbeddedWorkerDevToolsManager::EmbeddedWorkerDevToolsAgentHost |
| : public IPCDevToolsAgentHost, |
| public IPC::Listener { |
| public: |
| - explicit EmbeddedWorkerDevToolsAgentHost(WorkerId worker_id) |
| - : worker_id_(worker_id), worker_attached_(true) { |
| + explicit EmbeddedWorkerDevToolsAgentHost(WorkerId worker_id, |
| + bool debug_on_start) |
| + : worker_id_(worker_id), |
| + worker_attached_(true) { |
| AddRef(); |
| if (RenderProcessHost* host = RenderProcessHost::FromID(worker_id_.first)) |
| host->AddRoute(worker_id_.second, this); |
| @@ -182,7 +187,7 @@ DevToolsAgentHost* EmbeddedWorkerDevToolsManager::GetDevToolsAgentHostForWorker( |
| return info->agent_host(); |
| EmbeddedWorkerDevToolsAgentHost* agent_host = |
| - new EmbeddedWorkerDevToolsAgentHost(id); |
| + new EmbeddedWorkerDevToolsAgentHost(id, info->debug_on_start()); |
| info->set_agent_host(agent_host); |
| info->set_state(WORKER_INSPECTED); |
| return agent_host; |
| @@ -197,7 +202,8 @@ EmbeddedWorkerDevToolsManager::GetDevToolsAgentHostForServiceWorker( |
| return GetDevToolsAgentHostForWorker(it->first.first, it->first.second); |
| } |
| -EmbeddedWorkerDevToolsManager::EmbeddedWorkerDevToolsManager() { |
| +EmbeddedWorkerDevToolsManager::EmbeddedWorkerDevToolsManager() |
| + : debug_service_worker_on_start_(false) { |
| } |
| EmbeddedWorkerDevToolsManager::~EmbeddedWorkerDevToolsManager() { |
| @@ -227,9 +233,10 @@ bool EmbeddedWorkerDevToolsManager::ServiceWorkerCreated( |
| const WorkerId id(worker_process_id, worker_route_id); |
| WorkerInfoMap::iterator it = FindExistingServiceWorkerInfo(service_worker_id); |
| if (it == workers_.end()) { |
| - scoped_ptr<WorkerInfo> info(new WorkerInfo(service_worker_id)); |
| + scoped_ptr<WorkerInfo> info( |
| + new WorkerInfo(service_worker_id, debug_service_worker_on_start_)); |
| workers_.set(id, info.Pass()); |
| - return false; |
| + return debug_service_worker_on_start_; |
| } |
| MoveToPausedState(id, it); |
| return true; |
| @@ -267,7 +274,7 @@ void EmbeddedWorkerDevToolsManager::WorkerDestroyed(int worker_process_id, |
| case WORKER_TERMINATED: |
| NOTREACHED(); |
| break; |
| - case WORKER_PAUSED: { |
| + 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,8 +291,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) |
| + if (info->state() != WORKER_PAUSED_FOR_REATTACH) { |
| + if (!info->debug_on_start()) |
|
yurys
2014/05/27 12:02:31
Why is it not enough to check debug_service_worker
horo
2014/05/27 12:29:27
It is because debug_service_worker_on_start_ could
yurys
2014/05/27 14:22:48
I see. That makes sense. I'd rather we used a new
|
| + return; |
| + 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()); |
| return; |
| + } |
| info->agent_host()->ReattachToWorker(id); |
| info->set_state(WORKER_INSPECTED); |
| } |
| @@ -302,7 +317,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 +355,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()); |
| } |