Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(163)

Side by Side Diff: components/policy/core/common/policy_service_impl_unittest.cc

Issue 1940153002: Use std::unique_ptr to express ownership of base::Value in PolicyMap::Entry (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: another-fix Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698