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..994898ca807d65b5c10d78c69a06fe731651c108 100644 |
--- a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc |
+++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc |
@@ -326,8 +326,11 @@ 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 local_state() (which instantiates |
Mattias Nissler (ping if slow)
2013/04/17 13:10:30
nit: g_browser_process also instantiates BrowserPo
stevenjb
2013/04/17 16:27:12
Done.
|
+ // BrowserPolicyConnector). |
+ DeviceSettingsService::Initialize(); |
+ DeviceSettingsService::Get()->SetSessionManager( |
DBusThreadManager::Get()->GetSessionManagerClient(), |
OwnerKeyUtil::Create()); |
chromeos::ConnectivityStateHelper::Initialize(); |
@@ -738,8 +741,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 +798,12 @@ void ChromeBrowserMainPartsChromeos::PostMainMessageLoopRun() { |
ChromeBrowserMainPartsLinux::PostMainMessageLoopRun(); |
} |
+void ChromeBrowserMainPartsChromeos::PostDestroyThreads() { |
+ ChromeBrowserMainPartsLinux::PostDestroyThreads(); |
+ // Destroy DeviceSettingsService after g_browser_process. |
+ DeviceSettingsService::Shutdown(); |
+} |
+ |
void ChromeBrowserMainPartsChromeos::SetupPlatformFieldTrials() { |
SetupZramFieldTrial(); |
} |