Add [Search] modifier key to sticky keys overlay.
This CL also adds a new test exercising the visibility of the overlay.
BUG=421570
TEST=modified existing tests and added a new one
Review URL: https://codereview.chromium.org/638253003
Cr-Commit-Position: refs/heads/master@{#298959}
diff --git a/chrome/browser/chromeos/accessibility/sticky_keys_browsertest.cc b/chrome/browser/chromeos/accessibility/sticky_keys_browsertest.cc
index a57006f..0d2a6b6d 100644
--- a/chrome/browser/chromeos/accessibility/sticky_keys_browsertest.cc
+++ b/chrome/browser/chromeos/accessibility/sticky_keys_browsertest.cc
@@ -3,6 +3,8 @@
// found in the LICENSE file.
#include "ash/shell.h"
+#include "ash/sticky_keys/sticky_keys_controller.h"
+#include "ash/sticky_keys/sticky_keys_overlay.h"
#include "ash/system/tray/system_tray.h"
#include "base/command_line.h"
#include "base/prefs/pref_service.h"
@@ -172,4 +174,42 @@
ASSERT_EQ(0U, end);
}
+IN_PROC_BROWSER_TEST_F(StickyKeysBrowserTest, OverlayShown) {
+ const ui::KeyboardCode modifier_keys[] = { ui::VKEY_CONTROL,
+ ui::VKEY_SHIFT,
+ ui::VKEY_MENU,
+ ui::VKEY_COMMAND };
+
+ // Overlay should not be visible if sticky keys is not enabled.
+ ash::StickyKeysController* controller =
+ ash::Shell::GetInstance()->sticky_keys_controller();
+ EXPECT_FALSE(controller->GetOverlayForTest());
+ for (auto key_code : modifier_keys) {
+ SendKeyPress(key_code);
+ EXPECT_FALSE(controller->GetOverlayForTest());
+ }
+
+ // Cycle through the modifier keys and make sure each gets shown.
+ EnableStickyKeys();
+ ash::StickyKeysOverlay* sticky_keys_overlay = controller->GetOverlayForTest();
+ for (auto key_code : modifier_keys) {
+ SendKeyPress(key_code);
+ EXPECT_TRUE(sticky_keys_overlay->is_visible());
+ SendKeyPress(key_code);
+ EXPECT_TRUE(sticky_keys_overlay->is_visible());
+ SendKeyPress(key_code);
+ EXPECT_FALSE(sticky_keys_overlay->is_visible());
+ }
+
+ // Disabling sticky keys should hide the overlay.
+ SendKeyPress(ui::VKEY_CONTROL);
+ EXPECT_TRUE(sticky_keys_overlay->is_visible());
+ DisableStickyKeys();
+ EXPECT_FALSE(controller->GetOverlayForTest());
+ for (auto key_code : modifier_keys) {
+ SendKeyPress(key_code);
+ EXPECT_FALSE(controller->GetOverlayForTest());
+ }
+}
+
} // namespace chromeos
diff --git a/chrome/browser/chromeos/events/event_rewriter_unittest.cc b/chrome/browser/chromeos/events/event_rewriter_unittest.cc
index a7be1dd..79845a6 100644
--- a/chrome/browser/chromeos/events/event_rewriter_unittest.cc
+++ b/chrome/browser/chromeos/events/event_rewriter_unittest.cc
@@ -17,7 +17,7 @@
#include "base/strings/stringprintf.h"
#include "chrome/browser/chromeos/input_method/input_method_configuration.h"
#include "chrome/browser/chromeos/input_method/mock_input_method_manager.h"
-#include "chrome/browser/chromeos/login/users/mock_user_manager.h"
+#include "chrome/browser/chromeos/login/users/fake_user_manager.h"
#include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h"
#include "chrome/browser/chromeos/preferences.h"
#include "chrome/common/pref_names.h"
@@ -222,15 +222,12 @@
class EventRewriterTest : public ash::test::AshTestBase {
public:
EventRewriterTest()
- : mock_user_manager_(new chromeos::MockUserManager),
- user_manager_enabler_(mock_user_manager_),
+ : fake_user_manager_(new chromeos::FakeUserManager),
+ user_manager_enabler_(fake_user_manager_),
input_method_manager_mock_(NULL) {}
virtual ~EventRewriterTest() {}
virtual void SetUp() {
- // Mocking user manager because the real one needs to be called on UI thread
- EXPECT_CALL(*mock_user_manager_, IsLoggedInAsGuest())
- .WillRepeatedly(testing::Return(false));
input_method_manager_mock_ =
new chromeos::input_method::MockInputMethodManager;
chromeos::input_method::InitializeForTesting(
@@ -258,7 +255,7 @@
: &event;
}
- chromeos::MockUserManager* mock_user_manager_; // Not owned.
+ chromeos::FakeUserManager* fake_user_manager_; // Not owned.
chromeos::ScopedUserManagerEnabler user_manager_enabler_;
chromeos::input_method::MockInputMethodManager* input_method_manager_mock_;
};
@@ -1826,8 +1823,8 @@
public:
EventRewriterAshTest()
: source_(&buffer_),
- mock_user_manager_(new chromeos::MockUserManager),
- user_manager_enabler_(mock_user_manager_) {}
+ fake_user_manager_(new chromeos::FakeUserManager),
+ user_manager_enabler_(fake_user_manager_) {}
virtual ~EventRewriterAshTest() {}
bool RewriteFunctionKeys(const ui::Event& event,
@@ -1885,7 +1882,7 @@
EventBuffer buffer_;
TestEventSource source_;
- chromeos::MockUserManager* mock_user_manager_; // Not owned.
+ chromeos::FakeUserManager* fake_user_manager_; // Not owned.
chromeos::ScopedUserManagerEnabler user_manager_enabler_;
TestingPrefServiceSyncable prefs_;
@@ -2421,12 +2418,16 @@
overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
overlay_->GetModifierKeyState(ui::EF_ALT_DOWN));
+ EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
+ overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN));
// Enable modifiers.
SendActivateStickyKeyPattern(ui::VKEY_CONTROL);
SendActivateStickyKeyPattern(ui::VKEY_SHIFT);
SendActivateStickyKeyPattern(ui::VKEY_SHIFT);
SendActivateStickyKeyPattern(ui::VKEY_LMENU);
+ SendActivateStickyKeyPattern(ui::VKEY_COMMAND);
+ SendActivateStickyKeyPattern(ui::VKEY_COMMAND);
EXPECT_TRUE(overlay_->is_visible());
EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED,
@@ -2435,6 +2436,8 @@
overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED,
overlay_->GetModifierKeyState(ui::EF_ALT_DOWN));
+ EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED,
+ overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN));
// Disable modifiers and overlay should be hidden.
SendActivateStickyKeyPattern(ui::VKEY_CONTROL);
@@ -2442,6 +2445,7 @@
SendActivateStickyKeyPattern(ui::VKEY_SHIFT);
SendActivateStickyKeyPattern(ui::VKEY_LMENU);
SendActivateStickyKeyPattern(ui::VKEY_LMENU);
+ SendActivateStickyKeyPattern(ui::VKEY_COMMAND);
EXPECT_FALSE(overlay_->is_visible());
EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
@@ -2450,6 +2454,8 @@
overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
overlay_->GetModifierKeyState(ui::EF_ALT_DOWN));
+ EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
+ overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN));
}
TEST_F(StickyKeysOverlayTest, ModifierVisibility) {
@@ -2457,6 +2463,7 @@
EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_CONTROL_DOWN));
EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_SHIFT_DOWN));
EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_ALT_DOWN));
+ EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_COMMAND_DOWN));
EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN));
EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN));
@@ -2465,6 +2472,7 @@
EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_CONTROL_DOWN));
EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_SHIFT_DOWN));
EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_ALT_DOWN));
+ EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_COMMAND_DOWN));
EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN));
EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN));