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 |