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 51d3c2c5ca2d368f5c1dbb27e3277fdad58fe1cf..5d8882788f6f98600ec2e403d6950f2ed241964c 100644 |
--- a/content/browser/service_worker/embedded_worker_registry.cc |
+++ b/content/browser/service_worker/embedded_worker_registry.cc |
@@ -265,10 +265,30 @@ ServiceWorkerStatusCode EmbeddedWorkerRegistry::SendStartWorker( |
ServiceWorkerStatusCode status = |
Send(process_id, new EmbeddedWorkerMsg_StartWorker(*params)); |
if (status == SERVICE_WORKER_OK) |
- worker_process_map_[process_id].insert(embedded_worker_id); |
+ AddWorker(process_id, embedded_worker_id); |
return status; |
} |
+ServiceWorkerStatusCode EmbeddedWorkerRegistry::AddWorker( |
+ int process_id, |
+ int embedded_worker_id) { |
+ if (!context_) |
+ return SERVICE_WORKER_ERROR_ABORT; |
+ |
+ // The ServiceWorkerDispatcherHost is supposed to be created when the process |
+ // is created, and keep an entry in process_sender_map_ for its whole |
+ // lifetime. |
+ DCHECK(base::ContainsKey(process_sender_map_, process_id)); |
+ DCHECK(GetWorker(embedded_worker_id)); |
+ DCHECK_EQ(GetWorker(embedded_worker_id)->process_id(), process_id); |
+ DCHECK( |
+ !base::ContainsKey(worker_process_map_, process_id) || |
+ !base::ContainsKey(worker_process_map_[process_id], embedded_worker_id)); |
+ |
+ worker_process_map_[process_id].insert(embedded_worker_id); |
+ return SERVICE_WORKER_OK; |
+} |
+ |
ServiceWorkerStatusCode EmbeddedWorkerRegistry::Send( |
int process_id, IPC::Message* message_ptr) { |
std::unique_ptr<IPC::Message> message(message_ptr); |