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

Side by Side Diff: chrome/browser/chromeos/policy/recommendation_restorer_unittest.cc

Issue 16658015: Add device policies to control accessibility settings on the login screen (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix copy&paste mistake found by clang. Created 7 years, 6 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
(Empty)
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/chromeos/policy/recommendation_restorer.h"
6
7 #include <deque>
8
9 #include "ash/magnifier/magnifier_constants.h"
10 #include "base/command_line.h"
11 #include "base/prefs/pref_notifier_impl.h"
12 #include "base/prefs/testing_pref_store.h"
13 #include "base/strings/utf_string_conversions.h"
14 #include "base/test/test_pending_task.h"
15 #include "base/test/test_simple_task_runner.h"
16 #include "base/thread_task_runner_handle.h"
17 #include "base/time.h"
18 #include "base/values.h"
19 #include "chrome/browser/chromeos/policy/recommendation_restorer_factory.h"
20 #include "chrome/browser/prefs/browser_prefs.h"
21 #include "chrome/browser/prefs/pref_service_syncable.h"
22 #include "chrome/common/chrome_constants.h"
23 #include "chrome/common/chrome_notification_types.h"
24 #include "chrome/common/pref_names.h"
25 #include "chrome/test/base/testing_browser_process.h"
26 #include "chrome/test/base/testing_pref_service_syncable.h"
27 #include "chrome/test/base/testing_profile.h"
28 #include "chrome/test/base/testing_profile_manager.h"
29 #include "chromeos/chromeos_switches.h"
30 #include "components/user_prefs/pref_registry_syncable.h"
31 #include "content/public/browser/notification_details.h"
32 #include "content/public/browser/notification_service.h"
33 #include "content/public/browser/notification_source.h"
34 #include "testing/gtest/include/gtest/gtest.h"
35
36 namespace policy {
37
38 namespace {
39 // The amount of idle time after which recommended values are restored.
40 const int kRestoreDelayInMs = 60 * 1000; // 1 minute.
41 } // namespace
42
43 class RecommendationRestorerTest : public testing::Test {
44 protected:
45 RecommendationRestorerTest();
46
47 // testing::Test:
48 virtual void SetUp() OVERRIDE;
49 virtual void TearDown() OVERRIDE;
50
51 void CreateLoginProfile();
52 void CreateUserProfile();
53
54 void NotifyOfUserActivity();
55
56 bool DoesRestorerInternalExist() const;
57 bool IsTimerStopped() const;
58 void VerifyTimerIsRunning(bool allow_partial_delay) const;
59
60 TestingPrefStore* recommended_prefs_; // Not owned.
61 TestingPrefServiceSyncable* prefs_; // Not owned.
62 RecommendationRestorer* restorer_; // Not owned.
63
64 scoped_refptr<base::TestSimpleTaskRunner> runner_;
65 base::ThreadTaskRunnerHandle runner_handler_;
66
67 private:
68 scoped_ptr<PrefServiceSyncable> prefs_owner_;
69
70 TestingProfileManager* profile_manager_; // Not owned.
71
72 DISALLOW_COPY_AND_ASSIGN(RecommendationRestorerTest);
73 };
74
75 RecommendationRestorerTest::RecommendationRestorerTest()
76 : recommended_prefs_(new TestingPrefStore),
77 prefs_(new TestingPrefServiceSyncable(
78 new TestingPrefStore,
79 new TestingPrefStore,
80 recommended_prefs_,
81 new user_prefs::PrefRegistrySyncable,
82 new PrefNotifierImpl)),
83 restorer_(NULL),
84 runner_(new base::TestSimpleTaskRunner),
85 runner_handler_(runner_),
86 prefs_owner_(prefs_),
87 profile_manager_(NULL) {
88 chrome::RegisterUserPrefs(prefs_->registry());
89 }
90
91 void RecommendationRestorerTest::SetUp() {
92 testing::Test::SetUp();
93 profile_manager_ =
94 new TestingProfileManager(TestingBrowserProcess::GetGlobal());
95 ASSERT_TRUE(profile_manager_->SetUp());
96 }
97
98 void RecommendationRestorerTest::TearDown() {
99 TestingBrowserProcess::GetGlobal()->SetLocalState(NULL);
100 testing::Test::TearDown();
101 }
102
103 void RecommendationRestorerTest::CreateLoginProfile() {
104 ASSERT_FALSE(restorer_);
105 TestingProfile* profile = profile_manager_->CreateTestingProfile(
106 chrome::kInitialProfile, prefs_owner_.Pass(),
107 UTF8ToUTF16(chrome::kInitialProfile), 0);
108 restorer_ = RecommendationRestorerFactory::GetForProfile(profile);
109 }
110
111 void RecommendationRestorerTest::CreateUserProfile() {
112 ASSERT_FALSE(restorer_);
113 TestingProfile* profile = profile_manager_->CreateTestingProfile(
114 "user", prefs_owner_.Pass(), UTF8ToUTF16("user"), 0);
115 restorer_ = RecommendationRestorerFactory::GetForProfile(profile);
116 }
117
118 void RecommendationRestorerTest::NotifyOfUserActivity() {
119 ASSERT_TRUE(restorer_);
120 ASSERT_TRUE(restorer_->recommendation_restorer_internal_);
121 restorer_->recommendation_restorer_internal_->OnUserActivity();
122 }
123
124 bool RecommendationRestorerTest::DoesRestorerInternalExist() const {
125 return restorer_ && restorer_->recommendation_restorer_internal_;
126 }
127
128 bool RecommendationRestorerTest::IsTimerStopped() const {
129 return runner_->GetPendingTasks().empty();
130 }
131
132 void RecommendationRestorerTest::VerifyTimerIsRunning(
133 bool allow_partial_delay) const {
134 const std::deque<base::TestPendingTask>& tasks = runner_->GetPendingTasks();
135 ASSERT_EQ(1u, tasks.size());
136 if (allow_partial_delay) {
137 EXPECT_GE(base::TimeDelta::FromMilliseconds(kRestoreDelayInMs),
138 tasks.front().delay);
139 } else {
140 EXPECT_EQ(base::TimeDelta::FromMilliseconds(kRestoreDelayInMs),
141 tasks.front().delay);
142 }
143 }
144
145 TEST_F(RecommendationRestorerTest, CreateForLoginProfileOnLoginScreen) {
146 // Verifies that when a RecommendationRestorer is created for the login
147 // profile on the login screen, a RecommendationRestorerInternal is created
148 // and subsequently destroyed when a user session starts.
149 CommandLine::ForCurrentProcess()->AppendSwitch(
150 chromeos::switches::kLoginManager);
151 CreateLoginProfile();
152 ASSERT_TRUE(restorer_);
153 EXPECT_TRUE(DoesRestorerInternalExist());
154
155 restorer_->Observe(
156 chrome::NOTIFICATION_LOGIN_USER_CHANGED,
157 content::Source<RecommendationRestorerTest>(this),
158 content::NotificationService::NoDetails());
159 EXPECT_FALSE(DoesRestorerInternalExist());
160 }
161
162 TEST_F(RecommendationRestorerTest, CreateForLoginProfileInSession) {
163 // Verifies that when a RecommendationRestorer is created for the login
164 // profile during a user session (i.e. during a browser restart after a
165 // crash), no RecommendationRestorerInternal is created.
166 CreateLoginProfile();
167 EXPECT_TRUE(restorer_);
168 EXPECT_FALSE(DoesRestorerInternalExist());
169 }
170
171 TEST_F(RecommendationRestorerTest, CreateForUserProfileOnLoginScreen) {
172 // Verifies that when a RecommendationRestorer is created for a user profile
173 // on the login screen, no RecommendationRestorerInternal is created.
174 CommandLine::ForCurrentProcess()->AppendSwitch(
175 chromeos::switches::kLoginManager);
176 CreateUserProfile();
177 EXPECT_TRUE(restorer_);
178 EXPECT_FALSE(DoesRestorerInternalExist());
179 }
180
181 TEST_F(RecommendationRestorerTest, CreateForUserProfileInSession) {
182 // Verifies that when a RecommendationRestorer is created for a user profile
183 // during a user session, no RecommendationRestorerInternal is created.
184 CreateUserProfile();
185 EXPECT_TRUE(restorer_);
186 EXPECT_FALSE(DoesRestorerInternalExist());
187 }
188
189 TEST_F(RecommendationRestorerTest, NoRecommendations) {
190 // Verifies that if no recommended values have been set, user settings are not
191 // cleared when the RecommendationRestorer is instantiated.
192 prefs_->SetBoolean(prefs::kLargeCursorEnabled, true);
193 prefs_->SetBoolean(prefs::kSpokenFeedbackEnabled, true);
194 prefs_->SetBoolean(prefs::kHighContrastEnabled, true);
195 prefs_->SetBoolean(prefs::kScreenMagnifierEnabled, true);
196 prefs_->SetInteger(prefs::kScreenMagnifierType, ash::MAGNIFIER_FULL);
197
198 CommandLine::ForCurrentProcess()->AppendSwitch(
199 chromeos::switches::kLoginManager);
200 CreateLoginProfile();
201 EXPECT_TRUE(DoesRestorerInternalExist());
202
203 const PrefServiceSyncable::Preference* pref =
204 prefs_->FindPreference(prefs::kLargeCursorEnabled);
205 ASSERT_TRUE(pref);
206 EXPECT_TRUE(pref->HasUserSetting());
207 const base::Value* value = pref->GetValue();
208 ASSERT_TRUE(value);
209 EXPECT_TRUE(base::FundamentalValue(true).Equals(value));
210
211 pref = prefs_->FindPreference(prefs::kSpokenFeedbackEnabled);
212 ASSERT_TRUE(pref);
213 EXPECT_TRUE(pref->HasUserSetting());
214 value = pref->GetValue();
215 ASSERT_TRUE(value);
216 EXPECT_TRUE(base::FundamentalValue(true).Equals(value));
217
218 pref = prefs_->FindPreference(prefs::kHighContrastEnabled);
219 ASSERT_TRUE(pref);
220 EXPECT_TRUE(pref->HasUserSetting());
221 value = pref->GetValue();
222 ASSERT_TRUE(value);
223 EXPECT_TRUE(base::FundamentalValue(true).Equals(value));
224
225 pref = prefs_->FindPreference(prefs::kScreenMagnifierEnabled);
226 ASSERT_TRUE(pref);
227 EXPECT_TRUE(pref->HasUserSetting());
228 value = pref->GetValue();
229 ASSERT_TRUE(value);
230 EXPECT_TRUE(base::FundamentalValue(true).Equals(value));
231
232 pref = prefs_->FindPreference(prefs::kScreenMagnifierType);
233 ASSERT_TRUE(pref);
234 EXPECT_TRUE(pref->HasUserSetting());
235 value = pref->GetValue();
236 ASSERT_TRUE(value);
237 EXPECT_TRUE(base::FundamentalValue(ash::MAGNIFIER_FULL).Equals(value));
238
239 EXPECT_TRUE(IsTimerStopped());
240 }
241
242 TEST_F(RecommendationRestorerTest, RestoreOnStartup) {
243 // Verifies that if recommended values have been set, user settings are
244 // cleared when the RecommendationRestorer is instantiated.
245 recommended_prefs_->SetBoolean(prefs::kLargeCursorEnabled, false);
246 recommended_prefs_->SetBoolean(prefs::kSpokenFeedbackEnabled, false);
247 recommended_prefs_->SetBoolean(prefs::kHighContrastEnabled, false);
248 recommended_prefs_->SetBoolean(prefs::kScreenMagnifierEnabled, false);
249 recommended_prefs_->SetInteger(prefs::kScreenMagnifierType, 0);
250
251 prefs_->SetBoolean(prefs::kLargeCursorEnabled, true);
252 prefs_->SetBoolean(prefs::kSpokenFeedbackEnabled, true);
253 prefs_->SetBoolean(prefs::kHighContrastEnabled, true);
254 prefs_->SetBoolean(prefs::kScreenMagnifierEnabled, true);
255 prefs_->SetInteger(prefs::kScreenMagnifierType, ash::MAGNIFIER_FULL);
256
257 CommandLine::ForCurrentProcess()->AppendSwitch(
258 chromeos::switches::kLoginManager);
259 CreateLoginProfile();
260 EXPECT_TRUE(DoesRestorerInternalExist());
261
262 const PrefServiceSyncable::Preference* pref =
263 prefs_->FindPreference(prefs::kLargeCursorEnabled);
264 ASSERT_TRUE(pref);
265 EXPECT_TRUE(pref->IsRecommended());
266 EXPECT_FALSE(pref->HasUserSetting());
267 const base::Value* value = pref->GetValue();
268 ASSERT_TRUE(value);
269 EXPECT_TRUE(base::FundamentalValue(false).Equals(value));
270
271 pref = prefs_->FindPreference(prefs::kSpokenFeedbackEnabled);
272 ASSERT_TRUE(pref);
273 EXPECT_TRUE(pref->IsRecommended());
274 EXPECT_FALSE(pref->HasUserSetting());
275 value = pref->GetValue();
276 ASSERT_TRUE(value);
277 EXPECT_TRUE(base::FundamentalValue(false).Equals(value));
278
279 pref = prefs_->FindPreference(prefs::kHighContrastEnabled);
280 ASSERT_TRUE(pref);
281 EXPECT_TRUE(pref->IsRecommended());
282 EXPECT_FALSE(pref->HasUserSetting());
283 value = pref->GetValue();
284 ASSERT_TRUE(value);
285 EXPECT_TRUE(base::FundamentalValue(false).Equals(value));
286
287 pref = prefs_->FindPreference(prefs::kScreenMagnifierEnabled);
288 ASSERT_TRUE(pref);
289 EXPECT_TRUE(pref->IsRecommended());
290 EXPECT_FALSE(pref->HasUserSetting());
291 value = pref->GetValue();
292 ASSERT_TRUE(value);
293 EXPECT_TRUE(base::FundamentalValue(false).Equals(value));
294
295 pref = prefs_->FindPreference(prefs::kScreenMagnifierType);
296 ASSERT_TRUE(pref);
297 EXPECT_TRUE(pref->IsRecommended());
298 EXPECT_FALSE(pref->HasUserSetting());
299 value = pref->GetValue();
300 ASSERT_TRUE(value);
301 EXPECT_TRUE(base::FundamentalValue(0).Equals(value));
302
303 EXPECT_TRUE(IsTimerStopped());
304 }
305
306 TEST_F(RecommendationRestorerTest, RestoreOnRecommendationChange) {
307 // Verifies that if recommended values change, user settings are cleared
308 // immediately when the RecommendationRestorer is running.
309 prefs_->SetBoolean(prefs::kLargeCursorEnabled, true);
310 prefs_->SetBoolean(prefs::kSpokenFeedbackEnabled, true);
311 prefs_->SetBoolean(prefs::kHighContrastEnabled, true);
312 prefs_->SetBoolean(prefs::kScreenMagnifierEnabled, true);
313 prefs_->SetInteger(prefs::kScreenMagnifierType, ash::MAGNIFIER_FULL);
314
315 CommandLine::ForCurrentProcess()->AppendSwitch(
316 chromeos::switches::kLoginManager);
317 CreateLoginProfile();
318 EXPECT_TRUE(DoesRestorerInternalExist());
319
320 const PrefServiceSyncable::Preference* pref =
321 prefs_->FindPreference(prefs::kLargeCursorEnabled);
322 ASSERT_TRUE(pref);
323 EXPECT_TRUE(pref->HasUserSetting());
324 const base::Value* value = pref->GetValue();
325 ASSERT_TRUE(value);
326 EXPECT_TRUE(base::FundamentalValue(true).Equals(value));
327
328 pref = prefs_->FindPreference(prefs::kSpokenFeedbackEnabled);
329 ASSERT_TRUE(pref);
330 EXPECT_TRUE(pref->HasUserSetting());
331 value = pref->GetValue();
332 ASSERT_TRUE(value);
333 EXPECT_TRUE(base::FundamentalValue(true).Equals(value));
334
335 pref = prefs_->FindPreference(prefs::kHighContrastEnabled);
336 ASSERT_TRUE(pref);
337 EXPECT_TRUE(pref->HasUserSetting());
338 value = pref->GetValue();
339 ASSERT_TRUE(value);
340 EXPECT_TRUE(base::FundamentalValue(true).Equals(value));
341
342 pref = prefs_->FindPreference(prefs::kScreenMagnifierEnabled);
343 ASSERT_TRUE(pref);
344 EXPECT_TRUE(pref->HasUserSetting());
345 value = pref->GetValue();
346 ASSERT_TRUE(value);
347 EXPECT_TRUE(base::FundamentalValue(true).Equals(value));
348
349 pref = prefs_->FindPreference(prefs::kScreenMagnifierType);
350 ASSERT_TRUE(pref);
351 EXPECT_TRUE(pref->HasUserSetting());
352 value = pref->GetValue();
353 ASSERT_TRUE(value);
354 EXPECT_TRUE(base::FundamentalValue(ash::MAGNIFIER_FULL).Equals(value));
355
356 EXPECT_TRUE(IsTimerStopped());
357
358 recommended_prefs_->SetBoolean(prefs::kLargeCursorEnabled, false);
359
360 pref = prefs_->FindPreference(prefs::kLargeCursorEnabled);
361 ASSERT_TRUE(pref);
362 EXPECT_TRUE(pref->IsRecommended());
363 EXPECT_FALSE(pref->HasUserSetting());
364 value = pref->GetValue();
365 ASSERT_TRUE(value);
366 EXPECT_TRUE(base::FundamentalValue(false).Equals(value));
367
368 EXPECT_TRUE(IsTimerStopped());
369
370 recommended_prefs_->SetBoolean(prefs::kSpokenFeedbackEnabled, false);
371
372 pref = prefs_->FindPreference(prefs::kSpokenFeedbackEnabled);
373 ASSERT_TRUE(pref);
374 EXPECT_TRUE(pref->IsRecommended());
375 EXPECT_FALSE(pref->HasUserSetting());
376 value = pref->GetValue();
377 ASSERT_TRUE(value);
378 EXPECT_TRUE(base::FundamentalValue(false).Equals(value));
379
380 EXPECT_TRUE(IsTimerStopped());
381
382 recommended_prefs_->SetBoolean(prefs::kHighContrastEnabled, false);
383
384 pref = prefs_->FindPreference(prefs::kHighContrastEnabled);
385 ASSERT_TRUE(pref);
386 EXPECT_TRUE(pref->IsRecommended());
387 EXPECT_FALSE(pref->HasUserSetting());
388 value = pref->GetValue();
389 ASSERT_TRUE(value);
390 EXPECT_TRUE(base::FundamentalValue(false).Equals(value));
391
392 EXPECT_TRUE(IsTimerStopped());
393
394 recommended_prefs_->SetBoolean(prefs::kScreenMagnifierEnabled, false);
395 recommended_prefs_->SetInteger(prefs::kScreenMagnifierType, 0);
396
397 pref = prefs_->FindPreference(prefs::kScreenMagnifierEnabled);
398 ASSERT_TRUE(pref);
399 EXPECT_TRUE(pref->IsRecommended());
400 EXPECT_FALSE(pref->HasUserSetting());
401 value = pref->GetValue();
402 ASSERT_TRUE(value);
403 EXPECT_TRUE(base::FundamentalValue(false).Equals(value));
404
405 pref = prefs_->FindPreference(prefs::kScreenMagnifierType);
406 ASSERT_TRUE(pref);
407 EXPECT_TRUE(pref->IsRecommended());
408 EXPECT_FALSE(pref->HasUserSetting());
409 value = pref->GetValue();
410 ASSERT_TRUE(value);
411 EXPECT_TRUE(base::FundamentalValue(0).Equals(value));
412
413 EXPECT_TRUE(IsTimerStopped());
414 }
415
416 TEST_F(RecommendationRestorerTest, DoNothingOnUserChange) {
417 // Verifies that if no recommended values have been set and user settings
418 // change, they are not cleared whenthe RecommendationRestorer is running.
419 CommandLine::ForCurrentProcess()->AppendSwitch(
420 chromeos::switches::kLoginManager);
421 CreateLoginProfile();
422 EXPECT_TRUE(DoesRestorerInternalExist());
423
424 EXPECT_TRUE(IsTimerStopped());
425
426 prefs_->SetBoolean(prefs::kLargeCursorEnabled, true);
427 const PrefServiceSyncable::Preference* pref =
428 prefs_->FindPreference(prefs::kLargeCursorEnabled);
429 ASSERT_TRUE(pref);
430 EXPECT_TRUE(pref->HasUserSetting());
431 const base::Value* value = pref->GetValue();
432 ASSERT_TRUE(value);
433 EXPECT_TRUE(base::FundamentalValue(true).Equals(value));
434
435 EXPECT_TRUE(IsTimerStopped());
436
437 prefs_->SetBoolean(prefs::kSpokenFeedbackEnabled, true);
438 pref = prefs_->FindPreference(prefs::kSpokenFeedbackEnabled);
439 ASSERT_TRUE(pref);
440 EXPECT_TRUE(pref->HasUserSetting());
441 value = pref->GetValue();
442 ASSERT_TRUE(value);
443 EXPECT_TRUE(base::FundamentalValue(true).Equals(value));
444
445 EXPECT_TRUE(IsTimerStopped());
446
447 prefs_->SetBoolean(prefs::kHighContrastEnabled, true);
448 pref = prefs_->FindPreference(prefs::kHighContrastEnabled);
449 ASSERT_TRUE(pref);
450 EXPECT_TRUE(pref->HasUserSetting());
451 value = pref->GetValue();
452 ASSERT_TRUE(value);
453 EXPECT_TRUE(base::FundamentalValue(true).Equals(value));
454
455 EXPECT_TRUE(IsTimerStopped());
456
457 prefs_->SetBoolean(prefs::kScreenMagnifierEnabled, true);
458 pref = prefs_->FindPreference(prefs::kScreenMagnifierEnabled);
459 ASSERT_TRUE(pref);
460 EXPECT_TRUE(pref->HasUserSetting());
461 value = pref->GetValue();
462 ASSERT_TRUE(value);
463 EXPECT_TRUE(base::FundamentalValue(true).Equals(value));
464
465 EXPECT_TRUE(IsTimerStopped());
466
467 prefs_->SetInteger(prefs::kScreenMagnifierType, ash::MAGNIFIER_FULL);
468 pref = prefs_->FindPreference(prefs::kScreenMagnifierType);
469 ASSERT_TRUE(pref);
470 EXPECT_TRUE(pref->HasUserSetting());
471 value = pref->GetValue();
472 ASSERT_TRUE(value);
473 EXPECT_TRUE(base::FundamentalValue(ash::MAGNIFIER_FULL).Equals(value));
474
475 EXPECT_TRUE(IsTimerStopped());
476
477 EXPECT_TRUE(IsTimerStopped());
478 }
479
480 TEST_F(RecommendationRestorerTest, RunTimerAndRestoreOnUserChange) {
481 // Verifies that if recommended values have been set and user settings
482 // change, a timer is started and the user settings are cleared after one
483 // minute.
484 recommended_prefs_->SetBoolean(prefs::kLargeCursorEnabled, false);
485 recommended_prefs_->SetBoolean(prefs::kSpokenFeedbackEnabled, false);
486 recommended_prefs_->SetBoolean(prefs::kHighContrastEnabled, false);
487 recommended_prefs_->SetBoolean(prefs::kScreenMagnifierEnabled, false);
488 recommended_prefs_->SetInteger(prefs::kScreenMagnifierType, 0);
489
490 CommandLine::ForCurrentProcess()->AppendSwitch(
491 chromeos::switches::kLoginManager);
492 CreateLoginProfile();
493 EXPECT_TRUE(DoesRestorerInternalExist());
494
495 EXPECT_TRUE(IsTimerStopped());
496
497 prefs_->SetBoolean(prefs::kLargeCursorEnabled, true);
498 const PrefServiceSyncable::Preference* pref =
499 prefs_->FindPreference(prefs::kLargeCursorEnabled);
500 ASSERT_TRUE(pref);
501 EXPECT_TRUE(pref->HasUserSetting());
502 const base::Value* value = pref->GetValue();
503 ASSERT_TRUE(value);
504 EXPECT_TRUE(base::FundamentalValue(true).Equals(value));
505
506 VerifyTimerIsRunning(false);
507 runner_->RunPendingTasks();
508
509 pref = prefs_->FindPreference(prefs::kLargeCursorEnabled);
510 ASSERT_TRUE(pref);
511 EXPECT_TRUE(pref->IsRecommended());
512 EXPECT_FALSE(pref->HasUserSetting());
513 value = pref->GetValue();
514 ASSERT_TRUE(value);
515 EXPECT_TRUE(base::FundamentalValue(false).Equals(value));
516
517 EXPECT_TRUE(IsTimerStopped());
518
519 prefs_->SetBoolean(prefs::kSpokenFeedbackEnabled, true);
520 pref = prefs_->FindPreference(prefs::kSpokenFeedbackEnabled);
521 ASSERT_TRUE(pref);
522 EXPECT_TRUE(pref->HasUserSetting());
523 value = pref->GetValue();
524 ASSERT_TRUE(value);
525 EXPECT_TRUE(base::FundamentalValue(true).Equals(value));
526
527 VerifyTimerIsRunning(false);
528 runner_->RunPendingTasks();
529
530 pref = prefs_->FindPreference(prefs::kSpokenFeedbackEnabled);
531 ASSERT_TRUE(pref);
532 EXPECT_TRUE(pref->IsRecommended());
533 EXPECT_FALSE(pref->HasUserSetting());
534 value = pref->GetValue();
535 ASSERT_TRUE(value);
536 EXPECT_TRUE(base::FundamentalValue(false).Equals(value));
537
538 EXPECT_TRUE(IsTimerStopped());
539
540 prefs_->SetBoolean(prefs::kHighContrastEnabled, true);
541 pref = prefs_->FindPreference(prefs::kHighContrastEnabled);
542 ASSERT_TRUE(pref);
543 EXPECT_TRUE(pref->HasUserSetting());
544 value = pref->GetValue();
545 ASSERT_TRUE(value);
546 EXPECT_TRUE(base::FundamentalValue(true).Equals(value));
547
548 VerifyTimerIsRunning(false);
549 runner_->RunPendingTasks();
550
551 pref = prefs_->FindPreference(prefs::kHighContrastEnabled);
552 ASSERT_TRUE(pref);
553 EXPECT_TRUE(pref->IsRecommended());
554 EXPECT_FALSE(pref->HasUserSetting());
555 value = pref->GetValue();
556 ASSERT_TRUE(value);
557 EXPECT_TRUE(base::FundamentalValue(false).Equals(value));
558
559 EXPECT_TRUE(IsTimerStopped());
560
561 prefs_->SetBoolean(prefs::kScreenMagnifierEnabled, true);
562 pref = prefs_->FindPreference(prefs::kScreenMagnifierEnabled);
563 ASSERT_TRUE(pref);
564 EXPECT_TRUE(pref->HasUserSetting());
565 value = pref->GetValue();
566 ASSERT_TRUE(value);
567 EXPECT_TRUE(base::FundamentalValue(true).Equals(value));
568
569 VerifyTimerIsRunning(false);
570 runner_->RunPendingTasks();
571
572 pref = prefs_->FindPreference(prefs::kScreenMagnifierEnabled);
573 ASSERT_TRUE(pref);
574 EXPECT_TRUE(pref->IsRecommended());
575 EXPECT_FALSE(pref->HasUserSetting());
576 value = pref->GetValue();
577 ASSERT_TRUE(value);
578 EXPECT_TRUE(base::FundamentalValue(false).Equals(value));
579
580 EXPECT_TRUE(IsTimerStopped());
581
582 prefs_->SetInteger(prefs::kScreenMagnifierType, ash::MAGNIFIER_FULL);
583 pref = prefs_->FindPreference(prefs::kScreenMagnifierType);
584 ASSERT_TRUE(pref);
585 EXPECT_TRUE(pref->HasUserSetting());
586 value = pref->GetValue();
587 ASSERT_TRUE(value);
588 EXPECT_TRUE(base::FundamentalValue(ash::MAGNIFIER_FULL).Equals(value));
589
590 VerifyTimerIsRunning(false);
591 runner_->RunPendingTasks();
592
593 pref = prefs_->FindPreference(prefs::kScreenMagnifierType);
594 ASSERT_TRUE(pref);
595 EXPECT_TRUE(pref->IsRecommended());
596 EXPECT_FALSE(pref->HasUserSetting());
597 value = pref->GetValue();
598 ASSERT_TRUE(value);
599 EXPECT_TRUE(base::FundamentalValue(0).Equals(value));
600
601 EXPECT_TRUE(IsTimerStopped());
602 }
603
604 TEST_F(RecommendationRestorerTest, UserActivityResetsTimer) {
605 // Verifies that user activity resets the timer which clears user settings.
606 recommended_prefs_->SetBoolean(prefs::kLargeCursorEnabled, false);
607
608 CommandLine::ForCurrentProcess()->AppendSwitch(
609 chromeos::switches::kLoginManager);
610 CreateLoginProfile();
611 EXPECT_TRUE(DoesRestorerInternalExist());
612
613 prefs_->SetBoolean(prefs::kLargeCursorEnabled, true);
614
615 VerifyTimerIsRunning(false);
616
617 // Notify that there is user activity, then fast forward until the originally
618 // set timer fires.
619 NotifyOfUserActivity();
620 runner_->RunPendingTasks();
621
622 // Verify that the user setting has not been cleared yet.
623 const PrefServiceSyncable::Preference* pref =
624 prefs_->FindPreference(prefs::kLargeCursorEnabled);
625 ASSERT_TRUE(pref);
626 EXPECT_TRUE(pref->HasUserSetting());
627 const base::Value* value = pref->GetValue();
628 ASSERT_TRUE(value);
629 EXPECT_TRUE(base::FundamentalValue(true).Equals(value));
630
631 // Fast forward until the reset timer fires.
632 VerifyTimerIsRunning(true);
633 runner_->RunPendingTasks();
634
635 // Verify that the user setting has been cleared now.
636 pref = prefs_->FindPreference(prefs::kLargeCursorEnabled);
637 ASSERT_TRUE(pref);
638 EXPECT_TRUE(pref->IsRecommended());
639 EXPECT_FALSE(pref->HasUserSetting());
640 value = pref->GetValue();
641 ASSERT_TRUE(value);
642 EXPECT_TRUE(base::FundamentalValue(false).Equals(value));
643
644 EXPECT_TRUE(IsTimerStopped());
645 }
646
647 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698