| Index: components/json_schema/json_schema_validator.cc
|
| diff --git a/components/json_schema/json_schema_validator.cc b/components/json_schema/json_schema_validator.cc
|
| index 3816a7609708327294e8b61dcc1a1e214a0f1304..3cc9e2bd3f5c7a518eda11c7dc6ad332abb87ff0 100644
|
| --- a/components/json_schema/json_schema_validator.cc
|
| +++ b/components/json_schema/json_schema_validator.cc
|
| @@ -53,6 +53,18 @@ bool CompareToString(const ExpectedType& entry, const std::string& key) {
|
| return entry.key < key;
|
| }
|
|
|
| +// If |value| is a dictionary, returns the "name" attribute of |value| or NULL
|
| +// if |value| does not contain a "name" attribute. Otherwise, returns |value|.
|
| +const base::Value* ExtractNameFromDictionary(const base::Value* value) {
|
| + const base::DictionaryValue* value_dict = NULL;
|
| + const base::Value* name_value = NULL;
|
| + if (value->GetAsDictionary(&value_dict)) {
|
| + value_dict->Get("name", &name_value);
|
| + return name_value;
|
| + }
|
| + return value;
|
| +}
|
| +
|
| bool IsValidSchema(const base::DictionaryValue* dict, std::string* error) {
|
| // This array must be sorted, so that std::lower_bound can perform a
|
| // binary search.
|
| @@ -195,6 +207,13 @@ bool IsValidSchema(const base::DictionaryValue* dict, std::string* error) {
|
| for (size_t i = 0; i < list_value->GetSize(); ++i) {
|
| const base::Value* value = NULL;
|
| list_value->Get(i, &value);
|
| + // Sometimes the enum declaration is a dictionary with the enum value
|
| + // under "name".
|
| + value = ExtractNameFromDictionary(value);
|
| + if (!value) {
|
| + *error = "Invalid value in enum attribute";
|
| + return false;
|
| + }
|
| switch (value->GetType()) {
|
| case base::Value::TYPE_NULL:
|
| case base::Value::TYPE_BOOLEAN:
|
| @@ -479,6 +498,12 @@ void JSONSchemaValidator::ValidateEnum(const base::Value* instance,
|
| for (size_t i = 0; i < choices->GetSize(); ++i) {
|
| const base::Value* choice = NULL;
|
| CHECK(choices->Get(i, &choice));
|
| + // Sometimes the enum declaration is a dictionary with the enum value under
|
| + // "name".
|
| + choice = ExtractNameFromDictionary(choice);
|
| + if (!choice) {
|
| + NOTREACHED();
|
| + }
|
| switch (choice->GetType()) {
|
| case base::Value::TYPE_NULL:
|
| case base::Value::TYPE_BOOLEAN:
|
|
|