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

Side by Side Diff: chrome/browser/profiles/profile_io_data.cc

Issue 1124333010: Shut down Profile's URLRequestContextGetters safely. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@fetcher
Patch Set: Cleanup Created 5 years, 7 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/browser/profiles/profile_io_data.h" 5 #include "chrome/browser/profiles/profile_io_data.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 void InitializeAndPassKeygenHandler( 344 void InitializeAndPassKeygenHandler(
345 scoped_ptr<net::KeygenHandler> keygen_handler, 345 scoped_ptr<net::KeygenHandler> keygen_handler,
346 const base::Callback<void(scoped_ptr<net::KeygenHandler>)>& callback, 346 const base::Callback<void(scoped_ptr<net::KeygenHandler>)>& callback,
347 scoped_ptr<ChromeNSSCryptoModuleDelegate> delegate) { 347 scoped_ptr<ChromeNSSCryptoModuleDelegate> delegate) {
348 if (delegate) 348 if (delegate)
349 keygen_handler->set_crypto_module_delegate(delegate.Pass()); 349 keygen_handler->set_crypto_module_delegate(delegate.Pass());
350 callback.Run(keygen_handler.Pass()); 350 callback.Run(keygen_handler.Pass());
351 } 351 }
352 #endif // defined(USE_NSS_CERTS) 352 #endif // defined(USE_NSS_CERTS)
353 353
354 void InvalidateContextGettersOnIO( 354 // For safe shutdown, must be called before the ProfileIOData is destroyed.
355 void NotifyContextGettersOfShutdownOnIO(
355 scoped_ptr<ProfileIOData::ChromeURLRequestContextGetterVector> getters) { 356 scoped_ptr<ProfileIOData::ChromeURLRequestContextGetterVector> getters) {
356 DCHECK_CURRENTLY_ON(BrowserThread::IO); 357 DCHECK_CURRENTLY_ON(BrowserThread::IO);
357 ProfileIOData::ChromeURLRequestContextGetterVector::iterator iter; 358 ProfileIOData::ChromeURLRequestContextGetterVector::iterator iter;
358 for (iter = getters->begin(); iter != getters->end(); ++iter) 359 for (auto& chrome_context_getter : *getters)
359 (*iter)->Invalidate(); 360 chrome_context_getter->NotifyContextShuttingDown();
360 } 361 }
361 362
362 } // namespace 363 } // namespace
363 364
364 void ProfileIOData::InitializeOnUIThread(Profile* profile) { 365 void ProfileIOData::InitializeOnUIThread(Profile* profile) {
365 DCHECK_CURRENTLY_ON(BrowserThread::UI); 366 DCHECK_CURRENTLY_ON(BrowserThread::UI);
366 PrefService* pref_service = profile->GetPrefs(); 367 PrefService* pref_service = profile->GetPrefs();
367 PrefService* local_state_pref_service = g_browser_process->local_state(); 368 PrefService* local_state_pref_service = g_browser_process->local_state();
368 369
369 scoped_ptr<ProfileParams> params(new ProfileParams); 370 scoped_ptr<ProfileParams> params(new ProfileParams);
(...skipping 851 matching lines...) Expand 10 before | Expand all | Expand 10 after
1221 url_blacklist_manager_->ShutdownOnUIThread(); 1222 url_blacklist_manager_->ShutdownOnUIThread();
1222 #endif 1223 #endif
1223 if (chrome_http_user_agent_settings_) 1224 if (chrome_http_user_agent_settings_)
1224 chrome_http_user_agent_settings_->CleanupOnUIThread(); 1225 chrome_http_user_agent_settings_->CleanupOnUIThread();
1225 incognito_availibility_pref_.Destroy(); 1226 incognito_availibility_pref_.Destroy();
1226 1227
1227 if (!context_getters->empty()) { 1228 if (!context_getters->empty()) {
1228 if (BrowserThread::IsMessageLoopValid(BrowserThread::IO)) { 1229 if (BrowserThread::IsMessageLoopValid(BrowserThread::IO)) {
1229 BrowserThread::PostTask( 1230 BrowserThread::PostTask(
1230 BrowserThread::IO, FROM_HERE, 1231 BrowserThread::IO, FROM_HERE,
1231 base::Bind(&InvalidateContextGettersOnIO, 1232 base::Bind(&NotifyContextGettersOfShutdownOnIO,
1232 base::Passed(&context_getters))); 1233 base::Passed(&context_getters)));
1233 } 1234 }
1234 } 1235 }
1235 1236
1236 bool posted = BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, this); 1237 bool posted = BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, this);
1237 if (!posted) 1238 if (!posted)
1238 delete this; 1239 delete this;
1239 } 1240 }
1240 1241
1241 void ProfileIOData::set_channel_id_service( 1242 void ProfileIOData::set_channel_id_service(
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1287 new DevToolsNetworkTransactionFactory( 1288 new DevToolsNetworkTransactionFactory(
1288 network_controller_.get(), shared_session), 1289 network_controller_.get(), shared_session),
1289 shared_session->net_log(), backend)); 1290 shared_session->net_log(), backend));
1290 } 1291 }
1291 1292
1292 void ProfileIOData::SetCookieSettingsForTesting( 1293 void ProfileIOData::SetCookieSettingsForTesting(
1293 CookieSettings* cookie_settings) { 1294 CookieSettings* cookie_settings) {
1294 DCHECK(!cookie_settings_.get()); 1295 DCHECK(!cookie_settings_.get());
1295 cookie_settings_ = cookie_settings; 1296 cookie_settings_ = cookie_settings;
1296 } 1297 }
OLDNEW
« chrome/browser/profiles/profile_browsertest.cc ('K') | « chrome/browser/profiles/profile_io_data.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698