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 1d39ea67cb1922b5fe66a8eb7d56353d7798c73f..e0359add4e4dd3b3a784b3e5b5ded85c59ddb37b 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" |
@@ -146,13 +149,14 @@ 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. |
- MessageLoop::current()->PostTask( |
- FROM_HERE, |
- base::Bind(base::IgnoreResult(&BrowserPolicyConnector::GetAppPackUpdater), |
- weak_ptr_factory_.GetWeakPtr())); |
+ // Skip the final initialization if this is a unit test. |
+ if (MessageLoop::current()) { |
Joao da Silva
2012/08/09 13:39:47
Don't add this test, just run the inner stuff dire
pneubeck (no reviews)
2012/08/09 13:45:34
Done.
|
+ // Complete the initialization once the message loops are spinning. |
+ MessageLoop::current()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&BrowserPolicyConnector::CompleteInitialization, |
+ weak_ptr_factory_.GetWeakPtr())); |
+ } |
#endif |
} |
@@ -538,12 +542,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 |
@@ -551,6 +549,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 |
@@ -583,6 +587,28 @@ void BrowserPolicyConnector::CompleteInitialization() { |
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 |
} |