| Index: chrome/browser/policy/policy_domain_descriptor.cc
|
| diff --git a/chrome/browser/policy/policy_domain_descriptor.cc b/chrome/browser/policy/policy_domain_descriptor.cc
|
| index c841a55a5acc32ab5e361e8654722c13b9de2114..f054710a5d13a9b953c8b99c0a74ce6ddf95c407 100644
|
| --- a/chrome/browser/policy/policy_domain_descriptor.cc
|
| +++ b/chrome/browser/policy/policy_domain_descriptor.cc
|
| @@ -9,19 +9,18 @@
|
| #include "base/values.h"
|
| #include "chrome/browser/policy/policy_bundle.h"
|
| #include "chrome/browser/policy/policy_map.h"
|
| -#include "components/policy/core/common/policy_schema.h"
|
|
|
| namespace policy {
|
|
|
| namespace {
|
|
|
| -bool Matches(const PolicySchema* schema, const base::Value& value) {
|
| - if (!schema) {
|
| +bool Matches(Schema schema, const base::Value& value) {
|
| + if (!schema.valid()) {
|
| // Schema not found, invalid entry.
|
| return false;
|
| }
|
|
|
| - if (!value.IsType(schema->type()))
|
| + if (!value.IsType(schema.type()))
|
| return false;
|
|
|
| const base::DictionaryValue* dict = NULL;
|
| @@ -29,13 +28,13 @@ bool Matches(const PolicySchema* schema, const base::Value& value) {
|
| if (value.GetAsDictionary(&dict)) {
|
| for (base::DictionaryValue::Iterator it(*dict); !it.IsAtEnd();
|
| it.Advance()) {
|
| - if (!Matches(schema->GetSchemaForProperty(it.key()), it.value()))
|
| + if (!Matches(schema.GetProperty(it.key()), it.value()))
|
| return false;
|
| }
|
| } else if (value.GetAsList(&list)) {
|
| for (base::ListValue::const_iterator it = list->begin();
|
| it != list->end(); ++it) {
|
| - if (!*it || !Matches(schema->GetSchemaForItems(), **it))
|
| + if (!*it || !Matches(schema.GetItems(), **it))
|
| return false;
|
| }
|
| }
|
| @@ -50,10 +49,11 @@ PolicyDomainDescriptor::PolicyDomainDescriptor(PolicyDomain domain)
|
|
|
| void PolicyDomainDescriptor::RegisterComponent(
|
| const std::string& component_id,
|
| - scoped_ptr<PolicySchema> schema) {
|
| - const PolicySchema*& entry = schema_map_[component_id];
|
| + scoped_ptr<SchemaOwner> schema) {
|
| + SchemaOwner*& entry = schema_owner_map_[component_id];
|
| delete entry;
|
| entry = schema.release();
|
| + schema_map_[component_id] = entry ? entry->schema() : Schema();
|
| }
|
|
|
| void PolicyDomainDescriptor::FilterBundle(PolicyBundle* bundle) const {
|
| @@ -76,18 +76,17 @@ void PolicyDomainDescriptor::FilterBundle(PolicyBundle* bundle) const {
|
| // TODO(joaodasilva): if a component is registered but doesn't have a schema
|
| // then its policies aren't filtered. This behavior is enabled for M29 to
|
| // allow a graceful update of the Legacy Browser Support extension; it'll
|
| - // be removed for M30. http://crbug.com/240704
|
| - if (!it_schema->second)
|
| + // be removed for M32. http://crbug.com/240704
|
| + Schema schema = it_schema->second;
|
| + if (!schema.valid())
|
| continue;
|
|
|
| - const PolicySchema* component_schema = it_schema->second;
|
| PolicyMap* map = it_bundle->second;
|
| for (PolicyMap::const_iterator it_map = map->begin();
|
| it_map != map->end();) {
|
| const std::string& policy_name = it_map->first;
|
| const base::Value* policy_value = it_map->second.value;
|
| - const PolicySchema* policy_schema =
|
| - component_schema->GetSchemaForProperty(policy_name);
|
| + Schema policy_schema = schema.GetProperty(policy_name);
|
| ++it_map;
|
| if (!policy_value || !Matches(policy_schema, *policy_value))
|
| map->Erase(policy_name);
|
| @@ -96,7 +95,7 @@ void PolicyDomainDescriptor::FilterBundle(PolicyBundle* bundle) const {
|
| }
|
|
|
| PolicyDomainDescriptor::~PolicyDomainDescriptor() {
|
| - STLDeleteValues(&schema_map_);
|
| + STLDeleteValues(&schema_owner_map_);
|
| }
|
|
|
| } // namespace policy
|
|
|