| 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..24991fd1fa44b0d0876484f512d36fc4626f84a0 100644
|
| --- a/content/browser/service_worker/embedded_worker_registry.cc
|
| +++ b/content/browser/service_worker/embedded_worker_registry.cc
|
| @@ -25,11 +25,6 @@ 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,
|
| @@ -47,13 +42,46 @@ bool EmbeddedWorkerRegistry::StopWorker(int process_id,
|
| new ServiceWorkerMsg_TerminateWorker(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
|
|
|