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

Side by Side Diff: content/browser/service_worker/service_worker_process_manager.cc

Issue 305723003: Shut down the ServiceWorker system as the browser's shutting down. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove a redundant clear() Created 6 years, 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/service_worker/service_worker_process_manager.h" 5 #include "content/browser/service_worker/service_worker_process_manager.h"
6 6
7 #include "content/browser/renderer_host/render_process_host_impl.h" 7 #include "content/browser/renderer_host/render_process_host_impl.h"
8 #include "content/browser/service_worker/service_worker_context_wrapper.h" 8 #include "content/browser/service_worker/service_worker_context_wrapper.h"
9 #include "content/public/browser/browser_thread.h" 9 #include "content/public/browser/browser_thread.h"
10 #include "content/public/browser/site_instance.h" 10 #include "content/public/browser/site_instance.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 44
45 ServiceWorkerProcessManager::~ServiceWorkerProcessManager() { 45 ServiceWorkerProcessManager::~ServiceWorkerProcessManager() {
46 DCHECK_CURRENTLY_ON(BrowserThread::UI); 46 DCHECK_CURRENTLY_ON(BrowserThread::UI);
47 DCHECK(browser_context_ == NULL) 47 DCHECK(browser_context_ == NULL)
48 << "Call Shutdown() before destroying |this|, so that racing method " 48 << "Call Shutdown() before destroying |this|, so that racing method "
49 << "invocations don't use a destroyed BrowserContext."; 49 << "invocations don't use a destroyed BrowserContext.";
50 } 50 }
51 51
52 void ServiceWorkerProcessManager::Shutdown() { 52 void ServiceWorkerProcessManager::Shutdown() {
53 browser_context_ = NULL; 53 browser_context_ = NULL;
54 for (std::map<int, ProcessInfo>::const_iterator it = instance_info_.begin();
55 it != instance_info_.end();
56 ++it) {
57 RenderProcessHost* rph = RenderProcessHost::FromID(it->second.process_id);
58 DCHECK(rph);
59 static_cast<RenderProcessHostImpl*>(rph)->DecrementWorkerRefCount();
60 }
61 instance_info_.clear();
54 } 62 }
55 63
56 void ServiceWorkerProcessManager::AllocateWorkerProcess( 64 void ServiceWorkerProcessManager::AllocateWorkerProcess(
57 int embedded_worker_id, 65 int embedded_worker_id,
58 const std::vector<int>& process_ids, 66 const std::vector<int>& process_ids,
59 const GURL& script_url, 67 const GURL& script_url,
60 const base::Callback<void(ServiceWorkerStatusCode, int process_id)>& 68 const base::Callback<void(ServiceWorkerStatusCode, int process_id)>&
61 callback) { 69 callback) {
62 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { 70 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
63 BrowserThread::PostTask( 71 BrowserThread::PostTask(
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 base::Bind(&ServiceWorkerProcessManager::ReleaseWorkerProcess, 148 base::Bind(&ServiceWorkerProcessManager::ReleaseWorkerProcess,
141 weak_this_, 149 weak_this_,
142 embedded_worker_id)); 150 embedded_worker_id));
143 return; 151 return;
144 } 152 }
145 if (process_id_for_test_ != -1) { 153 if (process_id_for_test_ != -1) {
146 // Unittests don't increment or decrement the worker refcount of a 154 // Unittests don't increment or decrement the worker refcount of a
147 // RenderProcessHost. 155 // RenderProcessHost.
148 return; 156 return;
149 } 157 }
158 if (browser_context_ == NULL) {
159 // Shutdown already released all instances.
160 DCHECK(instance_info_.empty());
161 return;
162 }
150 std::map<int, ProcessInfo>::iterator info = 163 std::map<int, ProcessInfo>::iterator info =
151 instance_info_.find(embedded_worker_id); 164 instance_info_.find(embedded_worker_id);
152 DCHECK(info != instance_info_.end()); 165 DCHECK(info != instance_info_.end());
153 RenderProcessHost* rph = NULL; 166 RenderProcessHost* rph = NULL;
154 if (info->second.site_instance) { 167 if (info->second.site_instance) {
155 rph = info->second.site_instance->GetProcess(); 168 rph = info->second.site_instance->GetProcess();
156 DCHECK_EQ(info->second.process_id, rph->GetID()) 169 DCHECK_EQ(info->second.process_id, rph->GetID())
157 << "A SiteInstance's process shouldn't get destroyed while we're " 170 << "A SiteInstance's process shouldn't get destroyed while we're "
158 "holding a reference to it. Was the reference actually held?"; 171 "holding a reference to it. Was the reference actually held?";
159 } else { 172 } else {
(...skipping 11 matching lines...) Expand all
171 namespace base { 184 namespace base {
172 // Destroying ServiceWorkerProcessManagers only on the UI thread allows the 185 // Destroying ServiceWorkerProcessManagers only on the UI thread allows the
173 // member WeakPtr to safely guard the object's lifetime when used on that 186 // member WeakPtr to safely guard the object's lifetime when used on that
174 // thread. 187 // thread.
175 void DefaultDeleter<content::ServiceWorkerProcessManager>::operator()( 188 void DefaultDeleter<content::ServiceWorkerProcessManager>::operator()(
176 content::ServiceWorkerProcessManager* ptr) const { 189 content::ServiceWorkerProcessManager* ptr) const {
177 content::BrowserThread::DeleteSoon( 190 content::BrowserThread::DeleteSoon(
178 content::BrowserThread::UI, FROM_HERE, ptr); 191 content::BrowserThread::UI, FROM_HERE, ptr);
179 } 192 }
180 } // namespace base 193 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698