Index: content/browser/service_worker/service_worker_process_manager.cc |
diff --git a/content/browser/service_worker/service_worker_process_manager.cc b/content/browser/service_worker/service_worker_process_manager.cc |
index f3ff0482c8fea21f03f94af83e4555d9e8fd1687..9056e76f03596ef69ab275846ef148da8d92c87c 100644 |
--- a/content/browser/service_worker/service_worker_process_manager.cc |
+++ b/content/browser/service_worker/service_worker_process_manager.cc |
@@ -77,11 +77,16 @@ void ServiceWorkerProcessManager::Shutdown() { |
browser_context_ = nullptr; |
} |
- for (std::map<int, ProcessInfo>::const_iterator it = instance_info_.begin(); |
- it != instance_info_.end(); |
- ++it) { |
- RenderProcessHost::FromID(it->second.process_id) |
- ->DecrementServiceWorkerRefCount(); |
+ // In single-process mode, Shutdown() is called when deleting the default |
+ // browser context, which is itself destroyed after the RenderProcessHost, |
+ // and RenderProcessHost::FromID() just returns a nullptr. |
+ // The refcount decrement can be skipped anyway since there's only one process |
+ if (!RenderProcessHost::run_renderer_in_process()) { |
+ for (std::map<int, ProcessInfo>::const_iterator it = instance_info_.begin(); |
+ it != instance_info_.end(); ++it) { |
+ RenderProcessHost::FromID(it->second.process_id) |
+ ->DecrementServiceWorkerRefCount(); |
+ } |
} |
instance_info_.clear(); |
} |