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/ptr_util.h" | 7 #include "base/memory/ptr_util.h" |
8 #include "base/memory/weak_ptr.h" | 8 #include "base/memory/weak_ptr.h" |
9 #include "base/values.h" | 9 #include "base/values.h" |
10 #include "components/policy/core/common/external_data_fetcher.h" | 10 #include "components/policy/core/common/external_data_fetcher.h" |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 PolicyBundle bundle; | 135 PolicyBundle bundle; |
136 schema_map->FilterBundle(&bundle); | 136 schema_map->FilterBundle(&bundle); |
137 const PolicyBundle empty_bundle; | 137 const PolicyBundle empty_bundle; |
138 EXPECT_TRUE(bundle.Equals(empty_bundle)); | 138 EXPECT_TRUE(bundle.Equals(empty_bundle)); |
139 | 139 |
140 // The Chrome namespace isn't filtered. | 140 // The Chrome namespace isn't filtered. |
141 PolicyBundle expected_bundle; | 141 PolicyBundle expected_bundle; |
142 PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, ""); | 142 PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, ""); |
143 expected_bundle.Get(chrome_ns).Set( | 143 expected_bundle.Get(chrome_ns).Set( |
144 "ChromePolicy", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 144 "ChromePolicy", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
145 POLICY_SOURCE_CLOUD, base::MakeUnique<base::StringValue>("value"), | 145 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>("value"), nullptr); |
146 nullptr); | |
147 bundle.CopyFrom(expected_bundle); | 146 bundle.CopyFrom(expected_bundle); |
148 | 147 |
149 // Unknown components are filtered out. | 148 // Unknown components are filtered out. |
150 PolicyNamespace another_extension_ns(POLICY_DOMAIN_EXTENSIONS, "xyz"); | 149 PolicyNamespace another_extension_ns(POLICY_DOMAIN_EXTENSIONS, "xyz"); |
151 bundle.Get(another_extension_ns) | 150 bundle.Get(another_extension_ns) |
152 .Set("AnotherExtensionPolicy", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 151 .Set("AnotherExtensionPolicy", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
153 POLICY_SOURCE_CLOUD, base::MakeUnique<base::StringValue>("value"), | 152 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>("value"), |
154 nullptr); | 153 nullptr); |
155 schema_map->FilterBundle(&bundle); | 154 schema_map->FilterBundle(&bundle); |
156 EXPECT_TRUE(bundle.Equals(expected_bundle)); | 155 EXPECT_TRUE(bundle.Equals(expected_bundle)); |
157 | 156 |
158 PolicyNamespace extension_ns(POLICY_DOMAIN_EXTENSIONS, "abc"); | 157 PolicyNamespace extension_ns(POLICY_DOMAIN_EXTENSIONS, "abc"); |
159 PolicyMap& map = expected_bundle.Get(extension_ns); | 158 PolicyMap& map = expected_bundle.Get(extension_ns); |
160 base::ListValue list; | 159 base::ListValue list; |
161 list.AppendString("a"); | 160 list.AppendString("a"); |
162 list.AppendString("b"); | 161 list.AppendString("b"); |
163 map.Set("list", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 162 map.Set("list", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
164 POLICY_SOURCE_CLOUD, list.CreateDeepCopy(), nullptr); | 163 POLICY_SOURCE_CLOUD, list.CreateDeepCopy(), nullptr); |
165 map.Set("boolean", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 164 map.Set("boolean", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
166 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(true), nullptr); | 165 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(true), nullptr); |
167 map.Set("integer", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 166 map.Set("integer", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
168 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(1), nullptr); | 167 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(1), nullptr); |
169 map.Set("null", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 168 map.Set("null", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
170 POLICY_SOURCE_CLOUD, base::Value::CreateNullValue(), nullptr); | 169 POLICY_SOURCE_CLOUD, base::Value::CreateNullValue(), nullptr); |
171 map.Set("double", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 170 map.Set("double", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
172 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(1.2), nullptr); | 171 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(1.2), nullptr); |
173 base::DictionaryValue dict; | 172 base::DictionaryValue dict; |
174 dict.SetString("a", "b"); | 173 dict.SetString("a", "b"); |
175 dict.SetInteger("b", 2); | 174 dict.SetInteger("b", 2); |
176 map.Set("object", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 175 map.Set("object", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
177 POLICY_SOURCE_CLOUD, dict.CreateDeepCopy(), nullptr); | 176 POLICY_SOURCE_CLOUD, dict.CreateDeepCopy(), nullptr); |
178 map.Set("string", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 177 map.Set("string", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
179 POLICY_SOURCE_CLOUD, base::MakeUnique<base::StringValue>("value"), | 178 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>("value"), nullptr); |
180 nullptr); | |
181 | 179 |
182 bundle.MergeFrom(expected_bundle); | 180 bundle.MergeFrom(expected_bundle); |
183 bundle.Get(extension_ns) | 181 bundle.Get(extension_ns) |
184 .Set("Unexpected", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 182 .Set("Unexpected", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
185 POLICY_SOURCE_CLOUD, | 183 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>("to-be-removed"), |
186 base::MakeUnique<base::StringValue>("to-be-removed"), nullptr); | 184 nullptr); |
187 | 185 |
188 schema_map->FilterBundle(&bundle); | 186 schema_map->FilterBundle(&bundle); |
189 EXPECT_TRUE(bundle.Equals(expected_bundle)); | 187 EXPECT_TRUE(bundle.Equals(expected_bundle)); |
190 | 188 |
191 // Mismatched types are also removed. | 189 // Mismatched types are also removed. |
192 bundle.Clear(); | 190 bundle.Clear(); |
193 PolicyMap& badmap = bundle.Get(extension_ns); | 191 PolicyMap& badmap = bundle.Get(extension_ns); |
194 badmap.Set("list", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 192 badmap.Set("list", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
195 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(false), | 193 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(false), |
196 nullptr); | 194 nullptr); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
232 domain_map[POLICY_DOMAIN_EXTENSIONS]["without-schema"] = Schema(); | 230 domain_map[POLICY_DOMAIN_EXTENSIONS]["without-schema"] = Schema(); |
233 scoped_refptr<SchemaMap> schema_map = new SchemaMap(domain_map); | 231 scoped_refptr<SchemaMap> schema_map = new SchemaMap(domain_map); |
234 | 232 |
235 // |bundle| contains policies loaded by a policy provider. | 233 // |bundle| contains policies loaded by a policy provider. |
236 PolicyBundle bundle; | 234 PolicyBundle bundle; |
237 | 235 |
238 // Known components with schemas are filtered. | 236 // Known components with schemas are filtered. |
239 PolicyNamespace extension_ns(POLICY_DOMAIN_EXTENSIONS, "with-schema"); | 237 PolicyNamespace extension_ns(POLICY_DOMAIN_EXTENSIONS, "with-schema"); |
240 bundle.Get(extension_ns) | 238 bundle.Get(extension_ns) |
241 .Set("String", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 239 .Set("String", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
242 POLICY_SOURCE_CLOUD, base::MakeUnique<base::StringValue>("value 1"), | 240 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>("value 1"), |
243 nullptr); | 241 nullptr); |
244 | 242 |
245 // The Chrome namespace isn't filtered. | 243 // The Chrome namespace isn't filtered. |
246 PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, ""); | 244 PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, ""); |
247 bundle.Get(chrome_ns).Set("ChromePolicy", POLICY_LEVEL_MANDATORY, | 245 bundle.Get(chrome_ns).Set("ChromePolicy", POLICY_LEVEL_MANDATORY, |
248 POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, | 246 POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, |
249 base::MakeUnique<base::StringValue>("value 3"), | 247 base::MakeUnique<base::Value>("value 3"), nullptr); |
250 nullptr); | |
251 | 248 |
252 PolicyBundle expected_bundle; | 249 PolicyBundle expected_bundle; |
253 expected_bundle.MergeFrom(bundle); | 250 expected_bundle.MergeFrom(bundle); |
254 | 251 |
255 // Known components without a schema are filtered out completely. | 252 // Known components without a schema are filtered out completely. |
256 PolicyNamespace without_schema_ns(POLICY_DOMAIN_EXTENSIONS, "without-schema"); | 253 PolicyNamespace without_schema_ns(POLICY_DOMAIN_EXTENSIONS, "without-schema"); |
257 bundle.Get(without_schema_ns) | 254 bundle.Get(without_schema_ns) |
258 .Set("Schemaless", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 255 .Set("Schemaless", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
259 POLICY_SOURCE_CLOUD, base::MakeUnique<base::StringValue>("value 2"), | 256 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>("value 2"), |
260 nullptr); | 257 nullptr); |
261 | 258 |
262 // Unknown policies of known components with a schema are removed. | 259 // Unknown policies of known components with a schema are removed. |
263 bundle.Get(extension_ns) | 260 bundle.Get(extension_ns) |
264 .Set("Surprise", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 261 .Set("Surprise", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
265 POLICY_SOURCE_CLOUD, base::MakeUnique<base::StringValue>("value 4"), | 262 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>("value 4"), |
266 nullptr); | 263 nullptr); |
267 | 264 |
268 // Unknown components are removed. | 265 // Unknown components are removed. |
269 PolicyNamespace unknown_ns(POLICY_DOMAIN_EXTENSIONS, "unknown"); | 266 PolicyNamespace unknown_ns(POLICY_DOMAIN_EXTENSIONS, "unknown"); |
270 bundle.Get(unknown_ns) | 267 bundle.Get(unknown_ns) |
271 .Set("Surprise", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 268 .Set("Surprise", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
272 POLICY_SOURCE_CLOUD, base::MakeUnique<base::StringValue>("value 5"), | 269 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>("value 5"), |
273 nullptr); | 270 nullptr); |
274 | 271 |
275 schema_map->FilterBundle(&bundle); | 272 schema_map->FilterBundle(&bundle); |
276 EXPECT_TRUE(bundle.Equals(expected_bundle)); | 273 EXPECT_TRUE(bundle.Equals(expected_bundle)); |
277 } | 274 } |
278 | 275 |
279 TEST_F(SchemaMapTest, GetChanges) { | 276 TEST_F(SchemaMapTest, GetChanges) { |
280 DomainMap map; | 277 DomainMap map; |
281 map[POLICY_DOMAIN_CHROME][""] = Schema(); | 278 map[POLICY_DOMAIN_CHROME][""] = Schema(); |
282 scoped_refptr<SchemaMap> older = new SchemaMap(map); | 279 scoped_refptr<SchemaMap> older = new SchemaMap(map); |
(...skipping 19 matching lines...) Expand all Loading... |
302 newer = new SchemaMap(map); | 299 newer = new SchemaMap(map); |
303 newer->GetChanges(older, &removed, &added); | 300 newer->GetChanges(older, &removed, &added); |
304 ASSERT_EQ(2u, removed.size()); | 301 ASSERT_EQ(2u, removed.size()); |
305 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_CHROME, ""), removed[0]); | 302 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_CHROME, ""), removed[0]); |
306 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz"), removed[1]); | 303 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz"), removed[1]); |
307 ASSERT_EQ(1u, added.size()); | 304 ASSERT_EQ(1u, added.size()); |
308 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "abc"), added[0]); | 305 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "abc"), added[0]); |
309 } | 306 } |
310 | 307 |
311 } // namespace policy | 308 } // namespace policy |
OLD | NEW |