Index: chrome/browser/policy/browser_policy_connector.cc |
diff --git a/chrome/browser/policy/browser_policy_connector.cc b/chrome/browser/policy/browser_policy_connector.cc |
index e3df986c2e053f8a213668bf358ed0e0d6c8bc97..073f8d9df3b95d7f940d3078ba09292d3d3e22b5 100644 |
--- a/chrome/browser/policy/browser_policy_connector.cc |
+++ b/chrome/browser/policy/browser_policy_connector.cc |
@@ -46,10 +46,13 @@ |
#endif |
#if defined(OS_CHROMEOS) |
+#include "base/utf_string_conversions.h" |
#include "chrome/browser/chromeos/cros/cros_library.h" |
-#include "chrome/browser/chromeos/login/authenticator.h" |
#include "chrome/browser/chromeos/login/user_manager.h" |
+#include "chrome/browser/chromeos/settings/cros_settings.h" |
+#include "chrome/browser/chromeos/settings/cros_settings_provider.h" |
#include "chrome/browser/chromeos/system/statistics_provider.h" |
+#include "chrome/browser/chromeos/system/timezone_settings.h" |
#include "chrome/browser/policy/app_pack_updater.h" |
#include "chrome/browser/policy/cros_user_policy_cache.h" |
#include "chrome/browser/policy/device_policy_cache.h" |
@@ -157,12 +160,10 @@ void BrowserPolicyConnector::Init() { |
InitializeDevicePolicy(); |
- // Create the AppPackUpdater to start updating the cache. It requires the |
- // system request context, which isn't available yet; therefore it is |
- // created only once the loops are running. |
+ // Complete the initialization once the message loops are spinning. |
MessageLoop::current()->PostTask( |
FROM_HERE, |
- base::Bind(base::IgnoreResult(&BrowserPolicyConnector::GetAppPackUpdater), |
+ base::Bind(&BrowserPolicyConnector::CompleteInitialization, |
weak_ptr_factory_.GetWeakPtr())); |
#endif |
} |
@@ -549,12 +550,6 @@ void BrowserPolicyConnector::InitializeDevicePolicy() { |
device_data_store_.get(), |
device_policy_cache, |
GetDeviceManagementUrl())); |
- |
- // Initialize the subsystem once the message loops are spinning. |
- MessageLoop::current()->PostTask( |
- FROM_HERE, |
- base::Bind(&BrowserPolicyConnector::CompleteInitialization, |
- weak_ptr_factory_.GetWeakPtr())); |
} |
} |
#endif |
@@ -562,6 +557,12 @@ void BrowserPolicyConnector::InitializeDevicePolicy() { |
void BrowserPolicyConnector::CompleteInitialization() { |
#if defined(OS_CHROMEOS) |
+ |
+ // Create the AppPackUpdater to start updating the cache. It requires the |
+ // system request context, which isn't available in Init(); therefore it is |
+ // created only once the loops are running. |
+ GetAppPackUpdater(); |
+ |
if (device_cloud_policy_subsystem_.get()) { |
// Read serial number and machine model. This must be done before we call |
// CompleteInitialization() below such that the serial number is available |
@@ -589,11 +590,36 @@ void BrowserPolicyConnector::CompleteInitialization() { |
prefs::kDevicePolicyRefreshRate, |
kServiceInitializationStartupDelay); |
} |
- device_data_store_->set_device_status_collector( |
- new DeviceStatusCollector( |
- g_browser_process->local_state(), |
- chromeos::system::StatisticsProvider::GetInstance(), |
- NULL)); |
+ |
+ if (device_data_store_.get()) { |
+ device_data_store_->set_device_status_collector( |
+ new DeviceStatusCollector( |
+ g_browser_process->local_state(), |
+ chromeos::system::StatisticsProvider::GetInstance(), |
+ NULL)); |
+ } |
+ |
+ SetTimezoneIfPolicyAvailable(); |
+#endif |
+} |
+ |
+void BrowserPolicyConnector::SetTimezoneIfPolicyAvailable() { |
+#if defined(OS_CHROMEOS) |
+ typedef chromeos::CrosSettingsProvider Provider; |
+ Provider::TrustedStatus result = |
+ chromeos::CrosSettings::Get()->PrepareTrustedValues( |
+ base::Bind(&BrowserPolicyConnector::SetTimezoneIfPolicyAvailable, |
+ weak_ptr_factory_.GetWeakPtr())); |
+ |
+ if (result != Provider::TRUSTED) |
+ return; |
+ |
+ std::string timezone; |
+ if (chromeos::CrosSettings::Get()->GetString( |
+ chromeos::kSystemTimezonePolicy, &timezone)) { |
+ chromeos::system::TimezoneSettings::GetInstance()->SetTimezoneFromID( |
+ UTF8ToUTF16(timezone)); |
+ } |
#endif |
} |