| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/policy/core/common/policy_service_impl.h" | 5 #include "components/policy/core/common/policy_service_impl.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/callback.h" | 9 #include "base/callback.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| 11 #include "base/run_loop.h" | 11 #include "base/run_loop.h" |
| 12 #include "base/values.h" | 12 #include "base/values.h" |
| 13 #include "components/policy/core/common/external_data_fetcher.h" | 13 #include "components/policy/core/common/external_data_fetcher.h" |
| 14 #include "components/policy/core/common/mock_configuration_policy_provider.h" | 14 #include "components/policy/core/common/mock_configuration_policy_provider.h" |
| 15 #include "components/policy/core/common/mock_policy_service.h" | 15 #include "components/policy/core/common/mock_policy_service.h" |
| 16 #include "components/policy/core/common/policy_types.h" |
| 16 #include "policy/policy_constants.h" | 17 #include "policy/policy_constants.h" |
| 17 #include "testing/gmock/include/gmock/gmock.h" | 18 #include "testing/gmock/include/gmock/gmock.h" |
| 18 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
| 19 | 20 |
| 20 using ::testing::AnyNumber; | 21 using ::testing::AnyNumber; |
| 21 using ::testing::Mock; | 22 using ::testing::Mock; |
| 22 using ::testing::Return; | 23 using ::testing::Return; |
| 23 using ::testing::_; | 24 using ::testing::_; |
| 24 | 25 |
| 25 namespace policy { | 26 namespace policy { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 45 // Helper that fills |bundle| with test policies. | 46 // Helper that fills |bundle| with test policies. |
| 46 void AddTestPolicies(PolicyBundle* bundle, | 47 void AddTestPolicies(PolicyBundle* bundle, |
| 47 const char* value, | 48 const char* value, |
| 48 PolicyLevel level, | 49 PolicyLevel level, |
| 49 PolicyScope scope) { | 50 PolicyScope scope) { |
| 50 PolicyMap* policy_map = | 51 PolicyMap* policy_map = |
| 51 &bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())); | 52 &bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())); |
| 52 policy_map->Set(kSameLevelPolicy, | 53 policy_map->Set(kSameLevelPolicy, |
| 53 POLICY_LEVEL_MANDATORY, | 54 POLICY_LEVEL_MANDATORY, |
| 54 POLICY_SCOPE_USER, | 55 POLICY_SCOPE_USER, |
| 56 POLICY_SOURCE_ENTERPRISE_DEFAULT, |
| 55 new base::StringValue(value), | 57 new base::StringValue(value), |
| 56 NULL); | 58 NULL); |
| 57 policy_map->Set( | 59 policy_map->Set( |
| 58 kDiffLevelPolicy, level, scope, new base::StringValue(value), NULL); | 60 kDiffLevelPolicy, level, scope, POLICY_SOURCE_PLATFORM, |
| 61 new base::StringValue(value), nullptr); |
| 59 policy_map = | 62 policy_map = |
| 60 &bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension)); | 63 &bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension)); |
| 61 policy_map->Set(kSameLevelPolicy, | 64 policy_map->Set(kSameLevelPolicy, |
| 62 POLICY_LEVEL_MANDATORY, | 65 POLICY_LEVEL_MANDATORY, |
| 63 POLICY_SCOPE_USER, | 66 POLICY_SCOPE_USER, |
| 67 POLICY_SOURCE_ENTERPRISE_DEFAULT, |
| 64 new base::StringValue(value), | 68 new base::StringValue(value), |
| 65 NULL); | 69 NULL); |
| 66 policy_map->Set( | 70 policy_map->Set( |
| 67 kDiffLevelPolicy, level, scope, new base::StringValue(value), NULL); | 71 kDiffLevelPolicy, level, scope, POLICY_SOURCE_PLATFORM, |
| 72 new base::StringValue(value), nullptr); |
| 68 } | 73 } |
| 69 | 74 |
| 70 // Observer class that changes the policy in the passed provider when the | 75 // Observer class that changes the policy in the passed provider when the |
| 71 // callback is invoked. | 76 // callback is invoked. |
| 72 class ChangePolicyObserver : public PolicyService::Observer { | 77 class ChangePolicyObserver : public PolicyService::Observer { |
| 73 public: | 78 public: |
| 74 explicit ChangePolicyObserver(MockConfigurationPolicyProvider* provider) | 79 explicit ChangePolicyObserver(MockConfigurationPolicyProvider* provider) |
| 75 : provider_(provider), | 80 : provider_(provider), |
| 76 observer_invoked_(false) {} | 81 observer_invoked_(false) {} |
| 77 | 82 |
| 78 void OnPolicyUpdated(const PolicyNamespace&, | 83 void OnPolicyUpdated(const PolicyNamespace&, |
| 79 const PolicyMap& previous, | 84 const PolicyMap& previous, |
| 80 const PolicyMap& current) override { | 85 const PolicyMap& current) override { |
| 81 PolicyMap new_policy; | 86 PolicyMap new_policy; |
| 82 new_policy.Set("foo", | 87 new_policy.Set("foo", |
| 83 POLICY_LEVEL_MANDATORY, | 88 POLICY_LEVEL_MANDATORY, |
| 84 POLICY_SCOPE_USER, | 89 POLICY_SCOPE_USER, |
| 90 POLICY_SOURCE_CLOUD, |
| 85 new base::FundamentalValue(14), | 91 new base::FundamentalValue(14), |
| 86 NULL); | 92 NULL); |
| 87 provider_->UpdateChromePolicy(new_policy); | 93 provider_->UpdateChromePolicy(new_policy); |
| 88 observer_invoked_ = true; | 94 observer_invoked_ = true; |
| 89 } | 95 } |
| 90 | 96 |
| 91 bool observer_invoked() const { return observer_invoked_; } | 97 bool observer_invoked() const { return observer_invoked_; } |
| 92 | 98 |
| 93 private: | 99 private: |
| 94 MockConfigurationPolicyProvider* provider_; | 100 MockConfigurationPolicyProvider* provider_; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 108 EXPECT_CALL(provider2_, IsInitializationComplete(_)) | 114 EXPECT_CALL(provider2_, IsInitializationComplete(_)) |
| 109 .WillRepeatedly(Return(true)); | 115 .WillRepeatedly(Return(true)); |
| 110 | 116 |
| 111 provider0_.Init(); | 117 provider0_.Init(); |
| 112 provider1_.Init(); | 118 provider1_.Init(); |
| 113 provider2_.Init(); | 119 provider2_.Init(); |
| 114 | 120 |
| 115 policy0_.Set("pre", | 121 policy0_.Set("pre", |
| 116 POLICY_LEVEL_MANDATORY, | 122 POLICY_LEVEL_MANDATORY, |
| 117 POLICY_SCOPE_USER, | 123 POLICY_SCOPE_USER, |
| 124 POLICY_SOURCE_ENTERPRISE_DEFAULT, |
| 118 new base::FundamentalValue(13), | 125 new base::FundamentalValue(13), |
| 119 NULL); | 126 NULL); |
| 120 provider0_.UpdateChromePolicy(policy0_); | 127 provider0_.UpdateChromePolicy(policy0_); |
| 121 | 128 |
| 122 PolicyServiceImpl::Providers providers; | 129 PolicyServiceImpl::Providers providers; |
| 123 providers.push_back(&provider0_); | 130 providers.push_back(&provider0_); |
| 124 providers.push_back(&provider1_); | 131 providers.push_back(&provider1_); |
| 125 providers.push_back(&provider2_); | 132 providers.push_back(&provider2_); |
| 126 policy_service_.reset(new PolicyServiceImpl(providers)); | 133 policy_service_.reset(new PolicyServiceImpl(providers)); |
| 127 } | 134 } |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 | 167 |
| 161 private: | 168 private: |
| 162 DISALLOW_COPY_AND_ASSIGN(PolicyServiceTest); | 169 DISALLOW_COPY_AND_ASSIGN(PolicyServiceTest); |
| 163 }; | 170 }; |
| 164 | 171 |
| 165 TEST_F(PolicyServiceTest, LoadsPoliciesBeforeProvidersRefresh) { | 172 TEST_F(PolicyServiceTest, LoadsPoliciesBeforeProvidersRefresh) { |
| 166 PolicyMap expected; | 173 PolicyMap expected; |
| 167 expected.Set("pre", | 174 expected.Set("pre", |
| 168 POLICY_LEVEL_MANDATORY, | 175 POLICY_LEVEL_MANDATORY, |
| 169 POLICY_SCOPE_USER, | 176 POLICY_SCOPE_USER, |
| 177 POLICY_SOURCE_ENTERPRISE_DEFAULT, |
| 170 new base::FundamentalValue(13), | 178 new base::FundamentalValue(13), |
| 171 NULL); | 179 NULL); |
| 172 EXPECT_TRUE(VerifyPolicies( | 180 EXPECT_TRUE(VerifyPolicies( |
| 173 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected)); | 181 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected)); |
| 174 } | 182 } |
| 175 | 183 |
| 176 TEST_F(PolicyServiceTest, NotifyObservers) { | 184 TEST_F(PolicyServiceTest, NotifyObservers) { |
| 177 MockPolicyServiceObserver observer; | 185 MockPolicyServiceObserver observer; |
| 178 policy_service_->AddObserver(POLICY_DOMAIN_CHROME, &observer); | 186 policy_service_->AddObserver(POLICY_DOMAIN_CHROME, &observer); |
| 179 | 187 |
| 180 PolicyMap expectedPrevious; | 188 PolicyMap expectedPrevious; |
| 181 expectedPrevious.Set("pre", | 189 expectedPrevious.Set("pre", |
| 182 POLICY_LEVEL_MANDATORY, | 190 POLICY_LEVEL_MANDATORY, |
| 183 POLICY_SCOPE_USER, | 191 POLICY_SCOPE_USER, |
| 192 POLICY_SOURCE_ENTERPRISE_DEFAULT, |
| 184 new base::FundamentalValue(13), | 193 new base::FundamentalValue(13), |
| 185 NULL); | 194 NULL); |
| 186 | 195 |
| 187 PolicyMap expectedCurrent; | 196 PolicyMap expectedCurrent; |
| 188 expectedCurrent.CopyFrom(expectedPrevious); | 197 expectedCurrent.CopyFrom(expectedPrevious); |
| 189 expectedCurrent.Set("aaa", | 198 expectedCurrent.Set("aaa", |
| 190 POLICY_LEVEL_MANDATORY, | 199 POLICY_LEVEL_MANDATORY, |
| 191 POLICY_SCOPE_USER, | 200 POLICY_SCOPE_USER, |
| 201 POLICY_SOURCE_CLOUD, |
| 192 new base::FundamentalValue(123), | 202 new base::FundamentalValue(123), |
| 193 NULL); | 203 NULL); |
| 194 policy0_.Set("aaa", | 204 policy0_.Set("aaa", |
| 195 POLICY_LEVEL_MANDATORY, | 205 POLICY_LEVEL_MANDATORY, |
| 196 POLICY_SCOPE_USER, | 206 POLICY_SCOPE_USER, |
| 207 POLICY_SOURCE_CLOUD, |
| 197 new base::FundamentalValue(123), | 208 new base::FundamentalValue(123), |
| 198 NULL); | 209 NULL); |
| 199 EXPECT_CALL(observer, OnPolicyUpdated(PolicyNamespace(POLICY_DOMAIN_CHROME, | 210 EXPECT_CALL(observer, OnPolicyUpdated(PolicyNamespace(POLICY_DOMAIN_CHROME, |
| 200 std::string()), | 211 std::string()), |
| 201 PolicyEquals(&expectedPrevious), | 212 PolicyEquals(&expectedPrevious), |
| 202 PolicyEquals(&expectedCurrent))); | 213 PolicyEquals(&expectedCurrent))); |
| 203 provider0_.UpdateChromePolicy(policy0_); | 214 provider0_.UpdateChromePolicy(policy0_); |
| 204 Mock::VerifyAndClearExpectations(&observer); | 215 Mock::VerifyAndClearExpectations(&observer); |
| 205 | 216 |
| 206 // No changes. | 217 // No changes. |
| 207 EXPECT_CALL(observer, OnPolicyUpdated(_, _, _)).Times(0); | 218 EXPECT_CALL(observer, OnPolicyUpdated(_, _, _)).Times(0); |
| 208 provider0_.UpdateChromePolicy(policy0_); | 219 provider0_.UpdateChromePolicy(policy0_); |
| 209 Mock::VerifyAndClearExpectations(&observer); | 220 Mock::VerifyAndClearExpectations(&observer); |
| 210 EXPECT_TRUE(VerifyPolicies( | 221 EXPECT_TRUE(VerifyPolicies( |
| 211 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expectedCurrent)); | 222 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expectedCurrent)); |
| 212 | 223 |
| 213 // New policy. | 224 // New policy. |
| 214 expectedPrevious.CopyFrom(expectedCurrent); | 225 expectedPrevious.CopyFrom(expectedCurrent); |
| 215 expectedCurrent.Set("bbb", | 226 expectedCurrent.Set("bbb", |
| 216 POLICY_LEVEL_MANDATORY, | 227 POLICY_LEVEL_MANDATORY, |
| 217 POLICY_SCOPE_USER, | 228 POLICY_SCOPE_USER, |
| 229 POLICY_SOURCE_CLOUD, |
| 218 new base::FundamentalValue(456), | 230 new base::FundamentalValue(456), |
| 219 NULL); | 231 NULL); |
| 220 policy0_.Set("bbb", | 232 policy0_.Set("bbb", |
| 221 POLICY_LEVEL_MANDATORY, | 233 POLICY_LEVEL_MANDATORY, |
| 222 POLICY_SCOPE_USER, | 234 POLICY_SCOPE_USER, |
| 235 POLICY_SOURCE_CLOUD, |
| 223 new base::FundamentalValue(456), | 236 new base::FundamentalValue(456), |
| 224 NULL); | 237 NULL); |
| 225 EXPECT_CALL(observer, OnPolicyUpdated(PolicyNamespace(POLICY_DOMAIN_CHROME, | 238 EXPECT_CALL(observer, OnPolicyUpdated(PolicyNamespace(POLICY_DOMAIN_CHROME, |
| 226 std::string()), | 239 std::string()), |
| 227 PolicyEquals(&expectedPrevious), | 240 PolicyEquals(&expectedPrevious), |
| 228 PolicyEquals(&expectedCurrent))); | 241 PolicyEquals(&expectedCurrent))); |
| 229 provider0_.UpdateChromePolicy(policy0_); | 242 provider0_.UpdateChromePolicy(policy0_); |
| 230 Mock::VerifyAndClearExpectations(&observer); | 243 Mock::VerifyAndClearExpectations(&observer); |
| 231 | 244 |
| 232 // Removed policy. | 245 // Removed policy. |
| 233 expectedPrevious.CopyFrom(expectedCurrent); | 246 expectedPrevious.CopyFrom(expectedCurrent); |
| 234 expectedCurrent.Erase("bbb"); | 247 expectedCurrent.Erase("bbb"); |
| 235 policy0_.Erase("bbb"); | 248 policy0_.Erase("bbb"); |
| 236 EXPECT_CALL(observer, OnPolicyUpdated(PolicyNamespace(POLICY_DOMAIN_CHROME, | 249 EXPECT_CALL(observer, OnPolicyUpdated(PolicyNamespace(POLICY_DOMAIN_CHROME, |
| 237 std::string()), | 250 std::string()), |
| 238 PolicyEquals(&expectedPrevious), | 251 PolicyEquals(&expectedPrevious), |
| 239 PolicyEquals(&expectedCurrent))); | 252 PolicyEquals(&expectedCurrent))); |
| 240 provider0_.UpdateChromePolicy(policy0_); | 253 provider0_.UpdateChromePolicy(policy0_); |
| 241 Mock::VerifyAndClearExpectations(&observer); | 254 Mock::VerifyAndClearExpectations(&observer); |
| 242 | 255 |
| 243 // Changed policy. | 256 // Changed policy. |
| 244 expectedPrevious.CopyFrom(expectedCurrent); | 257 expectedPrevious.CopyFrom(expectedCurrent); |
| 245 expectedCurrent.Set("aaa", | 258 expectedCurrent.Set("aaa", |
| 246 POLICY_LEVEL_MANDATORY, | 259 POLICY_LEVEL_MANDATORY, |
| 247 POLICY_SCOPE_USER, | 260 POLICY_SCOPE_USER, |
| 261 POLICY_SOURCE_CLOUD, |
| 248 new base::FundamentalValue(789), | 262 new base::FundamentalValue(789), |
| 249 NULL); | 263 NULL); |
| 250 policy0_.Set("aaa", | 264 policy0_.Set("aaa", |
| 251 POLICY_LEVEL_MANDATORY, | 265 POLICY_LEVEL_MANDATORY, |
| 252 POLICY_SCOPE_USER, | 266 POLICY_SCOPE_USER, |
| 267 POLICY_SOURCE_CLOUD, |
| 253 new base::FundamentalValue(789), | 268 new base::FundamentalValue(789), |
| 254 NULL); | 269 NULL); |
| 255 | 270 |
| 256 EXPECT_CALL(observer, OnPolicyUpdated(PolicyNamespace(POLICY_DOMAIN_CHROME, | 271 EXPECT_CALL(observer, OnPolicyUpdated(PolicyNamespace(POLICY_DOMAIN_CHROME, |
| 257 std::string()), | 272 std::string()), |
| 258 PolicyEquals(&expectedPrevious), | 273 PolicyEquals(&expectedPrevious), |
| 259 PolicyEquals(&expectedCurrent))); | 274 PolicyEquals(&expectedCurrent))); |
| 260 provider0_.UpdateChromePolicy(policy0_); | 275 provider0_.UpdateChromePolicy(policy0_); |
| 261 Mock::VerifyAndClearExpectations(&observer); | 276 Mock::VerifyAndClearExpectations(&observer); |
| 262 | 277 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 276 const std::string kExtension2("extension-2"); | 291 const std::string kExtension2("extension-2"); |
| 277 MockPolicyServiceObserver chrome_observer; | 292 MockPolicyServiceObserver chrome_observer; |
| 278 MockPolicyServiceObserver extension_observer; | 293 MockPolicyServiceObserver extension_observer; |
| 279 policy_service_->AddObserver(POLICY_DOMAIN_CHROME, &chrome_observer); | 294 policy_service_->AddObserver(POLICY_DOMAIN_CHROME, &chrome_observer); |
| 280 policy_service_->AddObserver(POLICY_DOMAIN_EXTENSIONS, &extension_observer); | 295 policy_service_->AddObserver(POLICY_DOMAIN_EXTENSIONS, &extension_observer); |
| 281 | 296 |
| 282 PolicyMap previous_policy_map; | 297 PolicyMap previous_policy_map; |
| 283 previous_policy_map.Set("pre", | 298 previous_policy_map.Set("pre", |
| 284 POLICY_LEVEL_MANDATORY, | 299 POLICY_LEVEL_MANDATORY, |
| 285 POLICY_SCOPE_USER, | 300 POLICY_SCOPE_USER, |
| 301 POLICY_SOURCE_ENTERPRISE_DEFAULT, |
| 286 new base::FundamentalValue(13), | 302 new base::FundamentalValue(13), |
| 287 NULL); | 303 NULL); |
| 288 PolicyMap policy_map; | 304 PolicyMap policy_map; |
| 289 policy_map.CopyFrom(previous_policy_map); | 305 policy_map.CopyFrom(previous_policy_map); |
| 290 policy_map.Set("policy", | 306 policy_map.Set("policy", |
| 291 POLICY_LEVEL_MANDATORY, | 307 POLICY_LEVEL_MANDATORY, |
| 292 POLICY_SCOPE_USER, | 308 POLICY_SCOPE_USER, |
| 309 POLICY_SOURCE_CLOUD, |
| 293 new base::StringValue("value"), | 310 new base::StringValue("value"), |
| 294 NULL); | 311 NULL); |
| 295 | 312 |
| 296 scoped_ptr<PolicyBundle> bundle(new PolicyBundle()); | 313 scoped_ptr<PolicyBundle> bundle(new PolicyBundle()); |
| 297 // The initial setup includes a policy for chrome that is now changing. | 314 // The initial setup includes a policy for chrome that is now changing. |
| 298 bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) | 315 bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) |
| 299 .CopyFrom(policy_map); | 316 .CopyFrom(policy_map); |
| 300 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension0)) | 317 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension0)) |
| 301 .CopyFrom(policy_map); | 318 .CopyFrom(policy_map); |
| 302 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension1)) | 319 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension1)) |
| (...skipping 22 matching lines...) Expand all Loading... |
| 325 | 342 |
| 326 // Chrome policy stays the same, kExtension0 is gone, kExtension1 changes, | 343 // Chrome policy stays the same, kExtension0 is gone, kExtension1 changes, |
| 327 // and kExtension2 is new. | 344 // and kExtension2 is new. |
| 328 previous_policy_map.CopyFrom(policy_map); | 345 previous_policy_map.CopyFrom(policy_map); |
| 329 bundle.reset(new PolicyBundle()); | 346 bundle.reset(new PolicyBundle()); |
| 330 bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) | 347 bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) |
| 331 .CopyFrom(policy_map); | 348 .CopyFrom(policy_map); |
| 332 policy_map.Set("policy", | 349 policy_map.Set("policy", |
| 333 POLICY_LEVEL_MANDATORY, | 350 POLICY_LEVEL_MANDATORY, |
| 334 POLICY_SCOPE_USER, | 351 POLICY_SCOPE_USER, |
| 352 POLICY_SOURCE_CLOUD, |
| 335 new base::StringValue("another value"), | 353 new base::StringValue("another value"), |
| 336 NULL); | 354 NULL); |
| 337 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension1)) | 355 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension1)) |
| 338 .CopyFrom(policy_map); | 356 .CopyFrom(policy_map); |
| 339 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension2)) | 357 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension2)) |
| 340 .CopyFrom(policy_map); | 358 .CopyFrom(policy_map); |
| 341 | 359 |
| 342 EXPECT_CALL(chrome_observer, OnPolicyUpdated(_, _, _)).Times(0); | 360 EXPECT_CALL(chrome_observer, OnPolicyUpdated(_, _, _)).Times(0); |
| 343 EXPECT_CALL( | 361 EXPECT_CALL( |
| 344 extension_observer, | 362 extension_observer, |
| (...skipping 19 matching lines...) Expand all Loading... |
| 364 policy_service_->RemoveObserver(POLICY_DOMAIN_EXTENSIONS, | 382 policy_service_->RemoveObserver(POLICY_DOMAIN_EXTENSIONS, |
| 365 &extension_observer); | 383 &extension_observer); |
| 366 } | 384 } |
| 367 | 385 |
| 368 TEST_F(PolicyServiceTest, ObserverChangesPolicy) { | 386 TEST_F(PolicyServiceTest, ObserverChangesPolicy) { |
| 369 ChangePolicyObserver observer(&provider0_); | 387 ChangePolicyObserver observer(&provider0_); |
| 370 policy_service_->AddObserver(POLICY_DOMAIN_CHROME, &observer); | 388 policy_service_->AddObserver(POLICY_DOMAIN_CHROME, &observer); |
| 371 policy0_.Set("aaa", | 389 policy0_.Set("aaa", |
| 372 POLICY_LEVEL_MANDATORY, | 390 POLICY_LEVEL_MANDATORY, |
| 373 POLICY_SCOPE_USER, | 391 POLICY_SCOPE_USER, |
| 392 POLICY_SOURCE_CLOUD, |
| 374 new base::FundamentalValue(123), | 393 new base::FundamentalValue(123), |
| 375 NULL); | 394 NULL); |
| 376 policy0_.Set("bbb", | 395 policy0_.Set("bbb", |
| 377 POLICY_LEVEL_MANDATORY, | 396 POLICY_LEVEL_MANDATORY, |
| 378 POLICY_SCOPE_USER, | 397 POLICY_SCOPE_USER, |
| 398 POLICY_SOURCE_CLOUD, |
| 379 new base::FundamentalValue(1234), | 399 new base::FundamentalValue(1234), |
| 380 NULL); | 400 NULL); |
| 381 // Should not crash. | 401 // Should not crash. |
| 382 provider0_.UpdateChromePolicy(policy0_); | 402 provider0_.UpdateChromePolicy(policy0_); |
| 383 policy_service_->RemoveObserver(POLICY_DOMAIN_CHROME, &observer); | 403 policy_service_->RemoveObserver(POLICY_DOMAIN_CHROME, &observer); |
| 384 EXPECT_TRUE(observer.observer_invoked()); | 404 EXPECT_TRUE(observer.observer_invoked()); |
| 385 } | 405 } |
| 386 | 406 |
| 387 TEST_F(PolicyServiceTest, Priorities) { | 407 TEST_F(PolicyServiceTest, Priorities) { |
| 388 PolicyMap expected; | 408 PolicyMap expected; |
| 389 expected.Set("pre", | 409 expected.Set("pre", |
| 390 POLICY_LEVEL_MANDATORY, | 410 POLICY_LEVEL_MANDATORY, |
| 391 POLICY_SCOPE_USER, | 411 POLICY_SCOPE_USER, |
| 412 POLICY_SOURCE_ENTERPRISE_DEFAULT, |
| 392 new base::FundamentalValue(13), | 413 new base::FundamentalValue(13), |
| 393 NULL); | 414 NULL); |
| 394 expected.Set("aaa", | 415 expected.Set("aaa", |
| 395 POLICY_LEVEL_MANDATORY, | 416 POLICY_LEVEL_MANDATORY, |
| 396 POLICY_SCOPE_USER, | 417 POLICY_SCOPE_USER, |
| 418 POLICY_SOURCE_CLOUD, |
| 397 new base::FundamentalValue(0), | 419 new base::FundamentalValue(0), |
| 398 NULL); | 420 NULL); |
| 399 policy0_.Set("aaa", | 421 policy0_.Set("aaa", |
| 400 POLICY_LEVEL_MANDATORY, | 422 POLICY_LEVEL_MANDATORY, |
| 401 POLICY_SCOPE_USER, | 423 POLICY_SCOPE_USER, |
| 424 POLICY_SOURCE_CLOUD, |
| 402 new base::FundamentalValue(0), | 425 new base::FundamentalValue(0), |
| 403 NULL); | 426 NULL); |
| 404 policy1_.Set("aaa", | 427 policy1_.Set("aaa", |
| 405 POLICY_LEVEL_MANDATORY, | 428 POLICY_LEVEL_MANDATORY, |
| 406 POLICY_SCOPE_USER, | 429 POLICY_SCOPE_USER, |
| 430 POLICY_SOURCE_CLOUD, |
| 407 new base::FundamentalValue(1), | 431 new base::FundamentalValue(1), |
| 408 NULL); | 432 NULL); |
| 409 policy2_.Set("aaa", | 433 policy2_.Set("aaa", |
| 410 POLICY_LEVEL_MANDATORY, | 434 POLICY_LEVEL_MANDATORY, |
| 411 POLICY_SCOPE_USER, | 435 POLICY_SCOPE_USER, |
| 436 POLICY_SOURCE_CLOUD, |
| 412 new base::FundamentalValue(2), | 437 new base::FundamentalValue(2), |
| 413 NULL); | 438 NULL); |
| 414 provider0_.UpdateChromePolicy(policy0_); | 439 provider0_.UpdateChromePolicy(policy0_); |
| 415 provider1_.UpdateChromePolicy(policy1_); | 440 provider1_.UpdateChromePolicy(policy1_); |
| 416 provider2_.UpdateChromePolicy(policy2_); | 441 provider2_.UpdateChromePolicy(policy2_); |
| 417 EXPECT_TRUE(VerifyPolicies( | 442 EXPECT_TRUE(VerifyPolicies( |
| 418 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected)); | 443 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected)); |
| 419 | 444 |
| 420 expected.Set("aaa", | 445 expected.Set("aaa", |
| 421 POLICY_LEVEL_MANDATORY, | 446 POLICY_LEVEL_MANDATORY, |
| 422 POLICY_SCOPE_USER, | 447 POLICY_SCOPE_USER, |
| 448 POLICY_SOURCE_CLOUD, |
| 423 new base::FundamentalValue(1), | 449 new base::FundamentalValue(1), |
| 424 NULL); | 450 NULL); |
| 425 policy0_.Erase("aaa"); | 451 policy0_.Erase("aaa"); |
| 426 provider0_.UpdateChromePolicy(policy0_); | 452 provider0_.UpdateChromePolicy(policy0_); |
| 427 EXPECT_TRUE(VerifyPolicies( | 453 EXPECT_TRUE(VerifyPolicies( |
| 428 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected)); | 454 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected)); |
| 429 | 455 |
| 430 expected.Set("aaa", | 456 expected.Set("aaa", |
| 431 POLICY_LEVEL_MANDATORY, | 457 POLICY_LEVEL_MANDATORY, |
| 432 POLICY_SCOPE_USER, | 458 POLICY_SCOPE_USER, |
| 459 POLICY_SOURCE_CLOUD, |
| 433 new base::FundamentalValue(2), | 460 new base::FundamentalValue(2), |
| 434 NULL); | 461 NULL); |
| 435 policy1_.Set("aaa", | 462 policy1_.Set("aaa", |
| 436 POLICY_LEVEL_RECOMMENDED, | 463 POLICY_LEVEL_RECOMMENDED, |
| 437 POLICY_SCOPE_USER, | 464 POLICY_SCOPE_USER, |
| 465 POLICY_SOURCE_CLOUD, |
| 438 new base::FundamentalValue(1), | 466 new base::FundamentalValue(1), |
| 439 NULL); | 467 NULL); |
| 440 provider1_.UpdateChromePolicy(policy1_); | 468 provider1_.UpdateChromePolicy(policy1_); |
| 441 EXPECT_TRUE(VerifyPolicies( | 469 EXPECT_TRUE(VerifyPolicies( |
| 442 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected)); | 470 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected)); |
| 443 } | 471 } |
| 444 | 472 |
| 445 TEST_F(PolicyServiceTest, PolicyChangeRegistrar) { | 473 TEST_F(PolicyServiceTest, PolicyChangeRegistrar) { |
| 446 scoped_ptr<PolicyChangeRegistrar> registrar(new PolicyChangeRegistrar( | 474 scoped_ptr<PolicyChangeRegistrar> registrar(new PolicyChangeRegistrar( |
| 447 policy_service_.get(), | 475 policy_service_.get(), |
| 448 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))); | 476 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))); |
| 449 | 477 |
| 450 // Starting to observe existing policies doesn't trigger a notification. | 478 // Starting to observe existing policies doesn't trigger a notification. |
| 451 EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0); | 479 EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0); |
| 452 registrar->Observe("pre", base::Bind( | 480 registrar->Observe("pre", base::Bind( |
| 453 &PolicyServiceTest::OnPolicyValueUpdated, | 481 &PolicyServiceTest::OnPolicyValueUpdated, |
| 454 base::Unretained(this))); | 482 base::Unretained(this))); |
| 455 registrar->Observe("aaa", base::Bind( | 483 registrar->Observe("aaa", base::Bind( |
| 456 &PolicyServiceTest::OnPolicyValueUpdated, | 484 &PolicyServiceTest::OnPolicyValueUpdated, |
| 457 base::Unretained(this))); | 485 base::Unretained(this))); |
| 458 RunUntilIdle(); | 486 RunUntilIdle(); |
| 459 Mock::VerifyAndClearExpectations(this); | 487 Mock::VerifyAndClearExpectations(this); |
| 460 | 488 |
| 461 // Changing it now triggers a notification. | 489 // Changing it now triggers a notification. |
| 462 base::FundamentalValue kValue0(0); | 490 base::FundamentalValue kValue0(0); |
| 463 EXPECT_CALL(*this, OnPolicyValueUpdated(NULL, ValueEquals(&kValue0))); | 491 EXPECT_CALL(*this, OnPolicyValueUpdated(NULL, ValueEquals(&kValue0))); |
| 464 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 492 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 465 kValue0.DeepCopy(), NULL); | 493 POLICY_SOURCE_CLOUD, kValue0.DeepCopy(), nullptr); |
| 466 provider0_.UpdateChromePolicy(policy0_); | 494 provider0_.UpdateChromePolicy(policy0_); |
| 467 Mock::VerifyAndClearExpectations(this); | 495 Mock::VerifyAndClearExpectations(this); |
| 468 | 496 |
| 469 // Changing other values doesn't trigger a notification. | 497 // Changing other values doesn't trigger a notification. |
| 470 EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0); | 498 EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0); |
| 471 policy0_.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 499 policy0_.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 472 kValue0.DeepCopy(), NULL); | 500 POLICY_SOURCE_CLOUD, kValue0.DeepCopy(), nullptr); |
| 473 provider0_.UpdateChromePolicy(policy0_); | 501 provider0_.UpdateChromePolicy(policy0_); |
| 474 Mock::VerifyAndClearExpectations(this); | 502 Mock::VerifyAndClearExpectations(this); |
| 475 | 503 |
| 476 // Modifying the value triggers a notification. | 504 // Modifying the value triggers a notification. |
| 477 base::FundamentalValue kValue1(1); | 505 base::FundamentalValue kValue1(1); |
| 478 EXPECT_CALL(*this, OnPolicyValueUpdated(ValueEquals(&kValue0), | 506 EXPECT_CALL(*this, OnPolicyValueUpdated(ValueEquals(&kValue0), |
| 479 ValueEquals(&kValue1))); | 507 ValueEquals(&kValue1))); |
| 480 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 508 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 481 kValue1.DeepCopy(), NULL); | 509 POLICY_SOURCE_CLOUD, kValue1.DeepCopy(), nullptr); |
| 482 provider0_.UpdateChromePolicy(policy0_); | 510 provider0_.UpdateChromePolicy(policy0_); |
| 483 Mock::VerifyAndClearExpectations(this); | 511 Mock::VerifyAndClearExpectations(this); |
| 484 | 512 |
| 485 // Removing the value triggers a notification. | 513 // Removing the value triggers a notification. |
| 486 EXPECT_CALL(*this, OnPolicyValueUpdated(ValueEquals(&kValue1), NULL)); | 514 EXPECT_CALL(*this, OnPolicyValueUpdated(ValueEquals(&kValue1), NULL)); |
| 487 policy0_.Erase("aaa"); | 515 policy0_.Erase("aaa"); |
| 488 provider0_.UpdateChromePolicy(policy0_); | 516 provider0_.UpdateChromePolicy(policy0_); |
| 489 Mock::VerifyAndClearExpectations(this); | 517 Mock::VerifyAndClearExpectations(this); |
| 490 | 518 |
| 491 // No more notifications after destroying the registrar. | 519 // No more notifications after destroying the registrar. |
| 492 EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0); | 520 EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0); |
| 493 registrar.reset(); | 521 registrar.reset(); |
| 494 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 522 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 495 kValue1.DeepCopy(), NULL); | 523 POLICY_SOURCE_CLOUD, kValue1.DeepCopy(), nullptr); |
| 496 policy0_.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 524 policy0_.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 497 kValue1.DeepCopy(), NULL); | 525 POLICY_SOURCE_ENTERPRISE_DEFAULT, kValue1.DeepCopy(), nullptr); |
| 498 provider0_.UpdateChromePolicy(policy0_); | 526 provider0_.UpdateChromePolicy(policy0_); |
| 499 Mock::VerifyAndClearExpectations(this); | 527 Mock::VerifyAndClearExpectations(this); |
| 500 } | 528 } |
| 501 | 529 |
| 502 TEST_F(PolicyServiceTest, RefreshPolicies) { | 530 TEST_F(PolicyServiceTest, RefreshPolicies) { |
| 503 EXPECT_CALL(provider0_, RefreshPolicies()).Times(AnyNumber()); | 531 EXPECT_CALL(provider0_, RefreshPolicies()).Times(AnyNumber()); |
| 504 EXPECT_CALL(provider1_, RefreshPolicies()).Times(AnyNumber()); | 532 EXPECT_CALL(provider1_, RefreshPolicies()).Times(AnyNumber()); |
| 505 EXPECT_CALL(provider2_, RefreshPolicies()).Times(AnyNumber()); | 533 EXPECT_CALL(provider2_, RefreshPolicies()).Times(AnyNumber()); |
| 506 | 534 |
| 507 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); | 535 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); |
| 508 policy_service_->RefreshPolicies(base::Bind( | 536 policy_service_->RefreshPolicies(base::Bind( |
| 509 &PolicyServiceTest::OnPolicyRefresh, | 537 &PolicyServiceTest::OnPolicyRefresh, |
| 510 base::Unretained(this))); | 538 base::Unretained(this))); |
| 511 // Let any queued observer tasks run. | 539 // Let any queued observer tasks run. |
| 512 RunUntilIdle(); | 540 RunUntilIdle(); |
| 513 Mock::VerifyAndClearExpectations(this); | 541 Mock::VerifyAndClearExpectations(this); |
| 514 | 542 |
| 515 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); | 543 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); |
| 516 base::FundamentalValue kValue0(0); | 544 base::FundamentalValue kValue0(0); |
| 517 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 545 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 518 kValue0.DeepCopy(), NULL); | 546 POLICY_SOURCE_CLOUD, kValue0.DeepCopy(), nullptr); |
| 519 provider0_.UpdateChromePolicy(policy0_); | 547 provider0_.UpdateChromePolicy(policy0_); |
| 520 Mock::VerifyAndClearExpectations(this); | 548 Mock::VerifyAndClearExpectations(this); |
| 521 | 549 |
| 522 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); | 550 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); |
| 523 base::FundamentalValue kValue1(1); | 551 base::FundamentalValue kValue1(1); |
| 524 policy1_.Set("aaa", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | 552 policy1_.Set("aaa", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, |
| 525 kValue1.DeepCopy(), NULL); | 553 POLICY_SOURCE_CLOUD, kValue1.DeepCopy(), nullptr); |
| 526 provider1_.UpdateChromePolicy(policy1_); | 554 provider1_.UpdateChromePolicy(policy1_); |
| 527 Mock::VerifyAndClearExpectations(this); | 555 Mock::VerifyAndClearExpectations(this); |
| 528 | 556 |
| 529 // A provider can refresh more than once after a RefreshPolicies call, but | 557 // A provider can refresh more than once after a RefreshPolicies call, but |
| 530 // OnPolicyRefresh should be triggered only after all providers are | 558 // OnPolicyRefresh should be triggered only after all providers are |
| 531 // refreshed. | 559 // refreshed. |
| 532 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); | 560 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); |
| 533 policy1_.Set("bbb", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | 561 policy1_.Set("bbb", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, |
| 534 kValue1.DeepCopy(), NULL); | 562 POLICY_SOURCE_CLOUD, kValue1.DeepCopy(), nullptr); |
| 535 provider1_.UpdateChromePolicy(policy1_); | 563 provider1_.UpdateChromePolicy(policy1_); |
| 536 Mock::VerifyAndClearExpectations(this); | 564 Mock::VerifyAndClearExpectations(this); |
| 537 | 565 |
| 538 // If another RefreshPolicies() call happens while waiting for a previous | 566 // If another RefreshPolicies() call happens while waiting for a previous |
| 539 // one to complete, then all providers must refresh again. | 567 // one to complete, then all providers must refresh again. |
| 540 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); | 568 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); |
| 541 policy_service_->RefreshPolicies(base::Bind( | 569 policy_service_->RefreshPolicies(base::Bind( |
| 542 &PolicyServiceTest::OnPolicyRefresh, | 570 &PolicyServiceTest::OnPolicyRefresh, |
| 543 base::Unretained(this))); | 571 base::Unretained(this))); |
| 544 RunUntilIdle(); | 572 RunUntilIdle(); |
| 545 Mock::VerifyAndClearExpectations(this); | 573 Mock::VerifyAndClearExpectations(this); |
| 546 | 574 |
| 547 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); | 575 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0); |
| 548 policy2_.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 576 policy2_.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 549 kValue0.DeepCopy(), NULL); | 577 POLICY_SOURCE_CLOUD, kValue0.DeepCopy(), nullptr); |
| 550 provider2_.UpdateChromePolicy(policy2_); | 578 provider2_.UpdateChromePolicy(policy2_); |
| 551 Mock::VerifyAndClearExpectations(this); | 579 Mock::VerifyAndClearExpectations(this); |
| 552 | 580 |
| 553 // Providers 0 and 1 must reload again. | 581 // Providers 0 and 1 must reload again. |
| 554 EXPECT_CALL(*this, OnPolicyRefresh()).Times(2); | 582 EXPECT_CALL(*this, OnPolicyRefresh()).Times(2); |
| 555 base::FundamentalValue kValue2(2); | 583 base::FundamentalValue kValue2(2); |
| 556 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 584 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
| 557 kValue2.DeepCopy(), NULL); | 585 POLICY_SOURCE_CLOUD, kValue2.DeepCopy(), nullptr); |
| 558 provider0_.UpdateChromePolicy(policy0_); | 586 provider0_.UpdateChromePolicy(policy0_); |
| 559 provider1_.UpdateChromePolicy(policy1_); | 587 provider1_.UpdateChromePolicy(policy1_); |
| 560 Mock::VerifyAndClearExpectations(this); | 588 Mock::VerifyAndClearExpectations(this); |
| 561 | 589 |
| 562 const PolicyMap& policies = policy_service_->GetPolicies( | 590 const PolicyMap& policies = policy_service_->GetPolicies( |
| 563 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())); | 591 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())); |
| 564 EXPECT_TRUE(base::Value::Equals(&kValue2, policies.GetValue("aaa"))); | 592 EXPECT_TRUE(base::Value::Equals(&kValue2, policies.GetValue("aaa"))); |
| 565 EXPECT_TRUE(base::Value::Equals(&kValue0, policies.GetValue("bbb"))); | 593 EXPECT_TRUE(base::Value::Equals(&kValue0, policies.GetValue("bbb"))); |
| 566 } | 594 } |
| 567 | 595 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 581 provider1_.UpdatePolicy(bundle1.Pass()); | 609 provider1_.UpdatePolicy(bundle1.Pass()); |
| 582 provider2_.UpdatePolicy(bundle2.Pass()); | 610 provider2_.UpdatePolicy(bundle2.Pass()); |
| 583 RunUntilIdle(); | 611 RunUntilIdle(); |
| 584 | 612 |
| 585 PolicyMap expected; | 613 PolicyMap expected; |
| 586 // For policies of the same level and scope, the first provider takes | 614 // For policies of the same level and scope, the first provider takes |
| 587 // precedence, on every namespace. | 615 // precedence, on every namespace. |
| 588 expected.Set(kSameLevelPolicy, | 616 expected.Set(kSameLevelPolicy, |
| 589 POLICY_LEVEL_MANDATORY, | 617 POLICY_LEVEL_MANDATORY, |
| 590 POLICY_SCOPE_USER, | 618 POLICY_SCOPE_USER, |
| 619 POLICY_SOURCE_ENTERPRISE_DEFAULT, |
| 591 new base::StringValue("bundle0"), | 620 new base::StringValue("bundle0"), |
| 592 NULL); | 621 NULL); |
| 593 // For policies with different levels and scopes, the highest priority | 622 // For policies with different levels and scopes, the highest priority |
| 594 // level/scope combination takes precedence, on every namespace. | 623 // level/scope combination takes precedence, on every namespace. |
| 595 expected.Set(kDiffLevelPolicy, | 624 expected.Set(kDiffLevelPolicy, |
| 596 POLICY_LEVEL_MANDATORY, | 625 POLICY_LEVEL_MANDATORY, |
| 597 POLICY_SCOPE_MACHINE, | 626 POLICY_SCOPE_MACHINE, |
| 627 POLICY_SOURCE_PLATFORM, |
| 598 new base::StringValue("bundle2"), | 628 new base::StringValue("bundle2"), |
| 599 NULL); | 629 NULL); |
| 600 EXPECT_TRUE(policy_service_->GetPolicies( | 630 EXPECT_TRUE(policy_service_->GetPolicies( |
| 601 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())).Equals(expected)); | 631 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())).Equals(expected)); |
| 602 EXPECT_TRUE(policy_service_->GetPolicies( | 632 EXPECT_TRUE(policy_service_->GetPolicies( |
| 603 PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension)).Equals(expected)); | 633 PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension)).Equals(expected)); |
| 604 } | 634 } |
| 605 | 635 |
| 606 TEST_F(PolicyServiceTest, IsInitializationComplete) { | 636 TEST_F(PolicyServiceTest, IsInitializationComplete) { |
| 607 // |provider0| has all domains initialized. | 637 // |provider0| has all domains initialized. |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 687 const PolicyNamespace chrome_namespace(POLICY_DOMAIN_CHROME, std::string()); | 717 const PolicyNamespace chrome_namespace(POLICY_DOMAIN_CHROME, std::string()); |
| 688 const PolicyNamespace extension_namespace(POLICY_DOMAIN_EXTENSIONS, "xyz"); | 718 const PolicyNamespace extension_namespace(POLICY_DOMAIN_EXTENSIONS, "xyz"); |
| 689 | 719 |
| 690 scoped_ptr<PolicyBundle> policy_bundle(new PolicyBundle()); | 720 scoped_ptr<PolicyBundle> policy_bundle(new PolicyBundle()); |
| 691 PolicyMap& policy_map = policy_bundle->Get(chrome_namespace); | 721 PolicyMap& policy_map = policy_bundle->Get(chrome_namespace); |
| 692 // Individual proxy policy values in the Chrome namespace should be collected | 722 // Individual proxy policy values in the Chrome namespace should be collected |
| 693 // into a dictionary. | 723 // into a dictionary. |
| 694 policy_map.Set(key::kProxyServerMode, | 724 policy_map.Set(key::kProxyServerMode, |
| 695 POLICY_LEVEL_MANDATORY, | 725 POLICY_LEVEL_MANDATORY, |
| 696 POLICY_SCOPE_USER, | 726 POLICY_SCOPE_USER, |
| 727 POLICY_SOURCE_CLOUD, |
| 697 new base::FundamentalValue(3), | 728 new base::FundamentalValue(3), |
| 698 NULL); | 729 NULL); |
| 699 | 730 |
| 700 // Both these policies should be ignored, since there's a higher priority | 731 // Both these policies should be ignored, since there's a higher priority |
| 701 // policy available. | 732 // policy available. |
| 702 policy_map.Set(key::kProxyMode, | 733 policy_map.Set(key::kProxyMode, |
| 703 POLICY_LEVEL_RECOMMENDED, | 734 POLICY_LEVEL_RECOMMENDED, |
| 704 POLICY_SCOPE_USER, | 735 POLICY_SCOPE_USER, |
| 736 POLICY_SOURCE_CLOUD, |
| 705 new base::StringValue("pac_script"), | 737 new base::StringValue("pac_script"), |
| 706 NULL); | 738 NULL); |
| 707 policy_map.Set(key::kProxyPacUrl, | 739 policy_map.Set(key::kProxyPacUrl, |
| 708 POLICY_LEVEL_RECOMMENDED, | 740 POLICY_LEVEL_RECOMMENDED, |
| 709 POLICY_SCOPE_USER, | 741 POLICY_SCOPE_USER, |
| 742 POLICY_SOURCE_CLOUD, |
| 710 new base::StringValue("http://example.com/wpad.dat"), | 743 new base::StringValue("http://example.com/wpad.dat"), |
| 711 NULL); | 744 NULL); |
| 712 | 745 |
| 713 // Add a value to a non-Chrome namespace. | 746 // Add a value to a non-Chrome namespace. |
| 714 policy_bundle->Get(extension_namespace).Set(key::kProxyServerMode, | 747 policy_bundle->Get(extension_namespace).Set(key::kProxyServerMode, |
| 715 POLICY_LEVEL_MANDATORY, | 748 POLICY_LEVEL_MANDATORY, |
| 716 POLICY_SCOPE_USER, | 749 POLICY_SCOPE_USER, |
| 750 POLICY_SOURCE_CLOUD, |
| 717 new base::FundamentalValue(3), | 751 new base::FundamentalValue(3), |
| 718 NULL); | 752 NULL); |
| 719 | 753 |
| 720 // The resulting Chrome namespace map should have the collected policy. | 754 // The resulting Chrome namespace map should have the collected policy. |
| 721 PolicyMap expected_chrome; | 755 PolicyMap expected_chrome; |
| 722 scoped_ptr<base::DictionaryValue> expected_value(new base::DictionaryValue); | 756 scoped_ptr<base::DictionaryValue> expected_value(new base::DictionaryValue); |
| 723 expected_value->SetInteger(key::kProxyServerMode, 3); | 757 expected_value->SetInteger(key::kProxyServerMode, 3); |
| 724 expected_chrome.Set(key::kProxySettings, POLICY_LEVEL_MANDATORY, | 758 expected_chrome.Set(key::kProxySettings, POLICY_LEVEL_MANDATORY, |
| 725 POLICY_SCOPE_USER, expected_value.release(), NULL); | 759 POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, |
| 760 expected_value.release(), nullptr); |
| 726 | 761 |
| 727 // The resulting Extensions namespace map shouldn't have been modified. | 762 // The resulting Extensions namespace map shouldn't have been modified. |
| 728 PolicyMap expected_extension; | 763 PolicyMap expected_extension; |
| 729 expected_extension.Set(key::kProxyServerMode, | 764 expected_extension.Set(key::kProxyServerMode, |
| 730 POLICY_LEVEL_MANDATORY, | 765 POLICY_LEVEL_MANDATORY, |
| 731 POLICY_SCOPE_USER, | 766 POLICY_SCOPE_USER, |
| 767 POLICY_SOURCE_CLOUD, |
| 732 new base::FundamentalValue(3), | 768 new base::FundamentalValue(3), |
| 733 NULL); | 769 NULL); |
| 734 | 770 |
| 735 provider0_.UpdatePolicy(policy_bundle.Pass()); | 771 provider0_.UpdatePolicy(policy_bundle.Pass()); |
| 736 RunUntilIdle(); | 772 RunUntilIdle(); |
| 737 | 773 |
| 738 EXPECT_TRUE(VerifyPolicies(chrome_namespace, expected_chrome)); | 774 EXPECT_TRUE(VerifyPolicies(chrome_namespace, expected_chrome)); |
| 739 EXPECT_TRUE(VerifyPolicies(extension_namespace, expected_extension)); | 775 EXPECT_TRUE(VerifyPolicies(extension_namespace, expected_extension)); |
| 740 } | 776 } |
| 741 | 777 |
| 742 } // namespace policy | 778 } // namespace policy |
| OLD | NEW |