Index: chrome/browser/resources/settings/checkbox/checkbox.js |
diff --git a/chrome/browser/resources/settings/checkbox/checkbox.js b/chrome/browser/resources/settings/checkbox/checkbox.js |
index d4bdeb4fc378da44e7864b61c7b6c070f9f80383..6799c6264e1e96a08d3dc20abc0500288f360583 100644 |
--- a/chrome/browser/resources/settings/checkbox/checkbox.js |
+++ b/chrome/browser/resources/settings/checkbox/checkbox.js |
@@ -19,29 +19,47 @@ Polymer({ |
properties: { |
/** |
* The boolean preference object to control. |
- * @type {?PrefObject} |
+ * @type {?chrome.settingsPrivate.PrefObject} |
*/ |
pref: { |
type: Object, |
- notify: true |
+ notify: true, |
+ value: null |
Dan Beam
2015/08/28 00:20:22
nit: we are not IE, feel free to add trailing , so
stevenjb
2015/08/28 23:18:07
I forget where it's OK and where it's not; I think
michaelpg
2015/09/14 05:14:51
also not OK in JSON
|
}, |
+ /** Whether the checkbox should represent the inverted value. */ |
inverted: { |
type: Boolean, |
value: false |
}, |
+ /** Whether the checkbox is checked. */ |
checked: { |
type: Boolean, |
value: false, |
observer: 'checkedChanged_' |
}, |
+ /** Set to disable the element. */ |
+ disabled: { |
+ type: Boolean, |
+ value: false, |
+ observer: 'disabledChanged_' |
+ }, |
+ |
+ /** The disabled state of the checkbox (may be set by policy). */ |
+ checkboxDisabled: { |
+ type: Boolean, |
+ value: false |
+ }, |
+ |
+ /** Checkbox label. */ |
label: { |
type: String, |
value: '', |
}, |
+ /** Additional sub-label for the checkbox. */ |
subLabel: { |
type: String, |
value: '', |
@@ -49,7 +67,7 @@ Polymer({ |
}, |
observers: [ |
- 'prefValueChanged_(pref.value)' |
+ 'prefPropertyChanged_(pref.*)' |
], |
/** @override */ |
@@ -57,23 +75,55 @@ Polymer({ |
this.$.events.forward(this.$.checkbox, ['change']); |
}, |
- /** @private */ |
- prefValueChanged_: function(prefValue) { |
- // prefValue is initially undefined when Polymer initializes pref. |
- if (prefValue !== undefined) { |
- this.checked = this.getNewValue_(prefValue); |
+ /** |
+ * Polymer observer for pref. |
+ * @param {?{path: string, value: *}} change |
+ * @private |
+ */ |
+ prefPropertyChanged_: function(change) { |
+ if (change.path == 'pref.value') |
+ this.checked = this.getNewValue_(change.value); |
+ if (change.path == 'pref.policySource' || |
michaelpg
2015/08/27 23:40:01
else if
stevenjb
2015/08/28 23:18:07
Done.
|
+ change.path == 'pref.policyEnforcement') { |
+ this.checkboxDisabled = |
+ this.disabled || this.isSettingDisabled_(this.pref); |
} |
}, |
- /** @private */ |
+ /** |
+ * Polymer observer for checked. |
+ * @private |
+ */ |
checkedChanged_: function() { |
- if (this.pref) { |
- this.pref.value = this.getNewValue_(this.checked); |
- } |
+ if (!this.pref) |
+ return; |
+ this.pref.value = this.getNewValue_(this.checked); |
+ }, |
+ |
+ /** |
+ * Polymer observer for disabled. |
+ * @private |
+ */ |
+ disabledChanged_: function() { |
+ this.checkboxDisabled = this.disabled || this.isSettingDisabled_(this.pref); |
michaelpg
2015/08/27 23:40:01
nit: instead of adding listeners like disabledChan
stevenjb
2015/08/28 23:18:07
Probably... I'll look into that after I merge with
michaelpg
2015/09/14 05:14:51
could you revisit this? I think having a computed
stevenjb
2015/09/14 23:05:30
Done.
|
}, |
- /** @private */ |
- getNewValue_: function(val) { |
- return this.inverted ? !val : val; |
- } |
+ /** |
+ * @param {*} value |
+ * @return {boolean} The value as a boolean, inverted if |inverted| is true. |
+ * @private |
+ */ |
+ getNewValue_: function(value) { |
+ return this.inverted ? !value : !!value; |
+ }, |
+ |
+ /** |
+ * @param {?chrome.settingsPrivate.PrefObject} pref |
+ * @return {boolean} True if the setting is either explicitly disabled, or |
+ * disabled by the policyEnforcement property. |
+ */ |
+ isSettingDisabled_: function(pref) { |
+ return !!pref && pref.policyEnforcement == |
+ chrome.settingsPrivate.PolicyEnforcement.ENFORCED; |
+ }, |
}); |