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

Side by Side Diff: chrome/renderer/resources/extensions/schema_utils.js

Issue 17451011: Make the externally connectable browser test clobber all of the builtins, (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Routines used to validate and normalize arguments. 5 // Routines used to validate and normalize arguments.
6 // TODO(benwells): unit test this file. 6 // TODO(benwells): unit test this file.
7 7
8 var JSONSchemaValidator = require('json_schema').JSONSchemaValidator; 8 var JSONSchemaValidator = require('json_schema').JSONSchemaValidator;
9 9
10 var schemaValidator = new JSONSchemaValidator(); 10 var schemaValidator = new JSONSchemaValidator();
(...skipping 26 matching lines...) Expand all
37 parameterSchemas[i].name + ") is required."); 37 parameterSchemas[i].name + ") is required.");
38 } 38 }
39 } 39 }
40 } 40 }
41 41
42 // Generate all possible signatures for a given API function. 42 // Generate all possible signatures for a given API function.
43 function getSignatures(parameterSchemas) { 43 function getSignatures(parameterSchemas) {
44 if (parameterSchemas.length === 0) 44 if (parameterSchemas.length === 0)
45 return [[]]; 45 return [[]];
46 var signatures = []; 46 var signatures = [];
47 var remaining = getSignatures(parameterSchemas.slice(1)); 47 var remaining = getSignatures($Array.slice(parameterSchemas, 1));
48 for (var i = 0; i < remaining.length; i++) 48 for (var i = 0; i < remaining.length; i++)
49 signatures.push([parameterSchemas[0]].concat(remaining[i])) 49 $Array.push(signatures, $Array.concat([parameterSchemas[0]], remaining[i]))
50 if (parameterSchemas[0].optional) 50 if (parameterSchemas[0].optional)
51 return signatures.concat(remaining); 51 return $Array.concat(signatures, remaining);
52 return signatures; 52 return signatures;
53 }; 53 };
54 54
55 // Return true if arguments match a given signature's schema. 55 // Return true if arguments match a given signature's schema.
56 function argumentsMatchSignature(args, candidateSignature) { 56 function argumentsMatchSignature(args, candidateSignature) {
57 if (args.length != candidateSignature.length) 57 if (args.length != candidateSignature.length)
58 return false; 58 return false;
59 for (var i = 0; i < candidateSignature.length; i++) { 59 for (var i = 0; i < candidateSignature.length; i++) {
60 var argType = JSONSchemaValidator.getType(args[i]); 60 var argType = JSONSchemaValidator.getType(args[i]);
61 if (!schemaValidator.isValidSchemaType(argType, 61 if (!schemaValidator.isValidSchemaType(argType,
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 if (!resolvedSignature) 112 if (!resolvedSignature)
113 throw new Error("Invocation of form " + 113 throw new Error("Invocation of form " +
114 getArgumentSignatureString(funDef.name, args) + 114 getArgumentSignatureString(funDef.name, args) +
115 " doesn't match definition " + 115 " doesn't match definition " +
116 getParameterSignatureString(funDef.name, definedSignature)); 116 getParameterSignatureString(funDef.name, definedSignature));
117 validate(args, resolvedSignature); 117 validate(args, resolvedSignature);
118 var normalizedArgs = []; 118 var normalizedArgs = [];
119 var ai = 0; 119 var ai = 0;
120 for (var si = 0; si < definedSignature.length; si++) { 120 for (var si = 0; si < definedSignature.length; si++) {
121 if (definedSignature[si] === resolvedSignature[ai]) 121 if (definedSignature[si] === resolvedSignature[ai])
122 normalizedArgs.push(args[ai++]); 122 $Array.push(normalizedArgs, args[ai++]);
123 else 123 else
124 normalizedArgs.push(null); 124 $Array.push(normalizedArgs, null);
125 } 125 }
126 return normalizedArgs; 126 return normalizedArgs;
127 }; 127 };
128 128
129 // Validates that a given schema for an API function is not ambiguous. 129 // Validates that a given schema for an API function is not ambiguous.
130 function isFunctionSignatureAmbiguous(functionDef) { 130 function isFunctionSignatureAmbiguous(functionDef) {
131 if (functionDef.allowAmbiguousOptionalArguments) 131 if (functionDef.allowAmbiguousOptionalArguments)
132 return false; 132 return false;
133 var signaturesAmbiguous = function(signature1, signature2) { 133 var signaturesAmbiguous = function(signature1, signature2) {
134 if (signature1.length != signature2.length) 134 if (signature1.length != signature2.length)
(...skipping 12 matching lines...) Expand all
147 return true; 147 return true;
148 } 148 }
149 } 149 }
150 return false; 150 return false;
151 }; 151 };
152 152
153 exports.isFunctionSignatureAmbiguous = isFunctionSignatureAmbiguous; 153 exports.isFunctionSignatureAmbiguous = isFunctionSignatureAmbiguous;
154 exports.normalizeArgumentsAndValidate = normalizeArgumentsAndValidate; 154 exports.normalizeArgumentsAndValidate = normalizeArgumentsAndValidate;
155 exports.schemaValidator = schemaValidator; 155 exports.schemaValidator = schemaValidator;
156 exports.validate = validate; 156 exports.validate = validate;
OLDNEW
« no previous file with comments | « chrome/renderer/resources/extensions/platform_app.js ('k') | chrome/renderer/resources/extensions/searchbox_api.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698