| 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", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 165 map.Set("boolean", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 167 base::Value::CreateBooleanValue(true), NULL); | 166 base::Value::CreateBooleanValue(true), NULL); |
| 168 map.Set("integer", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 167 map.Set("integer", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 169 base::Value::CreateIntegerValue(1), NULL); | 168 base::Value::CreateIntegerValue(1), NULL); |
| 170 map.Set("null", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 169 map.Set("null", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 171 base::Value::CreateNullValue(), NULL); | 170 base::Value::CreateNullValue(), NULL); |
| 172 map.Set("double", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 171 map.Set("double", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 173 base::Value::CreateDoubleValue(1.2), NULL); | 172 base::Value::CreateDoubleValue(1.2), NULL); |
| 174 base::DictionaryValue dict; | 173 base::DictionaryValue dict; |
| 175 dict.SetString("a", "b"); | 174 dict.SetString("a", "b"); |
| 176 dict.SetInteger("b", 2); | 175 dict.SetInteger("b", 2); |
| 177 map.Set("object", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 176 map.Set("object", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 178 dict.DeepCopy(), NULL); | 177 dict.DeepCopy(), NULL); |
| 179 map.Set("string", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 178 map.Set("string", |
| 180 base::Value::CreateStringValue("value"), NULL); | 179 POLICY_LEVEL_MANDATORY, |
| 180 POLICY_SCOPE_USER, |
| 181 new base::StringValue("value"), |
| 182 NULL); |
| 181 | 183 |
| 182 bundle.MergeFrom(expected_bundle); | 184 bundle.MergeFrom(expected_bundle); |
| 183 bundle.Get(extension_ns).Set("Unexpected", | 185 bundle.Get(extension_ns).Set("Unexpected", |
| 184 POLICY_LEVEL_MANDATORY, | 186 POLICY_LEVEL_MANDATORY, |
| 185 POLICY_SCOPE_USER, | 187 POLICY_SCOPE_USER, |
| 186 base::Value::CreateStringValue("to-be-removed"), | 188 new base::StringValue("to-be-removed"), |
| 187 NULL); | 189 NULL); |
| 188 | 190 |
| 189 schema_map->FilterBundle(&bundle); | 191 schema_map->FilterBundle(&bundle); |
| 190 EXPECT_TRUE(bundle.Equals(expected_bundle)); | 192 EXPECT_TRUE(bundle.Equals(expected_bundle)); |
| 191 | 193 |
| 192 // Mismatched types are also removed. | 194 // Mismatched types are also removed. |
| 193 bundle.Clear(); | 195 bundle.Clear(); |
| 194 PolicyMap& badmap = bundle.Get(extension_ns); | 196 PolicyMap& badmap = bundle.Get(extension_ns); |
| 195 badmap.Set("list", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 197 badmap.Set("list", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 196 base::Value::CreateBooleanValue(false), NULL); | 198 base::Value::CreateBooleanValue(false), NULL); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 230 scoped_refptr<SchemaMap> schema_map = new SchemaMap(domain_map); | 232 scoped_refptr<SchemaMap> schema_map = new SchemaMap(domain_map); |
| 231 | 233 |
| 232 // |bundle| contains policies loaded by a policy provider. | 234 // |bundle| contains policies loaded by a policy provider. |
| 233 PolicyBundle bundle; | 235 PolicyBundle bundle; |
| 234 | 236 |
| 235 // Known components with schemas are filtered. | 237 // Known components with schemas are filtered. |
| 236 PolicyNamespace extension_ns(POLICY_DOMAIN_EXTENSIONS, "with-schema"); | 238 PolicyNamespace extension_ns(POLICY_DOMAIN_EXTENSIONS, "with-schema"); |
| 237 bundle.Get(extension_ns).Set("String", | 239 bundle.Get(extension_ns).Set("String", |
| 238 POLICY_LEVEL_MANDATORY, | 240 POLICY_LEVEL_MANDATORY, |
| 239 POLICY_SCOPE_USER, | 241 POLICY_SCOPE_USER, |
| 240 base::Value::CreateStringValue("value 1"), | 242 new base::StringValue("value 1"), |
| 241 NULL); | 243 NULL); |
| 242 | 244 |
| 243 // The Chrome namespace isn't filtered. | 245 // The Chrome namespace isn't filtered. |
| 244 PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, ""); | 246 PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, ""); |
| 245 bundle.Get(chrome_ns).Set("ChromePolicy", | 247 bundle.Get(chrome_ns).Set("ChromePolicy", |
| 246 POLICY_LEVEL_MANDATORY, | 248 POLICY_LEVEL_MANDATORY, |
| 247 POLICY_SCOPE_USER, | 249 POLICY_SCOPE_USER, |
| 248 base::Value::CreateStringValue("value 3"), | 250 new base::StringValue("value 3"), |
| 249 NULL); | 251 NULL); |
| 250 | 252 |
| 251 PolicyBundle expected_bundle; | 253 PolicyBundle expected_bundle; |
| 252 expected_bundle.MergeFrom(bundle); | 254 expected_bundle.MergeFrom(bundle); |
| 253 | 255 |
| 254 // Known components without a schema are filtered out completely. | 256 // Known components without a schema are filtered out completely. |
| 255 PolicyNamespace without_schema_ns(POLICY_DOMAIN_EXTENSIONS, "without-schema"); | 257 PolicyNamespace without_schema_ns(POLICY_DOMAIN_EXTENSIONS, "without-schema"); |
| 256 bundle.Get(without_schema_ns).Set("Schemaless", | 258 bundle.Get(without_schema_ns).Set("Schemaless", |
| 257 POLICY_LEVEL_MANDATORY, | 259 POLICY_LEVEL_MANDATORY, |
| 258 POLICY_SCOPE_USER, | 260 POLICY_SCOPE_USER, |
| 259 base::Value::CreateStringValue("value 2"), | 261 new base::StringValue("value 2"), |
| 260 NULL); | 262 NULL); |
| 261 | 263 |
| 262 // Unknown policies of known components with a schema are removed. | 264 // Unknown policies of known components with a schema are removed. |
| 263 bundle.Get(extension_ns).Set("Surprise", | 265 bundle.Get(extension_ns).Set("Surprise", |
| 264 POLICY_LEVEL_MANDATORY, | 266 POLICY_LEVEL_MANDATORY, |
| 265 POLICY_SCOPE_USER, | 267 POLICY_SCOPE_USER, |
| 266 base::Value::CreateStringValue("value 4"), | 268 new base::StringValue("value 4"), |
| 267 NULL); | 269 NULL); |
| 268 | 270 |
| 269 // Unknown components are removed. | 271 // Unknown components are removed. |
| 270 PolicyNamespace unknown_ns(POLICY_DOMAIN_EXTENSIONS, "unknown"); | 272 PolicyNamespace unknown_ns(POLICY_DOMAIN_EXTENSIONS, "unknown"); |
| 271 bundle.Get(unknown_ns).Set("Surprise", | 273 bundle.Get(unknown_ns).Set("Surprise", |
| 272 POLICY_LEVEL_MANDATORY, | 274 POLICY_LEVEL_MANDATORY, |
| 273 POLICY_SCOPE_USER, | 275 POLICY_SCOPE_USER, |
| 274 base::Value::CreateStringValue("value 5"), | 276 new base::StringValue("value 5"), |
| 275 NULL); | 277 NULL); |
| 276 | 278 |
| 277 schema_map->FilterBundle(&bundle); | 279 schema_map->FilterBundle(&bundle); |
| 278 EXPECT_TRUE(bundle.Equals(expected_bundle)); | 280 EXPECT_TRUE(bundle.Equals(expected_bundle)); |
| 279 } | 281 } |
| 280 | 282 |
| 281 TEST_F(SchemaMapTest, GetChanges) { | 283 TEST_F(SchemaMapTest, GetChanges) { |
| 282 DomainMap map; | 284 DomainMap map; |
| 283 map[POLICY_DOMAIN_CHROME][""] = Schema(); | 285 map[POLICY_DOMAIN_CHROME][""] = Schema(); |
| 284 scoped_refptr<SchemaMap> older = new SchemaMap(map); | 286 scoped_refptr<SchemaMap> older = new SchemaMap(map); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 304 newer = new SchemaMap(map); | 306 newer = new SchemaMap(map); |
| 305 newer->GetChanges(older, &removed, &added); | 307 newer->GetChanges(older, &removed, &added); |
| 306 ASSERT_EQ(2u, removed.size()); | 308 ASSERT_EQ(2u, removed.size()); |
| 307 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_CHROME, ""), removed[0]); | 309 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_CHROME, ""), removed[0]); |
| 308 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz"), removed[1]); | 310 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz"), removed[1]); |
| 309 ASSERT_EQ(1u, added.size()); | 311 ASSERT_EQ(1u, added.size()); |
| 310 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "abc"), added[0]); | 312 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "abc"), added[0]); |
| 311 } | 313 } |
| 312 | 314 |
| 313 } // namespace policy | 315 } // namespace policy |
| OLD | NEW |