Index: chrome/browser/chromeos/system/timezone_util.cc |
diff --git a/chrome/browser/chromeos/system/timezone_util.cc b/chrome/browser/chromeos/system/timezone_util.cc |
index d804ae5719f386a7381c0a696862fafe7da253ae..52bc6b98d30e11c6ba689f823578c9deb6629539 100644 |
--- a/chrome/browser/chromeos/system/timezone_util.cc |
+++ b/chrome/browser/chromeos/system/timezone_util.cc |
@@ -8,13 +8,21 @@ |
#include "base/i18n/rtl.h" |
#include "base/lazy_instance.h" |
+#include "base/prefs/pref_service.h" |
#include "base/strings/string_util.h" |
#include "base/strings/stringprintf.h" |
#include "base/strings/utf_string_conversions.h" |
#include "base/synchronization/lock.h" |
#include "base/values.h" |
+#include "chrome/browser/browser_process.h" |
+#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" |
+#include "chrome/browser/chromeos/profiles/profile_helper.h" |
+#include "chrome/browser/chromeos/settings/cros_settings.h" |
+#include "chrome/common/pref_names.h" |
#include "chrome/grit/generated_resources.h" |
#include "chromeos/settings/timezone_settings.h" |
+#include "chromeos/timezone/timezone_request.h" |
+#include "components/user_manager/user_manager.h" |
#include "third_party/icu/source/common/unicode/ures.h" |
#include "third_party/icu/source/common/unicode/utypes.h" |
#include "third_party/icu/source/i18n/unicode/calendar.h" |
@@ -143,5 +151,49 @@ scoped_ptr<base::ListValue> GetTimezoneList() { |
return timezoneList.Pass(); |
} |
+bool HasSystemTimezonePolicy() { |
+ policy::BrowserPolicyConnectorChromeOS* connector = |
+ g_browser_process->platform_part()->browser_policy_connector_chromeos(); |
+ if (!connector->IsEnterpriseManaged()) |
+ return false; |
+ |
+ std::string policy_timezone; |
+ if (chromeos::CrosSettings::Get()->GetString(chromeos::kSystemTimezonePolicy, |
+ &policy_timezone) && |
+ !policy_timezone.empty()) { |
+ VLOG(1) << "Refresh TimeZone: TimeZone settings are overridden" |
+ << " by DevicePolicy."; |
+ return true; |
+ } |
+ return false; |
+} |
+ |
+void ApplyTimeZone(const TimeZoneResponseData* timezone) { |
+ if (HasSystemTimezonePolicy()) |
+ return; |
+ |
+ const user_manager::User* primary_user = |
+ user_manager::UserManager::Get()->GetPrimaryUser(); |
+ if (primary_user) { |
+ if (!primary_user->is_profile_created()) |
+ return; |
+ |
+ Profile* profile = |
+ chromeos::ProfileHelper::Get()->GetProfileByUser(primary_user); |
+ if (!profile->GetPrefs()->GetBoolean( |
+ prefs::kResolveTimezoneByGeolocation)) { |
+ return; |
+ } |
+ } |
+ |
+ if (!timezone->timeZoneId.empty()) { |
+ VLOG(1) << "Refresh TimeZone: setting timezone to '" << timezone->timeZoneId |
+ << "'"; |
+ |
+ chromeos::system::TimezoneSettings::GetInstance()->SetTimezoneFromID( |
+ base::UTF8ToUTF16(timezone->timeZoneId)); |
+ } |
+} |
+ |
} // namespace system |
} // namespace chromeos |