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

Unified Diff: chrome/browser/resources/options/controlled_setting.js

Issue 11066015: Finish implementation of controlled setting indicator (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Comments addressed. Created 8 years, 2 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/resources/options/controlled_setting.js
diff --git a/chrome/browser/resources/options/controlled_setting.js b/chrome/browser/resources/options/controlled_setting.js
index aa561007f0efdf4664c361eaa76b8f89bfc7f58f..77cc9c173631626d4584ccabbcdc2bd2644e0c68 100644
--- a/chrome/browser/resources/options/controlled_setting.js
+++ b/chrome/browser/resources/options/controlled_setting.js
@@ -23,15 +23,11 @@ cr.define('options', function() {
decorate: function() {
var self = this;
- // If there is a pref, track its controlledBy property in order to be able
- // to bring up the correct bubble.
+ // If there is a pref, track its controlledBy and recommendedValue
+ // properties in order to be able to bring up the correct bubble.
if (this.pref) {
- Preferences.getInstance().addEventListener(this.pref,
- function(event) {
- var controlledBy = event.value.controlledBy;
- self.controlledBy = controlledBy ? controlledBy : null;
- OptionsPage.hideBubble();
- });
+ Preferences.getInstance().addEventListener(
+ this.pref, this.handlePrefChange.bind(this));
this.resetHandler = this.clearAssociatedPref_;
}
@@ -44,7 +40,8 @@ cr.define('options', function() {
/**
* The given handler will be called when the user clicks on the 'reset to
- * recommended value' link shown in the indicator bubble.
+ * recommended value' link shown in the indicator bubble. The |this| object
+ * will be the indicator itself.
* @param {function()} handler The handler to be called.
*/
set resetHandler(handler) {
@@ -71,7 +68,26 @@ cr.define('options', function() {
* @private
*/
clearAssociatedPref_: function() {
- Preferences.clearPref(this.pref, this.dialogPref);
+ Preferences.clearPref(this.pref, !this.dialogPref);
+ },
+
+ /* Handle changes to the associated pref by hiding any currently visible
+ * bubble and updating the controlledBy property.
+ * @param {Event} event Pref change event.
+ */
+ handlePrefChange: function(event) {
+ OptionsPage.hideBubble();
+ if (event.value.controlledBy) {
+ this.controlledBy =
+ !this.value || String(event.value.value) == this.value ?
+ event.value.controlledBy : null;
+ } else if (event.value.recommendedValue != undefined) {
+ this.controlledBy =
+ !this.value || String(event.value.recommendedValue) == this.value ?
+ 'hasRecommendation' : null;
+ } else {
+ this.controlledBy = null;
Vitaly Pavlenko 2014/09/15 22:35:51 Hi, I'm compiling Chrome JS with Closure Compiler
bartfab (slow) 2014/09/16 14:26:08 |controlledBy| controls two things: 1) If the pro
bartfab (slow) 2014/09/17 08:18:36 https://code.google.com/p/chromium/codesearch#chro
+ }
},
/**
@@ -120,14 +136,16 @@ cr.define('options', function() {
} else {
var self = this;
- // Work out the popup text.
+ // Construct the bubble text.
defaultStrings = {
'policy': loadTimeData.getString('controlledSettingPolicy'),
'extension': loadTimeData.getString('controlledSettingExtension'),
'recommended': loadTimeData.getString('controlledSettingRecommended'),
+ 'hasRecommendation':
+ loadTimeData.getString('controlledSettingHasRecommendation'),
};
- // No controller, no popup.
+ // No controller, no bubble.
if (!this.controlledBy || !(this.controlledBy in defaultStrings))
return;
@@ -143,13 +161,14 @@ cr.define('options', function() {
content.setAttribute('controlled-by', this.controlledBy);
content.textContent = text;
- if (this.controlledBy == 'recommended' && this.resetHandler_) {
+ if (this.controlledBy == 'hasRecommendation' && this.resetHandler_ &&
+ !this.readOnly) {
var container = document.createElement('div');
var action = document.createElement('button');
action.classList.add('link-button');
action.classList.add('controlled-setting-bubble-action');
action.textContent =
- loadTimeData.getString('controlledSettingApplyRecommendation');
+ loadTimeData.getString('controlledSettingFollowRecommendation');
action.addEventListener('click', function(event) {
self.resetHandler_();
});
@@ -180,8 +199,25 @@ cr.define('options', function() {
cr.PropertyKind.BOOL_ATTR);
/**
- * Whether the associated preference is controlled by a source other than the
- * user's setting (can be 'policy', 'extension', 'recommended' or unset).
+ * The value of the associated preference that the indicator represents. If
+ * this is not set, the indicator will be visible whenever any value is
+ * enforced or recommended. If it is set, the indicator will be visible only
+ * when the enforced or recommended value matches the value it represents.
+ * This allows multiple indicators to be created for a set of radio buttons,
+ * ensuring that only one of them is visible at a time.
+ */
+ cr.defineProperty(ControlledSettingIndicator, 'value',
+ cr.PropertyKind.ATTR);
+
+ /**
+ * The status of the associated preference:
+ * - 'policy': A specific value is enfoced by policy.
+ * - 'extension': A specific value is enforced by an extension.
+ * - 'recommended': A value is recommended by policy. The user could
+ * override this recommendation but has not done so.
+ * - 'hasRecommendation': A value is recommended by policy. The user has
+ * overridden this recommendation.
+ * - unset: The value is controlled by the user alone.
* @type {string}
*/
cr.defineProperty(ControlledSettingIndicator, 'controlledBy',
« no previous file with comments | « chrome/browser/resources/options/chromeos/internet_detail.js ('k') | chrome/browser/resources/options/options_page.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698