| 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 0687f40fc631d145cf1823428b8073a89470c832..713290e0a13a8f9a537ec10a09ca0157391eaaaa 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 @@
|
| BrowserContext* browser_context)
|
| : observer_list_(
|
| new ObserverListThreadSafe<ServiceWorkerContextObserver>()),
|
| - process_manager_(new ServiceWorkerProcessManager(browser_context)) {
|
| + browser_context_(browser_context) {
|
| }
|
|
|
| ServiceWorkerContextWrapper::~ServiceWorkerContextWrapper() {
|
| @@ -39,12 +39,16 @@
|
| }
|
|
|
| void ServiceWorkerContextWrapper::Shutdown() {
|
| - DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
| - process_manager_->Shutdown();
|
| - BrowserThread::PostTask(
|
| - BrowserThread::IO,
|
| - FROM_HERE,
|
| - base::Bind(&ServiceWorkerContextWrapper::ShutdownOnIO, this));
|
| + 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();
|
| }
|
|
|
| ServiceWorkerContextCore* ServiceWorkerContextWrapper::context() {
|
| @@ -145,17 +149,13 @@
|
| return;
|
| }
|
| DCHECK(!context_core_);
|
| - 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();
|
| + 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))));
|
| }
|
|
|
| } // namespace content
|
|
|