Chromium Code Reviews| 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); |
| } |
| } |