| Index: components/policy/core/common/schema.cc
|
| diff --git a/components/policy/core/common/schema.cc b/components/policy/core/common/schema.cc
|
| index 712332261fb28cbd13a8cfd008fb7d08a5c1af04..38627df2634c95aea755e2d1305ed528a35ab10c 100644
|
| --- a/components/policy/core/common/schema.cc
|
| +++ b/components/policy/core/common/schema.cc
|
| @@ -620,6 +620,8 @@ bool Schema::Validate(const base::Value& value) const {
|
|
|
| const base::DictionaryValue* dict = NULL;
|
| const base::ListValue* list = NULL;
|
| + int int_value;
|
| + std::string str_value;
|
| if (value.GetAsDictionary(&dict)) {
|
| for (base::DictionaryValue::Iterator it(*dict); !it.IsAtEnd();
|
| it.Advance()) {
|
| @@ -632,6 +634,12 @@ bool Schema::Validate(const base::Value& value) const {
|
| if (!*it || !GetItems().Validate(**it))
|
| return false;
|
| }
|
| + } else if (value.GetAsInteger(&int_value)) {
|
| + return node_->extra == kInvalid ||
|
| + ValidateIntegerRestriction(node_->extra, int_value);
|
| + } else if (value.GetAsString(&str_value)) {
|
| + return node_->extra == kInvalid ||
|
| + ValidateStringRestriction(node_->extra, str_value.c_str());
|
| }
|
|
|
| return true;
|
| @@ -723,4 +731,30 @@ Schema Schema::GetItems() const {
|
| return Schema(storage_, storage_->schema(node_->extra));
|
| }
|
|
|
| +bool Schema::ValidateIntegerRestriction(int index, int value) const {
|
| + const RestrictionNode* rnode = storage_->restriction(index);
|
| + if (rnode->ranged_restriction.min_value <=
|
| + rnode->ranged_restriction.max_value) {
|
| + return rnode->ranged_restriction.min_value <= value &&
|
| + rnode->ranged_restriction.max_value >= value;
|
| + } else {
|
| + for (int i = rnode->enumeration_restriction.offset_begin;
|
| + i < rnode->enumeration_restriction.offset_end; i++) {
|
| + if (*storage_->int_enums(i) == value)
|
| + return true;
|
| + }
|
| + return false;
|
| + }
|
| +}
|
| +
|
| +bool Schema::ValidateStringRestriction(int index, const char *str) const {
|
| + const RestrictionNode* rnode = storage_->restriction(index);
|
| + for (int i = rnode->enumeration_restriction.offset_begin;
|
| + i < rnode->enumeration_restriction.offset_end; i++) {
|
| + if (strcmp(*storage_->string_enums(i), str) == 0)
|
| + return true;
|
| + }
|
| + return false;
|
| +}
|
| +
|
| } // namespace policy
|
|
|