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

Unified 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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698