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 "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/callback.h" | 9 #include "base/callback.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
42 return base::Value::Equals(arg, expected); | 42 return base::Value::Equals(arg, expected); |
43 } | 43 } |
44 | 44 |
45 // Helper that fills |bundle| with test policies. | 45 // Helper that fills |bundle| with test policies. |
46 void AddTestPolicies(PolicyBundle* bundle, | 46 void AddTestPolicies(PolicyBundle* bundle, |
47 const char* value, | 47 const char* value, |
48 PolicyLevel level, | 48 PolicyLevel level, |
49 PolicyScope scope) { | 49 PolicyScope scope) { |
50 PolicyMap* policy_map = | 50 PolicyMap* policy_map = |
51 &bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())); | 51 &bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())); |
52 policy_map->Set(kSameLevelPolicy, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 52 policy_map->Set(kSameLevelPolicy, |
53 base::Value::CreateStringValue(value), NULL); | 53 POLICY_LEVEL_MANDATORY, |
54 policy_map->Set(kDiffLevelPolicy, level, scope, | 54 POLICY_SCOPE_USER, |
55 base::Value::CreateStringValue(value), NULL); | 55 new base::StringValue(value), |
| 56 NULL); |
| 57 policy_map->Set( |
| 58 kDiffLevelPolicy, level, scope, new base::StringValue(value), NULL); |
56 policy_map = | 59 policy_map = |
57 &bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension)); | 60 &bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension)); |
58 policy_map->Set(kSameLevelPolicy, POLICY_LEVEL_MANDATORY, | 61 policy_map->Set(kSameLevelPolicy, |
59 POLICY_SCOPE_USER, base::Value::CreateStringValue(value), | 62 POLICY_LEVEL_MANDATORY, |
| 63 POLICY_SCOPE_USER, |
| 64 new base::StringValue(value), |
60 NULL); | 65 NULL); |
61 policy_map->Set(kDiffLevelPolicy, level, scope, | 66 policy_map->Set( |
62 base::Value::CreateStringValue(value), NULL); | 67 kDiffLevelPolicy, level, scope, new base::StringValue(value), NULL); |
63 } | 68 } |
64 | 69 |
65 // Observer class that changes the policy in the passed provider when the | 70 // Observer class that changes the policy in the passed provider when the |
66 // callback is invoked. | 71 // callback is invoked. |
67 class ChangePolicyObserver : public PolicyService::Observer { | 72 class ChangePolicyObserver : public PolicyService::Observer { |
68 public: | 73 public: |
69 explicit ChangePolicyObserver(MockConfigurationPolicyProvider* provider) | 74 explicit ChangePolicyObserver(MockConfigurationPolicyProvider* provider) |
70 : provider_(provider), | 75 : provider_(provider), |
71 observer_invoked_(false) {} | 76 observer_invoked_(false) {} |
72 | 77 |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
242 MockPolicyServiceObserver chrome_observer; | 247 MockPolicyServiceObserver chrome_observer; |
243 MockPolicyServiceObserver extension_observer; | 248 MockPolicyServiceObserver extension_observer; |
244 policy_service_->AddObserver(POLICY_DOMAIN_CHROME, &chrome_observer); | 249 policy_service_->AddObserver(POLICY_DOMAIN_CHROME, &chrome_observer); |
245 policy_service_->AddObserver(POLICY_DOMAIN_EXTENSIONS, &extension_observer); | 250 policy_service_->AddObserver(POLICY_DOMAIN_EXTENSIONS, &extension_observer); |
246 | 251 |
247 PolicyMap previous_policy_map; | 252 PolicyMap previous_policy_map; |
248 previous_policy_map.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 253 previous_policy_map.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
249 base::Value::CreateIntegerValue(13), NULL); | 254 base::Value::CreateIntegerValue(13), NULL); |
250 PolicyMap policy_map; | 255 PolicyMap policy_map; |
251 policy_map.CopyFrom(previous_policy_map); | 256 policy_map.CopyFrom(previous_policy_map); |
252 policy_map.Set("policy", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 257 policy_map.Set("policy", |
253 base::Value::CreateStringValue("value"), NULL); | 258 POLICY_LEVEL_MANDATORY, |
| 259 POLICY_SCOPE_USER, |
| 260 new base::StringValue("value"), |
| 261 NULL); |
254 | 262 |
255 scoped_ptr<PolicyBundle> bundle(new PolicyBundle()); | 263 scoped_ptr<PolicyBundle> bundle(new PolicyBundle()); |
256 // The initial setup includes a policy for chrome that is now changing. | 264 // The initial setup includes a policy for chrome that is now changing. |
257 bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) | 265 bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) |
258 .CopyFrom(policy_map); | 266 .CopyFrom(policy_map); |
259 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension0)) | 267 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension0)) |
260 .CopyFrom(policy_map); | 268 .CopyFrom(policy_map); |
261 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension1)) | 269 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension1)) |
262 .CopyFrom(policy_map); | 270 .CopyFrom(policy_map); |
263 | 271 |
(...skipping 17 matching lines...) Expand all Loading... |
281 RunUntilIdle(); | 289 RunUntilIdle(); |
282 Mock::VerifyAndClearExpectations(&chrome_observer); | 290 Mock::VerifyAndClearExpectations(&chrome_observer); |
283 Mock::VerifyAndClearExpectations(&extension_observer); | 291 Mock::VerifyAndClearExpectations(&extension_observer); |
284 | 292 |
285 // Chrome policy stays the same, kExtension0 is gone, kExtension1 changes, | 293 // Chrome policy stays the same, kExtension0 is gone, kExtension1 changes, |
286 // and kExtension2 is new. | 294 // and kExtension2 is new. |
287 previous_policy_map.CopyFrom(policy_map); | 295 previous_policy_map.CopyFrom(policy_map); |
288 bundle.reset(new PolicyBundle()); | 296 bundle.reset(new PolicyBundle()); |
289 bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) | 297 bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) |
290 .CopyFrom(policy_map); | 298 .CopyFrom(policy_map); |
291 policy_map.Set("policy", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 299 policy_map.Set("policy", |
292 base::Value::CreateStringValue("another value"), NULL); | 300 POLICY_LEVEL_MANDATORY, |
| 301 POLICY_SCOPE_USER, |
| 302 new base::StringValue("another value"), |
| 303 NULL); |
293 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension1)) | 304 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension1)) |
294 .CopyFrom(policy_map); | 305 .CopyFrom(policy_map); |
295 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension2)) | 306 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension2)) |
296 .CopyFrom(policy_map); | 307 .CopyFrom(policy_map); |
297 | 308 |
298 EXPECT_CALL(chrome_observer, OnPolicyUpdated(_, _, _)).Times(0); | 309 EXPECT_CALL(chrome_observer, OnPolicyUpdated(_, _, _)).Times(0); |
299 EXPECT_CALL( | 310 EXPECT_CALL( |
300 extension_observer, | 311 extension_observer, |
301 OnPolicyUpdated(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension0), | 312 OnPolicyUpdated(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension0), |
302 PolicyEquals(&previous_policy_map), | 313 PolicyEquals(&previous_policy_map), |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
504 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE); | 515 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE); |
505 | 516 |
506 provider0_.UpdatePolicy(bundle0.Pass()); | 517 provider0_.UpdatePolicy(bundle0.Pass()); |
507 provider1_.UpdatePolicy(bundle1.Pass()); | 518 provider1_.UpdatePolicy(bundle1.Pass()); |
508 provider2_.UpdatePolicy(bundle2.Pass()); | 519 provider2_.UpdatePolicy(bundle2.Pass()); |
509 RunUntilIdle(); | 520 RunUntilIdle(); |
510 | 521 |
511 PolicyMap expected; | 522 PolicyMap expected; |
512 // For policies of the same level and scope, the first provider takes | 523 // For policies of the same level and scope, the first provider takes |
513 // precedence, on every namespace. | 524 // precedence, on every namespace. |
514 expected.Set(kSameLevelPolicy, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 525 expected.Set(kSameLevelPolicy, |
515 base::Value::CreateStringValue("bundle0"), NULL); | 526 POLICY_LEVEL_MANDATORY, |
| 527 POLICY_SCOPE_USER, |
| 528 new base::StringValue("bundle0"), |
| 529 NULL); |
516 // For policies with different levels and scopes, the highest priority | 530 // For policies with different levels and scopes, the highest priority |
517 // level/scope combination takes precedence, on every namespace. | 531 // level/scope combination takes precedence, on every namespace. |
518 expected.Set(kDiffLevelPolicy, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, | 532 expected.Set(kDiffLevelPolicy, |
519 base::Value::CreateStringValue("bundle2"), NULL); | 533 POLICY_LEVEL_MANDATORY, |
| 534 POLICY_SCOPE_MACHINE, |
| 535 new base::StringValue("bundle2"), |
| 536 NULL); |
520 EXPECT_TRUE(policy_service_->GetPolicies( | 537 EXPECT_TRUE(policy_service_->GetPolicies( |
521 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())).Equals(expected)); | 538 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())).Equals(expected)); |
522 EXPECT_TRUE(policy_service_->GetPolicies( | 539 EXPECT_TRUE(policy_service_->GetPolicies( |
523 PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension)).Equals(expected)); | 540 PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension)).Equals(expected)); |
524 } | 541 } |
525 | 542 |
526 TEST_F(PolicyServiceTest, IsInitializationComplete) { | 543 TEST_F(PolicyServiceTest, IsInitializationComplete) { |
527 // |provider0| has all domains initialized. | 544 // |provider0| has all domains initialized. |
528 Mock::VerifyAndClearExpectations(&provider1_); | 545 Mock::VerifyAndClearExpectations(&provider1_); |
529 Mock::VerifyAndClearExpectations(&provider2_); | 546 Mock::VerifyAndClearExpectations(&provider2_); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
609 | 626 |
610 scoped_ptr<PolicyBundle> policy_bundle(new PolicyBundle()); | 627 scoped_ptr<PolicyBundle> policy_bundle(new PolicyBundle()); |
611 PolicyMap& policy_map = policy_bundle->Get(chrome_namespace); | 628 PolicyMap& policy_map = policy_bundle->Get(chrome_namespace); |
612 // Individual proxy policy values in the Chrome namespace should be collected | 629 // Individual proxy policy values in the Chrome namespace should be collected |
613 // into a dictionary. | 630 // into a dictionary. |
614 policy_map.Set(key::kProxyServerMode, POLICY_LEVEL_MANDATORY, | 631 policy_map.Set(key::kProxyServerMode, POLICY_LEVEL_MANDATORY, |
615 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(3), NULL); | 632 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(3), NULL); |
616 | 633 |
617 // Both these policies should be ignored, since there's a higher priority | 634 // Both these policies should be ignored, since there's a higher priority |
618 // policy available. | 635 // policy available. |
619 policy_map.Set(key::kProxyMode, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | 636 policy_map.Set(key::kProxyMode, |
620 base::Value::CreateStringValue("pac_script"), NULL); | 637 POLICY_LEVEL_RECOMMENDED, |
621 policy_map.Set(key::kProxyPacUrl, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | 638 POLICY_SCOPE_USER, |
622 base::Value::CreateStringValue("http://example.com/wpad.dat"), | 639 new base::StringValue("pac_script"), |
| 640 NULL); |
| 641 policy_map.Set(key::kProxyPacUrl, |
| 642 POLICY_LEVEL_RECOMMENDED, |
| 643 POLICY_SCOPE_USER, |
| 644 new base::StringValue("http://example.com/wpad.dat"), |
623 NULL); | 645 NULL); |
624 | 646 |
625 // Add a value to a non-Chrome namespace. | 647 // Add a value to a non-Chrome namespace. |
626 policy_bundle->Get(extension_namespace) | 648 policy_bundle->Get(extension_namespace) |
627 .Set(key::kProxyServerMode, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 649 .Set(key::kProxyServerMode, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
628 base::Value::CreateIntegerValue(3), NULL); | 650 base::Value::CreateIntegerValue(3), NULL); |
629 | 651 |
630 // The resulting Chrome namespace map should have the collected policy. | 652 // The resulting Chrome namespace map should have the collected policy. |
631 PolicyMap expected_chrome; | 653 PolicyMap expected_chrome; |
632 scoped_ptr<base::DictionaryValue> expected_value(new base::DictionaryValue); | 654 scoped_ptr<base::DictionaryValue> expected_value(new base::DictionaryValue); |
633 expected_value->SetInteger(key::kProxyServerMode, 3); | 655 expected_value->SetInteger(key::kProxyServerMode, 3); |
634 expected_chrome.Set(key::kProxySettings, POLICY_LEVEL_MANDATORY, | 656 expected_chrome.Set(key::kProxySettings, POLICY_LEVEL_MANDATORY, |
635 POLICY_SCOPE_USER, expected_value.release(), NULL); | 657 POLICY_SCOPE_USER, expected_value.release(), NULL); |
636 | 658 |
637 // The resulting Extensions namespace map shouldn't have been modified. | 659 // The resulting Extensions namespace map shouldn't have been modified. |
638 PolicyMap expected_extension; | 660 PolicyMap expected_extension; |
639 expected_extension.Set(key::kProxyServerMode, POLICY_LEVEL_MANDATORY, | 661 expected_extension.Set(key::kProxyServerMode, POLICY_LEVEL_MANDATORY, |
640 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(3), | 662 POLICY_SCOPE_USER, base::Value::CreateIntegerValue(3), |
641 NULL); | 663 NULL); |
642 | 664 |
643 provider0_.UpdatePolicy(policy_bundle.Pass()); | 665 provider0_.UpdatePolicy(policy_bundle.Pass()); |
644 RunUntilIdle(); | 666 RunUntilIdle(); |
645 | 667 |
646 EXPECT_TRUE(VerifyPolicies(chrome_namespace, expected_chrome)); | 668 EXPECT_TRUE(VerifyPolicies(chrome_namespace, expected_chrome)); |
647 EXPECT_TRUE(VerifyPolicies(extension_namespace, expected_extension)); | 669 EXPECT_TRUE(VerifyPolicies(extension_namespace, expected_extension)); |
648 } | 670 } |
649 | 671 |
650 } // namespace policy | 672 } // namespace policy |
OLD | NEW |