| 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 |