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