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

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

Issue 9317072: Allow omitting optional parameters for Extensions API functions (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Synced and merged. Created 8 years, 10 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
Index: chrome/renderer/resources/extensions/json_schema.js
diff --git a/chrome/renderer/resources/extensions/json_schema.js b/chrome/renderer/resources/extensions/json_schema.js
index df91335abf2bbb16f25a5c160aa6f04daebc9d82..1fe4d414fb78b7f53570fc1e8c08c491c3baee88 100644
--- a/chrome/renderer/resources/extensions/json_schema.js
+++ b/chrome/renderer/resources/extensions/json_schema.js
@@ -144,12 +144,63 @@ chromeHidden.JSONSchemaValidator.prototype.addTypes = function(typeOrTypeList) {
}
/**
+ * Returns a list of strings of the types that this schema accepts.
+ */
+chromeHidden.JSONSchemaValidator.prototype.getAllTypesForSchema =
+ function(schema) {
+ var schemaTypes = [];
+ if (schema.type)
+ schemaTypes.push(schema.type);
+ if (schema.choices) {
+ for (var i = 0; i < schema.choices.length; i++) {
+ var choiceTypes = this.getAllTypesForSchema(schema.choices[i]);
+ schemaTypes = schemaTypes.concat(choiceTypes);
+ }
+ }
+ if (schema['$ref']) {
+ var refTypes = this.getAllTypesForSchema(this.types[schema['$ref']]);
+ schemaTypes = schemaTypes.concat(refTypes);
+ }
+ return schemaTypes;
+};
+
+/**
+ * Returns true if |schema| would accept an argument of type |type|.
+ */
+chromeHidden.JSONSchemaValidator.prototype.isValidSchemaType =
+ function(type, schema) {
+ if (schema.optional && (type == "null" || type == "undefined"))
+ return true;
+
+ schemaTypes = this.getAllTypesForSchema(schema);
+ for (var i = 0; i < schemaTypes.length; i++) {
+ if (schemaTypes[i] == "any" || type == schemaTypes[i])
+ return true;
+ }
+ return type == "any";
+};
+
+/**
+ * Returns true if there is a non-null argument that both |schema1| and
+ * |schema2| would accept.
+ */
+chromeHidden.JSONSchemaValidator.prototype.checkSchemaOverlap =
+ function(schema1, schema2) {
+ var schema1Types = this.getAllTypesForSchema(schema1);
+ for (var i = 0; i < schema1Types.length; i++) {
+ if (this.isValidSchemaType(schema1Types[i], schema2))
+ return true;
+ }
+ return false;
+};
+
+/**
* Validates an instance against a schema. The instance can be any JavaScript
* value and will be validated recursively. When this method returns, the
* |errors| property will contain a list of errors, if any.
*/
-chromeHidden.JSONSchemaValidator.prototype.validate = function(
- instance, schema, opt_path) {
+chromeHidden.JSONSchemaValidator.prototype.validate =
+ function(instance, schema, opt_path) {
var path = opt_path || "";
if (!schema) {
@@ -216,8 +267,8 @@ chromeHidden.JSONSchemaValidator.prototype.validate = function(
* Validates an instance against a choices schema. The instance must match at
* least one of the provided choices.
*/
-chromeHidden.JSONSchemaValidator.prototype.validateChoices = function(
- instance, schema, path) {
+chromeHidden.JSONSchemaValidator.prototype.validateChoices =
+ function(instance, schema, path) {
var originalErrors = this.errors;
for (var i = 0; i < schema.choices.length; i++) {
@@ -238,8 +289,8 @@ chromeHidden.JSONSchemaValidator.prototype.validateChoices = function(
* |errors| property, and returns a boolean indicating whether the instance
* validates.
*/
-chromeHidden.JSONSchemaValidator.prototype.validateEnum = function(
- instance, schema, path) {
+chromeHidden.JSONSchemaValidator.prototype.validateEnum =
+ function(instance, schema, path) {
for (var i = 0; i < schema.enum.length; i++) {
if (instance === schema.enum[i])
return true;
@@ -253,8 +304,8 @@ chromeHidden.JSONSchemaValidator.prototype.validateEnum = function(
* Validates an instance against an object schema and populates the errors
* property.
*/
-chromeHidden.JSONSchemaValidator.prototype.validateObject = function(
- instance, schema, path) {
+chromeHidden.JSONSchemaValidator.prototype.validateObject =
+ function(instance, schema, path) {
if (schema.properties) {
for (var prop in schema.properties) {
// It is common in JavaScript to add properties to Object.prototype. This
@@ -316,8 +367,8 @@ chromeHidden.JSONSchemaValidator.prototype.validateObject = function(
* Validates an instance against an array schema and populates the errors
* property.
*/
-chromeHidden.JSONSchemaValidator.prototype.validateArray = function(
- instance, schema, path) {
+chromeHidden.JSONSchemaValidator.prototype.validateArray =
+ function(instance, schema, path) {
var typeOfItems = chromeHidden.JSONSchemaValidator.getType(schema.items);
if (typeOfItems == 'object') {
@@ -363,8 +414,8 @@ chromeHidden.JSONSchemaValidator.prototype.validateArray = function(
/**
* Validates a string and populates the errors property.
*/
-chromeHidden.JSONSchemaValidator.prototype.validateString = function(
- instance, schema, path) {
+chromeHidden.JSONSchemaValidator.prototype.validateString =
+ function(instance, schema, path) {
if (schema.minLength && instance.length < schema.minLength)
this.addError(path, "stringMinLength", [schema.minLength]);
@@ -379,8 +430,8 @@ chromeHidden.JSONSchemaValidator.prototype.validateString = function(
* Validates a number and populates the errors property. The instance is
* assumed to be a number.
*/
-chromeHidden.JSONSchemaValidator.prototype.validateNumber = function(
- instance, schema, path) {
+chromeHidden.JSONSchemaValidator.prototype.validateNumber =
+ function(instance, schema, path) {
// Forbid NaN, +Infinity, and -Infinity. Our APIs don't use them, and
// JSON serialization encodes them as 'null'. Re-evaluate supporting
@@ -408,8 +459,8 @@ chromeHidden.JSONSchemaValidator.prototype.validateNumber = function(
* Validates the primitive type of an instance and populates the errors
* property. Returns true if the instance validates, false otherwise.
*/
-chromeHidden.JSONSchemaValidator.prototype.validateType = function(
- instance, schema, path) {
+chromeHidden.JSONSchemaValidator.prototype.validateType =
+ function(instance, schema, path) {
var actualType = chromeHidden.JSONSchemaValidator.getType(instance);
if (schema.type != actualType && !(schema.type == "number" &&
actualType == "integer")) {
@@ -425,12 +476,19 @@ chromeHidden.JSONSchemaValidator.prototype.validateType = function(
* |replacements| is an array of values to replace '*' characters in the
* message.
*/
-chromeHidden.JSONSchemaValidator.prototype.addError = function(
- path, key, replacements) {
+chromeHidden.JSONSchemaValidator.prototype.addError =
+ function(path, key, replacements) {
this.errors.push({
path: path,
message: chromeHidden.JSONSchemaValidator.formatError(key, replacements)
});
};
+/**
+ * Resets errors to an empty list so you can call 'validate' again.
+ */
+chromeHidden.JSONSchemaValidator.prototype.resetErrors = function() {
+ this.errors = [];
+};
+
})();
« no previous file with comments | « chrome/renderer/renderer_resources.grd ('k') | chrome/renderer/resources/extensions/schema_generated_bindings.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698