Index: chrome/renderer/resources/extensions/content_setting.js |
diff --git a/chrome/renderer/resources/extensions/content_setting.js b/chrome/renderer/resources/extensions/content_setting.js |
index ef504648b2e567d65909b9236f3309107e2a8d30..98fb95a890bd98aa23bf4d7026a8176b098b8b66 100644 |
--- a/chrome/renderer/resources/extensions/content_setting.js |
+++ b/chrome/renderer/resources/extensions/content_setting.js |
@@ -9,7 +9,7 @@ var validate = require('schemaUtils').validate; |
function extendSchema(schema) { |
var extendedSchema = $Array.slice(schema); |
- extendedSchema.unshift({'type': 'string'}); |
+ $Array.unshift(extendedSchema, {'type': 'string'}); |
return extendedSchema; |
} |
@@ -22,13 +22,24 @@ function ContentSetting(contentType, settingSchema) { |
extendSchema(getSchema)); |
}; |
this.set = function(details, callback) { |
- var setSchema = $Array.slice( |
- this.functionSchemas.set.definition.parameters); |
- setSchema[0].properties.setting = settingSchema; |
- 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.setting = settingSchema; |
+ var modSettingParam = { |
+ name: rawSettingParam.name, |
+ type: rawSettingParam.type, |
+ properties: props, |
+ }; |
+ var modSetSchema = $Array.slice(rawSetSchema); |
+ modSetSchema[0] = modSettingParam; |
+ validate([details, callback], rawSetSchema); |
return sendRequest('contentSettings.set', |
[contentType, details, callback], |
- extendSchema(setSchema)); |
+ extendSchema(modSetSchema)); |
}; |
this.clear = function(details, callback) { |
var clearSchema = this.functionSchemas.clear.definition.parameters; |