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