summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/test/interactive_ui/keyboard_access_uitest.cc25
-rw-r--r--views/window/window_win.cc6
2 files changed, 25 insertions, 6 deletions
diff --git a/chrome/test/interactive_ui/keyboard_access_uitest.cc b/chrome/test/interactive_ui/keyboard_access_uitest.cc
index a8ee85d..8fb0f98 100644
--- a/chrome/test/interactive_ui/keyboard_access_uitest.cc
+++ b/chrome/test/interactive_ui/keyboard_access_uitest.cc
@@ -31,12 +31,13 @@ class KeyboardAccessTest : public UITest {
//
// If alternate_key_sequence is true, use "Alt" instead of "F10" to
// open the menu bar, and "Down" instead of "Enter" to open a menu.
- void TestMenuKeyboardAccess(bool alternate_key_sequence);
+ void TestMenuKeyboardAccess(bool alternate_key_sequence, int modifiers);
DISALLOW_COPY_AND_ASSIGN(KeyboardAccessTest);
};
-void KeyboardAccessTest::TestMenuKeyboardAccess(bool alternate_key_sequence) {
+void KeyboardAccessTest::TestMenuKeyboardAccess(bool alternate_key_sequence,
+ int modifiers) {
scoped_refptr<BrowserProxy> browser = automation()->GetBrowserWindow(0);
ASSERT_TRUE(browser.get());
scoped_refptr<WindowProxy> window = browser->GetWindow();
@@ -66,7 +67,17 @@ void KeyboardAccessTest::TestMenuKeyboardAccess(bool alternate_key_sequence) {
// menu key there.
menu_key = app::VKEY_MENU;
#endif
- ASSERT_TRUE(window->SimulateOSKeyPress(menu_key, 0));
+ ASSERT_TRUE(window->SimulateOSKeyPress(menu_key, modifiers));
+
+ if (modifiers) {
+ // Verify Chrome does not move the view focus. We should not move the view
+ // focus when typing a menu key with modifier keys, such as shift keys or
+ // control keys.
+ int new_view_id = -1;
+ ASSERT_TRUE(window->GetFocusedViewID(&new_view_id));
+ ASSERT_EQ(original_view_id, new_view_id);
+ return;
+ }
int new_view_id = -1;
ASSERT_TRUE(window->WaitForFocusedViewIDToChange(
@@ -95,11 +106,15 @@ void KeyboardAccessTest::TestMenuKeyboardAccess(bool alternate_key_sequence) {
}
TEST_F(KeyboardAccessTest, TestMenuKeyboardAccess) {
- TestMenuKeyboardAccess(false);
+ TestMenuKeyboardAccess(false, 0);
}
TEST_F(KeyboardAccessTest, TestAltMenuKeyboardAccess) {
- TestMenuKeyboardAccess(true);
+ TestMenuKeyboardAccess(true, 0);
+}
+
+TEST_F(KeyboardAccessTest, TestShiftAltMenuKeyboardAccess) {
+ TestMenuKeyboardAccess(true, views::Event::EF_SHIFT_DOWN);
}
// Fails, http://crbug.com/50760.
diff --git a/views/window/window_win.cc b/views/window/window_win.cc
index 6aa5224..c81fe27 100644
--- a/views/window/window_win.cc
+++ b/views/window/window_win.cc
@@ -1121,8 +1121,12 @@ void WindowWin::OnSysCommand(UINT notification_code, CPoint click) {
// Handle SC_KEYMENU, which means that the user has pressed the ALT
// key and released it, so we should focus the menu bar.
if ((notification_code & sc_mask) == SC_KEYMENU && click.x == 0) {
+ // Retrieve the status of shift and control keys to prevent consuming
+ // shift+alt keys, which are used by Windows to change input languages.
Accelerator accelerator(app::KeyboardCodeForWindowsKeyCode(VK_MENU),
- false, false, false);
+ !!(GetKeyState(VK_SHIFT) & 0x8000),
+ !!(GetKeyState(VK_CONTROL) & 0x8000),
+ false);
GetFocusManager()->ProcessAccelerator(accelerator);
return;
}