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

Side by Side Diff: chrome/browser/policy/policy_domain_descriptor.cc

Issue 50143010: Added a SchemaMap. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@chrome-policy-schema-5-ref-counted-schema
Patch Set: rebase Created 7 years, 1 month 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
« no previous file with comments | « no previous file | chrome/browser/policy/schema_map.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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/browser/policy/policy_domain_descriptor.h" 5 #include "chrome/browser/policy/policy_domain_descriptor.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "base/values.h" 9 #include "base/values.h"
10 #include "chrome/browser/policy/policy_bundle.h" 10 #include "chrome/browser/policy/policy_bundle.h"
11 #include "chrome/browser/policy/policy_map.h" 11 #include "chrome/browser/policy/policy_map.h"
12 12
13 namespace policy { 13 namespace policy {
14 14
15 namespace {
16
17 bool Matches(Schema schema, const base::Value& value) {
18 if (!schema.valid()) {
19 // Schema not found, invalid entry.
20 return false;
21 }
22
23 if (!value.IsType(schema.type()))
24 return false;
25
26 const base::DictionaryValue* dict = NULL;
27 const base::ListValue* list = NULL;
28 if (value.GetAsDictionary(&dict)) {
29 for (base::DictionaryValue::Iterator it(*dict); !it.IsAtEnd();
30 it.Advance()) {
31 if (!Matches(schema.GetProperty(it.key()), it.value()))
32 return false;
33 }
34 } else if (value.GetAsList(&list)) {
35 for (base::ListValue::const_iterator it = list->begin();
36 it != list->end(); ++it) {
37 if (!*it || !Matches(schema.GetItems(), **it))
38 return false;
39 }
40 }
41
42 return true;
43 }
44
45 } // namespace
46
47 PolicyDomainDescriptor::PolicyDomainDescriptor(PolicyDomain domain) 15 PolicyDomainDescriptor::PolicyDomainDescriptor(PolicyDomain domain)
48 : domain_(domain) {} 16 : domain_(domain) {}
49 17
50 void PolicyDomainDescriptor::RegisterComponent(const std::string& component_id, 18 void PolicyDomainDescriptor::RegisterComponent(const std::string& component_id,
51 Schema schema) { 19 Schema schema) {
52 schema_map_[component_id] = schema; 20 schema_map_[component_id] = schema;
53 } 21 }
54 22
55 void PolicyDomainDescriptor::FilterBundle(PolicyBundle* bundle) const { 23 void PolicyDomainDescriptor::FilterBundle(PolicyBundle* bundle) const {
56 // Chrome policies are not filtered, so that typos appear in about:policy. 24 // Chrome policies are not filtered, so that typos appear in about:policy.
(...skipping 20 matching lines...) Expand all
77 if (!schema.valid()) 45 if (!schema.valid())
78 continue; 46 continue;
79 47
80 PolicyMap* map = it_bundle->second; 48 PolicyMap* map = it_bundle->second;
81 for (PolicyMap::const_iterator it_map = map->begin(); 49 for (PolicyMap::const_iterator it_map = map->begin();
82 it_map != map->end();) { 50 it_map != map->end();) {
83 const std::string& policy_name = it_map->first; 51 const std::string& policy_name = it_map->first;
84 const base::Value* policy_value = it_map->second.value; 52 const base::Value* policy_value = it_map->second.value;
85 Schema policy_schema = schema.GetProperty(policy_name); 53 Schema policy_schema = schema.GetProperty(policy_name);
86 ++it_map; 54 ++it_map;
87 if (!policy_value || !Matches(policy_schema, *policy_value)) 55 if (!policy_value || !policy_schema.Validate(*policy_value))
88 map->Erase(policy_name); 56 map->Erase(policy_name);
89 } 57 }
90 } 58 }
91 } 59 }
92 60
93 PolicyDomainDescriptor::~PolicyDomainDescriptor() {} 61 PolicyDomainDescriptor::~PolicyDomainDescriptor() {}
94 62
95 } // namespace policy 63 } // namespace policy
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/policy/schema_map.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698