Index: content/browser/service_worker/service_worker_context_wrapper.cc |
diff --git a/content/browser/service_worker/service_worker_context_wrapper.cc b/content/browser/service_worker/service_worker_context_wrapper.cc |
index 713290e0a13a8f9a537ec10a09ca0157391eaaaa..0687f40fc631d145cf1823428b8073a89470c832 100644 |
--- a/content/browser/service_worker/service_worker_context_wrapper.cc |
+++ b/content/browser/service_worker/service_worker_context_wrapper.cc |
@@ -18,7 +18,7 @@ ServiceWorkerContextWrapper::ServiceWorkerContextWrapper( |
BrowserContext* browser_context) |
: observer_list_( |
new ObserverListThreadSafe<ServiceWorkerContextObserver>()), |
- browser_context_(browser_context) { |
+ process_manager_(new ServiceWorkerProcessManager(browser_context)) { |
} |
ServiceWorkerContextWrapper::~ServiceWorkerContextWrapper() { |
@@ -39,16 +39,12 @@ void ServiceWorkerContextWrapper::Init( |
} |
void ServiceWorkerContextWrapper::Shutdown() { |
- if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { |
- DCHECK_CURRENTLY_ON(BrowserThread::UI); |
- browser_context_ = NULL; |
- BrowserThread::PostTask( |
- BrowserThread::IO, FROM_HERE, |
- base::Bind(&ServiceWorkerContextWrapper::Shutdown, this)); |
- return; |
- } |
- // Breaks the reference cycle through ServiceWorkerProcessManager. |
- context_core_.reset(); |
+ DCHECK_CURRENTLY_ON(BrowserThread::UI); |
+ process_manager_->Shutdown(); |
+ BrowserThread::PostTask( |
+ BrowserThread::IO, |
+ FROM_HERE, |
+ base::Bind(&ServiceWorkerContextWrapper::ShutdownOnIO, this)); |
} |
ServiceWorkerContextCore* ServiceWorkerContextWrapper::context() { |
@@ -149,13 +145,17 @@ void ServiceWorkerContextWrapper::InitInternal( |
return; |
} |
DCHECK(!context_core_); |
- context_core_.reset(new ServiceWorkerContextCore( |
- user_data_directory, |
- database_task_runner, |
- disk_cache_thread, |
- quota_manager_proxy, |
- observer_list_, |
- make_scoped_ptr(new ServiceWorkerProcessManager(this)))); |
+ context_core_.reset(new ServiceWorkerContextCore(user_data_directory, |
+ database_task_runner, |
+ disk_cache_thread, |
+ quota_manager_proxy, |
+ observer_list_, |
+ this)); |
+} |
+ |
+void ServiceWorkerContextWrapper::ShutdownOnIO() { |
+ DCHECK_CURRENTLY_ON(BrowserThread::IO); |
+ context_core_.reset(); |
} |
} // namespace content |