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 8b88552465ccf1584f7fed2ac6133ca9f407cb95..eb78f820371929d372f3a0f0884c6d53f3521703 100644 |
--- a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc |
+++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc |
@@ -278,6 +278,7 @@ class DBusServices { |
LoginState::Initialize(); |
CryptohomeLibrary::Initialize(); |
+ CertLoader::Initialize(); |
// This function and SystemKeyEventListener use InputMethodManager. |
chromeos::input_method::Initialize( |
@@ -372,8 +373,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); |
@@ -449,6 +448,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. |
+ CertLoader::Get()->SetCryptoTaskRunner( |
+ content::BrowserThread::GetMessageLoopProxyForThread( |
+ content::BrowserThread::IO)); |
+ |
if (ash::switches::UseNewAudioHandler()) { |
CrasAudioHandler::Initialize( |
AudioDevicesPrefHandler::Create(g_browser_process->local_state())); |
@@ -827,7 +831,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(); |
} |