OLD | NEW |
(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 "ash/magnifier/magnifier_constants.h" |
| 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "base/prefs/pref_notifier_impl.h" |
| 10 #include "base/prefs/testing_pref_store.h" |
| 11 #include "base/strings/utf_string_conversions.h" |
| 12 #include "base/test/test_simple_task_runner.h" |
| 13 #include "base/thread_task_runner_handle.h" |
| 14 #include "base/time.h" |
| 15 #include "base/values.h" |
| 16 #include "chrome/browser/chromeos/policy/recommendation_restorer_factory.h" |
| 17 #include "chrome/browser/prefs/browser_prefs.h" |
| 18 #include "chrome/browser/prefs/pref_service_syncable.h" |
| 19 #include "chrome/common/chrome_constants.h" |
| 20 #include "chrome/common/chrome_notification_types.h" |
| 21 #include "chrome/common/pref_names.h" |
| 22 #include "chrome/test/base/testing_browser_process.h" |
| 23 #include "chrome/test/base/testing_pref_service_syncable.h" |
| 24 #include "chrome/test/base/testing_profile.h" |
| 25 #include "chrome/test/base/testing_profile_manager.h" |
| 26 #include "components/user_prefs/pref_registry_syncable.h" |
| 27 #include "content/public/browser/notification_details.h" |
| 28 #include "content/public/browser/notification_service.h" |
| 29 #include "content/public/browser/notification_source.h" |
| 30 #include "testing/gtest/include/gtest/gtest.h" |
| 31 |
| 32 namespace policy { |
| 33 |
| 34 namespace { |
| 35 // The amount of idle time after which recommended values are restored. |
| 36 const int kRestoreDelayInMs = 60 * 1000; // 1 minute. |
| 37 } // namespace |
| 38 |
| 39 class RecommendationRestorerTest : public testing::Test { |
| 40 protected: |
| 41 RecommendationRestorerTest(); |
| 42 |
| 43 // testing::Test: |
| 44 virtual void SetUp() OVERRIDE; |
| 45 virtual void TearDown() OVERRIDE; |
| 46 |
| 47 void SetRecommendedValues(); |
| 48 void SetUserSettings(); |
| 49 |
| 50 void CreateLoginProfile(); |
| 51 void CreateUserProfile(); |
| 52 |
| 53 void NotifyOfSessionStart(); |
| 54 void NotifyOfUserActivity(); |
| 55 |
| 56 void VerifyPrefFollowsUser(const char* pref_name, |
| 57 const base::Value& expected_value) const; |
| 58 void VerifyPrefsFollowUser() const; |
| 59 void VerifyPrefFollowsRecommendation(const char* pref_name, |
| 60 const base::Value& expected_value) const; |
| 61 void VerifyPrefsFollowRecommendations() const; |
| 62 |
| 63 void VerifyNotListeningForNotifications() const; |
| 64 void VerifyTimerIsStopped() const; |
| 65 void VerifyTimerIsRunning() const; |
| 66 |
| 67 TestingPrefStore* recommended_prefs_; // Not owned. |
| 68 TestingPrefServiceSyncable* prefs_; // Not owned. |
| 69 RecommendationRestorer* restorer_; // Not owned. |
| 70 |
| 71 scoped_refptr<base::TestSimpleTaskRunner> runner_; |
| 72 base::ThreadTaskRunnerHandle runner_handler_; |
| 73 |
| 74 private: |
| 75 scoped_ptr<PrefServiceSyncable> prefs_owner_; |
| 76 |
| 77 TestingProfileManager* profile_manager_; // Not owned. |
| 78 |
| 79 DISALLOW_COPY_AND_ASSIGN(RecommendationRestorerTest); |
| 80 }; |
| 81 |
| 82 RecommendationRestorerTest::RecommendationRestorerTest() |
| 83 : recommended_prefs_(new TestingPrefStore), |
| 84 prefs_(new TestingPrefServiceSyncable( |
| 85 new TestingPrefStore, |
| 86 new TestingPrefStore, |
| 87 recommended_prefs_, |
| 88 new user_prefs::PrefRegistrySyncable, |
| 89 new PrefNotifierImpl)), |
| 90 restorer_(NULL), |
| 91 runner_(new base::TestSimpleTaskRunner), |
| 92 runner_handler_(runner_), |
| 93 prefs_owner_(prefs_), |
| 94 profile_manager_(NULL) { |
| 95 chrome::RegisterUserPrefs(prefs_->registry()); |
| 96 } |
| 97 |
| 98 void RecommendationRestorerTest::SetUp() { |
| 99 testing::Test::SetUp(); |
| 100 profile_manager_ = |
| 101 new TestingProfileManager(TestingBrowserProcess::GetGlobal()); |
| 102 ASSERT_TRUE(profile_manager_->SetUp()); |
| 103 } |
| 104 |
| 105 void RecommendationRestorerTest::TearDown() { |
| 106 TestingBrowserProcess::GetGlobal()->SetLocalState(NULL); |
| 107 testing::Test::TearDown(); |
| 108 } |
| 109 |
| 110 void RecommendationRestorerTest::SetRecommendedValues() { |
| 111 recommended_prefs_->SetBoolean(prefs::kLargeCursorEnabled, false); |
| 112 recommended_prefs_->SetBoolean(prefs::kSpokenFeedbackEnabled, false); |
| 113 recommended_prefs_->SetBoolean(prefs::kHighContrastEnabled, false); |
| 114 recommended_prefs_->SetBoolean(prefs::kScreenMagnifierEnabled, false); |
| 115 recommended_prefs_->SetInteger(prefs::kScreenMagnifierType, 0); |
| 116 } |
| 117 |
| 118 void RecommendationRestorerTest::SetUserSettings() { |
| 119 prefs_->SetBoolean(prefs::kLargeCursorEnabled, true); |
| 120 prefs_->SetBoolean(prefs::kSpokenFeedbackEnabled, true); |
| 121 prefs_->SetBoolean(prefs::kHighContrastEnabled, true); |
| 122 prefs_->SetBoolean(prefs::kScreenMagnifierEnabled, true); |
| 123 prefs_->SetInteger(prefs::kScreenMagnifierType, ash::MAGNIFIER_FULL); |
| 124 } |
| 125 |
| 126 void RecommendationRestorerTest::CreateLoginProfile() { |
| 127 ASSERT_FALSE(restorer_); |
| 128 TestingProfile* profile = profile_manager_->CreateTestingProfile( |
| 129 chrome::kInitialProfile, prefs_owner_.Pass(), |
| 130 UTF8ToUTF16(chrome::kInitialProfile), 0); |
| 131 restorer_ = RecommendationRestorerFactory::GetForProfile(profile); |
| 132 EXPECT_TRUE(restorer_); |
| 133 } |
| 134 |
| 135 void RecommendationRestorerTest::CreateUserProfile() { |
| 136 ASSERT_FALSE(restorer_); |
| 137 TestingProfile* profile = profile_manager_->CreateTestingProfile( |
| 138 "user", prefs_owner_.Pass(), UTF8ToUTF16("user"), 0); |
| 139 restorer_ = RecommendationRestorerFactory::GetForProfile(profile); |
| 140 EXPECT_TRUE(restorer_); |
| 141 } |
| 142 |
| 143 void RecommendationRestorerTest::NotifyOfSessionStart() { |
| 144 ASSERT_TRUE(restorer_); |
| 145 restorer_->Observe(chrome::NOTIFICATION_LOGIN_USER_CHANGED, |
| 146 content::Source<RecommendationRestorerTest>(this), |
| 147 content::NotificationService::NoDetails()); |
| 148 } |
| 149 |
| 150 void RecommendationRestorerTest::NotifyOfUserActivity() { |
| 151 ASSERT_TRUE(restorer_); |
| 152 restorer_->OnUserActivity(); |
| 153 } |
| 154 |
| 155 void RecommendationRestorerTest::VerifyPrefFollowsUser( |
| 156 const char* pref_name, |
| 157 const base::Value& expected_value) const { |
| 158 const PrefServiceSyncable::Preference* pref = |
| 159 prefs_->FindPreference(pref_name); |
| 160 ASSERT_TRUE(pref); |
| 161 EXPECT_TRUE(pref->HasUserSetting()); |
| 162 const base::Value* value = pref->GetValue(); |
| 163 ASSERT_TRUE(value); |
| 164 EXPECT_TRUE(expected_value.Equals(value)); |
| 165 } |
| 166 |
| 167 void RecommendationRestorerTest::VerifyPrefsFollowUser() const { |
| 168 VerifyPrefFollowsUser(prefs::kLargeCursorEnabled, |
| 169 base::FundamentalValue(true)); |
| 170 VerifyPrefFollowsUser(prefs::kSpokenFeedbackEnabled, |
| 171 base::FundamentalValue(true)); |
| 172 VerifyPrefFollowsUser(prefs::kHighContrastEnabled, |
| 173 base::FundamentalValue(true)); |
| 174 VerifyPrefFollowsUser(prefs::kScreenMagnifierEnabled, |
| 175 base::FundamentalValue(true)); |
| 176 VerifyPrefFollowsUser(prefs::kScreenMagnifierType, |
| 177 base::FundamentalValue(ash::MAGNIFIER_FULL)); |
| 178 } |
| 179 |
| 180 void RecommendationRestorerTest::VerifyPrefFollowsRecommendation( |
| 181 const char* pref_name, |
| 182 const base::Value& expected_value) const { |
| 183 const PrefServiceSyncable::Preference* pref = |
| 184 prefs_->FindPreference(pref_name); |
| 185 ASSERT_TRUE(pref); |
| 186 EXPECT_TRUE(pref->IsRecommended()); |
| 187 EXPECT_FALSE(pref->HasUserSetting()); |
| 188 const base::Value* value = pref->GetValue(); |
| 189 ASSERT_TRUE(value); |
| 190 EXPECT_TRUE(expected_value.Equals(value)); |
| 191 } |
| 192 |
| 193 void RecommendationRestorerTest::VerifyPrefsFollowRecommendations() const { |
| 194 VerifyPrefFollowsRecommendation(prefs::kLargeCursorEnabled, |
| 195 base::FundamentalValue(false)); |
| 196 VerifyPrefFollowsRecommendation(prefs::kSpokenFeedbackEnabled, |
| 197 base::FundamentalValue(false)); |
| 198 VerifyPrefFollowsRecommendation(prefs::kHighContrastEnabled, |
| 199 base::FundamentalValue(false)); |
| 200 VerifyPrefFollowsRecommendation(prefs::kScreenMagnifierEnabled, |
| 201 base::FundamentalValue(false)); |
| 202 VerifyPrefFollowsRecommendation(prefs::kScreenMagnifierType, |
| 203 base::FundamentalValue(0)); |
| 204 } |
| 205 |
| 206 void RecommendationRestorerTest::VerifyNotListeningForNotifications() const { |
| 207 ASSERT_TRUE(restorer_); |
| 208 EXPECT_TRUE(restorer_->pref_change_registrar_.IsEmpty()); |
| 209 EXPECT_TRUE(restorer_->notification_registrar_.IsEmpty()); |
| 210 } |
| 211 |
| 212 void RecommendationRestorerTest::VerifyTimerIsStopped() const { |
| 213 ASSERT_TRUE(restorer_); |
| 214 EXPECT_FALSE(restorer_->restore_timer_.IsRunning()); |
| 215 } |
| 216 |
| 217 void RecommendationRestorerTest::VerifyTimerIsRunning() const { |
| 218 ASSERT_TRUE(restorer_); |
| 219 EXPECT_TRUE(restorer_->restore_timer_.IsRunning()); |
| 220 EXPECT_EQ(base::TimeDelta::FromMilliseconds(kRestoreDelayInMs), |
| 221 restorer_->restore_timer_.GetCurrentDelay()); |
| 222 } |
| 223 |
| 224 TEST_F(RecommendationRestorerTest, CreateForUserProfile) { |
| 225 // Verifies that when a RecommendationRestorer is created for a user profile, |
| 226 // it does not start listening for any notifications, does not clear user |
| 227 // settings on initialization and does not start a timer that will clear user |
| 228 // settings eventually. |
| 229 SetRecommendedValues(); |
| 230 SetUserSettings(); |
| 231 |
| 232 CreateUserProfile(); |
| 233 VerifyNotListeningForNotifications(); |
| 234 VerifyPrefsFollowUser(); |
| 235 VerifyTimerIsStopped(); |
| 236 } |
| 237 |
| 238 TEST_F(RecommendationRestorerTest, NoRecommendations) { |
| 239 // Verifies that when no recommended values have been set and a |
| 240 // RecommendationRestorer is created for the login profile, it does not clear |
| 241 // user settings on initialization and does not start a timer that will clear |
| 242 // user settings eventually. |
| 243 SetUserSettings(); |
| 244 |
| 245 CreateLoginProfile(); |
| 246 VerifyPrefsFollowUser(); |
| 247 VerifyTimerIsStopped(); |
| 248 } |
| 249 |
| 250 TEST_F(RecommendationRestorerTest, RestoreOnStartup) { |
| 251 // Verifies that when recommended values have been set and a |
| 252 // RecommendationRestorer is created for the login profile, it clears user |
| 253 // settings on initialization. |
| 254 SetRecommendedValues(); |
| 255 SetUserSettings(); |
| 256 |
| 257 CreateLoginProfile(); |
| 258 VerifyPrefsFollowRecommendations(); |
| 259 VerifyTimerIsStopped(); |
| 260 } |
| 261 |
| 262 TEST_F(RecommendationRestorerTest, RestoreOnRecommendationChangeOnLoginScreen) { |
| 263 // Verifies that if recommended values change while the login screen is being |
| 264 // shown, a timer is started that will clear user settings eventually. |
| 265 SetUserSettings(); |
| 266 |
| 267 CreateLoginProfile(); |
| 268 |
| 269 VerifyTimerIsStopped(); |
| 270 recommended_prefs_->SetBoolean(prefs::kLargeCursorEnabled, false); |
| 271 VerifyPrefFollowsUser(prefs::kLargeCursorEnabled, |
| 272 base::FundamentalValue(true)); |
| 273 VerifyTimerIsRunning(); |
| 274 runner_->RunUntilIdle(); |
| 275 VerifyPrefFollowsRecommendation(prefs::kLargeCursorEnabled, |
| 276 base::FundamentalValue(false)); |
| 277 |
| 278 VerifyTimerIsStopped(); |
| 279 recommended_prefs_->SetBoolean(prefs::kSpokenFeedbackEnabled, false); |
| 280 VerifyPrefFollowsUser(prefs::kSpokenFeedbackEnabled, |
| 281 base::FundamentalValue(true)); |
| 282 VerifyTimerIsRunning(); |
| 283 runner_->RunUntilIdle(); |
| 284 VerifyPrefFollowsRecommendation(prefs::kSpokenFeedbackEnabled, |
| 285 base::FundamentalValue(false)); |
| 286 |
| 287 VerifyTimerIsStopped(); |
| 288 recommended_prefs_->SetBoolean(prefs::kHighContrastEnabled, false); |
| 289 VerifyPrefFollowsUser(prefs::kHighContrastEnabled, |
| 290 base::FundamentalValue(true)); |
| 291 VerifyTimerIsRunning(); |
| 292 runner_->RunUntilIdle(); |
| 293 VerifyPrefFollowsRecommendation(prefs::kHighContrastEnabled, |
| 294 base::FundamentalValue(false)); |
| 295 |
| 296 VerifyTimerIsStopped(); |
| 297 recommended_prefs_->SetBoolean(prefs::kScreenMagnifierEnabled, false); |
| 298 recommended_prefs_->SetInteger(prefs::kScreenMagnifierType, 0); |
| 299 VerifyPrefFollowsUser(prefs::kScreenMagnifierEnabled, |
| 300 base::FundamentalValue(true)); |
| 301 VerifyPrefFollowsUser(prefs::kScreenMagnifierType, |
| 302 base::FundamentalValue(ash::MAGNIFIER_FULL)); |
| 303 VerifyTimerIsRunning(); |
| 304 runner_->RunUntilIdle(); |
| 305 VerifyPrefFollowsRecommendation(prefs::kScreenMagnifierEnabled, |
| 306 base::FundamentalValue(false)); |
| 307 VerifyPrefFollowsRecommendation(prefs::kScreenMagnifierType, |
| 308 base::FundamentalValue(0)); |
| 309 |
| 310 VerifyTimerIsStopped(); |
| 311 } |
| 312 |
| 313 TEST_F(RecommendationRestorerTest, RestoreOnRecommendationChangeInUserSession) { |
| 314 // Verifies that if recommended values change while a user session is in |
| 315 // progress, user settings are cleared immediately. |
| 316 SetUserSettings(); |
| 317 |
| 318 CreateLoginProfile(); |
| 319 NotifyOfSessionStart(); |
| 320 |
| 321 VerifyPrefFollowsUser(prefs::kLargeCursorEnabled, |
| 322 base::FundamentalValue(true)); |
| 323 recommended_prefs_->SetBoolean(prefs::kLargeCursorEnabled, false); |
| 324 VerifyTimerIsStopped(); |
| 325 VerifyPrefFollowsRecommendation(prefs::kLargeCursorEnabled, |
| 326 base::FundamentalValue(false)); |
| 327 |
| 328 VerifyPrefFollowsUser(prefs::kSpokenFeedbackEnabled, |
| 329 base::FundamentalValue(true)); |
| 330 recommended_prefs_->SetBoolean(prefs::kSpokenFeedbackEnabled, false); |
| 331 VerifyTimerIsStopped(); |
| 332 VerifyPrefFollowsRecommendation(prefs::kSpokenFeedbackEnabled, |
| 333 base::FundamentalValue(false)); |
| 334 |
| 335 VerifyPrefFollowsUser(prefs::kHighContrastEnabled, |
| 336 base::FundamentalValue(true)); |
| 337 recommended_prefs_->SetBoolean(prefs::kHighContrastEnabled, false); |
| 338 VerifyTimerIsStopped(); |
| 339 VerifyPrefFollowsRecommendation(prefs::kHighContrastEnabled, |
| 340 base::FundamentalValue(false)); |
| 341 |
| 342 VerifyPrefFollowsUser(prefs::kScreenMagnifierEnabled, |
| 343 base::FundamentalValue(true)); |
| 344 VerifyPrefFollowsUser(prefs::kScreenMagnifierType, |
| 345 base::FundamentalValue(ash::MAGNIFIER_FULL)); |
| 346 recommended_prefs_->SetBoolean(prefs::kScreenMagnifierEnabled, false); |
| 347 recommended_prefs_->SetInteger(prefs::kScreenMagnifierType, 0); |
| 348 VerifyTimerIsStopped(); |
| 349 VerifyPrefFollowsRecommendation(prefs::kScreenMagnifierEnabled, |
| 350 base::FundamentalValue(false)); |
| 351 VerifyPrefFollowsRecommendation(prefs::kScreenMagnifierType, |
| 352 base::FundamentalValue(0)); |
| 353 } |
| 354 |
| 355 TEST_F(RecommendationRestorerTest, DoNothingOnUserChange) { |
| 356 // Verifies that if no recommended values have been set and user settings |
| 357 // change, the user settings are not cleared immediately and no timer is |
| 358 // started that will clear the user settings eventually. |
| 359 CreateLoginProfile(); |
| 360 |
| 361 prefs_->SetBoolean(prefs::kLargeCursorEnabled, true); |
| 362 VerifyPrefFollowsUser(prefs::kLargeCursorEnabled, |
| 363 base::FundamentalValue(true)); |
| 364 VerifyTimerIsStopped(); |
| 365 |
| 366 prefs_->SetBoolean(prefs::kSpokenFeedbackEnabled, true); |
| 367 VerifyPrefFollowsUser(prefs::kSpokenFeedbackEnabled, |
| 368 base::FundamentalValue(true)); |
| 369 VerifyTimerIsStopped(); |
| 370 |
| 371 prefs_->SetBoolean(prefs::kHighContrastEnabled, true); |
| 372 VerifyPrefFollowsUser(prefs::kHighContrastEnabled, |
| 373 base::FundamentalValue(true)); |
| 374 VerifyTimerIsStopped(); |
| 375 |
| 376 prefs_->SetBoolean(prefs::kScreenMagnifierEnabled, true); |
| 377 VerifyPrefFollowsUser(prefs::kScreenMagnifierEnabled, |
| 378 base::FundamentalValue(true)); |
| 379 VerifyTimerIsStopped(); |
| 380 |
| 381 prefs_->SetBoolean(prefs::kScreenMagnifierEnabled, true); |
| 382 prefs_->SetInteger(prefs::kScreenMagnifierType, ash::MAGNIFIER_FULL); |
| 383 VerifyPrefFollowsUser(prefs::kScreenMagnifierEnabled, |
| 384 base::FundamentalValue(true)); |
| 385 VerifyPrefFollowsUser(prefs::kScreenMagnifierType, |
| 386 base::FundamentalValue(ash::MAGNIFIER_FULL)); |
| 387 VerifyTimerIsStopped(); |
| 388 } |
| 389 |
| 390 TEST_F(RecommendationRestorerTest, RestoreOnUserChange) { |
| 391 // Verifies that if recommended values have been set and user settings change |
| 392 // while the login screen is being shown, a timer is started that will clear |
| 393 // the user settings eventually. |
| 394 SetRecommendedValues(); |
| 395 |
| 396 CreateLoginProfile(); |
| 397 |
| 398 VerifyTimerIsStopped(); |
| 399 prefs_->SetBoolean(prefs::kLargeCursorEnabled, true); |
| 400 VerifyPrefFollowsUser(prefs::kLargeCursorEnabled, |
| 401 base::FundamentalValue(true)); |
| 402 VerifyTimerIsRunning(); |
| 403 runner_->RunUntilIdle(); |
| 404 VerifyPrefFollowsRecommendation(prefs::kLargeCursorEnabled, |
| 405 base::FundamentalValue(false)); |
| 406 |
| 407 VerifyTimerIsStopped(); |
| 408 prefs_->SetBoolean(prefs::kSpokenFeedbackEnabled, true); |
| 409 VerifyPrefFollowsUser(prefs::kSpokenFeedbackEnabled, |
| 410 base::FundamentalValue(true)); |
| 411 VerifyTimerIsRunning(); |
| 412 runner_->RunUntilIdle(); |
| 413 VerifyPrefFollowsRecommendation(prefs::kSpokenFeedbackEnabled, |
| 414 base::FundamentalValue(false)); |
| 415 |
| 416 VerifyTimerIsStopped(); |
| 417 prefs_->SetBoolean(prefs::kHighContrastEnabled, true); |
| 418 VerifyPrefFollowsUser(prefs::kHighContrastEnabled, |
| 419 base::FundamentalValue(true)); |
| 420 VerifyTimerIsRunning(); |
| 421 runner_->RunUntilIdle(); |
| 422 VerifyPrefFollowsRecommendation(prefs::kHighContrastEnabled, |
| 423 base::FundamentalValue(false)); |
| 424 |
| 425 VerifyTimerIsStopped(); |
| 426 prefs_->SetBoolean(prefs::kScreenMagnifierEnabled, true); |
| 427 prefs_->SetInteger(prefs::kScreenMagnifierType, ash::MAGNIFIER_FULL); |
| 428 VerifyPrefFollowsUser(prefs::kScreenMagnifierEnabled, |
| 429 base::FundamentalValue(true)); |
| 430 VerifyPrefFollowsUser(prefs::kScreenMagnifierType, |
| 431 base::FundamentalValue(ash::MAGNIFIER_FULL)); |
| 432 VerifyTimerIsRunning(); |
| 433 runner_->RunUntilIdle(); |
| 434 VerifyPrefFollowsRecommendation(prefs::kScreenMagnifierEnabled, |
| 435 base::FundamentalValue(false)); |
| 436 VerifyPrefFollowsRecommendation(prefs::kScreenMagnifierType, |
| 437 base::FundamentalValue(0)); |
| 438 |
| 439 VerifyTimerIsStopped(); |
| 440 } |
| 441 |
| 442 TEST_F(RecommendationRestorerTest, RestoreOnSessionStart) { |
| 443 // Verifies that if recommended values have been set, user settings have |
| 444 // changed and a session is then started, the user settings are cleared |
| 445 // immediately and the timer that would have cleared them eventually on the |
| 446 // login screen is stopped. |
| 447 SetRecommendedValues(); |
| 448 |
| 449 CreateLoginProfile(); |
| 450 SetUserSettings(); |
| 451 |
| 452 NotifyOfSessionStart(); |
| 453 VerifyPrefsFollowRecommendations(); |
| 454 VerifyTimerIsStopped(); |
| 455 } |
| 456 |
| 457 TEST_F(RecommendationRestorerTest, DoNothingOnSessionStart) { |
| 458 // Verifies that if recommended values have not been set, user settings have |
| 459 // changed and a session is then started, the user settings are not cleared |
| 460 // immediately. |
| 461 CreateLoginProfile(); |
| 462 SetUserSettings(); |
| 463 |
| 464 NotifyOfSessionStart(); |
| 465 VerifyPrefsFollowUser(); |
| 466 VerifyTimerIsStopped(); |
| 467 } |
| 468 |
| 469 TEST_F(RecommendationRestorerTest, UserActivityResetsTimer) { |
| 470 // Verifies that user activity resets the timer which clears user settings. |
| 471 recommended_prefs_->SetBoolean(prefs::kLargeCursorEnabled, false); |
| 472 |
| 473 CreateLoginProfile(); |
| 474 |
| 475 prefs_->SetBoolean(prefs::kLargeCursorEnabled, true); |
| 476 VerifyTimerIsRunning(); |
| 477 |
| 478 // Notify that there is user activity, then fast forward until the originally |
| 479 // set timer fires. |
| 480 NotifyOfUserActivity(); |
| 481 runner_->RunPendingTasks(); |
| 482 VerifyPrefFollowsUser(prefs::kLargeCursorEnabled, |
| 483 base::FundamentalValue(true)); |
| 484 |
| 485 // Fast forward until the reset timer fires. |
| 486 VerifyTimerIsRunning(); |
| 487 runner_->RunUntilIdle(); |
| 488 VerifyPrefFollowsRecommendation(prefs::kLargeCursorEnabled, |
| 489 base::FundamentalValue(false)); |
| 490 VerifyTimerIsStopped(); |
| 491 } |
| 492 |
| 493 } // namespace policy |
OLD | NEW |