summaryrefslogtreecommitdiffstats
path: root/components/json_schema/json_schema_validator.cc
diff options
context:
space:
mode:
authorsammc@chromium.org <sammc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-31 03:59:12 +0000
committersammc@chromium.org <sammc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-31 03:59:12 +0000
commit8bd10c250c73a76852f9e51bcc7a8fc1d1c5b429 (patch)
tree0205bcffb519cb641e8d4f3dd2b178c6f59b3621 /components/json_schema/json_schema_validator.cc
parenta0ed964ede813379bbf0f0e2027111da5a987be4 (diff)
downloadchromium_src-8bd10c250c73a76852f9e51bcc7a8fc1d1c5b429.zip
chromium_src-8bd10c250c73a76852f9e51bcc7a8fc1d1c5b429.tar.gz
chromium_src-8bd10c250c73a76852f9e51bcc7a8fc1d1c5b429.tar.bz2
Docserver: Display enum value descriptions in API docs.
This modifies the json schema to allow both primitive types and dictionaries with properties "name" and optional "description" for enum values. BUG=310454 Review URL: https://codereview.chromium.org/39113003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@231982 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'components/json_schema/json_schema_validator.cc')
-rw-r--r--components/json_schema/json_schema_validator.cc25
1 files changed, 25 insertions, 0 deletions
diff --git a/components/json_schema/json_schema_validator.cc b/components/json_schema/json_schema_validator.cc
index 3816a76..3cc9e2b 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: