| 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 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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, |
| 85 base::MakeUnique<base::FundamentalValue>(14), nullptr); | 85 base::MakeUnique<base::Value>(14), 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, |
| 184 base::MakeUnique<base::FundamentalValue>(123), nullptr); | 184 base::MakeUnique<base::Value>(123), 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, |
| 187 base::MakeUnique<base::FundamentalValue>(123), nullptr); | 187 base::MakeUnique<base::Value>(123), 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, |
| 206 base::MakeUnique<base::FundamentalValue>(456), nullptr); | 206 base::MakeUnique<base::Value>(456), 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, |
| 209 base::MakeUnique<base::FundamentalValue>(456), nullptr); | 209 base::MakeUnique<base::Value>(456), 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, |
| 232 base::MakeUnique<base::FundamentalValue>(789), nullptr); | 232 base::MakeUnique<base::Value>(789), 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, |
| 235 base::MakeUnique<base::FundamentalValue>(789), nullptr); | 235 base::MakeUnique<base::Value>(789), 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), |
| 267 nullptr); | 267 nullptr); |
| 268 PolicyMap policy_map; | 268 PolicyMap policy_map; |
| 269 policy_map.CopyFrom(previous_policy_map); | 269 policy_map.CopyFrom(previous_policy_map); |
| 270 policy_map.Set("policy", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 270 policy_map.Set("policy", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 271 POLICY_SOURCE_CLOUD, | 271 POLICY_SOURCE_CLOUD, |
| 272 base::MakeUnique<base::StringValue>("value"), nullptr); | 272 base::MakeUnique<base::StringValue>("value"), nullptr); |
| 273 | 273 |
| 274 std::unique_ptr<PolicyBundle> bundle(new PolicyBundle()); | 274 std::unique_ptr<PolicyBundle> bundle(new PolicyBundle()); |
| 275 // The initial setup includes a policy for chrome that is now changing. | 275 // The initial setup includes a policy for chrome that is now changing. |
| 276 bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) | 276 bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 339 policy_service_->RemoveObserver(POLICY_DOMAIN_CHROME, &chrome_observer); | 339 policy_service_->RemoveObserver(POLICY_DOMAIN_CHROME, &chrome_observer); |
| 340 policy_service_->RemoveObserver(POLICY_DOMAIN_EXTENSIONS, | 340 policy_service_->RemoveObserver(POLICY_DOMAIN_EXTENSIONS, |
| 341 &extension_observer); | 341 &extension_observer); |
| 342 } | 342 } |
| 343 | 343 |
| 344 TEST_F(PolicyServiceTest, ObserverChangesPolicy) { | 344 TEST_F(PolicyServiceTest, ObserverChangesPolicy) { |
| 345 ChangePolicyObserver observer(&provider0_); | 345 ChangePolicyObserver observer(&provider0_); |
| 346 policy_service_->AddObserver(POLICY_DOMAIN_CHROME, &observer); | 346 policy_service_->AddObserver(POLICY_DOMAIN_CHROME, &observer); |
| 347 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 347 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 348 POLICY_SOURCE_CLOUD, | 348 POLICY_SOURCE_CLOUD, |
| 349 base::MakeUnique<base::FundamentalValue>(123), nullptr); | 349 base::MakeUnique<base::Value>(123), nullptr); |
| 350 policy0_.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 350 policy0_.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 351 POLICY_SOURCE_CLOUD, | 351 POLICY_SOURCE_CLOUD, |
| 352 base::MakeUnique<base::FundamentalValue>(1234), nullptr); | 352 base::MakeUnique<base::Value>(1234), nullptr); |
| 353 // Should not crash. | 353 // Should not crash. |
| 354 provider0_.UpdateChromePolicy(policy0_); | 354 provider0_.UpdateChromePolicy(policy0_); |
| 355 policy_service_->RemoveObserver(POLICY_DOMAIN_CHROME, &observer); | 355 policy_service_->RemoveObserver(POLICY_DOMAIN_CHROME, &observer); |
| 356 EXPECT_TRUE(observer.observer_invoked()); | 356 EXPECT_TRUE(observer.observer_invoked()); |
| 357 } | 357 } |
| 358 | 358 |
| 359 TEST_F(PolicyServiceTest, Priorities) { | 359 TEST_F(PolicyServiceTest, Priorities) { |
| 360 PolicyMap expected; | 360 PolicyMap expected; |
| 361 expected.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 361 expected.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 362 POLICY_SOURCE_ENTERPRISE_DEFAULT, | 362 POLICY_SOURCE_ENTERPRISE_DEFAULT, |
| 363 base::MakeUnique<base::FundamentalValue>(13), nullptr); | 363 base::MakeUnique<base::Value>(13), nullptr); |
| 364 expected.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 364 expected.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 365 POLICY_SOURCE_CLOUD, base::MakeUnique<base::FundamentalValue>(0), | 365 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(0), |
| 366 nullptr); | 366 nullptr); |
| 367 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 367 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 368 POLICY_SOURCE_CLOUD, base::MakeUnique<base::FundamentalValue>(0), | 368 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(0), |
| 369 nullptr); | 369 nullptr); |
| 370 policy1_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 370 policy1_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 371 POLICY_SOURCE_CLOUD, base::MakeUnique<base::FundamentalValue>(1), | 371 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(1), |
| 372 nullptr); | 372 nullptr); |
| 373 policy2_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 373 policy2_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 374 POLICY_SOURCE_CLOUD, base::MakeUnique<base::FundamentalValue>(2), | 374 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(2), |
| 375 nullptr); | 375 nullptr); |
| 376 provider0_.UpdateChromePolicy(policy0_); | 376 provider0_.UpdateChromePolicy(policy0_); |
| 377 provider1_.UpdateChromePolicy(policy1_); | 377 provider1_.UpdateChromePolicy(policy1_); |
| 378 provider2_.UpdateChromePolicy(policy2_); | 378 provider2_.UpdateChromePolicy(policy2_); |
| 379 EXPECT_TRUE(VerifyPolicies( | 379 EXPECT_TRUE(VerifyPolicies( |
| 380 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected)); | 380 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected)); |
| 381 | 381 |
| 382 expected.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 382 expected.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 383 POLICY_SOURCE_CLOUD, base::MakeUnique<base::FundamentalValue>(1), | 383 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(1), |
| 384 nullptr); | 384 nullptr); |
| 385 policy0_.Erase("aaa"); | 385 policy0_.Erase("aaa"); |
| 386 provider0_.UpdateChromePolicy(policy0_); | 386 provider0_.UpdateChromePolicy(policy0_); |
| 387 EXPECT_TRUE(VerifyPolicies( | 387 EXPECT_TRUE(VerifyPolicies( |
| 388 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected)); | 388 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected)); |
| 389 | 389 |
| 390 expected.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 390 expected.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 391 POLICY_SOURCE_CLOUD, base::MakeUnique<base::FundamentalValue>(2), | 391 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(2), |
| 392 nullptr); | 392 nullptr); |
| 393 policy1_.Set("aaa", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | 393 policy1_.Set("aaa", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, |
| 394 POLICY_SOURCE_CLOUD, base::MakeUnique<base::FundamentalValue>(1), | 394 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(1), |
| 395 nullptr); | 395 nullptr); |
| 396 provider1_.UpdateChromePolicy(policy1_); | 396 provider1_.UpdateChromePolicy(policy1_); |
| 397 EXPECT_TRUE(VerifyPolicies( | 397 EXPECT_TRUE(VerifyPolicies( |
| 398 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected)); | 398 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected)); |
| 399 } | 399 } |
| 400 | 400 |
| 401 TEST_F(PolicyServiceTest, PolicyChangeRegistrar) { | 401 TEST_F(PolicyServiceTest, PolicyChangeRegistrar) { |
| 402 std::unique_ptr<PolicyChangeRegistrar> registrar(new PolicyChangeRegistrar( | 402 std::unique_ptr<PolicyChangeRegistrar> registrar(new PolicyChangeRegistrar( |
| 403 policy_service_.get(), | 403 policy_service_.get(), |
| 404 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))); | 404 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))); |
| 405 | 405 |
| 406 // Starting to observe existing policies doesn't trigger a notification. | 406 // Starting to observe existing policies doesn't trigger a notification. |
| 407 EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0); | 407 EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0); |
| 408 registrar->Observe("pre", base::Bind( | 408 registrar->Observe("pre", base::Bind( |
| 409 &PolicyServiceTest::OnPolicyValueUpdated, | 409 &PolicyServiceTest::OnPolicyValueUpdated, |
| 410 base::Unretained(this))); | 410 base::Unretained(this))); |
| 411 registrar->Observe("aaa", base::Bind( | 411 registrar->Observe("aaa", base::Bind( |
| 412 &PolicyServiceTest::OnPolicyValueUpdated, | 412 &PolicyServiceTest::OnPolicyValueUpdated, |
| 413 base::Unretained(this))); | 413 base::Unretained(this))); |
| 414 RunUntilIdle(); | 414 RunUntilIdle(); |
| 415 Mock::VerifyAndClearExpectations(this); | 415 Mock::VerifyAndClearExpectations(this); |
| 416 | 416 |
| 417 // Changing it now triggers a notification. | 417 // Changing it now triggers a notification. |
| 418 base::FundamentalValue kValue0(0); | 418 base::Value kValue0(0); |
| 419 EXPECT_CALL(*this, OnPolicyValueUpdated(NULL, ValueEquals(&kValue0))); | 419 EXPECT_CALL(*this, OnPolicyValueUpdated(NULL, ValueEquals(&kValue0))); |
| 420 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 420 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 421 POLICY_SOURCE_CLOUD, kValue0.CreateDeepCopy(), nullptr); | 421 POLICY_SOURCE_CLOUD, kValue0.CreateDeepCopy(), nullptr); |
| 422 provider0_.UpdateChromePolicy(policy0_); | 422 provider0_.UpdateChromePolicy(policy0_); |
| 423 Mock::VerifyAndClearExpectations(this); | 423 Mock::VerifyAndClearExpectations(this); |
| 424 | 424 |
| 425 // Changing other values doesn't trigger a notification. | 425 // Changing other values doesn't trigger a notification. |
| 426 EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0); | 426 EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0); |
| 427 policy0_.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 427 policy0_.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 428 POLICY_SOURCE_CLOUD, kValue0.CreateDeepCopy(), nullptr); | 428 POLICY_SOURCE_CLOUD, kValue0.CreateDeepCopy(), nullptr); |
| 429 provider0_.UpdateChromePolicy(policy0_); | 429 provider0_.UpdateChromePolicy(policy0_); |
| 430 Mock::VerifyAndClearExpectations(this); | 430 Mock::VerifyAndClearExpectations(this); |
| 431 | 431 |
| 432 // Modifying the value triggers a notification. | 432 // Modifying the value triggers a notification. |
| 433 base::FundamentalValue kValue1(1); | 433 base::Value kValue1(1); |
| 434 EXPECT_CALL(*this, OnPolicyValueUpdated(ValueEquals(&kValue0), | 434 EXPECT_CALL(*this, OnPolicyValueUpdated(ValueEquals(&kValue0), |
| 435 ValueEquals(&kValue1))); | 435 ValueEquals(&kValue1))); |
| 436 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 436 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 437 POLICY_SOURCE_CLOUD, kValue1.CreateDeepCopy(), nullptr); | 437 POLICY_SOURCE_CLOUD, kValue1.CreateDeepCopy(), nullptr); |
| 438 provider0_.UpdateChromePolicy(policy0_); | 438 provider0_.UpdateChromePolicy(policy0_); |
| 439 Mock::VerifyAndClearExpectations(this); | 439 Mock::VerifyAndClearExpectations(this); |
| 440 | 440 |
| 441 // Removing the value triggers a notification. | 441 // Removing the value triggers a notification. |
| 442 EXPECT_CALL(*this, OnPolicyValueUpdated(ValueEquals(&kValue1), NULL)); | 442 EXPECT_CALL(*this, OnPolicyValueUpdated(ValueEquals(&kValue1), NULL)); |
| 443 policy0_.Erase("aaa"); | 443 policy0_.Erase("aaa"); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 463 | 463 |
| 464 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); | 464 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); |
| 465 policy_service_->RefreshPolicies(base::Bind( | 465 policy_service_->RefreshPolicies(base::Bind( |
| 466 &PolicyServiceTest::OnPolicyRefresh, | 466 &PolicyServiceTest::OnPolicyRefresh, |
| 467 base::Unretained(this))); | 467 base::Unretained(this))); |
| 468 // Let any queued observer tasks run. | 468 // Let any queued observer tasks run. |
| 469 RunUntilIdle(); | 469 RunUntilIdle(); |
| 470 Mock::VerifyAndClearExpectations(this); | 470 Mock::VerifyAndClearExpectations(this); |
| 471 | 471 |
| 472 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); | 472 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); |
| 473 base::FundamentalValue kValue0(0); | 473 base::Value kValue0(0); |
| 474 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 474 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 475 POLICY_SOURCE_CLOUD, kValue0.CreateDeepCopy(), nullptr); | 475 POLICY_SOURCE_CLOUD, kValue0.CreateDeepCopy(), nullptr); |
| 476 provider0_.UpdateChromePolicy(policy0_); | 476 provider0_.UpdateChromePolicy(policy0_); |
| 477 Mock::VerifyAndClearExpectations(this); | 477 Mock::VerifyAndClearExpectations(this); |
| 478 | 478 |
| 479 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); | 479 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); |
| 480 base::FundamentalValue kValue1(1); | 480 base::Value kValue1(1); |
| 481 policy1_.Set("aaa", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | 481 policy1_.Set("aaa", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, |
| 482 POLICY_SOURCE_CLOUD, kValue1.CreateDeepCopy(), nullptr); | 482 POLICY_SOURCE_CLOUD, kValue1.CreateDeepCopy(), nullptr); |
| 483 provider1_.UpdateChromePolicy(policy1_); | 483 provider1_.UpdateChromePolicy(policy1_); |
| 484 Mock::VerifyAndClearExpectations(this); | 484 Mock::VerifyAndClearExpectations(this); |
| 485 | 485 |
| 486 // A provider can refresh more than once after a RefreshPolicies call, but | 486 // A provider can refresh more than once after a RefreshPolicies call, but |
| 487 // OnPolicyRefresh should be triggered only after all providers are | 487 // OnPolicyRefresh should be triggered only after all providers are |
| 488 // refreshed. | 488 // refreshed. |
| 489 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); | 489 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); |
| 490 policy1_.Set("bbb", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | 490 policy1_.Set("bbb", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, |
| (...skipping 11 matching lines...) Expand all Loading... |
| 502 Mock::VerifyAndClearExpectations(this); | 502 Mock::VerifyAndClearExpectations(this); |
| 503 | 503 |
| 504 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); | 504 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); |
| 505 policy2_.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 505 policy2_.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 506 POLICY_SOURCE_CLOUD, kValue0.CreateDeepCopy(), nullptr); | 506 POLICY_SOURCE_CLOUD, kValue0.CreateDeepCopy(), nullptr); |
| 507 provider2_.UpdateChromePolicy(policy2_); | 507 provider2_.UpdateChromePolicy(policy2_); |
| 508 Mock::VerifyAndClearExpectations(this); | 508 Mock::VerifyAndClearExpectations(this); |
| 509 | 509 |
| 510 // Providers 0 and 1 must reload again. | 510 // Providers 0 and 1 must reload again. |
| 511 EXPECT_CALL(*this, OnPolicyRefresh()).Times(2); | 511 EXPECT_CALL(*this, OnPolicyRefresh()).Times(2); |
| 512 base::FundamentalValue kValue2(2); | 512 base::Value kValue2(2); |
| 513 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 513 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 514 POLICY_SOURCE_CLOUD, kValue2.CreateDeepCopy(), nullptr); | 514 POLICY_SOURCE_CLOUD, kValue2.CreateDeepCopy(), nullptr); |
| 515 provider0_.UpdateChromePolicy(policy0_); | 515 provider0_.UpdateChromePolicy(policy0_); |
| 516 provider1_.UpdateChromePolicy(policy1_); | 516 provider1_.UpdateChromePolicy(policy1_); |
| 517 Mock::VerifyAndClearExpectations(this); | 517 Mock::VerifyAndClearExpectations(this); |
| 518 | 518 |
| 519 const PolicyMap& policies = policy_service_->GetPolicies( | 519 const PolicyMap& policies = policy_service_->GetPolicies( |
| 520 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())); | 520 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())); |
| 521 EXPECT_TRUE(base::Value::Equals(&kValue2, policies.GetValue("aaa"))); | 521 EXPECT_TRUE(base::Value::Equals(&kValue2, policies.GetValue("aaa"))); |
| 522 EXPECT_TRUE(base::Value::Equals(&kValue0, policies.GetValue("bbb"))); | 522 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, FixDeprecatedPolicies) { | 665 TEST_F(PolicyServiceTest, FixDeprecatedPolicies) { |
| 666 const PolicyNamespace chrome_namespace(POLICY_DOMAIN_CHROME, std::string()); | 666 const PolicyNamespace chrome_namespace(POLICY_DOMAIN_CHROME, std::string()); |
| 667 const PolicyNamespace extension_namespace(POLICY_DOMAIN_EXTENSIONS, "xyz"); | 667 const PolicyNamespace extension_namespace(POLICY_DOMAIN_EXTENSIONS, "xyz"); |
| 668 | 668 |
| 669 std::unique_ptr<PolicyBundle> policy_bundle(new PolicyBundle()); | 669 std::unique_ptr<PolicyBundle> policy_bundle(new PolicyBundle()); |
| 670 PolicyMap& policy_map = policy_bundle->Get(chrome_namespace); | 670 PolicyMap& policy_map = policy_bundle->Get(chrome_namespace); |
| 671 // Individual proxy policy values in the Chrome namespace should be collected | 671 // Individual proxy policy values in the Chrome namespace should be collected |
| 672 // into a dictionary. | 672 // into a dictionary. |
| 673 policy_map.Set(key::kProxyServerMode, POLICY_LEVEL_MANDATORY, | 673 policy_map.Set(key::kProxyServerMode, POLICY_LEVEL_MANDATORY, |
| 674 POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, | 674 POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, |
| 675 base::MakeUnique<base::FundamentalValue>(3), nullptr); | 675 base::MakeUnique<base::Value>(3), nullptr); |
| 676 | 676 |
| 677 // Both these policies should be ignored, since there's a higher priority | 677 // Both these policies should be ignored, since there's a higher priority |
| 678 // policy available. | 678 // policy available. |
| 679 policy_map.Set(key::kProxyMode, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | 679 policy_map.Set(key::kProxyMode, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, |
| 680 POLICY_SOURCE_CLOUD, | 680 POLICY_SOURCE_CLOUD, |
| 681 base::MakeUnique<base::StringValue>("pac_script"), nullptr); | 681 base::MakeUnique<base::StringValue>("pac_script"), nullptr); |
| 682 policy_map.Set(key::kProxyPacUrl, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | 682 policy_map.Set(key::kProxyPacUrl, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, |
| 683 POLICY_SOURCE_CLOUD, base::MakeUnique<base::StringValue>( | 683 POLICY_SOURCE_CLOUD, base::MakeUnique<base::StringValue>( |
| 684 "http://example.com/wpad.dat"), | 684 "http://example.com/wpad.dat"), |
| 685 nullptr); | 685 nullptr); |
| 686 | 686 |
| 687 // Add a value to a non-Chrome namespace. | 687 // Add a value to a non-Chrome namespace. |
| 688 policy_bundle->Get(extension_namespace) | 688 policy_bundle->Get(extension_namespace) |
| 689 .Set(key::kProxyServerMode, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 689 .Set(key::kProxyServerMode, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 690 POLICY_SOURCE_CLOUD, base::MakeUnique<base::FundamentalValue>(3), | 690 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(3), |
| 691 nullptr); | 691 nullptr); |
| 692 | 692 |
| 693 // The resulting Chrome namespace map should have the collected policy. | 693 // The resulting Chrome namespace map should have the collected policy. |
| 694 PolicyMap expected_chrome; | 694 PolicyMap expected_chrome; |
| 695 std::unique_ptr<base::DictionaryValue> expected_value( | 695 std::unique_ptr<base::DictionaryValue> expected_value( |
| 696 new base::DictionaryValue); | 696 new base::DictionaryValue); |
| 697 expected_value->SetInteger(key::kProxyServerMode, 3); | 697 expected_value->SetInteger(key::kProxyServerMode, 3); |
| 698 expected_chrome.Set(key::kProxySettings, POLICY_LEVEL_MANDATORY, | 698 expected_chrome.Set(key::kProxySettings, POLICY_LEVEL_MANDATORY, |
| 699 POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, | 699 POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, |
| 700 std::move(expected_value), nullptr); | 700 std::move(expected_value), nullptr); |
| 701 | 701 |
| 702 // The resulting Extensions namespace map shouldn't have been modified. | 702 // The resulting Extensions namespace map shouldn't have been modified. |
| 703 PolicyMap expected_extension; | 703 PolicyMap expected_extension; |
| 704 expected_extension.Set(key::kProxyServerMode, POLICY_LEVEL_MANDATORY, | 704 expected_extension.Set(key::kProxyServerMode, POLICY_LEVEL_MANDATORY, |
| 705 POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, | 705 POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, |
| 706 base::MakeUnique<base::FundamentalValue>(3), nullptr); | 706 base::MakeUnique<base::Value>(3), nullptr); |
| 707 | 707 |
| 708 provider0_.UpdatePolicy(std::move(policy_bundle)); | 708 provider0_.UpdatePolicy(std::move(policy_bundle)); |
| 709 RunUntilIdle(); | 709 RunUntilIdle(); |
| 710 | 710 |
| 711 EXPECT_TRUE(VerifyPolicies(chrome_namespace, expected_chrome)); | 711 EXPECT_TRUE(VerifyPolicies(chrome_namespace, expected_chrome)); |
| 712 EXPECT_TRUE(VerifyPolicies(extension_namespace, expected_extension)); | 712 EXPECT_TRUE(VerifyPolicies(extension_namespace, expected_extension)); |
| 713 } | 713 } |
| 714 | 714 |
| 715 } // namespace policy | 715 } // namespace policy |
| OLD | NEW |