| 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 7770185283aa6bf0e6c0dd9cc28595467b959313..6640f483996103ea794a17d43865bb99344d85e4 100644
|
| --- a/chrome/renderer/resources/extensions/json_schema.js
|
| +++ b/chrome/renderer/resources/extensions/json_schema.js
|
| @@ -40,7 +40,8 @@
|
|
|
| // TODO(cduvall): Make this file not depend on chromeHidden.
|
| var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();
|
| -var loadRefDependency = require('utils').loadRefDependency;
|
| +var loadTypeSchema = require('utils').loadTypeSchema;
|
| +var CHECK = requireNative('logging').CHECK;
|
|
|
| function isInstanceOfClass(instance, className) {
|
| if (!instance)
|
| @@ -176,13 +177,21 @@ chromeHidden.JSONSchemaValidator.prototype.getAllTypesForSchema =
|
| schemaTypes = schemaTypes.concat(choiceTypes);
|
| }
|
| }
|
| - if (schema['$ref']) {
|
| - var refTypes = this.getAllTypesForSchema(this.types[schema['$ref']]);
|
| - schemaTypes = schemaTypes.concat(refTypes);
|
| + var ref = schema['$ref'];
|
| + if (ref) {
|
| + var type = this.getOrAddType(ref);
|
| + CHECK(type, 'Could not find type ' + ref);
|
| + schemaTypes = schemaTypes.concat(this.getAllTypesForSchema(type));
|
| }
|
| return schemaTypes;
|
| };
|
|
|
| +chromeHidden.JSONSchemaValidator.prototype.getOrAddType = function(typeName) {
|
| + if (!this.types[typeName])
|
| + this.types[typeName] = loadTypeSchema(typeName);
|
| + return this.types[typeName];
|
| +};
|
| +
|
| /**
|
| * Returns true if |schema| would accept an argument of type |type|.
|
| */
|
| @@ -243,12 +252,12 @@ chromeHidden.JSONSchemaValidator.prototype.validate =
|
|
|
| // If the schema has a $ref property, the instance must validate against
|
| // that schema too. It must be present in this.types to be referenced.
|
| - if (schema["$ref"]) {
|
| - loadRefDependency(schema["$ref"]);
|
| - if (!this.types[schema["$ref"]])
|
| - this.addError(path, "unknownSchemaReference", [ schema["$ref"] ]);
|
| + var ref = schema["$ref"];
|
| + if (ref) {
|
| + if (!this.getOrAddType(ref))
|
| + this.addError(path, "unknownSchemaReference", [ ref ]);
|
| else
|
| - this.validate(instance, this.types[schema["$ref"]], path)
|
| + this.validate(instance, this.getOrAddType(ref), path)
|
| }
|
|
|
| // If the schema has a choices property, the instance must validate against at
|
|
|