| 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;
|
|
|