Index: content/browser/service_worker/embedded_worker_registry.cc |
diff --git a/content/browser/service_worker/embedded_worker_registry.cc b/content/browser/service_worker/embedded_worker_registry.cc |
index f8f0fbe7d5f4df04bbef97feb3946a26aaa77975..2147c4f61c59578a2ea5e71261ed00bd15c01806 100644 |
--- a/content/browser/service_worker/embedded_worker_registry.cc |
+++ b/content/browser/service_worker/embedded_worker_registry.cc |
@@ -25,18 +25,13 @@ scoped_ptr<EmbeddedWorkerInstance> EmbeddedWorkerRegistry::CreateWorker() { |
return worker.Pass(); |
} |
-void EmbeddedWorkerRegistry::RemoveWorker(int embedded_worker_id) { |
- DCHECK(ContainsKey(worker_map_, embedded_worker_id)); |
- worker_map_.erase(embedded_worker_id); |
-} |
- |
bool EmbeddedWorkerRegistry::StartWorker( |
int process_id, |
int embedded_worker_id, |
int64 service_worker_version_id, |
const GURL& script_url) { |
return Send(process_id, |
- new ServiceWorkerMsg_StartWorker(embedded_worker_id, |
+ new EmbeddedWorkerMsg_StartWorker(embedded_worker_id, |
service_worker_version_id, |
script_url)); |
} |
@@ -44,16 +39,49 @@ bool EmbeddedWorkerRegistry::StartWorker( |
bool EmbeddedWorkerRegistry::StopWorker(int process_id, |
int embedded_worker_id) { |
return Send(process_id, |
- new ServiceWorkerMsg_TerminateWorker(embedded_worker_id)); |
+ new EmbeddedWorkerMsg_StopWorker(embedded_worker_id)); |
+} |
+ |
+void EmbeddedWorkerRegistry::OnWorkerStarted( |
+ int process_id, int thread_id, int embedded_worker_id) { |
+ DCHECK(!ContainsKey(worker_process_map_, process_id)); |
+ WorkerInstanceMap::iterator found = worker_map_.find(embedded_worker_id); |
+ if (found == worker_map_.end()) { |
+ LOG(ERROR) << "Worker " << embedded_worker_id << " not registered"; |
+ return; |
+ } |
+ worker_process_map_[process_id] = embedded_worker_id; |
+ DCHECK_EQ(found->second->process_id(), process_id); |
+ found->second->OnStarted(thread_id); |
+} |
+ |
+void EmbeddedWorkerRegistry::OnWorkerStopped( |
+ int process_id, int embedded_worker_id) { |
+ WorkerInstanceMap::iterator found = worker_map_.find(embedded_worker_id); |
+ if (found == worker_map_.end()) { |
+ LOG(ERROR) << "Worker " << embedded_worker_id << " not registered"; |
+ return; |
+ } |
+ DCHECK_EQ(found->second->process_id(), process_id); |
+ worker_process_map_.erase(process_id); |
+ found->second->OnStopped(); |
} |
void EmbeddedWorkerRegistry::AddChildProcessSender( |
int process_id, IPC::Sender* sender) { |
process_sender_map_[process_id] = sender; |
+ DCHECK(!ContainsKey(worker_process_map_, process_id)); |
} |
void EmbeddedWorkerRegistry::RemoveChildProcessSender(int process_id) { |
process_sender_map_.erase(process_id); |
+ std::map<int, int>::iterator found = worker_process_map_.find(process_id); |
+ if (found != worker_process_map_.end()) { |
+ int embedded_worker_id = found->second; |
+ DCHECK(ContainsKey(worker_map_, embedded_worker_id)); |
+ worker_map_[embedded_worker_id]->OnStopped(); |
+ worker_process_map_.erase(found); |
+ } |
} |
EmbeddedWorkerRegistry::~EmbeddedWorkerRegistry() {} |
@@ -67,4 +95,11 @@ bool EmbeddedWorkerRegistry::Send(int process_id, IPC::Message* message) { |
return found->second->Send(message); |
} |
+void EmbeddedWorkerRegistry::RemoveWorker(int process_id, |
+ int embedded_worker_id) { |
+ DCHECK(ContainsKey(worker_map_, embedded_worker_id)); |
+ worker_map_.erase(embedded_worker_id); |
+ worker_process_map_.erase(process_id); |
+} |
+ |
} // namespace content |