Index: chrome/browser/resources/settings/date_time_page/date_time_page.js |
diff --git a/chrome/browser/resources/settings/date_time_page/date_time_page.js b/chrome/browser/resources/settings/date_time_page/date_time_page.js |
index d933992762b99f4c8f4aea52b31cecc661dcb7ea..75ad8ebb65530d44657a896b73af1d28a4126305 100644 |
--- a/chrome/browser/resources/settings/date_time_page/date_time_page.js |
+++ b/chrome/browser/resources/settings/date_time_page/date_time_page.js |
@@ -4,33 +4,146 @@ |
/** |
* @fileoverview |
- * 'settings-date-time-page' is the settings page containing date-time |
+ * 'settings-date-time-page' is the settings page containing date and time |
* settings. |
- * |
- * Example: |
- * |
- * <core-animated-pages> |
- * <settings-date-time-page prefs="{{prefs}}"> |
- * </settings-date-time-page> |
- * ... other pages ... |
- * </core-animated-pages> |
*/ |
+ |
+cr.exportPath('settings'); |
+ |
+/** |
+ * Possible values of the system time-zone auto-detection policy. Must stay in |
+ * sync with AutomaticTimezoneDetectionType in chrome_device_policy.proto. |
+ * @enum {number} |
+ * @const |
+ */ |
+settings.AutomaticTimezoneDetectionPolicy = { |
+ USERS_DECIDE: 0, |
+ DISABLED: 1, |
+ IP_ONLY: 2, |
+ SEND_WIFI_ACCESS_POINTS: 3, |
+}; |
+ |
Polymer({ |
is: 'settings-date-time-page', |
+ behaviors: [PrefsBehavior], |
+ |
properties: { |
- /** |
- * Preferences state. |
- */ |
+ /** Preferences state. */ |
prefs: { |
type: Object, |
- notify: true |
+ notify: true, |
+ }, |
+ |
+ /** |
+ * If the time zone is managed at the system level, the user cannot control |
+ * any time zone settings. |
+ * @private |
+ */ |
+ systemTimeZoneManaged_: { |
+ type: Boolean, |
+ value: function() { |
+ return loadTimeData.getBoolean('systemTimeZoneManaged'); |
+ }, |
+ }, |
+ |
+ /** |
+ * If the time zone auto-detection setting is managed at the system level, |
+ * the user cannot override the setting unless the policy is USERS_DECIDE. |
+ * @private |
+ */ |
+ systemTimeZoneDetectionManaged_: { |
+ type: Boolean, |
+ value: function() { |
+ return loadTimeData.getBoolean( |
+ 'systemTimeZoneDetectionManaged'); |
+ }, |
+ }, |
+ |
+ /** |
+ * Value of the system time zone auto-detection policy, or null if system |
+ * time zone auto-detection is not managed. |
+ * @private {?settings.AutomaticTimezoneDetectionPolicy} |
+ */ |
+ systemTimeZoneDetectionPolicyValue_: { |
+ type: Number, |
+ value: function() { |
+ return loadTimeData.valueExists('systemTimeZoneDetectionPolicyValue') ? |
+ /** @type {settings.AutomaticTimezoneDetectionPolicy} */( |
+ loadTimeData.getInteger('systemTimeZoneDetectionPolicyValue')) : |
+ null; |
+ }, |
}, |
/** |
- * Dictionary defining page visibility. |
- * @type {!DateTimePageVisibility} |
+ * Hides the time zone auto-detection feature when the |
+ * --disable-timezone-tracking-option flag is set. |
+ * @private |
*/ |
- pageVisibility: Object, |
+ hideTimeZoneDetection_: { |
+ type: Boolean, |
+ value: function() { |
+ return loadTimeData.valueExists('hideTimeZoneDetection') && |
+ loadTimeData.getBoolean('hideTimeZoneDetection'); |
+ }, |
+ readOnly: true, |
+ }, |
+ }, |
+ |
+ observers: [ |
+ // TODO(michaelpg): Implement a BrowserProxy to listen for policy changes. |
+ 'updateTimeZoneDetectionCheckbox_(' + |
+ 'prefs.settings.resolve_timezone_by_geolocation.value,' + |
+ 'systemTimeZoneManaged_,' + |
+ 'systemTimeZoneDetectionManaged_,' + |
+ 'systemTimeZoneDetectionPolicyValue_)', |
+ ], |
+ |
+ /** |
+ * Processes all the time zone preferences and policy interactions in one |
+ * observer function instead of complicating the HTML with computed bindings. |
+ * @param {boolean} userPrefValue |
+ * @param {boolean} systemTimeZoneManaged |
+ * @param {boolean} systemTimeZoneDetectionManaged |
+ * @param {?settings.AutomaticTimezoneDetectionPolicy} |
+ * systemTimeZoneDetectionPolicyValue |
+ */ |
+ updateTimeZoneDetectionCheckbox_(userPrefValue, |
+ systemTimeZoneManaged, |
+ systemTimeZoneDetectionManaged, |
+ systemTimeZoneDetectionPolicyValue) { |
+ // Do nothing if the feature is disabled by a flag. |
+ if (this.hideTimeZoneDetection_) |
+ return; |
+ |
+ var checkbox = this.$.timeZoneDetectionCheckbox; |
+ |
+ // Time zone auto-detection is disabled when the time zone is managed. |
+ if (systemTimeZoneManaged) { |
+ checkbox.disabled = true; |
+ checkbox.checked = false; |
+ return; |
+ } |
+ |
+ // The time zone auto-detection policy may force-disable auto-detection. |
+ if (systemTimeZoneDetectionManaged && |
+ systemTimeZoneDetectionPolicyValue != |
+ settings.AutomaticTimezoneDetectionPolicy.USERS_DECIDE) { |
+ checkbox.disabled = true; |
+ checkbox.checked = |
+ systemTimeZoneDetectionPolicyValue != |
+ settings.AutomaticTimezoneDetectionPolicy.DISABLED; |
+ return; |
+ } |
+ |
+ // If there is no policy, or the policy is USERS_DECIDE, the pref is used. |
+ checkbox.disabled = false; |
+ checkbox.checked = userPrefValue; |
+ }, |
+ |
+ /** @param {!Event} e */ |
+ onTimeZoneDetectionCheckboxChange_: function(e) { |
+ this.setPrefValue( |
+ 'settings.resolve_timezone_by_geolocation', e.target.checked); |
}, |
}); |