summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chromeos/preferences_chromeos_browsertest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/chromeos/preferences_chromeos_browsertest.cc')
-rw-r--r--chrome/browser/chromeos/preferences_chromeos_browsertest.cc212
1 files changed, 212 insertions, 0 deletions
diff --git a/chrome/browser/chromeos/preferences_chromeos_browsertest.cc b/chrome/browser/chromeos/preferences_chromeos_browsertest.cc
new file mode 100644
index 0000000..ef44d88
--- /dev/null
+++ b/chrome/browser/chromeos/preferences_chromeos_browsertest.cc
@@ -0,0 +1,212 @@
+// Copyright 2014 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 <sys/types.h>
+
+#include "ash/shell.h"
+#include "base/command_line.h"
+#include "base/compiler_specific.h"
+#include "base/macros.h"
+#include "base/prefs/pref_service.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/chromeos/input_method/input_method_manager_impl.h"
+#include "chrome/browser/chromeos/login/login_manager_test.h"
+#include "chrome/browser/chromeos/login/startup_utils.h"
+#include "chrome/browser/chromeos/login/ui/user_adding_screen.h"
+#include "chrome/browser/chromeos/preferences.h"
+#include "chrome/browser/chromeos/profiles/profile_helper.h"
+#include "chrome/browser/chromeos/settings/cros_settings.h"
+#include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h"
+#include "chrome/browser/chromeos/system/fake_input_device_settings.h"
+#include "chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.h"
+#include "chrome/common/pref_names.h"
+#include "chromeos/chromeos_switches.h"
+#include "components/feedback/tracing_manager.h"
+#include "components/user_manager/user_manager.h"
+#include "content/public/test/test_utils.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/base/ime/chromeos/fake_ime_keyboard.h"
+#include "ui/events/event_utils.h"
+
+namespace chromeos {
+
+namespace {
+
+const char* const kTestUsers[] = {"test-user1@gmail.com",
+ "test-user2@gmail.com"};
+
+} // namespace
+
+class PreferencesTest : public LoginManagerTest {
+ public:
+ PreferencesTest()
+ : LoginManagerTest(true),
+ input_settings_(NULL),
+ keyboard_(NULL) {}
+
+ void SetUpCommandLine(base::CommandLine* command_line) override {
+ LoginManagerTest::SetUpCommandLine(command_line);
+ command_line->AppendSwitch(switches::kStubCrosSettings);
+ }
+
+ void SetUpOnMainThread() override {
+ LoginManagerTest::SetUpOnMainThread();
+ input_settings_ = new system::FakeInputDeviceSettings();
+ system::InputDeviceSettings::SetSettingsForTesting(input_settings_);
+ keyboard_ = new input_method::FakeImeKeyboard();
+ static_cast<input_method::InputMethodManagerImpl*>(
+ input_method::InputMethodManager::Get())
+ ->SetImeKeyboardForTesting(keyboard_);
+ CrosSettings::Get()->SetString(kDeviceOwner, kTestUsers[0]);
+ }
+
+ // Sets set of preferences in given |prefs|. Value of prefernece depends of
+ // |variant| value. For opposite |variant| values all preferences receive
+ // different values.
+ void SetPrefs(PrefService* prefs, bool variant) {
+ prefs->SetBoolean(prefs::kTapToClickEnabled, variant);
+ prefs->SetBoolean(prefs::kPrimaryMouseButtonRight, !variant);
+ prefs->SetBoolean(prefs::kTapDraggingEnabled, variant);
+ prefs->SetBoolean(prefs::kEnableTouchpadThreeFingerClick, !variant);
+ prefs->SetBoolean(prefs::kNaturalScroll, variant);
+ prefs->SetInteger(prefs::kMouseSensitivity, !variant);
+ prefs->SetInteger(prefs::kTouchpadSensitivity, variant);
+ prefs->SetBoolean(prefs::kTouchHudProjectionEnabled, !variant);
+ prefs->SetBoolean(prefs::kLanguageXkbAutoRepeatEnabled, variant);
+ prefs->SetInteger(prefs::kLanguageXkbAutoRepeatDelay, variant ? 100 : 500);
+ prefs->SetInteger(prefs::kLanguageXkbAutoRepeatInterval, variant ? 1 : 4);
+ prefs->SetString(prefs::kLanguagePreloadEngines,
+ variant ? "xkb:us::eng,xkb:us:dvorak:eng"
+ : "xkb:us::eng,xkb:ru::rus");
+ }
+
+ void CheckSettingsCorrespondToPrefs(PrefService* prefs) {
+ EXPECT_EQ(prefs->GetBoolean(prefs::kTapToClickEnabled),
+ input_settings_->current_touchpad_settings().GetTapToClick());
+ EXPECT_EQ(prefs->GetBoolean(prefs::kPrimaryMouseButtonRight),
+ input_settings_->current_mouse_settings()
+ .GetPrimaryButtonRight());
+ EXPECT_EQ(prefs->GetBoolean(prefs::kTapDraggingEnabled),
+ input_settings_->current_touchpad_settings().GetTapDragging());
+ EXPECT_EQ(prefs->GetBoolean(prefs::kEnableTouchpadThreeFingerClick),
+ input_settings_->current_touchpad_settings()
+ .GetThreeFingerClick());
+ EXPECT_EQ(prefs->GetInteger(prefs::kMouseSensitivity),
+ input_settings_->current_mouse_settings().GetSensitivity());
+ EXPECT_EQ(prefs->GetInteger(prefs::kTouchpadSensitivity),
+ input_settings_->current_touchpad_settings().GetSensitivity());
+ EXPECT_EQ(prefs->GetBoolean(prefs::kTouchHudProjectionEnabled),
+ ash::Shell::GetInstance()->is_touch_hud_projection_enabled());
+ EXPECT_EQ(prefs->GetBoolean(prefs::kLanguageXkbAutoRepeatEnabled),
+ keyboard_->auto_repeat_is_enabled_);
+ input_method::AutoRepeatRate rate = keyboard_->last_auto_repeat_rate_;
+ EXPECT_EQ(prefs->GetInteger(prefs::kLanguageXkbAutoRepeatDelay),
+ (int)rate.initial_delay_in_ms);
+ EXPECT_EQ(prefs->GetInteger(prefs::kLanguageXkbAutoRepeatInterval),
+ (int)rate.repeat_interval_in_ms);
+ EXPECT_EQ(prefs->GetString(prefs::kLanguageCurrentInputMethod),
+ input_method::InputMethodManager::Get()
+ ->GetActiveIMEState()
+ ->GetCurrentInputMethod()
+ .id());
+ }
+
+ void CheckLocalStateCorrespondsToPrefs(PrefService* prefs) {
+ PrefService* local_state = g_browser_process->local_state();
+ EXPECT_EQ(local_state->GetBoolean(prefs::kOwnerTapToClickEnabled),
+ prefs->GetBoolean(prefs::kTapToClickEnabled));
+ EXPECT_EQ(local_state->GetBoolean(prefs::kOwnerPrimaryMouseButtonRight),
+ prefs->GetBoolean(prefs::kPrimaryMouseButtonRight));
+ }
+
+ void DisableAnimations() {
+ // Disable animations for user transitions.
+ chrome::MultiUserWindowManagerChromeOS* manager =
+ static_cast<chrome::MultiUserWindowManagerChromeOS*>(
+ chrome::MultiUserWindowManager::GetInstance());
+ manager->SetAnimationSpeedForTest(
+ chrome::MultiUserWindowManagerChromeOS::ANIMATION_SPEED_DISABLED);
+ }
+
+ private:
+ system::FakeInputDeviceSettings* input_settings_;
+ input_method::FakeImeKeyboard* keyboard_;
+
+ DISALLOW_COPY_AND_ASSIGN(PreferencesTest);
+};
+
+IN_PROC_BROWSER_TEST_F(PreferencesTest, PRE_MultiProfiles) {
+ RegisterUser(kTestUsers[0]);
+ RegisterUser(kTestUsers[1]);
+ chromeos::StartupUtils::MarkOobeCompleted();
+}
+
+IN_PROC_BROWSER_TEST_F(PreferencesTest, MultiProfiles) {
+ user_manager::UserManager* user_manager = user_manager::UserManager::Get();
+
+ // Add first user and init its preferences. Check that corresponding
+ // settings has been changed.
+ LoginUser(kTestUsers[0]);
+ const user_manager::User* user1 = user_manager->FindUser(kTestUsers[0]);
+ PrefService* prefs1 =
+ ProfileHelper::Get()->GetProfileByUserUnsafe(user1)->GetPrefs();
+ SetPrefs(prefs1, false);
+ content::RunAllPendingInMessageLoop();
+ CheckSettingsCorrespondToPrefs(prefs1);
+
+ // Add second user and init its prefs with different values.
+ UserAddingScreen::Get()->Start();
+ content::RunAllPendingInMessageLoop();
+ DisableAnimations();
+ AddUser(kTestUsers[1]);
+ content::RunAllPendingInMessageLoop();
+ const user_manager::User* user2 = user_manager->FindUser(kTestUsers[1]);
+ EXPECT_TRUE(user2->is_active());
+ PrefService* prefs2 =
+ ProfileHelper::Get()->GetProfileByUserUnsafe(user2)->GetPrefs();
+ SetPrefs(prefs2, true);
+
+ // Check that settings were changed accordingly.
+ EXPECT_TRUE(user2->is_active());
+ CheckSettingsCorrespondToPrefs(prefs2);
+
+ // Check that changing prefs of the active user doesn't affect prefs of the
+ // inactive user.
+ scoped_ptr<base::DictionaryValue> prefs_backup =
+ prefs1->GetPreferenceValues();
+ SetPrefs(prefs2, false);
+ CheckSettingsCorrespondToPrefs(prefs2);
+ EXPECT_TRUE(prefs_backup->Equals(prefs1->GetPreferenceValues().get()));
+ SetPrefs(prefs2, true);
+ CheckSettingsCorrespondToPrefs(prefs2);
+ EXPECT_TRUE(prefs_backup->Equals(prefs1->GetPreferenceValues().get()));
+
+ // Check that changing prefs of the inactive user doesn't affect prefs of the
+ // active user.
+ prefs_backup = prefs2->GetPreferenceValues();
+ SetPrefs(prefs1, true);
+ CheckSettingsCorrespondToPrefs(prefs2);
+ EXPECT_TRUE(prefs_backup->Equals(prefs2->GetPreferenceValues().get()));
+ SetPrefs(prefs1, false);
+ CheckSettingsCorrespondToPrefs(prefs2);
+ EXPECT_TRUE(prefs_backup->Equals(prefs2->GetPreferenceValues().get()));
+
+ // Check that changing non-owner prefs doesn't change corresponding local
+ // state prefs and vice versa.
+ EXPECT_EQ(user_manager->GetOwnerEmail(), kTestUsers[0]);
+ CheckLocalStateCorrespondsToPrefs(prefs1);
+ prefs2->SetBoolean(prefs::kTapToClickEnabled,
+ !prefs1->GetBoolean(prefs::kTapToClickEnabled));
+ CheckLocalStateCorrespondsToPrefs(prefs1);
+ prefs1->SetBoolean(prefs::kTapToClickEnabled,
+ !prefs1->GetBoolean(prefs::kTapToClickEnabled));
+ CheckLocalStateCorrespondsToPrefs(prefs1);
+
+ // Switch user back.
+ user_manager->SwitchActiveUser(kTestUsers[0]);
+ CheckSettingsCorrespondToPrefs(prefs1);
+ CheckLocalStateCorrespondsToPrefs(prefs1);
+}
+
+} // namespace chromeos