diff options
-rw-r--r-- | chrome/test/interactive_ui/keyboard_access_uitest.cc | 25 | ||||
-rw-r--r-- | views/window/window_win.cc | 6 |
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; } |