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 73cea860bf97d9a164985c5ecfd9135b20d725ce..e223eda9c9c3edffab20146b28b14dbe8ab4fdda 100644 |
--- a/content/browser/service_worker/embedded_worker_registry.cc |
+++ b/content/browser/service_worker/embedded_worker_registry.cc |
@@ -44,13 +44,14 @@ ServiceWorkerStatusCode EmbeddedWorkerRegistry::StopWorker( |
void EmbeddedWorkerRegistry::OnWorkerStarted( |
int process_id, int thread_id, int embedded_worker_id) { |
- DCHECK(!ContainsKey(worker_process_map_, process_id)); |
+ DCHECK(!ContainsKey(worker_process_map_, process_id) || |
+ worker_process_map_[process_id].count(embedded_worker_id) == 0); |
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; |
+ worker_process_map_[process_id].insert(embedded_worker_id); |
DCHECK_EQ(found->second->process_id(), process_id); |
found->second->OnStarted(thread_id); |
} |
@@ -63,7 +64,7 @@ void EmbeddedWorkerRegistry::OnWorkerStopped( |
return; |
} |
DCHECK_EQ(found->second->process_id(), process_id); |
- worker_process_map_.erase(process_id); |
+ worker_process_map_[process_id].erase(embedded_worker_id); |
found->second->OnStopped(); |
} |
@@ -88,11 +89,17 @@ void EmbeddedWorkerRegistry::AddChildProcessSender( |
void EmbeddedWorkerRegistry::RemoveChildProcessSender(int process_id) { |
process_sender_map_.erase(process_id); |
- std::map<int, int>::iterator found = worker_process_map_.find(process_id); |
+ std::map<int, std::set<int> >::iterator found = |
+ worker_process_map_.find(process_id); |
if (found != worker_process_map_.end()) { |
kinuko
2014/02/04 03:37:53
nit: let's assign worker_process_map_[process_id]
alecflett
2014/02/04 20:09:04
Done.
|
- int embedded_worker_id = found->second; |
- DCHECK(ContainsKey(worker_map_, embedded_worker_id)); |
- worker_map_[embedded_worker_id]->OnStopped(); |
+ for (std::set<int>::const_iterator it = |
+ worker_process_map_[process_id].begin(); |
+ it != worker_process_map_[process_id].end(); |
+ ++it) { |
+ int embedded_worker_id = *it; |
+ DCHECK(ContainsKey(worker_map_, embedded_worker_id)); |
+ worker_map_[embedded_worker_id]->OnStopped(); |
+ } |
worker_process_map_.erase(found); |
} |
} |