Index: chrome/browser/chromeos/chrome_browser_main_chromeos.cc |
diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc |
index 9111bdd80fde3280c474b92a92bc7f7208fcd9e1..ae548d0a7045adccf229e75b562f202bf4cfaccc 100644 |
--- a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc |
+++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc |
@@ -382,8 +382,6 @@ ChromeBrowserMainPartsChromeos::~ChromeBrowserMainPartsChromeos() { |
if (KioskModeSettings::Get()->IsKioskModeEnabled()) |
ShutdownKioskModeScreensaver(); |
- dbus_services_.reset(); |
- |
// To be precise, logout (browser shutdown) is not yet done, but the |
// remaining work is negligible, hence we say LogoutDone here. |
BootTimesLoader::Get()->AddLogoutTimeMarker("LogoutDone", false); |
@@ -459,6 +457,11 @@ void ChromeBrowserMainPartsChromeos::PostMainMessageLoopStart() { |
// Threads are initialized between MainMessageLoopStart and MainMessageLoopRun. |
// about_flags settings are applied in ChromeBrowserMainParts::PreCreateThreads. |
void ChromeBrowserMainPartsChromeos::PreMainMessageLoopRun() { |
+ // Set the crypto thread after the IO thread has been created/started. |
+ NetworkHandler::Get()->cert_loader()->SetCryptoTaskRunner( |
+ content::BrowserThread::GetMessageLoopProxyForThread( |
+ content::BrowserThread::IO)); |
+ |
if (ash::switches::UseNewAudioHandler()) { |
CrasAudioHandler::Initialize( |
AudioDevicesPrefHandler::Create(g_browser_process->local_state())); |
@@ -838,7 +841,11 @@ void ChromeBrowserMainPartsChromeos::PostMainMessageLoopRun() { |
} |
void ChromeBrowserMainPartsChromeos::PostDestroyThreads() { |
+ // Destroy DBus services immediately after threads are stopped. |
+ dbus_services_.reset(); |
+ |
ChromeBrowserMainPartsLinux::PostDestroyThreads(); |
+ |
// Destroy DeviceSettingsService after g_browser_process. |
DeviceSettingsService::Shutdown(); |
} |