Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4013)

Unified Diff: chrome/browser/chromeos/system/timezone_resolver_manager.cc

Issue 1843523002: ChromeOS: Add SystemTimezoneAutomaticDetection policy. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@596690--Implement-better-timezone-detection--refactoring-before-policy
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/system/timezone_resolver_manager.cc
diff --git a/chrome/browser/chromeos/system/timezone_resolver_manager.cc b/chrome/browser/chromeos/system/timezone_resolver_manager.cc
index b462c39f21854e7703da8b4d92ea718c87c348b0..74c8fad3ef2d3a3ab62e0828a8f5f388cce9114e 100644
--- a/chrome/browser/chromeos/system/timezone_resolver_manager.cc
+++ b/chrome/browser/chromeos/system/timezone_resolver_manager.cc
@@ -26,6 +26,44 @@ enum ServiceConfiguration {
SHOULD_STOP = 2, // This source requires service Stop.
};
+// Starts or stops TimezoneResolver if required by
+// SystemTimezoneAutomaticDetectionPolicy.
+// Returns SHOULD_* if timezone resolver status is controlled by this policy.
+ServiceConfiguration GetServiceConfigurationFromAutomaticDetectionPolicy() {
+ if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
+ chromeos::switches::kEnableSystemTimezoneAutomaticDetectionPolicy)) {
+ return UNSPECIFIED;
+ }
+
+ PrefService* local_state = g_browser_process->local_state();
+ const bool is_managed = local_state->IsManagedPreference(
+ prefs::kSystemTimezoneAutomaticDetectionPolicy);
+ if (!is_managed)
+ return UNSPECIFIED;
+
+ int policy_value =
+ local_state->GetInteger(prefs::kSystemTimezoneAutomaticDetectionPolicy);
+
+ if (policy_value ==
+ ResolveDeviceTimezoneByGeolocationPolicyValues::USERS_DECIDE) {
+ return UNSPECIFIED;
+ }
+
+ if (policy_value ==
+ ResolveDeviceTimezoneByGeolocationPolicyValues::DISABLED) {
+ return SHOULD_STOP;
+ } else if (policy_value ==
+ ResolveDeviceTimezoneByGeolocationPolicyValues::IP_ONLY) {
+ return SHOULD_START;
+ } else if (policy_value == ResolveDeviceTimezoneByGeolocationPolicyValues::
+ SEND_WIFI_ACCESS_POINTS) {
+ return SHOULD_START;
+ }
+ // Default for unknown policy value.
+ NOTREACHED() << "Unrecognized policy value: " << policy_value;
+ return SHOULD_STOP;
+}
+
// Stops TimezoneResolver if SystemTimezonePolicy is applied.
// Returns SHOULD_* if timezone resolver status is controlled by this policy.
ServiceConfiguration GetServiceConfigurationFromSystemTimezonePolicy() {
@@ -44,6 +82,7 @@ ServiceConfiguration GetServiceConfigurationFromPolicy() {
if (result != UNSPECIFIED)
return result;
+ result = GetServiceConfigurationFromAutomaticDetectionPolicy();
return result;
}
@@ -78,6 +117,12 @@ ServiceConfiguration GetServiceConfigurationForSigninScreen() {
TimeZoneResolverManager::TimeZoneResolverManager()
: primary_user_prefs_(nullptr) {
+ local_state_pref_change_registrar_.Init(g_browser_process->local_state());
+ local_state_pref_change_registrar_.Add(
+ prefs::kSystemTimezoneAutomaticDetectionPolicy,
+ base::Bind(
+ &::chromeos::system::TimeZoneResolverManager::UpdateTimezoneResolver,
+ base::Unretained(this)));
}
TimeZoneResolverManager::~TimeZoneResolverManager() {}
@@ -87,7 +132,20 @@ void TimeZoneResolverManager::SetPrimaryUserPrefs(PrefService* pref_service) {
}
bool TimeZoneResolverManager::ShouldSendWiFiGeolocationData() {
- return false;
+ PrefService* local_state = g_browser_process->local_state();
+ const bool is_managed = local_state->IsManagedPreference(
+ prefs::kSystemTimezoneAutomaticDetectionPolicy);
+ if (!is_managed)
+ return false;
+
+ int policy_value =
+ local_state->GetInteger(prefs::kSystemTimezoneAutomaticDetectionPolicy);
+
+ DCHECK(policy_value <
+ ResolveDeviceTimezoneByGeolocationPolicyValues::NUM_ELEMENTS);
+
+ return policy_value == ResolveDeviceTimezoneByGeolocationPolicyValues::
+ SEND_WIFI_ACCESS_POINTS;
}
void TimeZoneResolverManager::UpdateTimezoneResolver() {

Powered by Google App Engine
This is Rietveld 408576698