Index: chrome/browser/chromeos/policy/recommendation_restorer_unittest.cc |
diff --git a/chrome/browser/chromeos/policy/recommendation_restorer_unittest.cc b/chrome/browser/chromeos/policy/recommendation_restorer_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..102d730ab51f4c5629b26c144e7cf26cff56e3eb |
--- /dev/null |
+++ b/chrome/browser/chromeos/policy/recommendation_restorer_unittest.cc |
@@ -0,0 +1,647 @@ |
+// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/chromeos/policy/recommendation_restorer.h" |
+ |
+#include <deque> |
+ |
+#include "ash/magnifier/magnifier_constants.h" |
+#include "base/command_line.h" |
+#include "base/prefs/pref_notifier_impl.h" |
+#include "base/prefs/testing_pref_store.h" |
+#include "base/strings/utf_string_conversions.h" |
+#include "base/test/test_pending_task.h" |
+#include "base/test/test_simple_task_runner.h" |
+#include "base/thread_task_runner_handle.h" |
+#include "base/time.h" |
+#include "base/values.h" |
+#include "chrome/browser/chromeos/policy/recommendation_restorer_factory.h" |
+#include "chrome/browser/prefs/browser_prefs.h" |
+#include "chrome/browser/prefs/pref_service_syncable.h" |
+#include "chrome/common/chrome_constants.h" |
+#include "chrome/common/chrome_notification_types.h" |
+#include "chrome/common/pref_names.h" |
+#include "chrome/test/base/testing_browser_process.h" |
+#include "chrome/test/base/testing_pref_service_syncable.h" |
+#include "chrome/test/base/testing_profile.h" |
+#include "chrome/test/base/testing_profile_manager.h" |
+#include "chromeos/chromeos_switches.h" |
+#include "components/user_prefs/pref_registry_syncable.h" |
+#include "content/public/browser/notification_details.h" |
+#include "content/public/browser/notification_service.h" |
+#include "content/public/browser/notification_source.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace policy { |
+ |
+namespace { |
+ // The amount of idle time after which recommended values are restored. |
+ const int kRestoreDelayInMs = 60 * 1000; // 1 minute. |
+} // namespace |
+ |
+class RecommendationRestorerTest : public testing::Test { |
+ protected: |
+ RecommendationRestorerTest(); |
+ |
+ // testing::Test: |
+ virtual void SetUp() OVERRIDE; |
+ virtual void TearDown() OVERRIDE; |
+ |
+ void CreateLoginProfile(); |
+ void CreateUserProfile(); |
+ |
+ void NotifyOfUserActivity(); |
+ |
+ bool DoesRestorerInternalExist() const; |
+ bool IsTimerStopped() const; |
+ void VerifyTimerIsRunning(bool allow_partial_delay) const; |
+ |
+ TestingPrefStore* recommended_prefs_; // Not owned. |
+ TestingPrefServiceSyncable* prefs_; // Not owned. |
+ RecommendationRestorer* restorer_; // Not owned. |
+ |
+ scoped_refptr<base::TestSimpleTaskRunner> runner_; |
+ base::ThreadTaskRunnerHandle runner_handler_; |
+ |
+ private: |
+ scoped_ptr<PrefServiceSyncable> prefs_owner_; |
+ |
+ TestingProfileManager* profile_manager_; // Not owned. |
+ |
+ DISALLOW_COPY_AND_ASSIGN(RecommendationRestorerTest); |
+}; |
+ |
+RecommendationRestorerTest::RecommendationRestorerTest() |
+ : recommended_prefs_(new TestingPrefStore), |
+ prefs_(new TestingPrefServiceSyncable( |
+ new TestingPrefStore, |
+ new TestingPrefStore, |
+ recommended_prefs_, |
+ new user_prefs::PrefRegistrySyncable, |
+ new PrefNotifierImpl)), |
+ restorer_(NULL), |
+ runner_(new base::TestSimpleTaskRunner), |
+ runner_handler_(runner_), |
+ prefs_owner_(prefs_), |
+ profile_manager_(NULL) { |
+ chrome::RegisterUserPrefs(prefs_->registry()); |
+} |
+ |
+void RecommendationRestorerTest::SetUp() { |
+ testing::Test::SetUp(); |
+ profile_manager_ = |
+ new TestingProfileManager(TestingBrowserProcess::GetGlobal()); |
+ ASSERT_TRUE(profile_manager_->SetUp()); |
+} |
+ |
+void RecommendationRestorerTest::TearDown() { |
+ TestingBrowserProcess::GetGlobal()->SetLocalState(NULL); |
+ testing::Test::TearDown(); |
+} |
+ |
+void RecommendationRestorerTest::CreateLoginProfile() { |
+ ASSERT_FALSE(restorer_); |
+ TestingProfile* profile = profile_manager_->CreateTestingProfile( |
+ chrome::kInitialProfile, prefs_owner_.Pass(), |
+ UTF8ToUTF16(chrome::kInitialProfile), 0); |
+ restorer_ = RecommendationRestorerFactory::GetForProfile(profile); |
+} |
+ |
+void RecommendationRestorerTest::CreateUserProfile() { |
+ ASSERT_FALSE(restorer_); |
+ TestingProfile* profile = profile_manager_->CreateTestingProfile( |
+ "user", prefs_owner_.Pass(), UTF8ToUTF16("user"), 0); |
+ restorer_ = RecommendationRestorerFactory::GetForProfile(profile); |
+} |
+ |
+void RecommendationRestorerTest::NotifyOfUserActivity() { |
+ ASSERT_TRUE(restorer_); |
+ ASSERT_TRUE(restorer_->recommendation_restorer_internal_); |
+ restorer_->recommendation_restorer_internal_->OnUserActivity(); |
+} |
+ |
+bool RecommendationRestorerTest::DoesRestorerInternalExist() const { |
+ return restorer_ && restorer_->recommendation_restorer_internal_; |
+} |
+ |
+bool RecommendationRestorerTest::IsTimerStopped() const { |
+ return runner_->GetPendingTasks().empty(); |
+} |
+ |
+void RecommendationRestorerTest::VerifyTimerIsRunning( |
+ bool allow_partial_delay) const { |
+ const std::deque<base::TestPendingTask>& tasks = runner_->GetPendingTasks(); |
+ ASSERT_EQ(1u, tasks.size()); |
+ if (allow_partial_delay) { |
+ EXPECT_GE(base::TimeDelta::FromMilliseconds(kRestoreDelayInMs), |
+ tasks.front().delay); |
+ } else { |
+ EXPECT_EQ(base::TimeDelta::FromMilliseconds(kRestoreDelayInMs), |
+ tasks.front().delay); |
+ } |
+} |
+ |
+TEST_F(RecommendationRestorerTest, CreateForLoginProfileOnLoginScreen) { |
+ // Verifies that when a RecommendationRestorer is created for the login |
+ // profile on the login screen, a RecommendationRestorerInternal is created |
+ // and subsequently destroyed when a user session starts. |
+ CommandLine::ForCurrentProcess()->AppendSwitch( |
+ chromeos::switches::kLoginManager); |
+ CreateLoginProfile(); |
+ ASSERT_TRUE(restorer_); |
+ EXPECT_TRUE(DoesRestorerInternalExist()); |
+ |
+ restorer_->Observe( |
+ chrome::NOTIFICATION_LOGIN_USER_CHANGED, |
+ content::Source<RecommendationRestorerTest>(this), |
+ content::NotificationService::NoDetails()); |
+ EXPECT_FALSE(DoesRestorerInternalExist()); |
+} |
+ |
+TEST_F(RecommendationRestorerTest, CreateForLoginProfileInSession) { |
+ // Verifies that when a RecommendationRestorer is created for the login |
+ // profile during a user session (i.e. during a browser restart after a |
+ // crash), no RecommendationRestorerInternal is created. |
+ CreateLoginProfile(); |
+ EXPECT_TRUE(restorer_); |
+ EXPECT_FALSE(DoesRestorerInternalExist()); |
+} |
+ |
+TEST_F(RecommendationRestorerTest, CreateForUserProfileOnLoginScreen) { |
+ // Verifies that when a RecommendationRestorer is created for a user profile |
+ // on the login screen, no RecommendationRestorerInternal is created. |
+ CommandLine::ForCurrentProcess()->AppendSwitch( |
+ chromeos::switches::kLoginManager); |
+ CreateUserProfile(); |
+ EXPECT_TRUE(restorer_); |
+ EXPECT_FALSE(DoesRestorerInternalExist()); |
+} |
+ |
+TEST_F(RecommendationRestorerTest, CreateForUserProfileInSession) { |
+ // Verifies that when a RecommendationRestorer is created for a user profile |
+ // during a user session, no RecommendationRestorerInternal is created. |
+ CreateUserProfile(); |
+ EXPECT_TRUE(restorer_); |
+ EXPECT_FALSE(DoesRestorerInternalExist()); |
+} |
+ |
+TEST_F(RecommendationRestorerTest, NoRecommendations) { |
+ // Verifies that if no recommended values have been set, user settings are not |
+ // cleared when the RecommendationRestorer is instantiated. |
+ prefs_->SetBoolean(prefs::kLargeCursorEnabled, true); |
+ prefs_->SetBoolean(prefs::kSpokenFeedbackEnabled, true); |
+ prefs_->SetBoolean(prefs::kHighContrastEnabled, true); |
+ prefs_->SetBoolean(prefs::kScreenMagnifierEnabled, true); |
+ prefs_->SetInteger(prefs::kScreenMagnifierType, ash::MAGNIFIER_FULL); |
+ |
+ CommandLine::ForCurrentProcess()->AppendSwitch( |
+ chromeos::switches::kLoginManager); |
+ CreateLoginProfile(); |
+ EXPECT_TRUE(DoesRestorerInternalExist()); |
+ |
+ const PrefServiceSyncable::Preference* pref = |
+ prefs_->FindPreference(prefs::kLargeCursorEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->HasUserSetting()); |
+ const base::Value* value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(true).Equals(value)); |
+ |
+ pref = prefs_->FindPreference(prefs::kSpokenFeedbackEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(true).Equals(value)); |
+ |
+ pref = prefs_->FindPreference(prefs::kHighContrastEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(true).Equals(value)); |
+ |
+ pref = prefs_->FindPreference(prefs::kScreenMagnifierEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(true).Equals(value)); |
+ |
+ pref = prefs_->FindPreference(prefs::kScreenMagnifierType); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(ash::MAGNIFIER_FULL).Equals(value)); |
+ |
+ EXPECT_TRUE(IsTimerStopped()); |
+} |
+ |
+TEST_F(RecommendationRestorerTest, RestoreOnStartup) { |
+ // Verifies that if recommended values have been set, user settings are |
+ // cleared when the RecommendationRestorer is instantiated. |
+ recommended_prefs_->SetBoolean(prefs::kLargeCursorEnabled, false); |
+ recommended_prefs_->SetBoolean(prefs::kSpokenFeedbackEnabled, false); |
+ recommended_prefs_->SetBoolean(prefs::kHighContrastEnabled, false); |
+ recommended_prefs_->SetBoolean(prefs::kScreenMagnifierEnabled, false); |
+ recommended_prefs_->SetInteger(prefs::kScreenMagnifierType, 0); |
+ |
+ prefs_->SetBoolean(prefs::kLargeCursorEnabled, true); |
+ prefs_->SetBoolean(prefs::kSpokenFeedbackEnabled, true); |
+ prefs_->SetBoolean(prefs::kHighContrastEnabled, true); |
+ prefs_->SetBoolean(prefs::kScreenMagnifierEnabled, true); |
+ prefs_->SetInteger(prefs::kScreenMagnifierType, ash::MAGNIFIER_FULL); |
+ |
+ CommandLine::ForCurrentProcess()->AppendSwitch( |
+ chromeos::switches::kLoginManager); |
+ CreateLoginProfile(); |
+ EXPECT_TRUE(DoesRestorerInternalExist()); |
+ |
+ const PrefServiceSyncable::Preference* pref = |
+ prefs_->FindPreference(prefs::kLargeCursorEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->IsRecommended()); |
+ EXPECT_FALSE(pref->HasUserSetting()); |
+ const base::Value* value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(false).Equals(value)); |
+ |
+ pref = prefs_->FindPreference(prefs::kSpokenFeedbackEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->IsRecommended()); |
+ EXPECT_FALSE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(false).Equals(value)); |
+ |
+ pref = prefs_->FindPreference(prefs::kHighContrastEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->IsRecommended()); |
+ EXPECT_FALSE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(false).Equals(value)); |
+ |
+ pref = prefs_->FindPreference(prefs::kScreenMagnifierEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->IsRecommended()); |
+ EXPECT_FALSE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(false).Equals(value)); |
+ |
+ pref = prefs_->FindPreference(prefs::kScreenMagnifierType); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->IsRecommended()); |
+ EXPECT_FALSE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(0).Equals(value)); |
+ |
+ EXPECT_TRUE(IsTimerStopped()); |
+} |
+ |
+TEST_F(RecommendationRestorerTest, RestoreOnRecommendationChange) { |
+ // Verifies that if recommended values change, user settings are cleared |
+ // immediately when the RecommendationRestorer is running. |
+ prefs_->SetBoolean(prefs::kLargeCursorEnabled, true); |
+ prefs_->SetBoolean(prefs::kSpokenFeedbackEnabled, true); |
+ prefs_->SetBoolean(prefs::kHighContrastEnabled, true); |
+ prefs_->SetBoolean(prefs::kScreenMagnifierEnabled, true); |
+ prefs_->SetInteger(prefs::kScreenMagnifierType, ash::MAGNIFIER_FULL); |
+ |
+ CommandLine::ForCurrentProcess()->AppendSwitch( |
+ chromeos::switches::kLoginManager); |
+ CreateLoginProfile(); |
+ EXPECT_TRUE(DoesRestorerInternalExist()); |
+ |
+ const PrefServiceSyncable::Preference* pref = |
+ prefs_->FindPreference(prefs::kLargeCursorEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->HasUserSetting()); |
+ const base::Value* value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(true).Equals(value)); |
+ |
+ pref = prefs_->FindPreference(prefs::kSpokenFeedbackEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(true).Equals(value)); |
+ |
+ pref = prefs_->FindPreference(prefs::kHighContrastEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(true).Equals(value)); |
+ |
+ pref = prefs_->FindPreference(prefs::kScreenMagnifierEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(true).Equals(value)); |
+ |
+ pref = prefs_->FindPreference(prefs::kScreenMagnifierType); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(ash::MAGNIFIER_FULL).Equals(value)); |
+ |
+ EXPECT_TRUE(IsTimerStopped()); |
+ |
+ recommended_prefs_->SetBoolean(prefs::kLargeCursorEnabled, false); |
+ |
+ pref = prefs_->FindPreference(prefs::kLargeCursorEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->IsRecommended()); |
+ EXPECT_FALSE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(false).Equals(value)); |
+ |
+ EXPECT_TRUE(IsTimerStopped()); |
+ |
+ recommended_prefs_->SetBoolean(prefs::kSpokenFeedbackEnabled, false); |
+ |
+ pref = prefs_->FindPreference(prefs::kSpokenFeedbackEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->IsRecommended()); |
+ EXPECT_FALSE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(false).Equals(value)); |
+ |
+ EXPECT_TRUE(IsTimerStopped()); |
+ |
+ recommended_prefs_->SetBoolean(prefs::kHighContrastEnabled, false); |
+ |
+ pref = prefs_->FindPreference(prefs::kHighContrastEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->IsRecommended()); |
+ EXPECT_FALSE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(false).Equals(value)); |
+ |
+ EXPECT_TRUE(IsTimerStopped()); |
+ |
+ recommended_prefs_->SetBoolean(prefs::kScreenMagnifierEnabled, false); |
+ recommended_prefs_->SetInteger(prefs::kScreenMagnifierType, 0); |
+ |
+ pref = prefs_->FindPreference(prefs::kScreenMagnifierEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->IsRecommended()); |
+ EXPECT_FALSE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(false).Equals(value)); |
+ |
+ pref = prefs_->FindPreference(prefs::kScreenMagnifierType); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->IsRecommended()); |
+ EXPECT_FALSE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(0).Equals(value)); |
+ |
+ EXPECT_TRUE(IsTimerStopped()); |
+} |
+ |
+TEST_F(RecommendationRestorerTest, DoNothingOnUserChange) { |
+ // Verifies that if no recommended values have been set and user settings |
+ // change, they are not cleared whenthe RecommendationRestorer is running. |
+ CommandLine::ForCurrentProcess()->AppendSwitch( |
+ chromeos::switches::kLoginManager); |
+ CreateLoginProfile(); |
+ EXPECT_TRUE(DoesRestorerInternalExist()); |
+ |
+ EXPECT_TRUE(IsTimerStopped()); |
+ |
+ prefs_->SetBoolean(prefs::kLargeCursorEnabled, true); |
+ const PrefServiceSyncable::Preference* pref = |
+ prefs_->FindPreference(prefs::kLargeCursorEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->HasUserSetting()); |
+ const base::Value* value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(true).Equals(value)); |
+ |
+ EXPECT_TRUE(IsTimerStopped()); |
+ |
+ prefs_->SetBoolean(prefs::kSpokenFeedbackEnabled, true); |
+ pref = prefs_->FindPreference(prefs::kSpokenFeedbackEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(true).Equals(value)); |
+ |
+ EXPECT_TRUE(IsTimerStopped()); |
+ |
+ prefs_->SetBoolean(prefs::kHighContrastEnabled, true); |
+ pref = prefs_->FindPreference(prefs::kHighContrastEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(true).Equals(value)); |
+ |
+ EXPECT_TRUE(IsTimerStopped()); |
+ |
+ prefs_->SetBoolean(prefs::kScreenMagnifierEnabled, true); |
+ pref = prefs_->FindPreference(prefs::kScreenMagnifierEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(true).Equals(value)); |
+ |
+ EXPECT_TRUE(IsTimerStopped()); |
+ |
+ prefs_->SetInteger(prefs::kScreenMagnifierType, ash::MAGNIFIER_FULL); |
+ pref = prefs_->FindPreference(prefs::kScreenMagnifierType); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(ash::MAGNIFIER_FULL).Equals(value)); |
+ |
+ EXPECT_TRUE(IsTimerStopped()); |
+ |
+ EXPECT_TRUE(IsTimerStopped()); |
+} |
+ |
+TEST_F(RecommendationRestorerTest, RunTimerAndRestoreOnUserChange) { |
+ // Verifies that if recommended values have been set and user settings |
+ // change, a timer is started and the user settings are cleared after one |
+ // minute. |
+ recommended_prefs_->SetBoolean(prefs::kLargeCursorEnabled, false); |
+ recommended_prefs_->SetBoolean(prefs::kSpokenFeedbackEnabled, false); |
+ recommended_prefs_->SetBoolean(prefs::kHighContrastEnabled, false); |
+ recommended_prefs_->SetBoolean(prefs::kScreenMagnifierEnabled, false); |
+ recommended_prefs_->SetInteger(prefs::kScreenMagnifierType, 0); |
+ |
+ CommandLine::ForCurrentProcess()->AppendSwitch( |
+ chromeos::switches::kLoginManager); |
+ CreateLoginProfile(); |
+ EXPECT_TRUE(DoesRestorerInternalExist()); |
+ |
+ EXPECT_TRUE(IsTimerStopped()); |
+ |
+ prefs_->SetBoolean(prefs::kLargeCursorEnabled, true); |
+ const PrefServiceSyncable::Preference* pref = |
+ prefs_->FindPreference(prefs::kLargeCursorEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->HasUserSetting()); |
+ const base::Value* value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(true).Equals(value)); |
+ |
+ VerifyTimerIsRunning(false); |
+ runner_->RunPendingTasks(); |
+ |
+ pref = prefs_->FindPreference(prefs::kLargeCursorEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->IsRecommended()); |
+ EXPECT_FALSE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(false).Equals(value)); |
+ |
+ EXPECT_TRUE(IsTimerStopped()); |
+ |
+ prefs_->SetBoolean(prefs::kSpokenFeedbackEnabled, true); |
+ pref = prefs_->FindPreference(prefs::kSpokenFeedbackEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(true).Equals(value)); |
+ |
+ VerifyTimerIsRunning(false); |
+ runner_->RunPendingTasks(); |
+ |
+ pref = prefs_->FindPreference(prefs::kSpokenFeedbackEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->IsRecommended()); |
+ EXPECT_FALSE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(false).Equals(value)); |
+ |
+ EXPECT_TRUE(IsTimerStopped()); |
+ |
+ prefs_->SetBoolean(prefs::kHighContrastEnabled, true); |
+ pref = prefs_->FindPreference(prefs::kHighContrastEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(true).Equals(value)); |
+ |
+ VerifyTimerIsRunning(false); |
+ runner_->RunPendingTasks(); |
+ |
+ pref = prefs_->FindPreference(prefs::kHighContrastEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->IsRecommended()); |
+ EXPECT_FALSE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(false).Equals(value)); |
+ |
+ EXPECT_TRUE(IsTimerStopped()); |
+ |
+ prefs_->SetBoolean(prefs::kScreenMagnifierEnabled, true); |
+ pref = prefs_->FindPreference(prefs::kScreenMagnifierEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(true).Equals(value)); |
+ |
+ VerifyTimerIsRunning(false); |
+ runner_->RunPendingTasks(); |
+ |
+ pref = prefs_->FindPreference(prefs::kScreenMagnifierEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->IsRecommended()); |
+ EXPECT_FALSE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(false).Equals(value)); |
+ |
+ EXPECT_TRUE(IsTimerStopped()); |
+ |
+ prefs_->SetInteger(prefs::kScreenMagnifierType, ash::MAGNIFIER_FULL); |
+ pref = prefs_->FindPreference(prefs::kScreenMagnifierType); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(ash::MAGNIFIER_FULL).Equals(value)); |
+ |
+ VerifyTimerIsRunning(false); |
+ runner_->RunPendingTasks(); |
+ |
+ pref = prefs_->FindPreference(prefs::kScreenMagnifierType); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->IsRecommended()); |
+ EXPECT_FALSE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(0).Equals(value)); |
+ |
+ EXPECT_TRUE(IsTimerStopped()); |
+} |
+ |
+TEST_F(RecommendationRestorerTest, UserActivityResetsTimer) { |
+ // Verifies that user activity resets the timer which clears user settings. |
+ recommended_prefs_->SetBoolean(prefs::kLargeCursorEnabled, false); |
+ |
+ CommandLine::ForCurrentProcess()->AppendSwitch( |
+ chromeos::switches::kLoginManager); |
+ CreateLoginProfile(); |
+ EXPECT_TRUE(DoesRestorerInternalExist()); |
+ |
+ prefs_->SetBoolean(prefs::kLargeCursorEnabled, true); |
+ |
+ VerifyTimerIsRunning(false); |
+ |
+ // Notify that there is user activity, then fast forward until the originally |
+ // set timer fires. |
+ NotifyOfUserActivity(); |
+ runner_->RunPendingTasks(); |
+ |
+ // Verify that the user setting has not been cleared yet. |
+ const PrefServiceSyncable::Preference* pref = |
+ prefs_->FindPreference(prefs::kLargeCursorEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->HasUserSetting()); |
+ const base::Value* value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(true).Equals(value)); |
+ |
+ // Fast forward until the reset timer fires. |
+ VerifyTimerIsRunning(true); |
+ runner_->RunPendingTasks(); |
+ |
+ // Verify that the user setting has been cleared now. |
+ pref = prefs_->FindPreference(prefs::kLargeCursorEnabled); |
+ ASSERT_TRUE(pref); |
+ EXPECT_TRUE(pref->IsRecommended()); |
+ EXPECT_FALSE(pref->HasUserSetting()); |
+ value = pref->GetValue(); |
+ ASSERT_TRUE(value); |
+ EXPECT_TRUE(base::FundamentalValue(false).Equals(value)); |
+ |
+ EXPECT_TRUE(IsTimerStopped()); |
+} |
+ |
+} // namespace policy |