| Index: chrome/browser/chromeos/preferences.cc
|
| diff --git a/chrome/browser/chromeos/preferences.cc b/chrome/browser/chromeos/preferences.cc
|
| index a735952c566c7abac82d661387112993164dae29..91d51fb2ce36ddf115c89501b31b6aa6d65beef5 100644
|
| --- a/chrome/browser/chromeos/preferences.cc
|
| +++ b/chrome/browser/chromeos/preferences.cc
|
| @@ -32,6 +32,7 @@
|
| #include "chrome/common/pref_names.h"
|
| #include "chromeos/chromeos_switches.h"
|
| #include "chromeos/system/statistics_provider.h"
|
| +#include "chromeos/timezone/timezone_resolver.h"
|
| #include "components/feedback/tracing_manager.h"
|
| #include "components/pref_registry/pref_registry_syncable.h"
|
| #include "components/user_manager/user.h"
|
| @@ -87,6 +88,8 @@ void Preferences::RegisterPrefs(PrefRegistrySimple* registry) {
|
| registry->RegisterBooleanPref(prefs::kAccessibilityVirtualKeyboardEnabled,
|
| false);
|
| registry->RegisterStringPref(prefs::kLogoutStartedLast, std::string());
|
| + registry->RegisterBooleanPref(prefs::kResolveDeviceTimezoneByGeolocation,
|
| + false);
|
| }
|
|
|
| // static
|
| @@ -315,6 +318,10 @@ void Preferences::RegisterProfilePrefs(
|
| false,
|
| user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
|
|
|
| + registry->RegisterBooleanPref(
|
| + prefs::kResolveTimezoneByGeolocation, false,
|
| + user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
|
| +
|
| input_method::InputMethodSyncer::RegisterProfilePrefs(registry);
|
| }
|
|
|
| @@ -355,6 +362,9 @@ void Preferences::InitUserPrefs(PrefServiceSyncable* prefs) {
|
| prefs::kLanguageXkbAutoRepeatInterval, prefs, callback);
|
|
|
| wake_on_wifi_ssid_.Init(prefs::kWakeOnWifiSsid, prefs, callback);
|
| +
|
| + pref_change_registrar_.Init(prefs);
|
| + pref_change_registrar_.Add(prefs::kResolveTimezoneByGeolocation, callback);
|
| }
|
|
|
| void Preferences::Init(Profile* profile, const user_manager::User* user) {
|
| @@ -607,6 +617,27 @@ void Preferences::ApplyPreferences(ApplyReason reason,
|
| WakeOnWifiManager::Get()->OnPreferenceChanged(
|
| static_cast<WakeOnWifiManager::WakeOnWifiFeature>(features));
|
| }
|
| +
|
| + if (pref_name == prefs::kResolveTimezoneByGeolocation &&
|
| + reason != REASON_ACTIVE_USER_CHANGED) {
|
| + const bool value = prefs_->GetBoolean(prefs::kResolveTimezoneByGeolocation);
|
| + if (user_is_owner) {
|
| + g_browser_process->local_state()->SetBoolean(
|
| + prefs::kResolveDeviceTimezoneByGeolocation, value);
|
| + }
|
| + if (user_is_primary_) {
|
| + if (value) {
|
| + g_browser_process->platform_part()->GetTimezoneResolver()->Start();
|
| + } else {
|
| + g_browser_process->platform_part()->GetTimezoneResolver()->Stop();
|
| + if (reason == REASON_PREF_CHANGED) {
|
| + // Allow immediate timezone update on Stop + Start.
|
| + g_browser_process->local_state()->ClearPref(
|
| + TimeZoneResolver::kLastTimeZoneRefreshTime);
|
| + }
|
| + }
|
| + }
|
| + }
|
| }
|
|
|
| void Preferences::OnIsSyncingChanged() {
|
|
|