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

Unified Diff: chrome/renderer/resources/extensions/chrome_setting.js

Issue 1936673002: [Extensions] Finish freezing schema (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2704
Patch Set: Created 4 years, 8 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
« no previous file with comments | « no previous file | chrome/renderer/resources/extensions/content_setting.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/resources/extensions/chrome_setting.js
diff --git a/chrome/renderer/resources/extensions/chrome_setting.js b/chrome/renderer/resources/extensions/chrome_setting.js
index ef8114824875d4dc31707105eefde197b99643e2..c3c0c9a3816571778ee2885de7908c91d8a3e3b2 100644
--- a/chrome/renderer/resources/extensions/chrome_setting.js
+++ b/chrome/renderer/resources/extensions/chrome_setting.js
@@ -8,10 +8,11 @@ var validate = require('schemaUtils').validate;
function extendSchema(schema) {
var extendedSchema = $Array.slice(schema);
- extendedSchema.unshift({'type': 'string'});
+ $Array.unshift(extendedSchema, {'type': 'string'});
return extendedSchema;
}
+// TODO(devlin): Maybe find a way to combine this and ContentSetting.
function ChromeSetting(prefKey, valueSchema) {
this.get = function(details, callback) {
var getSchema = this.functionSchemas.get.definition.parameters;
@@ -21,13 +22,24 @@ function ChromeSetting(prefKey, valueSchema) {
extendSchema(getSchema));
};
this.set = function(details, callback) {
- var setSchema = $Array.slice(
- this.functionSchemas.set.definition.parameters);
- setSchema[0].properties.value = valueSchema;
- validate([details, callback], setSchema);
+ // The set schema included in the Schema object is generic, since it varies
+ // per-setting. However, this is only ever for a single setting, so we can
+ // enforce the types more thoroughly.
+ var rawSetSchema = this.functionSchemas.set.definition.parameters;
+ var rawSettingParam = rawSetSchema[0];
+ var props = $Object.assign({}, rawSettingParam.properties);
+ props.value = valueSchema;
+ var modSettingParam = {
+ name: rawSettingParam.name,
+ type: rawSettingParam.type,
+ properties: props,
+ };
+ var modSetSchema = $Array.slice(rawSetSchema);
+ modSetSchema[0] = modSettingParam;
+ validate([details, callback], modSetSchema);
return sendRequest('types.ChromeSetting.set',
[prefKey, details, callback],
- extendSchema(setSchema));
+ extendSchema(modSetSchema));
};
this.clear = function(details, callback) {
var clearSchema = this.functionSchemas.clear.definition.parameters;
« no previous file with comments | « no previous file | chrome/renderer/resources/extensions/content_setting.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698