| 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 <utility> | 8 #include <utility> |
| 8 | 9 |
| 9 #include "base/bind.h" | 10 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 11 #include "base/bind_helpers.h" |
| 11 #include "base/callback.h" | 12 #include "base/callback.h" |
| 12 #include "base/macros.h" | 13 #include "base/macros.h" |
| 13 #include "base/memory/scoped_ptr.h" | |
| 14 #include "base/run_loop.h" | 14 #include "base/run_loop.h" |
| 15 #include "base/values.h" | 15 #include "base/values.h" |
| 16 #include "components/policy/core/common/external_data_fetcher.h" | 16 #include "components/policy/core/common/external_data_fetcher.h" |
| 17 #include "components/policy/core/common/mock_configuration_policy_provider.h" | 17 #include "components/policy/core/common/mock_configuration_policy_provider.h" |
| 18 #include "components/policy/core/common/mock_policy_service.h" | 18 #include "components/policy/core/common/mock_policy_service.h" |
| 19 #include "components/policy/core/common/policy_types.h" | 19 #include "components/policy/core/common/policy_types.h" |
| 20 #include "policy/policy_constants.h" | 20 #include "policy/policy_constants.h" |
| 21 #include "testing/gmock/include/gmock/gmock.h" | 21 #include "testing/gmock/include/gmock/gmock.h" |
| 22 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
| 23 | 23 |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 159 } | 159 } |
| 160 | 160 |
| 161 protected: | 161 protected: |
| 162 base::MessageLoop loop_; | 162 base::MessageLoop loop_; |
| 163 MockConfigurationPolicyProvider provider0_; | 163 MockConfigurationPolicyProvider provider0_; |
| 164 MockConfigurationPolicyProvider provider1_; | 164 MockConfigurationPolicyProvider provider1_; |
| 165 MockConfigurationPolicyProvider provider2_; | 165 MockConfigurationPolicyProvider provider2_; |
| 166 PolicyMap policy0_; | 166 PolicyMap policy0_; |
| 167 PolicyMap policy1_; | 167 PolicyMap policy1_; |
| 168 PolicyMap policy2_; | 168 PolicyMap policy2_; |
| 169 scoped_ptr<PolicyServiceImpl> policy_service_; | 169 std::unique_ptr<PolicyServiceImpl> policy_service_; |
| 170 | 170 |
| 171 private: | 171 private: |
| 172 DISALLOW_COPY_AND_ASSIGN(PolicyServiceTest); | 172 DISALLOW_COPY_AND_ASSIGN(PolicyServiceTest); |
| 173 }; | 173 }; |
| 174 | 174 |
| 175 TEST_F(PolicyServiceTest, LoadsPoliciesBeforeProvidersRefresh) { | 175 TEST_F(PolicyServiceTest, LoadsPoliciesBeforeProvidersRefresh) { |
| 176 PolicyMap expected; | 176 PolicyMap expected; |
| 177 expected.Set("pre", | 177 expected.Set("pre", |
| 178 POLICY_LEVEL_MANDATORY, | 178 POLICY_LEVEL_MANDATORY, |
| 179 POLICY_SCOPE_USER, | 179 POLICY_SCOPE_USER, |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 306 NULL); | 306 NULL); |
| 307 PolicyMap policy_map; | 307 PolicyMap policy_map; |
| 308 policy_map.CopyFrom(previous_policy_map); | 308 policy_map.CopyFrom(previous_policy_map); |
| 309 policy_map.Set("policy", | 309 policy_map.Set("policy", |
| 310 POLICY_LEVEL_MANDATORY, | 310 POLICY_LEVEL_MANDATORY, |
| 311 POLICY_SCOPE_USER, | 311 POLICY_SCOPE_USER, |
| 312 POLICY_SOURCE_CLOUD, | 312 POLICY_SOURCE_CLOUD, |
| 313 new base::StringValue("value"), | 313 new base::StringValue("value"), |
| 314 NULL); | 314 NULL); |
| 315 | 315 |
| 316 scoped_ptr<PolicyBundle> bundle(new PolicyBundle()); | 316 std::unique_ptr<PolicyBundle> bundle(new PolicyBundle()); |
| 317 // The initial setup includes a policy for chrome that is now changing. | 317 // The initial setup includes a policy for chrome that is now changing. |
| 318 bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) | 318 bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) |
| 319 .CopyFrom(policy_map); | 319 .CopyFrom(policy_map); |
| 320 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension0)) | 320 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension0)) |
| 321 .CopyFrom(policy_map); | 321 .CopyFrom(policy_map); |
| 322 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension1)) | 322 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension1)) |
| 323 .CopyFrom(policy_map); | 323 .CopyFrom(policy_map); |
| 324 | 324 |
| 325 const PolicyMap kEmptyPolicyMap; | 325 const PolicyMap kEmptyPolicyMap; |
| 326 EXPECT_CALL( | 326 EXPECT_CALL( |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 467 POLICY_SCOPE_USER, | 467 POLICY_SCOPE_USER, |
| 468 POLICY_SOURCE_CLOUD, | 468 POLICY_SOURCE_CLOUD, |
| 469 new base::FundamentalValue(1), | 469 new base::FundamentalValue(1), |
| 470 NULL); | 470 NULL); |
| 471 provider1_.UpdateChromePolicy(policy1_); | 471 provider1_.UpdateChromePolicy(policy1_); |
| 472 EXPECT_TRUE(VerifyPolicies( | 472 EXPECT_TRUE(VerifyPolicies( |
| 473 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected)); | 473 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected)); |
| 474 } | 474 } |
| 475 | 475 |
| 476 TEST_F(PolicyServiceTest, PolicyChangeRegistrar) { | 476 TEST_F(PolicyServiceTest, PolicyChangeRegistrar) { |
| 477 scoped_ptr<PolicyChangeRegistrar> registrar(new PolicyChangeRegistrar( | 477 std::unique_ptr<PolicyChangeRegistrar> registrar(new PolicyChangeRegistrar( |
| 478 policy_service_.get(), | 478 policy_service_.get(), |
| 479 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))); | 479 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))); |
| 480 | 480 |
| 481 // Starting to observe existing policies doesn't trigger a notification. | 481 // Starting to observe existing policies doesn't trigger a notification. |
| 482 EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0); | 482 EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0); |
| 483 registrar->Observe("pre", base::Bind( | 483 registrar->Observe("pre", base::Bind( |
| 484 &PolicyServiceTest::OnPolicyValueUpdated, | 484 &PolicyServiceTest::OnPolicyValueUpdated, |
| 485 base::Unretained(this))); | 485 base::Unretained(this))); |
| 486 registrar->Observe("aaa", base::Bind( | 486 registrar->Observe("aaa", base::Bind( |
| 487 &PolicyServiceTest::OnPolicyValueUpdated, | 487 &PolicyServiceTest::OnPolicyValueUpdated, |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 590 provider1_.UpdateChromePolicy(policy1_); | 590 provider1_.UpdateChromePolicy(policy1_); |
| 591 Mock::VerifyAndClearExpectations(this); | 591 Mock::VerifyAndClearExpectations(this); |
| 592 | 592 |
| 593 const PolicyMap& policies = policy_service_->GetPolicies( | 593 const PolicyMap& policies = policy_service_->GetPolicies( |
| 594 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())); | 594 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())); |
| 595 EXPECT_TRUE(base::Value::Equals(&kValue2, policies.GetValue("aaa"))); | 595 EXPECT_TRUE(base::Value::Equals(&kValue2, policies.GetValue("aaa"))); |
| 596 EXPECT_TRUE(base::Value::Equals(&kValue0, policies.GetValue("bbb"))); | 596 EXPECT_TRUE(base::Value::Equals(&kValue0, policies.GetValue("bbb"))); |
| 597 } | 597 } |
| 598 | 598 |
| 599 TEST_F(PolicyServiceTest, NamespaceMerge) { | 599 TEST_F(PolicyServiceTest, NamespaceMerge) { |
| 600 scoped_ptr<PolicyBundle> bundle0(new PolicyBundle()); | 600 std::unique_ptr<PolicyBundle> bundle0(new PolicyBundle()); |
| 601 scoped_ptr<PolicyBundle> bundle1(new PolicyBundle()); | 601 std::unique_ptr<PolicyBundle> bundle1(new PolicyBundle()); |
| 602 scoped_ptr<PolicyBundle> bundle2(new PolicyBundle()); | 602 std::unique_ptr<PolicyBundle> bundle2(new PolicyBundle()); |
| 603 | 603 |
| 604 AddTestPolicies(bundle0.get(), "bundle0", | 604 AddTestPolicies(bundle0.get(), "bundle0", |
| 605 POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER); | 605 POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER); |
| 606 AddTestPolicies(bundle1.get(), "bundle1", | 606 AddTestPolicies(bundle1.get(), "bundle1", |
| 607 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER); | 607 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER); |
| 608 AddTestPolicies(bundle2.get(), "bundle2", | 608 AddTestPolicies(bundle2.get(), "bundle2", |
| 609 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE); | 609 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE); |
| 610 | 610 |
| 611 provider0_.UpdatePolicy(std::move(bundle0)); | 611 provider0_.UpdatePolicy(std::move(bundle0)); |
| 612 provider1_.UpdatePolicy(std::move(bundle1)); | 612 provider1_.UpdatePolicy(std::move(bundle1)); |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 713 | 713 |
| 714 // Cleanup. | 714 // Cleanup. |
| 715 policy_service_->RemoveObserver(POLICY_DOMAIN_CHROME, &observer); | 715 policy_service_->RemoveObserver(POLICY_DOMAIN_CHROME, &observer); |
| 716 policy_service_->RemoveObserver(POLICY_DOMAIN_EXTENSIONS, &observer); | 716 policy_service_->RemoveObserver(POLICY_DOMAIN_EXTENSIONS, &observer); |
| 717 } | 717 } |
| 718 | 718 |
| 719 TEST_F(PolicyServiceTest, FixDeprecatedPolicies) { | 719 TEST_F(PolicyServiceTest, FixDeprecatedPolicies) { |
| 720 const PolicyNamespace chrome_namespace(POLICY_DOMAIN_CHROME, std::string()); | 720 const PolicyNamespace chrome_namespace(POLICY_DOMAIN_CHROME, std::string()); |
| 721 const PolicyNamespace extension_namespace(POLICY_DOMAIN_EXTENSIONS, "xyz"); | 721 const PolicyNamespace extension_namespace(POLICY_DOMAIN_EXTENSIONS, "xyz"); |
| 722 | 722 |
| 723 scoped_ptr<PolicyBundle> policy_bundle(new PolicyBundle()); | 723 std::unique_ptr<PolicyBundle> policy_bundle(new PolicyBundle()); |
| 724 PolicyMap& policy_map = policy_bundle->Get(chrome_namespace); | 724 PolicyMap& policy_map = policy_bundle->Get(chrome_namespace); |
| 725 // Individual proxy policy values in the Chrome namespace should be collected | 725 // Individual proxy policy values in the Chrome namespace should be collected |
| 726 // into a dictionary. | 726 // into a dictionary. |
| 727 policy_map.Set(key::kProxyServerMode, | 727 policy_map.Set(key::kProxyServerMode, |
| 728 POLICY_LEVEL_MANDATORY, | 728 POLICY_LEVEL_MANDATORY, |
| 729 POLICY_SCOPE_USER, | 729 POLICY_SCOPE_USER, |
| 730 POLICY_SOURCE_CLOUD, | 730 POLICY_SOURCE_CLOUD, |
| 731 new base::FundamentalValue(3), | 731 new base::FundamentalValue(3), |
| 732 NULL); | 732 NULL); |
| 733 | 733 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 749 // Add a value to a non-Chrome namespace. | 749 // Add a value to a non-Chrome namespace. |
| 750 policy_bundle->Get(extension_namespace).Set(key::kProxyServerMode, | 750 policy_bundle->Get(extension_namespace).Set(key::kProxyServerMode, |
| 751 POLICY_LEVEL_MANDATORY, | 751 POLICY_LEVEL_MANDATORY, |
| 752 POLICY_SCOPE_USER, | 752 POLICY_SCOPE_USER, |
| 753 POLICY_SOURCE_CLOUD, | 753 POLICY_SOURCE_CLOUD, |
| 754 new base::FundamentalValue(3), | 754 new base::FundamentalValue(3), |
| 755 NULL); | 755 NULL); |
| 756 | 756 |
| 757 // The resulting Chrome namespace map should have the collected policy. | 757 // The resulting Chrome namespace map should have the collected policy. |
| 758 PolicyMap expected_chrome; | 758 PolicyMap expected_chrome; |
| 759 scoped_ptr<base::DictionaryValue> expected_value(new base::DictionaryValue); | 759 std::unique_ptr<base::DictionaryValue> expected_value( |
| 760 new base::DictionaryValue); |
| 760 expected_value->SetInteger(key::kProxyServerMode, 3); | 761 expected_value->SetInteger(key::kProxyServerMode, 3); |
| 761 expected_chrome.Set(key::kProxySettings, POLICY_LEVEL_MANDATORY, | 762 expected_chrome.Set(key::kProxySettings, POLICY_LEVEL_MANDATORY, |
| 762 POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, | 763 POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, |
| 763 expected_value.release(), nullptr); | 764 expected_value.release(), nullptr); |
| 764 | 765 |
| 765 // The resulting Extensions namespace map shouldn't have been modified. | 766 // The resulting Extensions namespace map shouldn't have been modified. |
| 766 PolicyMap expected_extension; | 767 PolicyMap expected_extension; |
| 767 expected_extension.Set(key::kProxyServerMode, | 768 expected_extension.Set(key::kProxyServerMode, |
| 768 POLICY_LEVEL_MANDATORY, | 769 POLICY_LEVEL_MANDATORY, |
| 769 POLICY_SCOPE_USER, | 770 POLICY_SCOPE_USER, |
| 770 POLICY_SOURCE_CLOUD, | 771 POLICY_SOURCE_CLOUD, |
| 771 new base::FundamentalValue(3), | 772 new base::FundamentalValue(3), |
| 772 NULL); | 773 NULL); |
| 773 | 774 |
| 774 provider0_.UpdatePolicy(std::move(policy_bundle)); | 775 provider0_.UpdatePolicy(std::move(policy_bundle)); |
| 775 RunUntilIdle(); | 776 RunUntilIdle(); |
| 776 | 777 |
| 777 EXPECT_TRUE(VerifyPolicies(chrome_namespace, expected_chrome)); | 778 EXPECT_TRUE(VerifyPolicies(chrome_namespace, expected_chrome)); |
| 778 EXPECT_TRUE(VerifyPolicies(extension_namespace, expected_extension)); | 779 EXPECT_TRUE(VerifyPolicies(extension_namespace, expected_extension)); |
| 779 } | 780 } |
| 780 | 781 |
| 781 } // namespace policy | 782 } // namespace policy |
| OLD | NEW |