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

Side by Side Diff: chrome/browser/policy/policy_service_unittest.cc

Issue 10236003: Added RefreshPolicies to PolicyService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased Created 8 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 | Annotate | Revision Log
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 "chrome/browser/policy/policy_service_impl.h" 5 #include "chrome/browser/policy/policy_service_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/message_loop.h"
10 #include "base/values.h" 11 #include "base/values.h"
11 #include "chrome/browser/policy/mock_configuration_policy_provider.h" 12 #include "chrome/browser/policy/mock_configuration_policy_provider.h"
13 #include "content/public/browser/browser_thread.h"
14 #include "content/test/test_browser_thread.h"
12 #include "testing/gmock/include/gmock/gmock.h" 15 #include "testing/gmock/include/gmock/gmock.h"
13 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
14 17
15 using ::testing::AnyNumber; 18 using ::testing::AnyNumber;
16 using ::testing::Mock; 19 using ::testing::Mock;
20 using ::testing::Return;
17 using ::testing::_; 21 using ::testing::_;
18 22
19 namespace policy { 23 namespace policy {
20 24
21 namespace { 25 namespace {
22 26
23 class MockPolicyServiceObserver : public PolicyService::Observer { 27 class MockPolicyServiceObserver : public PolicyService::Observer {
24 public: 28 public:
25 virtual ~MockPolicyServiceObserver() {} 29 virtual ~MockPolicyServiceObserver() {}
26 MOCK_METHOD4(OnPolicyUpdated, void(PolicyDomain, 30 MOCK_METHOD4(OnPolicyUpdated, void(PolicyDomain,
(...skipping 14 matching lines...) Expand all
41 return base::Value::Equals(arg, expected); 45 return base::Value::Equals(arg, expected);
42 } 46 }
43 47
44 } // namespace 48 } // namespace
45 49
46 class PolicyServiceTest : public testing::Test { 50 class PolicyServiceTest : public testing::Test {
47 public: 51 public:
48 PolicyServiceTest() {} 52 PolicyServiceTest() {}
49 53
50 void SetUp() OVERRIDE { 54 void SetUp() OVERRIDE {
51 provider0_.AddMandatoryPolicy("pre", base::Value::CreateIntegerValue(13)); 55 EXPECT_CALL(provider0_, ProvideInternal(_))
52 provider0_.SetInitializationComplete(true); 56 .WillRepeatedly(CopyPolicyMap(&policy0_));
53 provider1_.SetInitializationComplete(true); 57 EXPECT_CALL(provider1_, ProvideInternal(_))
54 provider2_.SetInitializationComplete(true); 58 .WillRepeatedly(CopyPolicyMap(&policy1_));
59 EXPECT_CALL(provider2_, ProvideInternal(_))
60 .WillRepeatedly(CopyPolicyMap(&policy2_));
61
62 EXPECT_CALL(provider0_, IsInitializationComplete())
63 .WillRepeatedly(Return(true));
64 EXPECT_CALL(provider1_, IsInitializationComplete())
65 .WillRepeatedly(Return(true));
66 EXPECT_CALL(provider2_, IsInitializationComplete())
67 .WillRepeatedly(Return(true));
68
69 policy0_.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
70 base::Value::CreateIntegerValue(13));
71
55 PolicyServiceImpl::Providers providers; 72 PolicyServiceImpl::Providers providers;
56 providers.push_back(&provider0_); 73 providers.push_back(&provider0_);
57 providers.push_back(&provider1_); 74 providers.push_back(&provider1_);
58 providers.push_back(&provider2_); 75 providers.push_back(&provider2_);
59 policy_service_.reset(new PolicyServiceImpl(providers)); 76 policy_service_.reset(new PolicyServiceImpl(providers));
60 } 77 }
61 78
62 MOCK_METHOD2(OnPolicyValueUpdated, void(const base::Value*, 79 MOCK_METHOD2(OnPolicyValueUpdated, void(const base::Value*,
63 const base::Value*)); 80 const base::Value*));
64 81
82 MOCK_METHOD0(OnPolicyRefresh, void());
83
65 // Returns true if the policies for |domain|, |component_id| match |expected|. 84 // Returns true if the policies for |domain|, |component_id| match |expected|.
66 bool VerifyPolicies(PolicyDomain domain, 85 bool VerifyPolicies(PolicyDomain domain,
67 const std::string& component_id, 86 const std::string& component_id,
68 const PolicyMap& expected) { 87 const PolicyMap& expected) {
69 const PolicyMap* policies = 88 const PolicyMap* policies =
70 policy_service_->GetPolicies(domain, component_id); 89 policy_service_->GetPolicies(domain, component_id);
71 return policies && policies->Equals(expected); 90 return policies && policies->Equals(expected);
72 } 91 }
73 92
74 protected: 93 protected:
75 MockConfigurationPolicyProvider provider0_; 94 MockConfigurationPolicyProvider provider0_;
76 MockConfigurationPolicyProvider provider1_; 95 MockConfigurationPolicyProvider provider1_;
77 MockConfigurationPolicyProvider provider2_; 96 MockConfigurationPolicyProvider provider2_;
97 PolicyMap policy0_;
98 PolicyMap policy1_;
99 PolicyMap policy2_;
78 scoped_ptr<PolicyServiceImpl> policy_service_; 100 scoped_ptr<PolicyServiceImpl> policy_service_;
79 101
80 private: 102 private:
81 DISALLOW_COPY_AND_ASSIGN(PolicyServiceTest); 103 DISALLOW_COPY_AND_ASSIGN(PolicyServiceTest);
82 }; 104 };
83 105
84 TEST_F(PolicyServiceTest, LoadsPoliciesBeforeProvidersRefresh) { 106 TEST_F(PolicyServiceTest, LoadsPoliciesBeforeProvidersRefresh) {
85 PolicyMap expected; 107 PolicyMap expected;
86 expected.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 108 expected.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
87 base::Value::CreateIntegerValue(13)); 109 base::Value::CreateIntegerValue(13));
88 EXPECT_TRUE(VerifyPolicies(POLICY_DOMAIN_CHROME, "", expected)); 110 EXPECT_TRUE(VerifyPolicies(POLICY_DOMAIN_CHROME, "", expected));
89 } 111 }
90 112
91 TEST_F(PolicyServiceTest, NotifyObservers) { 113 TEST_F(PolicyServiceTest, NotifyObservers) {
92 MockPolicyServiceObserver observer; 114 MockPolicyServiceObserver observer;
93 policy_service_->AddObserver(POLICY_DOMAIN_CHROME, "", &observer); 115 policy_service_->AddObserver(POLICY_DOMAIN_CHROME, "", &observer);
94 116
95 PolicyMap expectedPrevious; 117 PolicyMap expectedPrevious;
96 expectedPrevious.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 118 expectedPrevious.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
97 base::Value::CreateIntegerValue(13)); 119 base::Value::CreateIntegerValue(13));
98 120
99 PolicyMap expectedCurrent; 121 PolicyMap expectedCurrent;
100 expectedCurrent.CopyFrom(expectedPrevious); 122 expectedCurrent.CopyFrom(expectedPrevious);
101 expectedCurrent.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 123 expectedCurrent.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
102 base::Value::CreateIntegerValue(123)); 124 base::Value::CreateIntegerValue(123));
103 provider0_.AddMandatoryPolicy("aaa", base::Value::CreateIntegerValue(123)); 125 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
126 base::Value::CreateIntegerValue(123));
104 EXPECT_CALL(observer, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "", 127 EXPECT_CALL(observer, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "",
105 PolicyEquals(&expectedPrevious), 128 PolicyEquals(&expectedPrevious),
106 PolicyEquals(&expectedCurrent))); 129 PolicyEquals(&expectedCurrent)));
107 provider0_.RefreshPolicies(); 130 provider0_.NotifyPolicyUpdated();
108 Mock::VerifyAndClearExpectations(&observer); 131 Mock::VerifyAndClearExpectations(&observer);
109 132
110 // No changes. 133 // No changes.
111 EXPECT_CALL(observer, OnPolicyUpdated(_, _, _, _)).Times(0); 134 EXPECT_CALL(observer, OnPolicyUpdated(_, _, _, _)).Times(0);
112 provider0_.RefreshPolicies(); 135 provider0_.NotifyPolicyUpdated();
113 Mock::VerifyAndClearExpectations(&observer); 136 Mock::VerifyAndClearExpectations(&observer);
114 EXPECT_TRUE(VerifyPolicies(POLICY_DOMAIN_CHROME, "", expectedCurrent)); 137 EXPECT_TRUE(VerifyPolicies(POLICY_DOMAIN_CHROME, "", expectedCurrent));
115 138
116 // New policy. 139 // New policy.
117 expectedPrevious.CopyFrom(expectedCurrent); 140 expectedPrevious.CopyFrom(expectedCurrent);
118 expectedCurrent.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 141 expectedCurrent.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
119 base::Value::CreateIntegerValue(456)); 142 base::Value::CreateIntegerValue(456));
120 provider0_.AddMandatoryPolicy("bbb", base::Value::CreateIntegerValue(456)); 143 policy0_.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
144 base::Value::CreateIntegerValue(456));
121 EXPECT_CALL(observer, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "", 145 EXPECT_CALL(observer, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "",
122 PolicyEquals(&expectedPrevious), 146 PolicyEquals(&expectedPrevious),
123 PolicyEquals(&expectedCurrent))); 147 PolicyEquals(&expectedCurrent)));
124 provider0_.RefreshPolicies(); 148 provider0_.NotifyPolicyUpdated();
125 Mock::VerifyAndClearExpectations(&observer); 149 Mock::VerifyAndClearExpectations(&observer);
126 150
127 // Removed policy. 151 // Removed policy.
128 expectedPrevious.CopyFrom(expectedCurrent); 152 expectedPrevious.CopyFrom(expectedCurrent);
129 expectedCurrent.Erase("bbb"); 153 expectedCurrent.Erase("bbb");
130 provider0_.RemovePolicy("bbb"); 154 policy0_.Erase("bbb");
131 EXPECT_CALL(observer, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "", 155 EXPECT_CALL(observer, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "",
132 PolicyEquals(&expectedPrevious), 156 PolicyEquals(&expectedPrevious),
133 PolicyEquals(&expectedCurrent))); 157 PolicyEquals(&expectedCurrent)));
134 provider0_.RefreshPolicies(); 158 provider0_.NotifyPolicyUpdated();
135 Mock::VerifyAndClearExpectations(&observer); 159 Mock::VerifyAndClearExpectations(&observer);
136 160
137 // Changed policy. 161 // Changed policy.
138 expectedPrevious.CopyFrom(expectedCurrent); 162 expectedPrevious.CopyFrom(expectedCurrent);
139 expectedCurrent.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 163 expectedCurrent.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
140 base::Value::CreateIntegerValue(789)); 164 base::Value::CreateIntegerValue(789));
141 provider0_.AddMandatoryPolicy("aaa", base::Value::CreateIntegerValue(789)); 165 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
166 base::Value::CreateIntegerValue(789));
167
142 EXPECT_CALL(observer, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "", 168 EXPECT_CALL(observer, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "",
143 PolicyEquals(&expectedPrevious), 169 PolicyEquals(&expectedPrevious),
144 PolicyEquals(&expectedCurrent))); 170 PolicyEquals(&expectedCurrent)));
145 provider0_.RefreshPolicies(); 171 provider0_.NotifyPolicyUpdated();
146 Mock::VerifyAndClearExpectations(&observer); 172 Mock::VerifyAndClearExpectations(&observer);
147 173
148 // No changes again. 174 // No changes again.
149 EXPECT_CALL(observer, OnPolicyUpdated(_, _, _, _)).Times(0); 175 EXPECT_CALL(observer, OnPolicyUpdated(_, _, _, _)).Times(0);
150 provider0_.RefreshPolicies(); 176 provider0_.NotifyPolicyUpdated();
151 Mock::VerifyAndClearExpectations(&observer); 177 Mock::VerifyAndClearExpectations(&observer);
152 EXPECT_TRUE(VerifyPolicies(POLICY_DOMAIN_CHROME, "", expectedCurrent)); 178 EXPECT_TRUE(VerifyPolicies(POLICY_DOMAIN_CHROME, "", expectedCurrent));
153 179
154 policy_service_->RemoveObserver(POLICY_DOMAIN_CHROME, "", &observer); 180 policy_service_->RemoveObserver(POLICY_DOMAIN_CHROME, "", &observer);
155 } 181 }
156 182
157 TEST_F(PolicyServiceTest, Priorities) { 183 TEST_F(PolicyServiceTest, Priorities) {
158 PolicyMap expected; 184 PolicyMap expected;
159 expected.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 185 expected.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
160 base::Value::CreateIntegerValue(13)); 186 base::Value::CreateIntegerValue(13));
161 expected.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 187 expected.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
162 base::Value::CreateIntegerValue(0)); 188 base::Value::CreateIntegerValue(0));
163 provider0_.AddMandatoryPolicy("aaa", base::Value::CreateIntegerValue(0)); 189 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
164 provider1_.AddMandatoryPolicy("aaa", base::Value::CreateIntegerValue(1)); 190 base::Value::CreateIntegerValue(0));
165 provider2_.AddMandatoryPolicy("aaa", base::Value::CreateIntegerValue(2)); 191 policy1_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
166 provider0_.RefreshPolicies(); 192 base::Value::CreateIntegerValue(1));
167 provider1_.RefreshPolicies(); 193 policy2_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
168 provider2_.RefreshPolicies(); 194 base::Value::CreateIntegerValue(2));
195 provider0_.NotifyPolicyUpdated();
196 provider1_.NotifyPolicyUpdated();
197 provider2_.NotifyPolicyUpdated();
169 EXPECT_TRUE(VerifyPolicies(POLICY_DOMAIN_CHROME, "", expected)); 198 EXPECT_TRUE(VerifyPolicies(POLICY_DOMAIN_CHROME, "", expected));
170 199
171 expected.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 200 expected.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
172 base::Value::CreateIntegerValue(1)); 201 base::Value::CreateIntegerValue(1));
173 provider0_.RemovePolicy("aaa"); 202 policy0_.Erase("aaa");
174 provider0_.RefreshPolicies(); 203 provider0_.NotifyPolicyUpdated();
175 EXPECT_TRUE(VerifyPolicies(POLICY_DOMAIN_CHROME, "", expected)); 204 EXPECT_TRUE(VerifyPolicies(POLICY_DOMAIN_CHROME, "", expected));
176 205
177 expected.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 206 expected.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
178 base::Value::CreateIntegerValue(2)); 207 base::Value::CreateIntegerValue(2));
179 provider1_.AddRecommendedPolicy("aaa", base::Value::CreateIntegerValue(1)); 208 policy1_.Set("aaa", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER,
180 provider1_.RefreshPolicies(); 209 base::Value::CreateIntegerValue(1));
210 provider1_.NotifyPolicyUpdated();
181 EXPECT_TRUE(VerifyPolicies(POLICY_DOMAIN_CHROME, "", expected)); 211 EXPECT_TRUE(VerifyPolicies(POLICY_DOMAIN_CHROME, "", expected));
182 } 212 }
183 213
184 TEST_F(PolicyServiceTest, PolicyChangeRegistrar) { 214 TEST_F(PolicyServiceTest, PolicyChangeRegistrar) {
185 scoped_ptr<PolicyChangeRegistrar> registrar( 215 scoped_ptr<PolicyChangeRegistrar> registrar(
186 new PolicyChangeRegistrar( 216 new PolicyChangeRegistrar(
187 policy_service_.get(), POLICY_DOMAIN_CHROME, "")); 217 policy_service_.get(), POLICY_DOMAIN_CHROME, ""));
188 218
189 // Starting to observe existing policies doesn't trigger a notification. 219 // Starting to observe existing policies doesn't trigger a notification.
190 EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0); 220 EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0);
191 registrar->Observe("pre", base::Bind( 221 registrar->Observe("pre", base::Bind(
192 &PolicyServiceTest::OnPolicyValueUpdated, 222 &PolicyServiceTest::OnPolicyValueUpdated,
193 base::Unretained(this))); 223 base::Unretained(this)));
194 registrar->Observe("aaa", base::Bind( 224 registrar->Observe("aaa", base::Bind(
195 &PolicyServiceTest::OnPolicyValueUpdated, 225 &PolicyServiceTest::OnPolicyValueUpdated,
196 base::Unretained(this))); 226 base::Unretained(this)));
197 Mock::VerifyAndClearExpectations(this); 227 Mock::VerifyAndClearExpectations(this);
198 228
199 // Changing it now triggers a notification. 229 // Changing it now triggers a notification.
200 base::FundamentalValue kValue0(0); 230 base::FundamentalValue kValue0(0);
201 EXPECT_CALL(*this, OnPolicyValueUpdated(NULL, ValueEquals(&kValue0))); 231 EXPECT_CALL(*this, OnPolicyValueUpdated(NULL, ValueEquals(&kValue0)));
202 provider0_.AddMandatoryPolicy("aaa", kValue0.DeepCopy()); 232 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
203 provider0_.RefreshPolicies(); 233 kValue0.DeepCopy());
234 provider0_.NotifyPolicyUpdated();
204 Mock::VerifyAndClearExpectations(this); 235 Mock::VerifyAndClearExpectations(this);
205 236
206 // Changing other values doesn't trigger a notification. 237 // Changing other values doesn't trigger a notification.
207 EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0); 238 EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0);
208 provider0_.AddMandatoryPolicy("bbb", kValue0.DeepCopy()); 239 policy0_.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
209 provider0_.RefreshPolicies(); 240 kValue0.DeepCopy());
241 provider0_.NotifyPolicyUpdated();
210 Mock::VerifyAndClearExpectations(this); 242 Mock::VerifyAndClearExpectations(this);
211 243
212 // Modifying the value triggers a notification. 244 // Modifying the value triggers a notification.
213 base::FundamentalValue kValue1(1); 245 base::FundamentalValue kValue1(1);
214 EXPECT_CALL(*this, OnPolicyValueUpdated(ValueEquals(&kValue0), 246 EXPECT_CALL(*this, OnPolicyValueUpdated(ValueEquals(&kValue0),
215 ValueEquals(&kValue1))); 247 ValueEquals(&kValue1)));
216 provider0_.AddMandatoryPolicy("aaa", kValue1.DeepCopy()); 248 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
217 provider0_.RefreshPolicies(); 249 kValue1.DeepCopy());
250 provider0_.NotifyPolicyUpdated();
218 Mock::VerifyAndClearExpectations(this); 251 Mock::VerifyAndClearExpectations(this);
219 252
220 // Removing the value triggers a notification. 253 // Removing the value triggers a notification.
221 EXPECT_CALL(*this, OnPolicyValueUpdated(ValueEquals(&kValue1), NULL)); 254 EXPECT_CALL(*this, OnPolicyValueUpdated(ValueEquals(&kValue1), NULL));
222 provider0_.RemovePolicy("aaa"); 255 policy0_.Erase("aaa");
223 provider0_.RefreshPolicies(); 256 provider0_.NotifyPolicyUpdated();
224 Mock::VerifyAndClearExpectations(this); 257 Mock::VerifyAndClearExpectations(this);
225 258
226 // No more notifications after destroying the registrar. 259 // No more notifications after destroying the registrar.
227 EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0); 260 EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0);
228 registrar.reset(); 261 registrar.reset();
229 provider0_.AddMandatoryPolicy("aaa", kValue1.DeepCopy()); 262 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
230 provider0_.AddMandatoryPolicy("pre", kValue1.DeepCopy()); 263 kValue1.DeepCopy());
231 provider0_.RefreshPolicies(); 264 policy0_.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
265 kValue1.DeepCopy());
266 provider0_.NotifyPolicyUpdated();
232 Mock::VerifyAndClearExpectations(this); 267 Mock::VerifyAndClearExpectations(this);
233 } 268 }
234 269
270 TEST_F(PolicyServiceTest, RefreshPolicies) {
271 MessageLoop loop;
272 content::TestBrowserThread ui_thread(content::BrowserThread::UI, &loop);
273 content::TestBrowserThread file_thread(content::BrowserThread::FILE, &loop);
274 content::TestBrowserThread io_thread(content::BrowserThread::IO, &loop);
275
276 EXPECT_CALL(provider0_, RefreshPolicies()).Times(AnyNumber());
277 EXPECT_CALL(provider1_, RefreshPolicies()).Times(AnyNumber());
278 EXPECT_CALL(provider2_, RefreshPolicies()).Times(AnyNumber());
279
280 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0);
281 policy_service_->RefreshPolicies(base::Bind(
282 &PolicyServiceTest::OnPolicyRefresh,
283 base::Unretained(this)));
284 loop.RunAllPending();
285 Mock::VerifyAndClearExpectations(this);
286
287 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0);
288 base::FundamentalValue kValue0(0);
289 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
290 kValue0.DeepCopy());
291 provider0_.NotifyPolicyUpdated();
292 loop.RunAllPending();
293 Mock::VerifyAndClearExpectations(this);
294
295 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0);
296 base::FundamentalValue kValue1(1);
297 policy1_.Set("aaa", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER,
298 kValue1.DeepCopy());
299 provider1_.NotifyPolicyUpdated();
300 loop.RunAllPending();
301 Mock::VerifyAndClearExpectations(this);
302
303 // A provider can refresh more than once after a RefreshPolicies call, but
304 // OnPolicyRefresh should be triggered only after all providers are
305 // refreshed.
306 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0);
307 policy1_.Set("bbb", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER,
308 kValue1.DeepCopy());
309 provider1_.NotifyPolicyUpdated();
310 loop.RunAllPending();
311 Mock::VerifyAndClearExpectations(this);
312
313 // If another RefreshPolicies() call happens while waiting for a previous
314 // one to complete, then all providers must refresh again.
315 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0);
316 policy_service_->RefreshPolicies(base::Bind(
317 &PolicyServiceTest::OnPolicyRefresh,
318 base::Unretained(this)));
319 loop.RunAllPending();
320 Mock::VerifyAndClearExpectations(this);
321
322 EXPECT_CALL(*this, OnPolicyRefresh()).Times(0);
323 policy2_.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
324 kValue0.DeepCopy());
325 provider2_.NotifyPolicyUpdated();
326 loop.RunAllPending();
327 Mock::VerifyAndClearExpectations(this);
328
329 // Providers 0 and 1 must reload again.
330 EXPECT_CALL(*this, OnPolicyRefresh()).Times(2);
331 base::FundamentalValue kValue2(2);
332 policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
333 kValue2.DeepCopy());
334 provider0_.NotifyPolicyUpdated();
335 provider1_.NotifyPolicyUpdated();
336 loop.RunAllPending();
337 Mock::VerifyAndClearExpectations(this);
338
339 const PolicyMap* policies = policy_service_->GetPolicies(
340 POLICY_DOMAIN_CHROME, "");
341 ASSERT_TRUE(policies);
342 EXPECT_TRUE(base::Value::Equals(&kValue2, policies->GetValue("aaa")));
343 EXPECT_TRUE(base::Value::Equals(&kValue0, policies->GetValue("bbb")));
344 }
345
235 } // namespace policy 346 } // namespace policy
OLDNEW
« no previous file with comments | « chrome/browser/policy/policy_service_stub.cc ('k') | chrome/browser/prefs/proxy_policy_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698