Index: chrome/browser/resources/settings/location_page/location_page.js |
diff --git a/chrome/browser/resources/settings/location_page/location_page.js b/chrome/browser/resources/settings/location_page/location_page.js |
index 1d8201bb641ed66a583086969914c07b7f65bd5d..85ff565e135ea5928b9d8b9252e1dec8d99b2b8a 100644 |
--- a/chrome/browser/resources/settings/location_page/location_page.js |
+++ b/chrome/browser/resources/settings/location_page/location_page.js |
@@ -16,6 +16,7 @@ |
* @element cr-settings-location-page |
*/ |
Polymer({ |
+ /* TODO(finnur): Rename this to cr-settings-site-category. */ |
is: 'cr-settings-location-page', |
properties: { |
@@ -59,36 +60,285 @@ Polymer({ |
}, |
/** |
- * Name of the 'iron-icon' to show. |
+ * What the main toggle for the category is set to (the global default when |
+ * no other policy is in effect). |
*/ |
- icon: { |
- type: String, |
- value: 'communication:location-on', |
- readOnly: true, |
+ categoryEnabled: { |
+ type: Boolean, |
}, |
/** |
- * Array of objects with url members. |
+ * The ID of the category this widget is displaying data for. |
+ * See |categories| for possible values. |
*/ |
- block: { |
- type: Array, |
+ category: { |
+ type: Number, |
}, |
/** |
- * Array of objects with url members. |
+ * An enum containing all the possible category numbers. Corresponds to |
+ * the values found in the ContentSettingsType. |
Dan Beam
2015/10/10 01:27:40
we shouldn't have to copy this or make new referen
Finnur
2015/10/15 15:46:32
Moved to constants.js.
|
*/ |
- allow: { |
- type: Array, |
+ categories: { |
+ type: Object, |
+ }, |
+ |
+ /** |
+ * An enum containing the two possible values for the site list (allowed |
+ * list and blocked list). |
+ */ |
+ defaultValues: { |
+ readOnly: true, |
+ type: Object, |
+ value: { |
+ ALLOW: 1, |
+ BLOCK: 2, |
+ ASK: 3, |
Dan Beam
2015/10/10 01:27:40
this should probably be in the same constants file
Finnur
2015/10/15 15:46:32
Ditto.
|
+ }, |
}, |
}, |
+ observers: [ |
+ 'categoryPrefChanged_(prefs.profile.' + |
+ 'default_content_setting_values.cookies.value)', |
+ 'categoryPrefChanged_(prefs.profile.' + |
+ 'default_content_setting_values.javascript.value)', |
+ 'categoryPrefChanged_(prefs.profile.' + |
+ 'default_content_setting_values.fullscreen.value)', |
+ 'categoryPrefChanged_(prefs.profile.' + |
+ 'default_content_setting_values.popups.value)', |
+ 'categoryPrefChanged_(prefs.profile.' + |
+ 'default_content_setting_values.geolocation.value)', |
+ 'categoryPrefChanged_(prefs.profile.' + |
+ 'default_content_setting_values.notifications.value)', |
+ 'categoryPrefChanged_(prefs.profile.' + |
+ 'default_content_setting_values.media_stream_camera.value)', |
+ 'categoryPrefChanged_(prefs.profile.' + |
+ 'default_content_setting_values.media_stream_mic.value)', |
Dan Beam
2015/10/10 01:27:40
'categoryPrefChanged_(prefs.profile.default_conten
Finnur
2015/10/15 15:46:32
Done.
|
+ ], |
+ |
ready: function() { |
- this.block = []; |
- this.allow = []; |
+ CrSettingsPrefs.initialized.then(function() { |
+ this.categoryEnabled = this.isPrefEnabled_(this.category); |
+ }.bind(this)); |
+ }, |
+ |
+ /** |
+ * Gets the pref at the given key. Asserts if the pref is not found. |
Dan Beam
2015/10/10 01:27:40
nit: Asserts -> Throws
Finnur
2015/10/15 15:46:32
Done.
|
+ * @param {string} key |
Dan Beam
2015/10/10 01:27:40
key -> prefPath
Finnur
2015/10/15 15:46:32
Done.
|
+ * @return {!chrome.settingsPrivate.PrefObject} |
+ */ |
+ getPref_: function(key) { |
+ var pref = /** @type {!chrome.settingsPrivate.PrefObject} */( |
+ this.get(key, this.prefs)); |
+ assert(typeof pref != 'undefined', 'Pref is missing: ' + key); |
+ return pref; |
+ }, |
+ |
+ /** |
+ * Sets the value of the pref at the given key. Asserts if the pref is not |
+ * found. |
+ * @param {string} key |
+ * @param {*} value |
+ */ |
+ setPrefValue_: function(key, value) { |
+ this.getPref_(key); |
Dan Beam
2015/10/10 01:27:40
why are you calling getPref_ here? just for the a
Finnur
2015/10/15 15:46:32
Hmm... redundant. Removed.
|
+ this.set('prefs.' + key + '.value', value); |
+ }, |
+ |
+ /** |
+ * Handles when the global toggle changes. |
+ * @private |
+ */ |
+ categoryPrefChanged_: function() { |
+ this.categoryEnabled = this.isPrefEnabled_(this.category); |
+ }, |
+ |
+ /** |
+ * A handler for flipping the toggle value. |
+ * @private |
+ */ |
+ handleToggleChange_: function(event) { |
+ assert(CrSettingsPrefs.isInitialized); |
+ |
+ switch (this.category) { |
+ case this.categories.COOKIES: |
+ case this.categories.JAVASCRIPT: |
+ case this.categories.POPUPS: |
+ // "Allowed" vs "Blocked". |
+ this.setPrefValue_(this.computePrefName_(this.category), |
+ this.categoryEnabled ? |
+ this.defaultValues.ALLOW : |
+ this.defaultValues.BLOCK); |
+ break; |
+ case this.categories.NOTIFICATION: |
+ case this.categories.GEOLOCATION: |
+ case this.categories.CAMERA: |
+ case this.categories.MIC: |
+ // "Ask" vs "Blocked". |
+ this.setPrefValue_(this.computePrefName_(this.category), |
+ this.categoryEnabled ? |
+ this.defaultValues.ASK : |
+ this.defaultValues.BLOCK); |
+ break; |
+ case this.categories.FULLSCREEN: |
+ // "Allowed" vs. "Ask first". |
+ this.setPrefValue_(this.computePrefName_(this.category), |
+ this.categoryEnabled ? |
+ this.defaultValues.ALLOW : |
+ this.defaultValues.ASK); |
+ break; |
+ default: |
+ assertNotReached(); |
+ } |
+ }, |
+ |
+ /** |
+ * Returns whether the category default is set to enabled or not. |
+ * @param {number} category The category to show the icon for. |
+ * @private |
+ */ |
+ isPrefEnabled_: function(category) { |
+ var pref = this.getPref_(this.computePrefName_(this.category)); |
+ |
+ // FullScreen is Allow vs. Ask. |
+ if (category == this.categories.FULLSCREEN) |
+ return pref.value != this.defaultValues.ALLOW; |
+ |
+ return pref.value != this.defaultValues.BLOCK; |
+ }, |
+ |
+ /** |
+ * A utility function to compute the icon to use for the category. |
+ * @param {number} category The category to show the icon for. |
+ * @private |
+ */ |
+ computeIcon_: function(category) { |
+ // Wonder if any of these enum values are directly accessible from .js? |
+ switch (category) { |
+ case this.categories.COOKIES: |
+ return ''; // Haven't found a good cookies icon under iron-icons. |
+ case this.categories.JAVASCRIPT: |
+ return 'icons:input'; |
+ case this.categories.FULLSCREEN: |
+ return 'icons:fullscreen'; |
+ case this.categories.POPUPS: |
+ return 'icons:open-in-new'; |
+ case this.categories.GEOLOCATION: |
+ return 'communication:location-on'; |
+ case this.categories.NOTIFICATION: |
+ return 'social:notifications'; |
+ case this.categories.CAMERA: |
+ return 'av:videocam'; |
+ case this.categories.MIC: |
+ return 'av:mic'; |
+ default: |
+ assertNotReached(); |
+ return ''; |
+ } |
+ }, |
+ |
+ /** |
+ * A utility function to compute the title of the category. |
+ * @param {number} category The category to show the title for. |
+ * @private |
+ */ |
+ computeTitle_: function(category) { |
+ switch (category) { |
+ case this.categories.COOKIES: |
+ return loadTimeData.getString('siteSettingsCookies'); |
+ case this.categories.JAVASCRIPT: |
+ return loadTimeData.getString('siteSettingsJavascript'); |
+ case this.categories.FULLSCREEN: |
+ return loadTimeData.getString('siteSettingsFullscreen'); |
+ case this.categories.POPUPS: |
+ return loadTimeData.getString('siteSettingsPopups'); |
+ case this.categories.GEOLOCATION: |
+ return loadTimeData.getString('siteSettingsLocation'); |
+ case this.categories.NOTIFICATION: |
+ return loadTimeData.getString('siteSettingsNotifications'); |
+ case this.categories.CAMERA: |
+ return loadTimeData.getString('siteSettingsCamera'); |
+ case this.categories.MIC: |
+ return loadTimeData.getString('siteSettingsMic'); |
+ default: |
+ assertNotReached(); |
+ return ''; |
+ } |
+ }, |
+ |
+ /** |
+ * A utility function to compute the name of the pref for the category. |
+ * @param {number} category The category to find the pref name for. |
+ * @private |
+ */ |
+ computePrefName_: function(category) { |
+ switch (category) { |
+ case this.categories.COOKIES: |
+ return 'profile.default_content_setting_values.cookies'; |
+ case this.categories.JAVASCRIPT: |
+ return 'profile.default_content_setting_values.javascript'; |
+ case this.categories.FULLSCREEN: |
+ return 'profile.default_content_setting_values.fullscreen'; |
+ case this.categories.POPUPS: |
+ return 'profile.default_content_setting_values.popups'; |
+ case this.categories.GEOLOCATION: |
+ return 'profile.default_content_setting_values.geolocation'; |
+ case this.categories.NOTIFICATION: |
+ return 'profile.default_content_setting_values.notifications'; |
+ case this.categories.CAMERA: |
+ return 'profile.default_content_setting_values.media_stream_camera'; |
+ case this.categories.MIC: |
+ return 'profile.default_content_setting_values.media_stream_mic'; |
+ default: |
+ assertNotReached(); |
+ return ''; |
+ } |
}, |
- getTitleAndCount_: function(title, count) { |
- return loadTimeData.getStringF( |
- 'titleAndCount', loadTimeData.getString(title), count); |
+ /** |
+ * A utility function to compute the description for the category. |
+ * @param {number} category The category to show the description for. |
+ * @param {boolean} categoryEnabled The state of the global toggle. |
+ * @private |
+ */ |
+ computeDesc_: function(category, categoryEnabled) { |
+ switch (category) { |
+ case this.categories.JAVASCRIPT: |
+ // "Allowed (recommended)" vs "Blocked". |
+ return categoryEnabled ? |
+ loadTimeData.getString('siteSettingsAllowedRecommended') : |
+ loadTimeData.getString('siteSettingsBlocked'); |
+ case this.categories.POPUPS: |
+ // "Allowed" vs "Blocked (recommended)". |
+ return categoryEnabled ? |
+ loadTimeData.getString('siteSettingsAllowed') : |
+ loadTimeData.getString('siteSettingsBlockedRecommended'); |
+ case this.categories.NOTIFICATION: |
+ // "Ask before sending (recommended)" vs "Blocked". |
+ return categoryEnabled ? |
+ loadTimeData.getString('siteSettingsAskBeforeSending') : |
+ loadTimeData.getString('siteSettingsBlocked'); |
+ case this.categories.GEOLOCATION: |
+ case this.categories.CAMERA: |
+ case this.categories.MIC: |
+ // "Ask before accessing (recommended)" vs "Blocked". |
+ return categoryEnabled ? |
+ loadTimeData.getString('siteSettingsAskBeforeAccessing') : |
+ loadTimeData.getString('siteSettingsBlocked'); |
+ case this.categories.FULLSCREEN: |
+ // "Allowed" vs. "Ask first (recommended)". |
+ return categoryEnabled ? |
+ loadTimeData.getString('siteSettingsAllowed') : |
+ loadTimeData.getString('siteSettingsAskFirstRecommended'); |
+ case this.categories.COOKIES: |
+ // "Allow sites to save and read cookie data" vs "Blocked". |
+ return categoryEnabled ? |
+ loadTimeData.getString('siteSettingsCookiesAllowed') : |
+ loadTimeData.getString('siteSettingsBlocked'); |
+ default: |
+ assertNotReached(); |
+ return ''; |
+ } |
}, |
}); |