diff options
author | benwells@chromium.org <benwells@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-07 08:48:58 +0000 |
---|---|---|
committer | benwells@chromium.org <benwells@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-07 08:48:58 +0000 |
commit | d3b010ef8dfca875758b002ef8effa67e5ba8898 (patch) | |
tree | fb9a88acea3da789bc2b5d6ea4e4241013543881 /chrome/renderer | |
parent | d1b47acb949d452a3931370a9423d080c099e711 (diff) | |
download | chromium_src-d3b010ef8dfca875758b002ef8effa67e5ba8898.zip chromium_src-d3b010ef8dfca875758b002ef8effa67e5ba8898.tar.gz chromium_src-d3b010ef8dfca875758b002ef8effa67e5ba8898.tar.bz2 |
Allow updateArgumentsPostValidate to support callbacks and added / removed arguments.
This also pulls the normalization code out of schema_generated_bindings.js.
BUG=None
TEST=Existing tests
Review URL: https://chromiumcodereview.appspot.com/10535030
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@140980 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
12 files changed, 214 insertions, 189 deletions
diff --git a/chrome/renderer/extensions/event_unittest.cc b/chrome/renderer/extensions/event_unittest.cc index 61fa9ca..947d3e8 100644 --- a/chrome/renderer/extensions/event_unittest.cc +++ b/chrome/renderer/extensions/event_unittest.cc @@ -14,6 +14,7 @@ class EventUnittest : public ModuleSystemTest { module_system_->RunString("chrome = {};", "setup-chrome"); RegisterModule("event", IDR_EVENT_BINDINGS_JS); + RegisterModule("schemaUtils", IDR_SCHEMA_UTILS_JS); RegisterModule("utils", IDR_UTILS_JS); // Mock out the native handler for event_bindings. These mocks will fail if diff --git a/chrome/renderer/extensions/extension_dispatcher.cc b/chrome/renderer/extensions/extension_dispatcher.cc index d1ed29a..838746a 100644 --- a/chrome/renderer/extensions/extension_dispatcher.cc +++ b/chrome/renderer/extensions/extension_dispatcher.cc @@ -540,6 +540,7 @@ void ExtensionDispatcher::PopulateSourceMap() { source_map_.RegisterSource("apitest", IDR_EXTENSION_APITEST_JS); // Libraries. + source_map_.RegisterSource("schemaUtils", IDR_SCHEMA_UTILS_JS); source_map_.RegisterSource("sendRequest", IDR_SEND_REQUEST_JS); source_map_.RegisterSource("setIcon", IDR_SET_ICON_JS); source_map_.RegisterSource("utils", IDR_UTILS_JS); diff --git a/chrome/renderer/renderer_resources.grd b/chrome/renderer/renderer_resources.grd index 1edc9ec..421a70d 100644 --- a/chrome/renderer/renderer_resources.grd +++ b/chrome/renderer/renderer_resources.grd @@ -30,6 +30,7 @@ without changes to the corresponding grd file. fb9 --> <include name="IDR_SCHEMA_GENERATED_BINDINGS_JS" file="resources\extensions\schema_generated_bindings.js" type="BINDATA" /> <!-- Libraries. --> + <include name="IDR_SCHEMA_UTILS_JS" file="resources\extensions\schema_utils.js" type="BINDATA" /> <include name="IDR_SEND_REQUEST_JS" file="resources\extensions\send_request.js" type="BINDATA" /> <include name="IDR_SET_ICON_JS" file="resources\extensions\set_icon.js" type="BINDATA" /> <include name="IDR_UTILS_JS" file="resources\extensions\utils.js" type="BINDATA" /> diff --git a/chrome/renderer/resources/extensions/content_settings_custom_bindings.js b/chrome/renderer/resources/extensions/content_settings_custom_bindings.js index 826ff45..d92efc1 100644 --- a/chrome/renderer/resources/extensions/content_settings_custom_bindings.js +++ b/chrome/renderer/resources/extensions/content_settings_custom_bindings.js @@ -6,6 +6,7 @@ var chromeHidden = requireNative('chrome_hidden').GetChromeHidden(); var sendRequest = require('sendRequest').sendRequest; +var validate = require('schemaUtils').validate; chromeHidden.registerCustomType('contentSettings.ContentSetting', function() { function extendSchema(schema) { @@ -16,30 +17,31 @@ chromeHidden.registerCustomType('contentSettings.ContentSetting', function() { function ContentSetting(contentType, settingSchema) { this.get = function(details, callback) { - var getSchema = this.parameters.get; - chromeHidden.validate([details, callback], getSchema); + var getSchema = this.functionSchemas.get.definition.parameters; + validate([details, callback], getSchema); return sendRequest('contentSettings.get', [contentType, details, callback], extendSchema(getSchema)); }; this.set = function(details, callback) { - var setSchema = this.parameters.set.slice(); + var setSchema = this.functionSchemas.set.definition.parameters.slice(); setSchema[0].properties.setting = settingSchema; - chromeHidden.validate([details, callback], setSchema); + validate([details, callback], setSchema); return sendRequest('contentSettings.set', [contentType, details, callback], extendSchema(setSchema)); }; this.clear = function(details, callback) { - var clearSchema = this.parameters.clear; - chromeHidden.validate([details, callback], clearSchema); + var clearSchema = this.functionSchemas.clear.definition.parameters; + validate([details, callback], clearSchema); return sendRequest('contentSettings.clear', [contentType, details, callback], extendSchema(clearSchema)); }; this.getResourceIdentifiers = function(callback) { - var schema = this.parameters.getResourceIdentifiers; - chromeHidden.validate([callback], schema); + var schema = + this.functionSchemas.getResourceIdentifiers.definition.parameters; + validate([callback], schema); return sendRequest( 'contentSettings.getResourceIdentifiers', [contentType, callback], diff --git a/chrome/renderer/resources/extensions/declarative_webrequest_custom_bindings.js b/chrome/renderer/resources/extensions/declarative_webrequest_custom_bindings.js index 5a8d798..4d3c3df 100644 --- a/chrome/renderer/resources/extensions/declarative_webrequest_custom_bindings.js +++ b/chrome/renderer/resources/extensions/declarative_webrequest_custom_bindings.js @@ -6,6 +6,7 @@ var chromeHidden = requireNative('chrome_hidden').GetChromeHidden(); var utils = require('utils'); +var validate = require('schemaUtils').validate; chromeHidden.registerCustomHook('declarativeWebRequest', function(api) { // Returns the schema definition of type |typeId| defined in |namespace|. @@ -29,7 +30,7 @@ chromeHidden.registerCustomHook('declarativeWebRequest', function(api) { } instance.instanceType = 'declarativeWebRequest.' + typeId; var schema = getSchema('declarativeWebRequest', typeId); - chromeHidden.validate([instance], [schema]); + validate([instance], [schema]); } // Setup all data types for the declarative webRequest API. diff --git a/chrome/renderer/resources/extensions/event.js b/chrome/renderer/resources/extensions/event.js index 8961ce5..72cc7bb 100644 --- a/chrome/renderer/resources/extensions/event.js +++ b/chrome/renderer/resources/extensions/event.js @@ -7,6 +7,7 @@ var DetachEvent = eventBindingsNatives.DetachEvent; var sendRequest = require('sendRequest').sendRequest; var utils = require('utils'); + var validate = require('schemaUtils').validate; var chromeHidden = requireNative('chrome_hidden').GetChromeHidden(); var GetExtensionAPIDefinition = @@ -99,12 +100,11 @@ // Validate event arguments (the data that is passed to the callbacks) // if we are in debug. if (opt_argSchemas && - chromeHidden.validateCallbacks && - chromeHidden.validate) { + chromeHidden.validateCallbacks) { this.validateEventArgs_ = function(args) { try { - chromeHidden.validate(args, opt_argSchemas); + validate(args, opt_argSchemas); } catch (exception) { return "Event validation error during " + opt_eventName + " -- " + exception; @@ -306,8 +306,8 @@ var conditionsSchema = buildArrayOfChoicesSchema(conditions); var actionsSchema = buildArrayOfChoicesSchema(actions); rules.forEach(function(rule) { - chromeHidden.validate([rule.conditions], [conditionsSchema]); - chromeHidden.validate([rule.actions], [actionsSchema]); + validate([rule.conditions], [conditionsSchema]); + validate([rule.actions], [actionsSchema]); }) }; diff --git a/chrome/renderer/resources/extensions/schema_generated_bindings.js b/chrome/renderer/resources/extensions/schema_generated_bindings.js index 29700bb..11fee33 100644 --- a/chrome/renderer/resources/extensions/schema_generated_bindings.js +++ b/chrome/renderer/resources/extensions/schema_generated_bindings.js @@ -16,6 +16,7 @@ var utils = require('utils'); var isDevChannel = requireNative('channel').IsDevChannel; var chromeHidden = requireNative('chrome_hidden').GetChromeHidden(); + var schemaUtils = require('schemaUtils'); // The object to generate the bindings for "internal" APIs in, so that // extensions can't directly call them (without access to chromeHidden), @@ -26,156 +27,6 @@ var internalAPIs = {}; chromeHidden.internalAPIs = internalAPIs; - // Validate arguments. - var schemaValidator = new chromeHidden.JSONSchemaValidator(); - chromeHidden.validate = function(args, parameterSchemas) { - if (args.length > parameterSchemas.length) - throw new Error("Too many arguments."); - - for (var i = 0; i < parameterSchemas.length; i++) { - if (i in args && args[i] !== null && args[i] !== undefined) { - schemaValidator.resetErrors(); - schemaValidator.validate(args[i], parameterSchemas[i]); - if (schemaValidator.errors.length == 0) - continue; - - var message = "Invalid value for argument " + (i + 1) + ". "; - for (var i = 0, err; err = schemaValidator.errors[i]; i++) { - if (err.path) { - message += "Property '" + err.path + "': "; - } - message += err.message; - message = message.substring(0, message.length - 1); - message += ", "; - } - message = message.substring(0, message.length - 2); - message += "."; - - throw new Error(message); - } else if (!parameterSchemas[i].optional) { - throw new Error("Parameter " + (i + 1) + " is required."); - } - } - }; - - // Generate all possible signatures for a given API function. - function getSignatures(parameterSchemas) { - if (parameterSchemas.length === 0) - return [[]]; - - var signatures = []; - var remaining = getSignatures(parameterSchemas.slice(1)); - for (var i = 0; i < remaining.length; i++) - signatures.push([parameterSchemas[0]].concat(remaining[i])) - - if (parameterSchemas[0].optional) - return signatures.concat(remaining); - return signatures; - }; - - // Return true if arguments match a given signature's schema. - function argumentsMatchSignature(args, candidateSignature) { - if (args.length != candidateSignature.length) - return false; - - for (var i = 0; i < candidateSignature.length; i++) { - var argType = chromeHidden.JSONSchemaValidator.getType(args[i]); - if (!schemaValidator.isValidSchemaType(argType, candidateSignature[i])) - return false; - } - return true; - }; - - // Finds the function signature for the given arguments. - function resolveSignature(args, definedSignature) { - var candidateSignatures = getSignatures(definedSignature); - for (var i = 0; i < candidateSignatures.length; i++) { - if (argumentsMatchSignature(args, candidateSignatures[i])) - return candidateSignatures[i]; - } - return null; - }; - - // Returns a string representing the defined signature of the API function. - // Example return value for chrome.windows.getCurrent: - // "windows.getCurrent(optional object populate, function callback)" - function getParameterSignatureString(name, definedSignature) { - var getSchemaTypeString = function(schema) { - var schemaTypes = schemaValidator.getAllTypesForSchema(schema); - var typeName = schemaTypes.join(" or ") + " " + schema.name; - if (schema.optional) - return "optional " + typeName; - return typeName; - }; - - var typeNames = definedSignature.map(getSchemaTypeString); - return name + "(" + typeNames.join(", ") + ")"; - }; - - // Returns a string representing a call to an API function. - // Example return value for call: chrome.windows.get(1, callback) is: - // "windows.get(int, function)" - function getArgumentSignatureString(name, args) { - var typeNames = args.map(chromeHidden.JSONSchemaValidator.getType); - return name + "(" + typeNames.join(", ") + ")"; - }; - - // Finds the correct signature for the given arguments, then validates the - // arguments against that signature. Returns a 'normalized' arguments list - // where nulls are inserted where optional parameters were omitted. - function normalizeArgumentsAndValidate(args, funDef) { - if (funDef.allowAmbiguousOptionalArguments) { - chromeHidden.validate(args, funDef.definition.parameters); - return args; - } - - var definedSignature = funDef.definition.parameters; - var resolvedSignature = resolveSignature(args, definedSignature); - if (!resolvedSignature) - throw new Error("Invocation of form " + - getArgumentSignatureString(funDef.name, args) + - " doesn't match definition " + - getParameterSignatureString(funDef.name, definedSignature)); - - chromeHidden.validate(args, resolvedSignature); - - var normalizedArgs = []; - var ai = 0; - for (var si = 0; si < definedSignature.length; si++) { - if (definedSignature[si] === resolvedSignature[ai]) - normalizedArgs.push(args[ai++]); - else - normalizedArgs.push(null); - } - return normalizedArgs; - }; - - // Validates that a given schema for an API function is not ambiguous. - function isFunctionSignatureAmbiguous(functionDef) { - if (functionDef.allowAmbiguousOptionalArguments) - return false; - - var signaturesAmbiguous = function(signature1, signature2) { - if (signature1.length != signature2.length) - return false; - - for (var i = 0; i < signature1.length; i++) { - if (!schemaValidator.checkSchemaOverlap(signature1[i], signature2[i])) - return false; - } - return true; - }; - - var candidateSignatures = getSignatures(functionDef.parameters); - for (var i = 0; i < candidateSignatures.length; i++) { - for (var j = i + 1; j < candidateSignatures.length; j++) { - if (signaturesAmbiguous(candidateSignatures[i], candidateSignatures[j])) - return true; - } - } - return false; - }; - // Stores the name and definition of each API function, with methods to // modify their behaviour (such as a custom way to handle requests to the // API, a custom callback, etc). @@ -295,9 +146,12 @@ // The functions in the schema are in list form, so we move them into a // dictionary for easier access. var self = this; - self.parameters = {}; + self.functionSchemas = {}; schema.functions.forEach(function(f) { - self.parameters[f.name] = f.parameters; + self.functionSchemas[f.name] = { + name: f.name, + definition: f + } }); }; @@ -390,7 +244,7 @@ if (!isSchemaNodeSupported(t, platform, manifestVersion)) return; - schemaValidator.addTypes(t); + schemaUtils.schemaValidator.addTypes(t); if (t.type == 'object' && customTypes[t.id]) { customTypes[t.id].prototype.setSchema(t); } @@ -444,7 +298,8 @@ // to do that we would need to better factor this code so that it // doesn't depend on so much v8::Extension machinery. if (chromeHidden.validateAPI && - isFunctionSignatureAmbiguous(apiFunction.definition)) { + schemaUtils.isFunctionSignatureAmbiguous( + apiFunction.definition)) { throw new Error( apiFunction.name + ' has ambiguous optional arguments. ' + 'To implement custom disambiguation logic, add ' + @@ -458,7 +313,7 @@ if (this.updateArgumentsPreValidate) args = this.updateArgumentsPreValidate.apply(this, args); - args = normalizeArgumentsAndValidate(args, this); + args = schemaUtils.normalizeArgumentsAndValidate(args, this); if (this.updateArgumentsPostValidate) args = this.updateArgumentsPostValidate.apply(this, args); @@ -473,9 +328,8 @@ // Validate return value if defined - only in debug. if (chromeHidden.validateCallbacks && - chromeHidden.validate && this.definition.returns) { - chromeHidden.validate([retval], [this.definition.returns]); + schemaUtils.validate([retval], [this.definition.returns]); } return retval; }).bind(apiFunction); diff --git a/chrome/renderer/resources/extensions/schema_utils.js b/chrome/renderer/resources/extensions/schema_utils.js new file mode 100644 index 0000000..a2587a2 --- /dev/null +++ b/chrome/renderer/resources/extensions/schema_utils.js @@ -0,0 +1,161 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Routines used to validate and normalize arguments. + +var chromeHidden = requireNative('chrome_hidden').GetChromeHidden(); + +// TODO(benwells): unit test this file. +// JSONSchemaValidator is not loaded in unit tests. +var validate; +if (chromeHidden.JSONSchemaValidator) { + var schemaValidator = new chromeHidden.JSONSchemaValidator(); + + // Validate arguments. + validate = function(args, parameterSchemas) { + if (args.length > parameterSchemas.length) + throw new Error("Too many arguments."); + for (var i = 0; i < parameterSchemas.length; i++) { + if (i in args && args[i] !== null && args[i] !== undefined) { + schemaValidator.resetErrors(); + schemaValidator.validate(args[i], parameterSchemas[i]); + if (schemaValidator.errors.length == 0) + continue; + var message = "Invalid value for argument " + (i + 1) + ". "; + for (var i = 0, err; + err = schemaValidator.errors[i]; i++) { + if (err.path) { + message += "Property '" + err.path + "': "; + } + message += err.message; + message = message.substring(0, message.length - 1); + message += ", "; + } + message = message.substring(0, message.length - 2); + message += "."; + throw new Error(message); + } else if (!parameterSchemas[i].optional) { + throw new Error("Parameter " + (i + 1) + " is required."); + } + } + }; +} else { + validate = function() {}; +} + +// Generate all possible signatures for a given API function. +function getSignatures(parameterSchemas) { + if (parameterSchemas.length === 0) + return [[]]; + var signatures = []; + var remaining = getSignatures(parameterSchemas.slice(1)); + for (var i = 0; i < remaining.length; i++) + signatures.push([parameterSchemas[0]].concat(remaining[i])) + if (parameterSchemas[0].optional) + return signatures.concat(remaining); + return signatures; +}; + +// Return true if arguments match a given signature's schema. +function argumentsMatchSignature(args, candidateSignature) { + if (args.length != candidateSignature.length) + return false; + for (var i = 0; i < candidateSignature.length; i++) { + var argType = chromeHidden.JSONSchemaValidator.getType(args[i]); + if (!schemaValidator.isValidSchemaType(argType, + candidateSignature[i])) + return false; + } + return true; +}; + +// Finds the function signature for the given arguments. +function resolveSignature(args, definedSignature) { + var candidateSignatures = getSignatures(definedSignature); + for (var i = 0; i < candidateSignatures.length; i++) { + if (argumentsMatchSignature(args, candidateSignatures[i])) + return candidateSignatures[i]; + } + return null; +}; + +// Returns a string representing the defined signature of the API function. +// Example return value for chrome.windows.getCurrent: +// "windows.getCurrent(optional object populate, function callback)" +function getParameterSignatureString(name, definedSignature) { + var getSchemaTypeString = function(schema) { + var schemaTypes = schemaValidator.getAllTypesForSchema(schema); + var typeName = schemaTypes.join(" or ") + " " + schema.name; + if (schema.optional) + return "optional " + typeName; + return typeName; + }; + var typeNames = definedSignature.map(getSchemaTypeString); + return name + "(" + typeNames.join(", ") + ")"; +}; + +// Returns a string representing a call to an API function. +// Example return value for call: chrome.windows.get(1, callback) is: +// "windows.get(int, function)" +function getArgumentSignatureString(name, args) { + var typeNames = args.map(chromeHidden.JSONSchemaValidator.getType); + return name + "(" + typeNames.join(", ") + ")"; +}; + +// Finds the correct signature for the given arguments, then validates the +// arguments against that signature. Returns a 'normalized' arguments list +// where nulls are inserted where optional parameters were omitted. +// |args| is expected to be an array. +function normalizeArgumentsAndValidate(args, funDef) { + if (funDef.allowAmbiguousOptionalArguments) { + validate(args, funDef.definition.parameters); + return args; + } + var definedSignature = funDef.definition.parameters; + var resolvedSignature = resolveSignature(args, definedSignature); + if (!resolvedSignature) + throw new Error("Invocation of form " + + getArgumentSignatureString(funDef.name, args) + + " doesn't match definition " + + getParameterSignatureString(funDef.name, definedSignature)); + validate(args, resolvedSignature); + var normalizedArgs = []; + var ai = 0; + for (var si = 0; si < definedSignature.length; si++) { + if (definedSignature[si] === resolvedSignature[ai]) + normalizedArgs.push(args[ai++]); + else + normalizedArgs.push(null); + } + return normalizedArgs; +}; + +// Validates that a given schema for an API function is not ambiguous. +function isFunctionSignatureAmbiguous(functionDef) { + if (functionDef.allowAmbiguousOptionalArguments) + return false; + var signaturesAmbiguous = function(signature1, signature2) { + if (signature1.length != signature2.length) + return false; + for (var i = 0; i < signature1.length; i++) { + if (!schemaValidator.checkSchemaOverlap( + signature1[i], signature2[i])) + return false; + } + return true; + }; + var candidateSignatures = getSignatures(functionDef.parameters); + for (var i = 0; i < candidateSignatures.length; i++) { + for (var j = i + 1; j < candidateSignatures.length; j++) { + if (signaturesAmbiguous(candidateSignatures[i], candidateSignatures[j])) + return true; + } + } + return false; +}; + +exports.isFunctionSignatureAmbiguous = isFunctionSignatureAmbiguous; +exports.normalizeArgumentsAndValidate = normalizeArgumentsAndValidate; +exports.schemaValidator = schemaValidator; +exports.validate = validate; diff --git a/chrome/renderer/resources/extensions/send_request.js b/chrome/renderer/resources/extensions/send_request.js index 2e79b8a..abb582a 100644 --- a/chrome/renderer/resources/extensions/send_request.js +++ b/chrome/renderer/resources/extensions/send_request.js @@ -4,6 +4,7 @@ var chromeHidden = requireNative('chrome_hidden').GetChromeHidden(); var natives = requireNative('sendRequest'); +var validate = require('schemaUtils').validate; // Callback handling. var requests = []; @@ -44,8 +45,7 @@ chromeHidden.handleResponse = function(requestId, name, if (request.callbackSchema.parameters.length > 1) { throw new Error("Callbacks may only define one parameter"); } - chromeHidden.validate(callbackArgs, - request.callbackSchema.parameters); + validate(callbackArgs, request.callbackSchema.parameters); } catch (exception) { return "Callback validation error during " + name + " -- " + exception.stack; @@ -72,9 +72,8 @@ function prepareRequest(args, argSchemas) { // Look for callback param. if (argSchemas.length > 0 && - args.length == argSchemas.length && argSchemas[argSchemas.length - 1].type == "function") { - request.callback = args[argSchemas.length - 1]; + request.callback = args[args.length - 1]; request.callbackSchema = argSchemas[argSchemas.length - 1]; --argCount; } diff --git a/chrome/renderer/resources/extensions/storage_custom_bindings.js b/chrome/renderer/resources/extensions/storage_custom_bindings.js index 7d8eaa1..9b0ece5 100644 --- a/chrome/renderer/resources/extensions/storage_custom_bindings.js +++ b/chrome/renderer/resources/extensions/storage_custom_bindings.js @@ -5,6 +5,8 @@ // Custom bindings for the storage API. var chromeHidden = requireNative('chrome_hidden').GetChromeHidden(); +var normalizeArgumentsAndValidate = + require('schemaUtils').normalizeArgumentsAndValidate var sendRequest = require('sendRequest').sendRequest; chromeHidden.registerCustomType('storage.StorageArea', function() { @@ -22,18 +24,20 @@ chromeHidden.registerCustomType('storage.StorageArea', function() { // TODO(kalman): Put as a method on CustomBindingsObject and re-use (or // even generate) for other APIs that need to do this. Same for other // callers of registerCustomType(). + var self = this; function bindApiFunction(functionName) { - this[functionName] = function() { - var schema = this.parameters[functionName]; - chromeHidden.validate(arguments, schema); + self[functionName] = function() { + var funSchema = this.functionSchemas[functionName]; + var args = Array.prototype.slice.call(arguments); + args = normalizeArgumentsAndValidate(args, funSchema); return sendRequest( 'storage.' + functionName, - [namespace].concat(Array.prototype.slice.call(arguments)), - extendSchema(schema)); + [namespace].concat(args), + extendSchema(funSchema.definition.parameters)); }; } var apiFunctions = ['get', 'set', 'remove', 'clear', 'getBytesInUse']; - apiFunctions.forEach(bindApiFunction.bind(this)); + apiFunctions.forEach(bindApiFunction); } return StorageArea; diff --git a/chrome/renderer/resources/extensions/types_custom_bindings.js b/chrome/renderer/resources/extensions/types_custom_bindings.js index daf029a..4af67b4d 100644 --- a/chrome/renderer/resources/extensions/types_custom_bindings.js +++ b/chrome/renderer/resources/extensions/types_custom_bindings.js @@ -6,6 +6,7 @@ var chromeHidden = requireNative('chrome_hidden').GetChromeHidden(); var sendRequest = require('sendRequest').sendRequest; +var validate = require('schemaUtils').validate; chromeHidden.registerCustomType('types.ChromeSetting', function() { @@ -17,23 +18,23 @@ chromeHidden.registerCustomType('types.ChromeSetting', function() { function ChromeSetting(prefKey, valueSchema) { this.get = function(details, callback) { - var getSchema = this.parameters.get; - chromeHidden.validate([details, callback], getSchema); + var getSchema = this.functionSchemas.get.definition.parameters; + validate([details, callback], getSchema); return sendRequest('types.ChromeSetting.get', [prefKey, details, callback], extendSchema(getSchema)); }; this.set = function(details, callback) { - var setSchema = this.parameters.set.slice(); + var setSchema = this.functionSchemas.set.definition.parameters.slice(); setSchema[0].properties.value = valueSchema; - chromeHidden.validate([details, callback], setSchema); + validate([details, callback], setSchema); return sendRequest('types.ChromeSetting.set', [prefKey, details, callback], extendSchema(setSchema)); }; this.clear = function(details, callback) { - var clearSchema = this.parameters.clear; - chromeHidden.validate([details, callback], clearSchema); + var clearSchema = this.functionSchemas.clear.definition.parameters; + validate([details, callback], clearSchema); return sendRequest('types.ChromeSetting.clear', [prefKey, details, callback], extendSchema(clearSchema)); diff --git a/chrome/renderer/resources/extensions/web_request_custom_bindings.js b/chrome/renderer/resources/extensions/web_request_custom_bindings.js index 9216696..d2c52ea 100644 --- a/chrome/renderer/resources/extensions/web_request_custom_bindings.js +++ b/chrome/renderer/resources/extensions/web_request_custom_bindings.js @@ -9,6 +9,7 @@ var GetUniqueSubEventName = webRequestNatives.GetUniqueSubEventName; var chromeHidden = requireNative('chrome_hidden').GetChromeHidden(); var sendRequest = require('sendRequest').sendRequest; +var validate = require('schemaUtils').validate; // WebRequestEvent object. This is used for special webRequest events with // extra parameters. Each invocation of addListener creates a new named @@ -63,8 +64,7 @@ WebRequestEvent.prototype.addListener = var subEventName = GetUniqueSubEventName(this.eventName_); // Note: this could fail to validate, in which case we would not add the // subEvent listener. - chromeHidden.validate(Array.prototype.slice.call(arguments, 1), - this.extraArgSchemas_); + validate(Array.prototype.slice.call(arguments, 1), this.extraArgSchemas_); chromeHidden.internalAPIs.webRequestInternal.addEventListener( cb, opt_filter, opt_extraInfo, this.eventName_, subEventName); |