Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(967)

Unified Diff: content/browser/service_worker/embedded_worker_registry.cc

Issue 2638313002: Manage ServiceWorkerDispatcherHost in ServiceWorkerContextCore (Closed)
Patch Set: Rebase Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 fbc629d87a8387153fb8d3ee8455bc2fa7038152..88a24dd2acf3ce1970b6b592a4603ea74b8e1f37 100644
--- a/content/browser/service_worker/embedded_worker_registry.cc
+++ b/content/browser/service_worker/embedded_worker_registry.cc
@@ -11,6 +11,7 @@
#include "content/browser/service_worker/embedded_worker_instance.h"
#include "content/browser/service_worker/service_worker_context_core.h"
#include "content/browser/service_worker/service_worker_context_wrapper.h"
+#include "content/browser/service_worker/service_worker_dispatcher_host.h"
#include "content/common/service_worker/embedded_worker_messages.h"
#include "content/public/browser/browser_thread.h"
#include "ipc/ipc_message.h"
@@ -32,7 +33,6 @@ scoped_refptr<EmbeddedWorkerRegistry> EmbeddedWorkerRegistry::Create(
new EmbeddedWorkerRegistry(
context,
old_registry->next_embedded_worker_id_);
- registry->process_sender_map_.swap(old_registry->process_sender_map_);
return registry;
}
@@ -179,14 +179,7 @@ void EmbeddedWorkerRegistry::OnReportConsoleMessage(
line_number, source_url);
}
-void EmbeddedWorkerRegistry::AddChildProcessSender(int process_id,
- IPC::Sender* sender) {
- process_sender_map_[process_id] = sender;
- DCHECK(!base::ContainsKey(worker_process_map_, process_id));
-}
-
-void EmbeddedWorkerRegistry::RemoveChildProcessSender(int process_id) {
- process_sender_map_.erase(process_id);
+void EmbeddedWorkerRegistry::RemoveProcess(int process_id) {
std::map<int, std::set<int> >::iterator found =
worker_process_map_.find(process_id);
if (found != worker_process_map_.end()) {
@@ -196,10 +189,13 @@ void EmbeddedWorkerRegistry::RemoveChildProcessSender(int process_id) {
++it) {
int embedded_worker_id = *it;
DCHECK(base::ContainsKey(worker_map_, embedded_worker_id));
- // Somehow the worker thread has lost contact with the browser process.
- // The renderer may have been killed. Set the worker's status to STOPPED
- // so a new thread can be created for this version. Use OnDetached rather
- // than OnStopped so UMA doesn't record it as a normal stoppage.
+ // RemoveProcess is typically called after the running workers on the
+ // process have been stopped, so if there is a running worker at this
+ // point somehow the worker thread has lost contact with the browser
+ // process.
+ // Set the worker's status to STOPPED so a new thread can be created for
+ // this version. Use OnDetached rather than OnStopped so UMA doesn't
+ // record it as a normal stoppage.
worker_map_[embedded_worker_id]->OnDetached();
}
worker_process_map_.erase(found);
@@ -236,10 +232,6 @@ EmbeddedWorkerRegistry::~EmbeddedWorkerRegistry() {
void EmbeddedWorkerRegistry::BindWorkerToProcess(int process_id,
int embedded_worker_id) {
- // 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(
@@ -254,10 +246,10 @@ ServiceWorkerStatusCode EmbeddedWorkerRegistry::Send(
std::unique_ptr<IPC::Message> message(message_ptr);
if (!context_)
return SERVICE_WORKER_ERROR_ABORT;
- ProcessToSenderMap::iterator found = process_sender_map_.find(process_id);
- if (found == process_sender_map_.end())
+ IPC::Sender* sender = context_->GetDispatcherHost(process_id);
+ if (!sender)
return SERVICE_WORKER_ERROR_PROCESS_NOT_FOUND;
- if (!found->second->Send(message.release()))
+ if (!sender->Send(message.release()))
return SERVICE_WORKER_ERROR_IPC_FAILED;
return SERVICE_WORKER_OK;
}

Powered by Google App Engine
This is Rietveld 408576698