OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 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 "components/policy/core/common/schema_map.h" | 5 #include "components/policy/core/common/schema_map.h" |
6 | 6 |
7 #include "base/memory/weak_ptr.h" | 7 #include "base/memory/weak_ptr.h" |
8 #include "base/values.h" | 8 #include "base/values.h" |
9 #include "components/policy/core/common/external_data_fetcher.h" | 9 #include "components/policy/core/common/external_data_fetcher.h" |
10 #include "components/policy/core/common/external_data_manager.h" | 10 #include "components/policy/core/common/external_data_manager.h" |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 schema_map->FilterBundle(&bundle); | 134 schema_map->FilterBundle(&bundle); |
135 const PolicyBundle empty_bundle; | 135 const PolicyBundle empty_bundle; |
136 EXPECT_TRUE(bundle.Equals(empty_bundle)); | 136 EXPECT_TRUE(bundle.Equals(empty_bundle)); |
137 | 137 |
138 // The Chrome namespace isn't filtered. | 138 // The Chrome namespace isn't filtered. |
139 PolicyBundle expected_bundle; | 139 PolicyBundle expected_bundle; |
140 PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, ""); | 140 PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, ""); |
141 expected_bundle.Get(chrome_ns).Set("ChromePolicy", | 141 expected_bundle.Get(chrome_ns).Set("ChromePolicy", |
142 POLICY_LEVEL_MANDATORY, | 142 POLICY_LEVEL_MANDATORY, |
143 POLICY_SCOPE_USER, | 143 POLICY_SCOPE_USER, |
144 base::Value::CreateStringValue("value"), | 144 new base::StringValue("value"), |
145 NULL); | 145 NULL); |
146 bundle.CopyFrom(expected_bundle); | 146 bundle.CopyFrom(expected_bundle); |
147 | 147 |
148 // Unknown components are filtered out. | 148 // Unknown components are filtered out. |
149 PolicyNamespace another_extension_ns(POLICY_DOMAIN_EXTENSIONS, "xyz"); | 149 PolicyNamespace another_extension_ns(POLICY_DOMAIN_EXTENSIONS, "xyz"); |
150 bundle.Get(another_extension_ns).Set( | 150 bundle.Get(another_extension_ns).Set("AnotherExtensionPolicy", |
151 "AnotherExtensionPolicy", | 151 POLICY_LEVEL_MANDATORY, |
152 POLICY_LEVEL_MANDATORY, | 152 POLICY_SCOPE_USER, |
153 POLICY_SCOPE_USER, | 153 new base::StringValue("value"), |
154 base::Value::CreateStringValue("value"), | 154 NULL); |
155 NULL); | |
156 schema_map->FilterBundle(&bundle); | 155 schema_map->FilterBundle(&bundle); |
157 EXPECT_TRUE(bundle.Equals(expected_bundle)); | 156 EXPECT_TRUE(bundle.Equals(expected_bundle)); |
158 | 157 |
159 PolicyNamespace extension_ns(POLICY_DOMAIN_EXTENSIONS, "abc"); | 158 PolicyNamespace extension_ns(POLICY_DOMAIN_EXTENSIONS, "abc"); |
160 PolicyMap& map = expected_bundle.Get(extension_ns); | 159 PolicyMap& map = expected_bundle.Get(extension_ns); |
161 base::ListValue list; | 160 base::ListValue list; |
162 list.AppendString("a"); | 161 list.AppendString("a"); |
163 list.AppendString("b"); | 162 list.AppendString("b"); |
164 map.Set("list", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 163 map.Set("list", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
165 list.DeepCopy(), NULL); | 164 list.DeepCopy(), NULL); |
166 map.Set("boolean", | 165 map.Set("boolean", |
167 POLICY_LEVEL_MANDATORY, | 166 POLICY_LEVEL_MANDATORY, |
168 POLICY_SCOPE_USER, | 167 POLICY_SCOPE_USER, |
169 new base::FundamentalValue(true), | 168 new base::FundamentalValue(true), |
170 NULL); | 169 NULL); |
171 map.Set("integer", | 170 map.Set("integer", |
172 POLICY_LEVEL_MANDATORY, | 171 POLICY_LEVEL_MANDATORY, |
173 POLICY_SCOPE_USER, | 172 POLICY_SCOPE_USER, |
174 new base::FundamentalValue(1), | 173 new base::FundamentalValue(1), |
175 NULL); | 174 NULL); |
176 map.Set("null", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 175 map.Set("null", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
177 base::Value::CreateNullValue(), NULL); | 176 base::Value::CreateNullValue(), NULL); |
178 map.Set("double", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 177 map.Set("double", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
179 base::Value::CreateDoubleValue(1.2), NULL); | 178 base::Value::CreateDoubleValue(1.2), NULL); |
180 base::DictionaryValue dict; | 179 base::DictionaryValue dict; |
181 dict.SetString("a", "b"); | 180 dict.SetString("a", "b"); |
182 dict.SetInteger("b", 2); | 181 dict.SetInteger("b", 2); |
183 map.Set("object", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 182 map.Set("object", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
184 dict.DeepCopy(), NULL); | 183 dict.DeepCopy(), NULL); |
185 map.Set("string", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 184 map.Set("string", |
186 base::Value::CreateStringValue("value"), NULL); | 185 POLICY_LEVEL_MANDATORY, |
| 186 POLICY_SCOPE_USER, |
| 187 new base::StringValue("value"), |
| 188 NULL); |
187 | 189 |
188 bundle.MergeFrom(expected_bundle); | 190 bundle.MergeFrom(expected_bundle); |
189 bundle.Get(extension_ns).Set("Unexpected", | 191 bundle.Get(extension_ns).Set("Unexpected", |
190 POLICY_LEVEL_MANDATORY, | 192 POLICY_LEVEL_MANDATORY, |
191 POLICY_SCOPE_USER, | 193 POLICY_SCOPE_USER, |
192 base::Value::CreateStringValue("to-be-removed"), | 194 new base::StringValue("to-be-removed"), |
193 NULL); | 195 NULL); |
194 | 196 |
195 schema_map->FilterBundle(&bundle); | 197 schema_map->FilterBundle(&bundle); |
196 EXPECT_TRUE(bundle.Equals(expected_bundle)); | 198 EXPECT_TRUE(bundle.Equals(expected_bundle)); |
197 | 199 |
198 // Mismatched types are also removed. | 200 // Mismatched types are also removed. |
199 bundle.Clear(); | 201 bundle.Clear(); |
200 PolicyMap& badmap = bundle.Get(extension_ns); | 202 PolicyMap& badmap = bundle.Get(extension_ns); |
201 badmap.Set("list", | 203 badmap.Set("list", |
202 POLICY_LEVEL_MANDATORY, | 204 POLICY_LEVEL_MANDATORY, |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
254 scoped_refptr<SchemaMap> schema_map = new SchemaMap(domain_map); | 256 scoped_refptr<SchemaMap> schema_map = new SchemaMap(domain_map); |
255 | 257 |
256 // |bundle| contains policies loaded by a policy provider. | 258 // |bundle| contains policies loaded by a policy provider. |
257 PolicyBundle bundle; | 259 PolicyBundle bundle; |
258 | 260 |
259 // Known components with schemas are filtered. | 261 // Known components with schemas are filtered. |
260 PolicyNamespace extension_ns(POLICY_DOMAIN_EXTENSIONS, "with-schema"); | 262 PolicyNamespace extension_ns(POLICY_DOMAIN_EXTENSIONS, "with-schema"); |
261 bundle.Get(extension_ns).Set("String", | 263 bundle.Get(extension_ns).Set("String", |
262 POLICY_LEVEL_MANDATORY, | 264 POLICY_LEVEL_MANDATORY, |
263 POLICY_SCOPE_USER, | 265 POLICY_SCOPE_USER, |
264 base::Value::CreateStringValue("value 1"), | 266 new base::StringValue("value 1"), |
265 NULL); | 267 NULL); |
266 | 268 |
267 // The Chrome namespace isn't filtered. | 269 // The Chrome namespace isn't filtered. |
268 PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, ""); | 270 PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, ""); |
269 bundle.Get(chrome_ns).Set("ChromePolicy", | 271 bundle.Get(chrome_ns).Set("ChromePolicy", |
270 POLICY_LEVEL_MANDATORY, | 272 POLICY_LEVEL_MANDATORY, |
271 POLICY_SCOPE_USER, | 273 POLICY_SCOPE_USER, |
272 base::Value::CreateStringValue("value 3"), | 274 new base::StringValue("value 3"), |
273 NULL); | 275 NULL); |
274 | 276 |
275 PolicyBundle expected_bundle; | 277 PolicyBundle expected_bundle; |
276 expected_bundle.MergeFrom(bundle); | 278 expected_bundle.MergeFrom(bundle); |
277 | 279 |
278 // Known components without a schema are filtered out completely. | 280 // Known components without a schema are filtered out completely. |
279 PolicyNamespace without_schema_ns(POLICY_DOMAIN_EXTENSIONS, "without-schema"); | 281 PolicyNamespace without_schema_ns(POLICY_DOMAIN_EXTENSIONS, "without-schema"); |
280 bundle.Get(without_schema_ns).Set("Schemaless", | 282 bundle.Get(without_schema_ns).Set("Schemaless", |
281 POLICY_LEVEL_MANDATORY, | 283 POLICY_LEVEL_MANDATORY, |
282 POLICY_SCOPE_USER, | 284 POLICY_SCOPE_USER, |
283 base::Value::CreateStringValue("value 2"), | 285 new base::StringValue("value 2"), |
284 NULL); | 286 NULL); |
285 | 287 |
286 // Unknown policies of known components with a schema are removed. | 288 // Unknown policies of known components with a schema are removed. |
287 bundle.Get(extension_ns).Set("Surprise", | 289 bundle.Get(extension_ns).Set("Surprise", |
288 POLICY_LEVEL_MANDATORY, | 290 POLICY_LEVEL_MANDATORY, |
289 POLICY_SCOPE_USER, | 291 POLICY_SCOPE_USER, |
290 base::Value::CreateStringValue("value 4"), | 292 new base::StringValue("value 4"), |
291 NULL); | 293 NULL); |
292 | 294 |
293 // Unknown components are removed. | 295 // Unknown components are removed. |
294 PolicyNamespace unknown_ns(POLICY_DOMAIN_EXTENSIONS, "unknown"); | 296 PolicyNamespace unknown_ns(POLICY_DOMAIN_EXTENSIONS, "unknown"); |
295 bundle.Get(unknown_ns).Set("Surprise", | 297 bundle.Get(unknown_ns).Set("Surprise", |
296 POLICY_LEVEL_MANDATORY, | 298 POLICY_LEVEL_MANDATORY, |
297 POLICY_SCOPE_USER, | 299 POLICY_SCOPE_USER, |
298 base::Value::CreateStringValue("value 5"), | 300 new base::StringValue("value 5"), |
299 NULL); | 301 NULL); |
300 | 302 |
301 schema_map->FilterBundle(&bundle); | 303 schema_map->FilterBundle(&bundle); |
302 EXPECT_TRUE(bundle.Equals(expected_bundle)); | 304 EXPECT_TRUE(bundle.Equals(expected_bundle)); |
303 } | 305 } |
304 | 306 |
305 TEST_F(SchemaMapTest, GetChanges) { | 307 TEST_F(SchemaMapTest, GetChanges) { |
306 DomainMap map; | 308 DomainMap map; |
307 map[POLICY_DOMAIN_CHROME][""] = Schema(); | 309 map[POLICY_DOMAIN_CHROME][""] = Schema(); |
308 scoped_refptr<SchemaMap> older = new SchemaMap(map); | 310 scoped_refptr<SchemaMap> older = new SchemaMap(map); |
(...skipping 19 matching lines...) Expand all Loading... |
328 newer = new SchemaMap(map); | 330 newer = new SchemaMap(map); |
329 newer->GetChanges(older, &removed, &added); | 331 newer->GetChanges(older, &removed, &added); |
330 ASSERT_EQ(2u, removed.size()); | 332 ASSERT_EQ(2u, removed.size()); |
331 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_CHROME, ""), removed[0]); | 333 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_CHROME, ""), removed[0]); |
332 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz"), removed[1]); | 334 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz"), removed[1]); |
333 ASSERT_EQ(1u, added.size()); | 335 ASSERT_EQ(1u, added.size()); |
334 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "abc"), added[0]); | 336 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "abc"), added[0]); |
335 } | 337 } |
336 | 338 |
337 } // namespace policy | 339 } // namespace policy |
OLD | NEW |