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

Side by Side Diff: components/json_schema/json_schema_validator.cc

Issue 22807004: Moved chrome/common/json_schema to components/json_schema. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixed android isolates Created 7 years, 4 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 #include "chrome/common/json_schema/json_schema_validator.h" 5 #include "components/json_schema/json_schema_validator.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cfloat> 8 #include <cfloat>
9 #include <cmath> 9 #include <cmath>
10 10
11 #include "base/json/json_reader.h" 11 #include "base/json/json_reader.h"
12 #include "base/strings/string_number_conversions.h" 12 #include "base/strings/string_number_conversions.h"
13 #include "base/strings/string_util.h" 13 #include "base/strings/string_util.h"
14 #include "base/strings/stringprintf.h" 14 #include "base/strings/stringprintf.h"
15 #include "base/values.h" 15 #include "base/values.h"
16 #include "chrome/common/json_schema/json_schema_constants.h" 16 #include "components/json_schema/json_schema_constants.h"
17 #include "ui/base/l10n/l10n_util.h" 17 #include "ui/base/l10n/l10n_util.h"
18 18
19 namespace schema = json_schema_constants; 19 namespace schema = json_schema_constants;
20 20
21 namespace { 21 namespace {
22 22
23 double GetNumberValue(const base::Value* value) { 23 double GetNumberValue(const base::Value* value) {
24 double result = 0; 24 double result = 0;
25 CHECK(value->GetAsDouble(&result)) 25 CHECK(value->GetAsDouble(&result))
26 << "Unexpected value type: " << value->GetType(); 26 << "Unexpected value type: " << value->GetType();
(...skipping 545 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 errors_.push_back(Error(path, FormatErrorMessage( 572 errors_.push_back(Error(path, FormatErrorMessage(
573 kArrayMaxItems, base::IntToString(max_items)))); 573 kArrayMaxItems, base::IntToString(max_items))));
574 } 574 }
575 } 575 }
576 576
577 // If the items property is a single schema, each item in the array must 577 // If the items property is a single schema, each item in the array must
578 // validate against that schema. 578 // validate against that schema.
579 for (size_t i = 0; i < instance_size; ++i) { 579 for (size_t i = 0; i < instance_size; ++i) {
580 const base::Value* item = NULL; 580 const base::Value* item = NULL;
581 CHECK(instance->Get(i, &item)); 581 CHECK(instance->Get(i, &item));
582 std::string i_str = base::UintToString(i); 582 std::string i_str = base::Uint64ToString(i);
583 std::string item_path = path.empty() ? i_str : (path + "." + i_str); 583 std::string item_path = path.empty() ? i_str : (path + "." + i_str);
584 Validate(item, single_type, item_path); 584 Validate(item, single_type, item_path);
585 } 585 }
586 586
587 return; 587 return;
588 } 588 }
589 589
590 // Otherwise, the list must be a tuple type, where each item in the list has a 590 // Otherwise, the list must be a tuple type, where each item in the list has a
591 // particular schema. 591 // particular schema.
592 ValidateTuple(instance, schema, path); 592 ValidateTuple(instance, schema, path);
593 } 593 }
594 594
595 void JSONSchemaValidator::ValidateTuple(const base::ListValue* instance, 595 void JSONSchemaValidator::ValidateTuple(const base::ListValue* instance,
596 const base::DictionaryValue* schema, 596 const base::DictionaryValue* schema,
597 const std::string& path) { 597 const std::string& path) {
598 const base::ListValue* tuple_type = NULL; 598 const base::ListValue* tuple_type = NULL;
599 schema->GetList(schema::kItems, &tuple_type); 599 schema->GetList(schema::kItems, &tuple_type);
600 size_t tuple_size = tuple_type ? tuple_type->GetSize() : 0; 600 size_t tuple_size = tuple_type ? tuple_type->GetSize() : 0;
601 if (tuple_type) { 601 if (tuple_type) {
602 for (size_t i = 0; i < tuple_size; ++i) { 602 for (size_t i = 0; i < tuple_size; ++i) {
603 std::string i_str = base::UintToString(i); 603 std::string i_str = base::Uint64ToString(i);
604 std::string item_path = path.empty() ? i_str : (path + "." + i_str); 604 std::string item_path = path.empty() ? i_str : (path + "." + i_str);
605 const base::DictionaryValue* item_schema = NULL; 605 const base::DictionaryValue* item_schema = NULL;
606 CHECK(tuple_type->GetDictionary(i, &item_schema)); 606 CHECK(tuple_type->GetDictionary(i, &item_schema));
607 const base::Value* item_value = NULL; 607 const base::Value* item_value = NULL;
608 instance->Get(i, &item_value); 608 instance->Get(i, &item_value);
609 if (item_value && item_value->GetType() != base::Value::TYPE_NULL) { 609 if (item_value && item_value->GetType() != base::Value::TYPE_NULL) {
610 Validate(item_value, item_schema, item_path); 610 Validate(item_value, item_schema, item_path);
611 } else { 611 } else {
612 bool is_optional = false; 612 bool is_optional = false;
613 item_schema->GetBoolean(schema::kOptional, &is_optional); 613 item_schema->GetBoolean(schema::kOptional, &is_optional);
614 if (!is_optional) { 614 if (!is_optional) {
615 errors_.push_back(Error(item_path, kArrayItemRequired)); 615 errors_.push_back(Error(item_path, kArrayItemRequired));
616 return; 616 return;
617 } 617 }
618 } 618 }
619 } 619 }
620 } 620 }
621 621
622 const base::DictionaryValue* additional_properties_schema = NULL; 622 const base::DictionaryValue* additional_properties_schema = NULL;
623 if (SchemaAllowsAnyAdditionalItems(schema, &additional_properties_schema)) 623 if (SchemaAllowsAnyAdditionalItems(schema, &additional_properties_schema))
624 return; 624 return;
625 625
626 size_t instance_size = instance->GetSize(); 626 size_t instance_size = instance->GetSize();
627 if (additional_properties_schema) { 627 if (additional_properties_schema) {
628 // Any additional properties must validate against the additionalProperties 628 // Any additional properties must validate against the additionalProperties
629 // schema. 629 // schema.
630 for (size_t i = tuple_size; i < instance_size; ++i) { 630 for (size_t i = tuple_size; i < instance_size; ++i) {
631 std::string i_str = base::UintToString(i); 631 std::string i_str = base::Uint64ToString(i);
632 std::string item_path = path.empty() ? i_str : (path + "." + i_str); 632 std::string item_path = path.empty() ? i_str : (path + "." + i_str);
633 const base::Value* item_value = NULL; 633 const base::Value* item_value = NULL;
634 CHECK(instance->Get(i, &item_value)); 634 CHECK(instance->Get(i, &item_value));
635 Validate(item_value, additional_properties_schema, item_path); 635 Validate(item_value, additional_properties_schema, item_path);
636 } 636 }
637 } else if (instance_size > tuple_size) { 637 } else if (instance_size > tuple_size) {
638 errors_.push_back(Error(path, FormatErrorMessage( 638 errors_.push_back(Error(path, FormatErrorMessage(
639 kArrayMaxItems, base::UintToString(tuple_size)))); 639 kArrayMaxItems, base::Uint64ToString(tuple_size))));
640 } 640 }
641 } 641 }
642 642
643 void JSONSchemaValidator::ValidateString(const base::Value* instance, 643 void JSONSchemaValidator::ValidateString(const base::Value* instance,
644 const base::DictionaryValue* schema, 644 const base::DictionaryValue* schema,
645 const std::string& path) { 645 const std::string& path) {
646 std::string value; 646 std::string value;
647 CHECK(instance->GetAsString(&value)); 647 CHECK(instance->GetAsString(&value));
648 648
649 int min_length = 0; 649 int min_length = 0;
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
718 718
719 if (*additional_properties_schema) { 719 if (*additional_properties_schema) {
720 std::string additional_properties_type(schema::kAny); 720 std::string additional_properties_type(schema::kAny);
721 CHECK((*additional_properties_schema)->GetString( 721 CHECK((*additional_properties_schema)->GetString(
722 schema::kType, &additional_properties_type)); 722 schema::kType, &additional_properties_type));
723 return additional_properties_type == schema::kAny; 723 return additional_properties_type == schema::kAny;
724 } else { 724 } else {
725 return default_allow_additional_properties_; 725 return default_allow_additional_properties_;
726 } 726 }
727 } 727 }
OLDNEW
« no previous file with comments | « components/json_schema/json_schema_validator.h ('k') | components/json_schema/json_schema_validator_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698