| 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 63 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 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 | 
| 79   void OnPolicyUpdated(const PolicyNamespace&, | 79   void OnPolicyUpdated(const PolicyNamespace&, | 
| 80                        const PolicyMap& previous, | 80                        const PolicyMap& previous, | 
| 81                        const PolicyMap& current) override { | 81                        const PolicyMap& current) override { | 
| 82     PolicyMap new_policy; | 82     PolicyMap new_policy; | 
| 83     new_policy.Set("foo", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 83     new_policy.Set("foo", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 84                    POLICY_SOURCE_CLOUD, | 84                    POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(14), | 
| 85                    base::MakeUnique<base::FundamentalValue>(14), nullptr); | 85                    nullptr); | 
| 86     provider_->UpdateChromePolicy(new_policy); | 86     provider_->UpdateChromePolicy(new_policy); | 
| 87     observer_invoked_ = true; | 87     observer_invoked_ = true; | 
| 88   } | 88   } | 
| 89 | 89 | 
| 90   bool observer_invoked() const { return observer_invoked_; } | 90   bool observer_invoked() const { return observer_invoked_; } | 
| 91 | 91 | 
| 92  private: | 92  private: | 
| 93   MockConfigurationPolicyProvider* provider_; | 93   MockConfigurationPolicyProvider* provider_; | 
| 94   bool observer_invoked_; | 94   bool observer_invoked_; | 
| 95 }; | 95 }; | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 106         .WillRepeatedly(Return(true)); | 106         .WillRepeatedly(Return(true)); | 
| 107     EXPECT_CALL(provider2_, IsInitializationComplete(_)) | 107     EXPECT_CALL(provider2_, IsInitializationComplete(_)) | 
| 108         .WillRepeatedly(Return(true)); | 108         .WillRepeatedly(Return(true)); | 
| 109 | 109 | 
| 110     provider0_.Init(); | 110     provider0_.Init(); | 
| 111     provider1_.Init(); | 111     provider1_.Init(); | 
| 112     provider2_.Init(); | 112     provider2_.Init(); | 
| 113 | 113 | 
| 114     policy0_.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 114     policy0_.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 115                  POLICY_SOURCE_ENTERPRISE_DEFAULT, | 115                  POLICY_SOURCE_ENTERPRISE_DEFAULT, | 
| 116                  base::MakeUnique<base::FundamentalValue>(13), nullptr); | 116                  base::MakeUnique<base::Value>(13), nullptr); | 
| 117     provider0_.UpdateChromePolicy(policy0_); | 117     provider0_.UpdateChromePolicy(policy0_); | 
| 118 | 118 | 
| 119     PolicyServiceImpl::Providers providers; | 119     PolicyServiceImpl::Providers providers; | 
| 120     providers.push_back(&provider0_); | 120     providers.push_back(&provider0_); | 
| 121     providers.push_back(&provider1_); | 121     providers.push_back(&provider1_); | 
| 122     providers.push_back(&provider2_); | 122     providers.push_back(&provider2_); | 
| 123     policy_service_.reset(new PolicyServiceImpl(providers)); | 123     policy_service_.reset(new PolicyServiceImpl(providers)); | 
| 124   } | 124   } | 
| 125 | 125 | 
| 126   void TearDown() override { | 126   void TearDown() override { | 
| (...skipping 29 matching lines...) Expand all  Loading... | 
| 156   std::unique_ptr<PolicyServiceImpl> policy_service_; | 156   std::unique_ptr<PolicyServiceImpl> policy_service_; | 
| 157 | 157 | 
| 158  private: | 158  private: | 
| 159   DISALLOW_COPY_AND_ASSIGN(PolicyServiceTest); | 159   DISALLOW_COPY_AND_ASSIGN(PolicyServiceTest); | 
| 160 }; | 160 }; | 
| 161 | 161 | 
| 162 TEST_F(PolicyServiceTest, LoadsPoliciesBeforeProvidersRefresh) { | 162 TEST_F(PolicyServiceTest, LoadsPoliciesBeforeProvidersRefresh) { | 
| 163   PolicyMap expected; | 163   PolicyMap expected; | 
| 164   expected.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 164   expected.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 165                POLICY_SOURCE_ENTERPRISE_DEFAULT, | 165                POLICY_SOURCE_ENTERPRISE_DEFAULT, | 
| 166                base::MakeUnique<base::FundamentalValue>(13), nullptr); | 166                base::MakeUnique<base::Value>(13), nullptr); | 
| 167   EXPECT_TRUE(VerifyPolicies( | 167   EXPECT_TRUE(VerifyPolicies( | 
| 168       PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected)); | 168       PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected)); | 
| 169 } | 169 } | 
| 170 | 170 | 
| 171 TEST_F(PolicyServiceTest, NotifyObservers) { | 171 TEST_F(PolicyServiceTest, NotifyObservers) { | 
| 172   MockPolicyServiceObserver observer; | 172   MockPolicyServiceObserver observer; | 
| 173   policy_service_->AddObserver(POLICY_DOMAIN_CHROME, &observer); | 173   policy_service_->AddObserver(POLICY_DOMAIN_CHROME, &observer); | 
| 174 | 174 | 
| 175   PolicyMap expectedPrevious; | 175   PolicyMap expectedPrevious; | 
| 176   expectedPrevious.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 176   expectedPrevious.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 177                        POLICY_SOURCE_ENTERPRISE_DEFAULT, | 177                        POLICY_SOURCE_ENTERPRISE_DEFAULT, | 
| 178                        base::MakeUnique<base::FundamentalValue>(13), nullptr); | 178                        base::MakeUnique<base::Value>(13), nullptr); | 
| 179 | 179 | 
| 180   PolicyMap expectedCurrent; | 180   PolicyMap expectedCurrent; | 
| 181   expectedCurrent.CopyFrom(expectedPrevious); | 181   expectedCurrent.CopyFrom(expectedPrevious); | 
| 182   expectedCurrent.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 182   expectedCurrent.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 183                       POLICY_SOURCE_CLOUD, | 183                       POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(123), | 
| 184                       base::MakeUnique<base::FundamentalValue>(123), nullptr); | 184                       nullptr); | 
| 185   policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 185   policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 186                POLICY_SOURCE_CLOUD, | 186                POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(123), | 
| 187                base::MakeUnique<base::FundamentalValue>(123), nullptr); | 187                nullptr); | 
| 188   EXPECT_CALL(observer, OnPolicyUpdated(PolicyNamespace(POLICY_DOMAIN_CHROME, | 188   EXPECT_CALL(observer, OnPolicyUpdated(PolicyNamespace(POLICY_DOMAIN_CHROME, | 
| 189                                                         std::string()), | 189                                                         std::string()), | 
| 190                                         PolicyEquals(&expectedPrevious), | 190                                         PolicyEquals(&expectedPrevious), | 
| 191                                         PolicyEquals(&expectedCurrent))); | 191                                         PolicyEquals(&expectedCurrent))); | 
| 192   provider0_.UpdateChromePolicy(policy0_); | 192   provider0_.UpdateChromePolicy(policy0_); | 
| 193   Mock::VerifyAndClearExpectations(&observer); | 193   Mock::VerifyAndClearExpectations(&observer); | 
| 194 | 194 | 
| 195   // No changes. | 195   // No changes. | 
| 196   EXPECT_CALL(observer, OnPolicyUpdated(_, _, _)).Times(0); | 196   EXPECT_CALL(observer, OnPolicyUpdated(_, _, _)).Times(0); | 
| 197   provider0_.UpdateChromePolicy(policy0_); | 197   provider0_.UpdateChromePolicy(policy0_); | 
| 198   Mock::VerifyAndClearExpectations(&observer); | 198   Mock::VerifyAndClearExpectations(&observer); | 
| 199   EXPECT_TRUE(VerifyPolicies( | 199   EXPECT_TRUE(VerifyPolicies( | 
| 200       PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expectedCurrent)); | 200       PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expectedCurrent)); | 
| 201 | 201 | 
| 202   // New policy. | 202   // New policy. | 
| 203   expectedPrevious.CopyFrom(expectedCurrent); | 203   expectedPrevious.CopyFrom(expectedCurrent); | 
| 204   expectedCurrent.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 204   expectedCurrent.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 205                       POLICY_SOURCE_CLOUD, | 205                       POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(456), | 
| 206                       base::MakeUnique<base::FundamentalValue>(456), nullptr); | 206                       nullptr); | 
| 207   policy0_.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 207   policy0_.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 208                POLICY_SOURCE_CLOUD, | 208                POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(456), | 
| 209                base::MakeUnique<base::FundamentalValue>(456), nullptr); | 209                nullptr); | 
| 210   EXPECT_CALL(observer, OnPolicyUpdated(PolicyNamespace(POLICY_DOMAIN_CHROME, | 210   EXPECT_CALL(observer, OnPolicyUpdated(PolicyNamespace(POLICY_DOMAIN_CHROME, | 
| 211                                                         std::string()), | 211                                                         std::string()), | 
| 212                                         PolicyEquals(&expectedPrevious), | 212                                         PolicyEquals(&expectedPrevious), | 
| 213                                         PolicyEquals(&expectedCurrent))); | 213                                         PolicyEquals(&expectedCurrent))); | 
| 214   provider0_.UpdateChromePolicy(policy0_); | 214   provider0_.UpdateChromePolicy(policy0_); | 
| 215   Mock::VerifyAndClearExpectations(&observer); | 215   Mock::VerifyAndClearExpectations(&observer); | 
| 216 | 216 | 
| 217   // Removed policy. | 217   // Removed policy. | 
| 218   expectedPrevious.CopyFrom(expectedCurrent); | 218   expectedPrevious.CopyFrom(expectedCurrent); | 
| 219   expectedCurrent.Erase("bbb"); | 219   expectedCurrent.Erase("bbb"); | 
| 220   policy0_.Erase("bbb"); | 220   policy0_.Erase("bbb"); | 
| 221   EXPECT_CALL(observer, OnPolicyUpdated(PolicyNamespace(POLICY_DOMAIN_CHROME, | 221   EXPECT_CALL(observer, OnPolicyUpdated(PolicyNamespace(POLICY_DOMAIN_CHROME, | 
| 222                                                         std::string()), | 222                                                         std::string()), | 
| 223                                         PolicyEquals(&expectedPrevious), | 223                                         PolicyEquals(&expectedPrevious), | 
| 224                                         PolicyEquals(&expectedCurrent))); | 224                                         PolicyEquals(&expectedCurrent))); | 
| 225   provider0_.UpdateChromePolicy(policy0_); | 225   provider0_.UpdateChromePolicy(policy0_); | 
| 226   Mock::VerifyAndClearExpectations(&observer); | 226   Mock::VerifyAndClearExpectations(&observer); | 
| 227 | 227 | 
| 228   // Changed policy. | 228   // Changed policy. | 
| 229   expectedPrevious.CopyFrom(expectedCurrent); | 229   expectedPrevious.CopyFrom(expectedCurrent); | 
| 230   expectedCurrent.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 230   expectedCurrent.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 231                       POLICY_SOURCE_CLOUD, | 231                       POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(789), | 
| 232                       base::MakeUnique<base::FundamentalValue>(789), nullptr); | 232                       nullptr); | 
| 233   policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 233   policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 234                POLICY_SOURCE_CLOUD, | 234                POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(789), | 
| 235                base::MakeUnique<base::FundamentalValue>(789), nullptr); | 235                nullptr); | 
| 236 | 236 | 
| 237   EXPECT_CALL(observer, OnPolicyUpdated(PolicyNamespace(POLICY_DOMAIN_CHROME, | 237   EXPECT_CALL(observer, OnPolicyUpdated(PolicyNamespace(POLICY_DOMAIN_CHROME, | 
| 238                                                         std::string()), | 238                                                         std::string()), | 
| 239                                         PolicyEquals(&expectedPrevious), | 239                                         PolicyEquals(&expectedPrevious), | 
| 240                                         PolicyEquals(&expectedCurrent))); | 240                                         PolicyEquals(&expectedCurrent))); | 
| 241   provider0_.UpdateChromePolicy(policy0_); | 241   provider0_.UpdateChromePolicy(policy0_); | 
| 242   Mock::VerifyAndClearExpectations(&observer); | 242   Mock::VerifyAndClearExpectations(&observer); | 
| 243 | 243 | 
| 244   // No changes again. | 244   // No changes again. | 
| 245   EXPECT_CALL(observer, OnPolicyUpdated(_, _, _)).Times(0); | 245   EXPECT_CALL(observer, OnPolicyUpdated(_, _, _)).Times(0); | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 256   const std::string kExtension1("extension-1"); | 256   const std::string kExtension1("extension-1"); | 
| 257   const std::string kExtension2("extension-2"); | 257   const std::string kExtension2("extension-2"); | 
| 258   MockPolicyServiceObserver chrome_observer; | 258   MockPolicyServiceObserver chrome_observer; | 
| 259   MockPolicyServiceObserver extension_observer; | 259   MockPolicyServiceObserver extension_observer; | 
| 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::FundamentalValue>(13), | 266                           base::MakeUnique<base::Value>(13), nullptr); | 
| 267                           nullptr); |  | 
| 268   PolicyMap policy_map; | 267   PolicyMap policy_map; | 
| 269   policy_map.CopyFrom(previous_policy_map); | 268   policy_map.CopyFrom(previous_policy_map); | 
| 270   policy_map.Set("policy", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 269   policy_map.Set("policy", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 271                  POLICY_SOURCE_CLOUD, | 270                  POLICY_SOURCE_CLOUD, | 
| 272                  base::MakeUnique<base::StringValue>("value"), nullptr); | 271                  base::MakeUnique<base::StringValue>("value"), nullptr); | 
| 273 | 272 | 
| 274   std::unique_ptr<PolicyBundle> bundle(new PolicyBundle()); | 273   std::unique_ptr<PolicyBundle> bundle(new PolicyBundle()); | 
| 275   // 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. | 
| 276   bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) | 275   bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) | 
| 277       .CopyFrom(policy_map); | 276       .CopyFrom(policy_map); | 
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 338 | 337 | 
| 339   policy_service_->RemoveObserver(POLICY_DOMAIN_CHROME, &chrome_observer); | 338   policy_service_->RemoveObserver(POLICY_DOMAIN_CHROME, &chrome_observer); | 
| 340   policy_service_->RemoveObserver(POLICY_DOMAIN_EXTENSIONS, | 339   policy_service_->RemoveObserver(POLICY_DOMAIN_EXTENSIONS, | 
| 341                                   &extension_observer); | 340                                   &extension_observer); | 
| 342 } | 341 } | 
| 343 | 342 | 
| 344 TEST_F(PolicyServiceTest, ObserverChangesPolicy) { | 343 TEST_F(PolicyServiceTest, ObserverChangesPolicy) { | 
| 345   ChangePolicyObserver observer(&provider0_); | 344   ChangePolicyObserver observer(&provider0_); | 
| 346   policy_service_->AddObserver(POLICY_DOMAIN_CHROME, &observer); | 345   policy_service_->AddObserver(POLICY_DOMAIN_CHROME, &observer); | 
| 347   policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 346   policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 348                POLICY_SOURCE_CLOUD, | 347                POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(123), | 
| 349                base::MakeUnique<base::FundamentalValue>(123), nullptr); | 348                nullptr); | 
| 350   policy0_.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 349   policy0_.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 351                POLICY_SOURCE_CLOUD, | 350                POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(1234), | 
| 352                base::MakeUnique<base::FundamentalValue>(1234), nullptr); | 351                nullptr); | 
| 353   // Should not crash. | 352   // Should not crash. | 
| 354   provider0_.UpdateChromePolicy(policy0_); | 353   provider0_.UpdateChromePolicy(policy0_); | 
| 355   policy_service_->RemoveObserver(POLICY_DOMAIN_CHROME, &observer); | 354   policy_service_->RemoveObserver(POLICY_DOMAIN_CHROME, &observer); | 
| 356   EXPECT_TRUE(observer.observer_invoked()); | 355   EXPECT_TRUE(observer.observer_invoked()); | 
| 357 } | 356 } | 
| 358 | 357 | 
| 359 TEST_F(PolicyServiceTest, Priorities) { | 358 TEST_F(PolicyServiceTest, Priorities) { | 
| 360   PolicyMap expected; | 359   PolicyMap expected; | 
| 361   expected.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 360   expected.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 362                POLICY_SOURCE_ENTERPRISE_DEFAULT, | 361                POLICY_SOURCE_ENTERPRISE_DEFAULT, | 
| 363                base::MakeUnique<base::FundamentalValue>(13), nullptr); | 362                base::MakeUnique<base::Value>(13), nullptr); | 
| 364   expected.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 363   expected.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 365                POLICY_SOURCE_CLOUD, base::MakeUnique<base::FundamentalValue>(0), | 364                POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(0), nullptr); | 
| 366                nullptr); |  | 
| 367   policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 365   policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 368                POLICY_SOURCE_CLOUD, base::MakeUnique<base::FundamentalValue>(0), | 366                POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(0), nullptr); | 
| 369                nullptr); |  | 
| 370   policy1_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 367   policy1_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 371                POLICY_SOURCE_CLOUD, base::MakeUnique<base::FundamentalValue>(1), | 368                POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(1), nullptr); | 
| 372                nullptr); |  | 
| 373   policy2_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 369   policy2_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 374                POLICY_SOURCE_CLOUD, base::MakeUnique<base::FundamentalValue>(2), | 370                POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(2), nullptr); | 
| 375                nullptr); |  | 
| 376   provider0_.UpdateChromePolicy(policy0_); | 371   provider0_.UpdateChromePolicy(policy0_); | 
| 377   provider1_.UpdateChromePolicy(policy1_); | 372   provider1_.UpdateChromePolicy(policy1_); | 
| 378   provider2_.UpdateChromePolicy(policy2_); | 373   provider2_.UpdateChromePolicy(policy2_); | 
| 379   EXPECT_TRUE(VerifyPolicies( | 374   EXPECT_TRUE(VerifyPolicies( | 
| 380       PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected)); | 375       PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected)); | 
| 381 | 376 | 
| 382   expected.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 377   expected.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 383                POLICY_SOURCE_CLOUD, base::MakeUnique<base::FundamentalValue>(1), | 378                POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(1), nullptr); | 
| 384                nullptr); |  | 
| 385   policy0_.Erase("aaa"); | 379   policy0_.Erase("aaa"); | 
| 386   provider0_.UpdateChromePolicy(policy0_); | 380   provider0_.UpdateChromePolicy(policy0_); | 
| 387   EXPECT_TRUE(VerifyPolicies( | 381   EXPECT_TRUE(VerifyPolicies( | 
| 388       PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected)); | 382       PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected)); | 
| 389 | 383 | 
| 390   expected.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 384   expected.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 391                POLICY_SOURCE_CLOUD, base::MakeUnique<base::FundamentalValue>(2), | 385                POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(2), nullptr); | 
| 392                nullptr); |  | 
| 393   policy1_.Set("aaa", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | 386   policy1_.Set("aaa", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | 
| 394                POLICY_SOURCE_CLOUD, base::MakeUnique<base::FundamentalValue>(1), | 387                POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(1), nullptr); | 
| 395                nullptr); |  | 
| 396   provider1_.UpdateChromePolicy(policy1_); | 388   provider1_.UpdateChromePolicy(policy1_); | 
| 397   EXPECT_TRUE(VerifyPolicies( | 389   EXPECT_TRUE(VerifyPolicies( | 
| 398       PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected)); | 390       PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected)); | 
| 399 } | 391 } | 
| 400 | 392 | 
| 401 TEST_F(PolicyServiceTest, PolicyChangeRegistrar) { | 393 TEST_F(PolicyServiceTest, PolicyChangeRegistrar) { | 
| 402   std::unique_ptr<PolicyChangeRegistrar> registrar(new PolicyChangeRegistrar( | 394   std::unique_ptr<PolicyChangeRegistrar> registrar(new PolicyChangeRegistrar( | 
| 403       policy_service_.get(), | 395       policy_service_.get(), | 
| 404       PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))); | 396       PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))); | 
| 405 | 397 | 
| 406   // Starting to observe existing policies doesn't trigger a notification. | 398   // Starting to observe existing policies doesn't trigger a notification. | 
| 407   EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0); | 399   EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0); | 
| 408   registrar->Observe("pre", base::Bind( | 400   registrar->Observe("pre", base::Bind( | 
| 409       &PolicyServiceTest::OnPolicyValueUpdated, | 401       &PolicyServiceTest::OnPolicyValueUpdated, | 
| 410       base::Unretained(this))); | 402       base::Unretained(this))); | 
| 411   registrar->Observe("aaa", base::Bind( | 403   registrar->Observe("aaa", base::Bind( | 
| 412       &PolicyServiceTest::OnPolicyValueUpdated, | 404       &PolicyServiceTest::OnPolicyValueUpdated, | 
| 413       base::Unretained(this))); | 405       base::Unretained(this))); | 
| 414   RunUntilIdle(); | 406   RunUntilIdle(); | 
| 415   Mock::VerifyAndClearExpectations(this); | 407   Mock::VerifyAndClearExpectations(this); | 
| 416 | 408 | 
| 417   // Changing it now triggers a notification. | 409   // Changing it now triggers a notification. | 
| 418   base::FundamentalValue kValue0(0); | 410   base::Value kValue0(0); | 
| 419   EXPECT_CALL(*this, OnPolicyValueUpdated(NULL, ValueEquals(&kValue0))); | 411   EXPECT_CALL(*this, OnPolicyValueUpdated(NULL, ValueEquals(&kValue0))); | 
| 420   policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 412   policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 421                POLICY_SOURCE_CLOUD, kValue0.CreateDeepCopy(), nullptr); | 413                POLICY_SOURCE_CLOUD, kValue0.CreateDeepCopy(), nullptr); | 
| 422   provider0_.UpdateChromePolicy(policy0_); | 414   provider0_.UpdateChromePolicy(policy0_); | 
| 423   Mock::VerifyAndClearExpectations(this); | 415   Mock::VerifyAndClearExpectations(this); | 
| 424 | 416 | 
| 425   // Changing other values doesn't trigger a notification. | 417   // Changing other values doesn't trigger a notification. | 
| 426   EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0); | 418   EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0); | 
| 427   policy0_.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 419   policy0_.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 428                POLICY_SOURCE_CLOUD, kValue0.CreateDeepCopy(), nullptr); | 420                POLICY_SOURCE_CLOUD, kValue0.CreateDeepCopy(), nullptr); | 
| 429   provider0_.UpdateChromePolicy(policy0_); | 421   provider0_.UpdateChromePolicy(policy0_); | 
| 430   Mock::VerifyAndClearExpectations(this); | 422   Mock::VerifyAndClearExpectations(this); | 
| 431 | 423 | 
| 432   // Modifying the value triggers a notification. | 424   // Modifying the value triggers a notification. | 
| 433   base::FundamentalValue kValue1(1); | 425   base::Value kValue1(1); | 
| 434   EXPECT_CALL(*this, OnPolicyValueUpdated(ValueEquals(&kValue0), | 426   EXPECT_CALL(*this, OnPolicyValueUpdated(ValueEquals(&kValue0), | 
| 435                                           ValueEquals(&kValue1))); | 427                                           ValueEquals(&kValue1))); | 
| 436   policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 428   policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 437                POLICY_SOURCE_CLOUD, kValue1.CreateDeepCopy(), nullptr); | 429                POLICY_SOURCE_CLOUD, kValue1.CreateDeepCopy(), nullptr); | 
| 438   provider0_.UpdateChromePolicy(policy0_); | 430   provider0_.UpdateChromePolicy(policy0_); | 
| 439   Mock::VerifyAndClearExpectations(this); | 431   Mock::VerifyAndClearExpectations(this); | 
| 440 | 432 | 
| 441   // Removing the value triggers a notification. | 433   // Removing the value triggers a notification. | 
| 442   EXPECT_CALL(*this, OnPolicyValueUpdated(ValueEquals(&kValue1), NULL)); | 434   EXPECT_CALL(*this, OnPolicyValueUpdated(ValueEquals(&kValue1), NULL)); | 
| 443   policy0_.Erase("aaa"); | 435   policy0_.Erase("aaa"); | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
| 463 | 455 | 
| 464   EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); | 456   EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); | 
| 465   policy_service_->RefreshPolicies(base::Bind( | 457   policy_service_->RefreshPolicies(base::Bind( | 
| 466       &PolicyServiceTest::OnPolicyRefresh, | 458       &PolicyServiceTest::OnPolicyRefresh, | 
| 467       base::Unretained(this))); | 459       base::Unretained(this))); | 
| 468   // Let any queued observer tasks run. | 460   // Let any queued observer tasks run. | 
| 469   RunUntilIdle(); | 461   RunUntilIdle(); | 
| 470   Mock::VerifyAndClearExpectations(this); | 462   Mock::VerifyAndClearExpectations(this); | 
| 471 | 463 | 
| 472   EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); | 464   EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); | 
| 473   base::FundamentalValue kValue0(0); | 465   base::Value kValue0(0); | 
| 474   policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 466   policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 475                POLICY_SOURCE_CLOUD, kValue0.CreateDeepCopy(), nullptr); | 467                POLICY_SOURCE_CLOUD, kValue0.CreateDeepCopy(), nullptr); | 
| 476   provider0_.UpdateChromePolicy(policy0_); | 468   provider0_.UpdateChromePolicy(policy0_); | 
| 477   Mock::VerifyAndClearExpectations(this); | 469   Mock::VerifyAndClearExpectations(this); | 
| 478 | 470 | 
| 479   EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); | 471   EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); | 
| 480   base::FundamentalValue kValue1(1); | 472   base::Value kValue1(1); | 
| 481   policy1_.Set("aaa", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | 473   policy1_.Set("aaa", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | 
| 482                POLICY_SOURCE_CLOUD, kValue1.CreateDeepCopy(), nullptr); | 474                POLICY_SOURCE_CLOUD, kValue1.CreateDeepCopy(), nullptr); | 
| 483   provider1_.UpdateChromePolicy(policy1_); | 475   provider1_.UpdateChromePolicy(policy1_); | 
| 484   Mock::VerifyAndClearExpectations(this); | 476   Mock::VerifyAndClearExpectations(this); | 
| 485 | 477 | 
| 486   // A provider can refresh more than once after a RefreshPolicies call, but | 478   // A provider can refresh more than once after a RefreshPolicies call, but | 
| 487   // OnPolicyRefresh should be triggered only after all providers are | 479   // OnPolicyRefresh should be triggered only after all providers are | 
| 488   // refreshed. | 480   // refreshed. | 
| 489   EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); | 481   EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); | 
| 490   policy1_.Set("bbb", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | 482   policy1_.Set("bbb", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
| 502   Mock::VerifyAndClearExpectations(this); | 494   Mock::VerifyAndClearExpectations(this); | 
| 503 | 495 | 
| 504   EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); | 496   EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); | 
| 505   policy2_.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 497   policy2_.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 506                POLICY_SOURCE_CLOUD, kValue0.CreateDeepCopy(), nullptr); | 498                POLICY_SOURCE_CLOUD, kValue0.CreateDeepCopy(), nullptr); | 
| 507   provider2_.UpdateChromePolicy(policy2_); | 499   provider2_.UpdateChromePolicy(policy2_); | 
| 508   Mock::VerifyAndClearExpectations(this); | 500   Mock::VerifyAndClearExpectations(this); | 
| 509 | 501 | 
| 510   // Providers 0 and 1 must reload again. | 502   // Providers 0 and 1 must reload again. | 
| 511   EXPECT_CALL(*this, OnPolicyRefresh()).Times(2); | 503   EXPECT_CALL(*this, OnPolicyRefresh()).Times(2); | 
| 512   base::FundamentalValue kValue2(2); | 504   base::Value kValue2(2); | 
| 513   policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 505   policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 514                POLICY_SOURCE_CLOUD, kValue2.CreateDeepCopy(), nullptr); | 506                POLICY_SOURCE_CLOUD, kValue2.CreateDeepCopy(), nullptr); | 
| 515   provider0_.UpdateChromePolicy(policy0_); | 507   provider0_.UpdateChromePolicy(policy0_); | 
| 516   provider1_.UpdateChromePolicy(policy1_); | 508   provider1_.UpdateChromePolicy(policy1_); | 
| 517   Mock::VerifyAndClearExpectations(this); | 509   Mock::VerifyAndClearExpectations(this); | 
| 518 | 510 | 
| 519   const PolicyMap& policies = policy_service_->GetPolicies( | 511   const PolicyMap& policies = policy_service_->GetPolicies( | 
| 520       PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())); | 512       PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())); | 
| 521   EXPECT_TRUE(base::Value::Equals(&kValue2, policies.GetValue("aaa"))); | 513   EXPECT_TRUE(base::Value::Equals(&kValue2, policies.GetValue("aaa"))); | 
| 522   EXPECT_TRUE(base::Value::Equals(&kValue0, policies.GetValue("bbb"))); | 514   EXPECT_TRUE(base::Value::Equals(&kValue0, policies.GetValue("bbb"))); | 
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 665 TEST_F(PolicyServiceTest, SeparateProxyPoliciesMerging) { | 657 TEST_F(PolicyServiceTest, SeparateProxyPoliciesMerging) { | 
| 666   const PolicyNamespace chrome_namespace(POLICY_DOMAIN_CHROME, std::string()); | 658   const PolicyNamespace chrome_namespace(POLICY_DOMAIN_CHROME, std::string()); | 
| 667   const PolicyNamespace extension_namespace(POLICY_DOMAIN_EXTENSIONS, "xyz"); | 659   const PolicyNamespace extension_namespace(POLICY_DOMAIN_EXTENSIONS, "xyz"); | 
| 668 | 660 | 
| 669   std::unique_ptr<PolicyBundle> policy_bundle(new PolicyBundle()); | 661   std::unique_ptr<PolicyBundle> policy_bundle(new PolicyBundle()); | 
| 670   PolicyMap& policy_map = policy_bundle->Get(chrome_namespace); | 662   PolicyMap& policy_map = policy_bundle->Get(chrome_namespace); | 
| 671   // Individual proxy policy values in the Chrome namespace should be collected | 663   // Individual proxy policy values in the Chrome namespace should be collected | 
| 672   // into a dictionary. | 664   // into a dictionary. | 
| 673   policy_map.Set(key::kProxyServerMode, POLICY_LEVEL_MANDATORY, | 665   policy_map.Set(key::kProxyServerMode, POLICY_LEVEL_MANDATORY, | 
| 674                  POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, | 666                  POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, | 
| 675                  base::MakeUnique<base::FundamentalValue>(3), nullptr); | 667                  base::MakeUnique<base::Value>(3), nullptr); | 
| 676 | 668 | 
| 677   // 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 | 
| 678   // policy available. | 670   // policy available. | 
| 679   policy_map.Set(key::kProxyMode, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | 671   policy_map.Set(key::kProxyMode, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | 
| 680                  POLICY_SOURCE_CLOUD, | 672                  POLICY_SOURCE_CLOUD, | 
| 681                  base::MakeUnique<base::StringValue>("pac_script"), nullptr); | 673                  base::MakeUnique<base::StringValue>("pac_script"), nullptr); | 
| 682   policy_map.Set(key::kProxyPacUrl, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | 674   policy_map.Set(key::kProxyPacUrl, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | 
| 683                  POLICY_SOURCE_CLOUD, base::MakeUnique<base::StringValue>( | 675                  POLICY_SOURCE_CLOUD, base::MakeUnique<base::StringValue>( | 
| 684                                           "http://example.com/wpad.dat"), | 676                                           "http://example.com/wpad.dat"), | 
| 685                  nullptr); | 677                  nullptr); | 
| 686 | 678 | 
| 687   // Add a value to a non-Chrome namespace. | 679   // Add a value to a non-Chrome namespace. | 
| 688   policy_bundle->Get(extension_namespace) | 680   policy_bundle->Get(extension_namespace) | 
| 689       .Set(key::kProxyServerMode, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 681       .Set(key::kProxyServerMode, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 
| 690            POLICY_SOURCE_CLOUD, base::MakeUnique<base::FundamentalValue>(3), | 682            POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(3), nullptr); | 
| 691            nullptr); |  | 
| 692 | 683 | 
| 693   // The resulting Chrome namespace map should have the collected policy. | 684   // The resulting Chrome namespace map should have the collected policy. | 
| 694   PolicyMap expected_chrome; | 685   PolicyMap expected_chrome; | 
| 695   std::unique_ptr<base::DictionaryValue> expected_value( | 686   std::unique_ptr<base::DictionaryValue> expected_value( | 
| 696       new base::DictionaryValue); | 687       new base::DictionaryValue); | 
| 697   expected_value->SetInteger(key::kProxyServerMode, 3); | 688   expected_value->SetInteger(key::kProxyServerMode, 3); | 
| 698   expected_chrome.Set(key::kProxySettings, POLICY_LEVEL_MANDATORY, | 689   expected_chrome.Set(key::kProxySettings, POLICY_LEVEL_MANDATORY, | 
| 699                       POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, | 690                       POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, | 
| 700                       std::move(expected_value), nullptr); | 691                       std::move(expected_value), nullptr); | 
| 701 | 692 | 
| 702   // The resulting Extensions namespace map shouldn't have been modified. | 693   // The resulting Extensions namespace map shouldn't have been modified. | 
| 703   PolicyMap expected_extension; | 694   PolicyMap expected_extension; | 
| 704   expected_extension.Set(key::kProxyServerMode, POLICY_LEVEL_MANDATORY, | 695   expected_extension.Set(key::kProxyServerMode, POLICY_LEVEL_MANDATORY, | 
| 705                          POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, | 696                          POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, | 
| 706                          base::MakeUnique<base::FundamentalValue>(3), nullptr); | 697                          base::MakeUnique<base::Value>(3), nullptr); | 
| 707 | 698 | 
| 708   provider0_.UpdatePolicy(std::move(policy_bundle)); | 699   provider0_.UpdatePolicy(std::move(policy_bundle)); | 
| 709   RunUntilIdle(); | 700   RunUntilIdle(); | 
| 710 | 701 | 
| 711   EXPECT_TRUE(VerifyPolicies(chrome_namespace, expected_chrome)); | 702   EXPECT_TRUE(VerifyPolicies(chrome_namespace, expected_chrome)); | 
| 712   EXPECT_TRUE(VerifyPolicies(extension_namespace, expected_extension)); | 703   EXPECT_TRUE(VerifyPolicies(extension_namespace, expected_extension)); | 
| 713 } | 704 } | 
| 714 | 705 | 
| 715 }  // namespace policy | 706 }  // namespace policy | 
| OLD | NEW | 
|---|