OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/policy_service_impl.h" | 5 #include "components/policy/core/common/policy_service_impl.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 | 49 |
50 // Helper that fills |bundle| with test policies. | 50 // Helper that fills |bundle| with test policies. |
51 void AddTestPolicies(PolicyBundle* bundle, | 51 void AddTestPolicies(PolicyBundle* bundle, |
52 const char* value, | 52 const char* value, |
53 PolicyLevel level, | 53 PolicyLevel level, |
54 PolicyScope scope) { | 54 PolicyScope scope) { |
55 PolicyMap* policy_map = | 55 PolicyMap* policy_map = |
56 &bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())); | 56 &bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())); |
57 policy_map->Set(kSameLevelPolicy, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 57 policy_map->Set(kSameLevelPolicy, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
58 POLICY_SOURCE_ENTERPRISE_DEFAULT, | 58 POLICY_SOURCE_ENTERPRISE_DEFAULT, |
59 base::MakeUnique<base::StringValue>(value), nullptr); | 59 base::MakeUnique<base::Value>(value), nullptr); |
60 policy_map->Set(kDiffLevelPolicy, level, scope, POLICY_SOURCE_PLATFORM, | 60 policy_map->Set(kDiffLevelPolicy, level, scope, POLICY_SOURCE_PLATFORM, |
61 base::MakeUnique<base::StringValue>(value), nullptr); | 61 base::MakeUnique<base::Value>(value), nullptr); |
62 policy_map = | 62 policy_map = |
63 &bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension)); | 63 &bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension)); |
64 policy_map->Set(kSameLevelPolicy, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 64 policy_map->Set(kSameLevelPolicy, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
65 POLICY_SOURCE_ENTERPRISE_DEFAULT, | 65 POLICY_SOURCE_ENTERPRISE_DEFAULT, |
66 base::MakeUnique<base::StringValue>(value), nullptr); | 66 base::MakeUnique<base::Value>(value), nullptr); |
67 policy_map->Set(kDiffLevelPolicy, level, scope, POLICY_SOURCE_PLATFORM, | 67 policy_map->Set(kDiffLevelPolicy, level, scope, POLICY_SOURCE_PLATFORM, |
68 base::MakeUnique<base::StringValue>(value), nullptr); | 68 base::MakeUnique<base::Value>(value), nullptr); |
69 } | 69 } |
70 | 70 |
71 // Observer class that changes the policy in the passed provider when the | 71 // Observer class that changes the policy in the passed provider when the |
72 // callback is invoked. | 72 // callback is invoked. |
73 class ChangePolicyObserver : public PolicyService::Observer { | 73 class ChangePolicyObserver : public PolicyService::Observer { |
74 public: | 74 public: |
75 explicit ChangePolicyObserver(MockConfigurationPolicyProvider* provider) | 75 explicit ChangePolicyObserver(MockConfigurationPolicyProvider* provider) |
76 : provider_(provider), | 76 : provider_(provider), |
77 observer_invoked_(false) {} | 77 observer_invoked_(false) {} |
78 | 78 |
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 policy_service_->AddObserver(POLICY_DOMAIN_CHROME, &chrome_observer); | 260 policy_service_->AddObserver(POLICY_DOMAIN_CHROME, &chrome_observer); |
261 policy_service_->AddObserver(POLICY_DOMAIN_EXTENSIONS, &extension_observer); | 261 policy_service_->AddObserver(POLICY_DOMAIN_EXTENSIONS, &extension_observer); |
262 | 262 |
263 PolicyMap previous_policy_map; | 263 PolicyMap previous_policy_map; |
264 previous_policy_map.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 264 previous_policy_map.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
265 POLICY_SOURCE_ENTERPRISE_DEFAULT, | 265 POLICY_SOURCE_ENTERPRISE_DEFAULT, |
266 base::MakeUnique<base::Value>(13), nullptr); | 266 base::MakeUnique<base::Value>(13), nullptr); |
267 PolicyMap policy_map; | 267 PolicyMap policy_map; |
268 policy_map.CopyFrom(previous_policy_map); | 268 policy_map.CopyFrom(previous_policy_map); |
269 policy_map.Set("policy", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 269 policy_map.Set("policy", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
270 POLICY_SOURCE_CLOUD, | 270 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>("value"), |
271 base::MakeUnique<base::StringValue>("value"), nullptr); | 271 nullptr); |
272 | 272 |
273 std::unique_ptr<PolicyBundle> bundle(new PolicyBundle()); | 273 std::unique_ptr<PolicyBundle> bundle(new PolicyBundle()); |
274 // The initial setup includes a policy for chrome that is now changing. | 274 // The initial setup includes a policy for chrome that is now changing. |
275 bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) | 275 bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) |
276 .CopyFrom(policy_map); | 276 .CopyFrom(policy_map); |
277 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension0)) | 277 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension0)) |
278 .CopyFrom(policy_map); | 278 .CopyFrom(policy_map); |
279 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension1)) | 279 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension1)) |
280 .CopyFrom(policy_map); | 280 .CopyFrom(policy_map); |
281 | 281 |
(...skipping 19 matching lines...) Expand all Loading... |
301 Mock::VerifyAndClearExpectations(&extension_observer); | 301 Mock::VerifyAndClearExpectations(&extension_observer); |
302 | 302 |
303 // Chrome policy stays the same, kExtension0 is gone, kExtension1 changes, | 303 // Chrome policy stays the same, kExtension0 is gone, kExtension1 changes, |
304 // and kExtension2 is new. | 304 // and kExtension2 is new. |
305 previous_policy_map.CopyFrom(policy_map); | 305 previous_policy_map.CopyFrom(policy_map); |
306 bundle.reset(new PolicyBundle()); | 306 bundle.reset(new PolicyBundle()); |
307 bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) | 307 bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) |
308 .CopyFrom(policy_map); | 308 .CopyFrom(policy_map); |
309 policy_map.Set("policy", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 309 policy_map.Set("policy", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
310 POLICY_SOURCE_CLOUD, | 310 POLICY_SOURCE_CLOUD, |
311 base::MakeUnique<base::StringValue>("another value"), nullptr); | 311 base::MakeUnique<base::Value>("another value"), nullptr); |
312 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension1)) | 312 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension1)) |
313 .CopyFrom(policy_map); | 313 .CopyFrom(policy_map); |
314 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension2)) | 314 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension2)) |
315 .CopyFrom(policy_map); | 315 .CopyFrom(policy_map); |
316 | 316 |
317 EXPECT_CALL(chrome_observer, OnPolicyUpdated(_, _, _)).Times(0); | 317 EXPECT_CALL(chrome_observer, OnPolicyUpdated(_, _, _)).Times(0); |
318 EXPECT_CALL( | 318 EXPECT_CALL( |
319 extension_observer, | 319 extension_observer, |
320 OnPolicyUpdated(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension0), | 320 OnPolicyUpdated(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension0), |
321 PolicyEquals(&previous_policy_map), | 321 PolicyEquals(&previous_policy_map), |
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
529 provider0_.UpdatePolicy(std::move(bundle0)); | 529 provider0_.UpdatePolicy(std::move(bundle0)); |
530 provider1_.UpdatePolicy(std::move(bundle1)); | 530 provider1_.UpdatePolicy(std::move(bundle1)); |
531 provider2_.UpdatePolicy(std::move(bundle2)); | 531 provider2_.UpdatePolicy(std::move(bundle2)); |
532 RunUntilIdle(); | 532 RunUntilIdle(); |
533 | 533 |
534 PolicyMap expected; | 534 PolicyMap expected; |
535 // For policies of the same level and scope, the first provider takes | 535 // For policies of the same level and scope, the first provider takes |
536 // precedence, on every namespace. | 536 // precedence, on every namespace. |
537 expected.Set(kSameLevelPolicy, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 537 expected.Set(kSameLevelPolicy, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
538 POLICY_SOURCE_ENTERPRISE_DEFAULT, | 538 POLICY_SOURCE_ENTERPRISE_DEFAULT, |
539 base::MakeUnique<base::StringValue>("bundle0"), nullptr); | 539 base::MakeUnique<base::Value>("bundle0"), nullptr); |
540 // For policies with different levels and scopes, the highest priority | 540 // For policies with different levels and scopes, the highest priority |
541 // level/scope combination takes precedence, on every namespace. | 541 // level/scope combination takes precedence, on every namespace. |
542 expected.Set(kDiffLevelPolicy, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, | 542 expected.Set(kDiffLevelPolicy, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, |
543 POLICY_SOURCE_PLATFORM, | 543 POLICY_SOURCE_PLATFORM, base::MakeUnique<base::Value>("bundle2"), |
544 base::MakeUnique<base::StringValue>("bundle2"), nullptr); | 544 nullptr); |
545 EXPECT_TRUE(policy_service_->GetPolicies( | 545 EXPECT_TRUE(policy_service_->GetPolicies( |
546 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())).Equals(expected)); | 546 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())).Equals(expected)); |
547 EXPECT_TRUE(policy_service_->GetPolicies( | 547 EXPECT_TRUE(policy_service_->GetPolicies( |
548 PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension)).Equals(expected)); | 548 PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension)).Equals(expected)); |
549 } | 549 } |
550 | 550 |
551 TEST_F(PolicyServiceTest, IsInitializationComplete) { | 551 TEST_F(PolicyServiceTest, IsInitializationComplete) { |
552 // |provider0| has all domains initialized. | 552 // |provider0| has all domains initialized. |
553 Mock::VerifyAndClearExpectations(&provider1_); | 553 Mock::VerifyAndClearExpectations(&provider1_); |
554 Mock::VerifyAndClearExpectations(&provider2_); | 554 Mock::VerifyAndClearExpectations(&provider2_); |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
663 // Individual proxy policy values in the Chrome namespace should be collected | 663 // Individual proxy policy values in the Chrome namespace should be collected |
664 // into a dictionary. | 664 // into a dictionary. |
665 policy_map.Set(key::kProxyServerMode, POLICY_LEVEL_MANDATORY, | 665 policy_map.Set(key::kProxyServerMode, POLICY_LEVEL_MANDATORY, |
666 POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, | 666 POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, |
667 base::MakeUnique<base::Value>(3), nullptr); | 667 base::MakeUnique<base::Value>(3), nullptr); |
668 | 668 |
669 // Both these policies should be ignored, since there's a higher priority | 669 // Both these policies should be ignored, since there's a higher priority |
670 // policy available. | 670 // policy available. |
671 policy_map.Set(key::kProxyMode, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | 671 policy_map.Set(key::kProxyMode, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, |
672 POLICY_SOURCE_CLOUD, | 672 POLICY_SOURCE_CLOUD, |
673 base::MakeUnique<base::StringValue>("pac_script"), nullptr); | 673 base::MakeUnique<base::Value>("pac_script"), nullptr); |
674 policy_map.Set(key::kProxyPacUrl, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | 674 policy_map.Set(key::kProxyPacUrl, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, |
675 POLICY_SOURCE_CLOUD, base::MakeUnique<base::StringValue>( | 675 POLICY_SOURCE_CLOUD, |
676 "http://example.com/wpad.dat"), | 676 base::MakeUnique<base::Value>("http://example.com/wpad.dat"), |
677 nullptr); | 677 nullptr); |
678 | 678 |
679 // Add a value to a non-Chrome namespace. | 679 // Add a value to a non-Chrome namespace. |
680 policy_bundle->Get(extension_namespace) | 680 policy_bundle->Get(extension_namespace) |
681 .Set(key::kProxyServerMode, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 681 .Set(key::kProxyServerMode, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
682 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(3), nullptr); | 682 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(3), nullptr); |
683 | 683 |
684 // The resulting Chrome namespace map should have the collected policy. | 684 // The resulting Chrome namespace map should have the collected policy. |
685 PolicyMap expected_chrome; | 685 PolicyMap expected_chrome; |
686 std::unique_ptr<base::DictionaryValue> expected_value( | 686 std::unique_ptr<base::DictionaryValue> expected_value( |
(...skipping 10 matching lines...) Expand all Loading... |
697 base::MakeUnique<base::Value>(3), nullptr); | 697 base::MakeUnique<base::Value>(3), nullptr); |
698 | 698 |
699 provider0_.UpdatePolicy(std::move(policy_bundle)); | 699 provider0_.UpdatePolicy(std::move(policy_bundle)); |
700 RunUntilIdle(); | 700 RunUntilIdle(); |
701 | 701 |
702 EXPECT_TRUE(VerifyPolicies(chrome_namespace, expected_chrome)); | 702 EXPECT_TRUE(VerifyPolicies(chrome_namespace, expected_chrome)); |
703 EXPECT_TRUE(VerifyPolicies(extension_namespace, expected_extension)); | 703 EXPECT_TRUE(VerifyPolicies(extension_namespace, expected_extension)); |
704 } | 704 } |
705 | 705 |
706 } // namespace policy | 706 } // namespace policy |
OLD | NEW |