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 d628d9093a639d5f59f635221eba5b9de65ce316..ed6edde12fa4d518f96b6e8ab5fed44d5dadc95e 100644 |
--- a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc |
+++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc |
@@ -326,8 +326,10 @@ class DBusServices { |
} |
// Initialize the device settings service so that we'll take actions per |
- // signals sent from the session manager. |
- DeviceSettingsService::Get()->Initialize( |
+ // signals sent from the session manager. This needs to happen before |
+ // g_browser_process initializes BrowserPolicyConnector. |
+ DeviceSettingsService::Initialize(); |
+ DeviceSettingsService::Get()->SetSessionManager( |
DBusThreadManager::Get()->GetSessionManagerClient(), |
OwnerKeyUtil::Create()); |
chromeos::ConnectivityStateHelper::Initialize(); |
@@ -738,8 +740,10 @@ void ChromeBrowserMainPartsChromeos::PostMainMessageLoopRun() { |
if (NetworkPortalDetector::IsEnabledInCommandLine() && detector) |
detector->Shutdown(); |
- // Tell DeviceSettingsService to stop talking to session_manager. |
- DeviceSettingsService::Get()->Shutdown(); |
+ // Tell DeviceSettingsService to stop talking to session_manager. Do not |
+ // shutdown DeviceSettingsService yet, it might still be accessed by |
+ // BrowserPolicyConnector (owned by g_browser_process). |
+ DeviceSettingsService::Get()->UnsetSessionManager(); |
// We should remove observers attached to D-Bus clients before |
// DBusThreadManager is shut down. |
@@ -793,6 +797,12 @@ void ChromeBrowserMainPartsChromeos::PostMainMessageLoopRun() { |
ChromeBrowserMainPartsLinux::PostMainMessageLoopRun(); |
} |
+void ChromeBrowserMainPartsChromeos::PostDestroyThreads() { |
+ ChromeBrowserMainPartsLinux::PostDestroyThreads(); |
+ // Destroy DeviceSettingsService after g_browser_process. |
+ DeviceSettingsService::Shutdown(); |
+} |
+ |
void ChromeBrowserMainPartsChromeos::SetupPlatformFieldTrials() { |
SetupZramFieldTrial(); |
} |