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 <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 |
OLD | NEW |