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 0d7b70d4b2e0c3658728daa6058c94ef0231117b..03c156be4dc064b148ae2077e530768b81d8418d 100644 |
--- a/content/browser/service_worker/service_worker_process_manager.cc |
+++ b/content/browser/service_worker/service_worker_process_manager.cc |
@@ -35,8 +35,8 @@ ServiceWorkerProcessManager::ProcessInfo::~ProcessInfo() { |
} |
ServiceWorkerProcessManager::ServiceWorkerProcessManager( |
- ServiceWorkerContextWrapper* context_wrapper) |
- : context_wrapper_(context_wrapper), |
+ BrowserContext* browser_context) |
+ : browser_context_(browser_context), |
process_id_for_test_(-1), |
weak_this_factory_(this), |
weak_this_(weak_this_factory_.GetWeakPtr()) { |
@@ -44,6 +44,13 @@ ServiceWorkerProcessManager::ServiceWorkerProcessManager( |
ServiceWorkerProcessManager::~ServiceWorkerProcessManager() { |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
+ DCHECK(browser_context_ == NULL) |
+ << "Call Shutdown() before destroying |this|, so that racing method " |
+ << "invocations don't use a destroyed BrowserContext."; |
+} |
+ |
+void ServiceWorkerProcessManager::Shutdown() { |
+ browser_context_ = NULL; |
} |
void ServiceWorkerProcessManager::AllocateWorkerProcess( |
@@ -91,7 +98,7 @@ void ServiceWorkerProcessManager::AllocateWorkerProcess( |
} |
} |
- if (!context_wrapper_->browser_context_) { |
+ if (!browser_context_) { |
// Shutdown has started. |
BrowserThread::PostTask( |
BrowserThread::IO, |
@@ -100,8 +107,8 @@ void ServiceWorkerProcessManager::AllocateWorkerProcess( |
return; |
} |
// No existing processes available; start a new one. |
- scoped_refptr<SiteInstance> site_instance = SiteInstance::CreateForURL( |
- context_wrapper_->browser_context_, script_url); |
+ scoped_refptr<SiteInstance> site_instance = |
+ SiteInstance::CreateForURL(browser_context_, script_url); |
RenderProcessHost* rph = site_instance->GetProcess(); |
// This Init() call posts a task to the IO thread that adds the RPH's |
// ServiceWorkerDispatcherHost to the |