Index: chrome/browser/browser_keyevents_browsertest.cc |
diff --git a/chrome/browser/browser_keyevents_browsertest.cc b/chrome/browser/browser_keyevents_browsertest.cc |
index 0b6e8fb6ffbccf54e7c7308972591daf4aebd8e8..d3aae77244ec084101350f3b004d73c860b1fbc4 100644 |
--- a/chrome/browser/browser_keyevents_browsertest.cc |
+++ b/chrome/browser/browser_keyevents_browsertest.cc |
@@ -41,8 +41,11 @@ const wchar_t kSetFocusedElementJS[] = |
const wchar_t kGetTextBoxValueJS[] = |
L"window.domAutomationController.send(" |
L"document.getElementById('%ls').value);"; |
+const wchar_t kSetTextBoxValueJS[] = |
+ L"window.domAutomationController.send(" |
+ L"document.getElementById('%ls').value = '%ls');"; |
const wchar_t kStartTestJS[] = |
- L"window.domAutomationController.send(startTest());"; |
+ L"window.domAutomationController.send(startTest(%d));"; |
// Maximum lenght of the result array in KeyEventTestData structure. |
const size_t kMaxResultLength = 10; |
@@ -51,10 +54,10 @@ const size_t kMaxResultLength = 10; |
// Each keyboard event may generate multiple result strings representing |
// the result of keydown, keypress, keyup and textInput events. |
// For keydown, keypress and keyup events, the format of the result string is: |
-// <type> <keyCode> <charCode> <ctrlKey> <shiftKey> <altKey> |
+// <type> <keyCode> <charCode> <ctrlKey> <shiftKey> <altKey> <commandKey> |
// where <type> may be 'D' (keydown), 'P' (keypress) or 'U' (keyup). |
-// <ctrlKey>, <shiftKey> and <altKey> are boolean value indicating the state of |
-// corresponding modifier key. |
+// <ctrlKey>, <shiftKey> <altKey> and <commandKey> are boolean value indicating |
+// the state of corresponding modifier key. |
// For textInput event, the format is: T <text>, where <text> is the text to be |
// input. |
// Please refer to chrome/test/data/keyevents_test.html for details. |
@@ -63,6 +66,7 @@ struct KeyEventTestData { |
bool ctrl; |
bool shift; |
bool alt; |
+ bool command; |
bool suppress_keydown; |
bool suppress_keypress; |
@@ -131,12 +135,21 @@ class BrowserKeyEventsTest : public InProcessBrowserTest { |
ASSERT_TRUE(*native_window); |
} |
- void SendKey(base::KeyboardCode key, bool control, bool shift, bool alt) { |
+ void BringBrowserWindowToFront() { |
+ gfx::NativeWindow window = NULL; |
+ ASSERT_NO_FATAL_FAILURE(GetNativeWindow(&window)); |
+ ui_test_utils::ShowAndFocusNativeWindow(window); |
+ } |
+ |
+ void SendKey(base::KeyboardCode key, |
+ bool control, |
+ bool shift, |
+ bool alt, |
+ bool command) { |
gfx::NativeWindow window = NULL; |
ASSERT_NO_FATAL_FAILURE(GetNativeWindow(&window)); |
EXPECT_TRUE(ui_controls::SendKeyPressNotifyWhenDone( |
- window, key, control, shift, alt, |
- false /* command, */, |
+ window, key, control, shift, alt, command, |
new MessageLoop::QuitTask())); |
ui_test_utils::RunMessageLoop(); |
} |
@@ -238,12 +251,24 @@ class BrowserKeyEventsTest : public InProcessBrowserTest { |
ASSERT_EQ(WideToUTF8(value), actual); |
} |
- void StartTest(int tab_index) { |
+ void SetTextBoxValue(int tab_index, const wchar_t* id, |
+ const wchar_t* value) { |
+ ASSERT_LT(tab_index, browser()->tab_count()); |
+ std::string actual; |
+ ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( |
+ browser()->GetTabContentsAt(tab_index)->render_view_host(), |
+ L"", |
+ StringPrintf(kSetTextBoxValueJS, id, value), |
+ &actual)); |
+ ASSERT_EQ(WideToUTF8(value), actual); |
+ } |
+ |
+ void StartTest(int tab_index, int result_length) { |
ASSERT_LT(tab_index, browser()->tab_count()); |
bool actual; |
ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( |
browser()->GetTabContentsAt(tab_index)->render_view_host(), |
- L"", kStartTestJS, &actual)); |
+ L"", StringPrintf(kStartTestJS, result_length), &actual)); |
ASSERT_TRUE(actual); |
} |
@@ -253,7 +278,7 @@ class BrowserKeyEventsTest : public InProcessBrowserTest { |
// Inform our testing web page that we are about to start testing a key |
// event. |
- ASSERT_NO_FATAL_FAILURE(StartTest(tab_index)); |
+ ASSERT_NO_FATAL_FAILURE(StartTest(tab_index, test.result_length)); |
ASSERT_NO_FATAL_FAILURE(SuppressEvents( |
tab_index, test.suppress_keydown, test.suppress_keypress, |
test.suppress_keyup, test.suppress_textinput)); |
@@ -264,7 +289,8 @@ class BrowserKeyEventsTest : public InProcessBrowserTest { |
TestFinishObserver finish_observer( |
browser()->GetTabContentsAt(tab_index)->render_view_host()); |
- ASSERT_NO_FATAL_FAILURE(SendKey(test.key, test.ctrl, test.shift, test.alt)); |
+ ASSERT_NO_FATAL_FAILURE( |
+ SendKey(test.key, test.ctrl, test.shift, test.alt, test.command)); |
ASSERT_TRUE(finish_observer.WaitForFinish()); |
ASSERT_NO_FATAL_FAILURE(CheckResult( |
tab_index, test.result_length, test.result)); |
@@ -272,10 +298,10 @@ class BrowserKeyEventsTest : public InProcessBrowserTest { |
std::string GetTestDataDescription(const KeyEventTestData& data) { |
std::string desc = StringPrintf( |
- " VKEY:0x%02x, ctrl:%d, shift:%d, alt:%d\n" |
+ " VKEY:0x%02x, ctrl:%d, shift:%d, alt:%d, command:%d\n" |
" Suppress: keydown:%d, keypress:%d, keyup:%d, textInput:%d\n" |
" Expected results(%d):\n", |
- data.key, data.ctrl, data.shift, data.alt, |
+ data.key, data.ctrl, data.shift, data.alt, data.command, |
data.suppress_keydown, data.suppress_keypress, data.suppress_keyup, |
data.suppress_textinput, data.result_length); |
for (int i = 0; i < data.result_length; ++i) { |
@@ -289,69 +315,70 @@ class BrowserKeyEventsTest : public InProcessBrowserTest { |
} // namespace |
-// Flaky since r51395. See crbug.com/48671. |
-IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, FLAKY_NormalKeyEvents) { |
+IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, NormalKeyEvents) { |
static const KeyEventTestData kTestNoInput[] = { |
// a |
- { base::VKEY_A, false, false, false, |
+ { base::VKEY_A, false, false, false, false, |
false, false, false, false, 3, |
- { "D 65 0 false false false", |
- "P 97 97 false false false", |
- "U 65 0 false false false" } }, |
+ { "D 65 0 false false false false", |
+ "P 97 97 false false false false", |
+ "U 65 0 false false false false" } }, |
// shift-a |
- { base::VKEY_A, false, true, false, |
+ { base::VKEY_A, false, true, false, false, |
false, false, false, false, 5, |
- { "D 16 0 false true false", |
- "D 65 0 false true false", |
- "P 65 65 false true false", |
- "U 65 0 false true false", |
- "U 16 0 false true false" } }, |
+ { "D 16 0 false true false false", |
+ "D 65 0 false true false false", |
+ "P 65 65 false true false false", |
+ "U 65 0 false true false false", |
+ "U 16 0 false true false false" } }, |
// a, suppress keydown |
- { base::VKEY_A, false, false, false, |
+ { base::VKEY_A, false, false, false, false, |
true, false, false, false, 2, |
- { "D 65 0 false false false", |
- "U 65 0 false false false" } }, |
+ { "D 65 0 false false false false", |
+ "U 65 0 false false false false" } }, |
}; |
static const KeyEventTestData kTestWithInput[] = { |
// a |
- { base::VKEY_A, false, false, false, |
+ { base::VKEY_A, false, false, false, false, |
false, false, false, false, 4, |
- { "D 65 0 false false false", |
- "P 97 97 false false false", |
+ { "D 65 0 false false false false", |
+ "P 97 97 false false false false", |
"T a", |
- "U 65 0 false false false" } }, |
+ "U 65 0 false false false false" } }, |
// shift-a |
- { base::VKEY_A, false, true, false, |
+ { base::VKEY_A, false, true, false, false, |
false, false, false, false, 6, |
- { "D 16 0 false true false", |
- "D 65 0 false true false", |
- "P 65 65 false true false", |
+ { "D 16 0 false true false false", |
+ "D 65 0 false true false false", |
+ "P 65 65 false true false false", |
"T A", |
- "U 65 0 false true false", |
- "U 16 0 false true false" } }, |
+ "U 65 0 false true false false", |
+ "U 16 0 false true false false" } }, |
// a, suppress keydown |
- { base::VKEY_A, false, false, false, |
+ { base::VKEY_A, false, false, false, false, |
true, false, false, false, 2, |
- { "D 65 0 false false false", |
- "U 65 0 false false false" } }, |
+ { "D 65 0 false false false false", |
+ "U 65 0 false false false false" } }, |
// a, suppress keypress |
- { base::VKEY_A, false, false, false, |
+ { base::VKEY_A, false, false, false, false, |
false, true, false, false, 3, |
- { "D 65 0 false false false", |
- "P 97 97 false false false", |
- "U 65 0 false false false" } }, |
+ { "D 65 0 false false false false", |
+ "P 97 97 false false false false", |
+ "U 65 0 false false false false" } }, |
// a, suppress textInput |
- { base::VKEY_A, false, false, false, |
+ { base::VKEY_A, false, false, false, false, |
false, false, false, true, 4, |
- { "D 65 0 false false false", |
- "P 97 97 false false false", |
+ { "D 65 0 false false false false", |
+ "P 97 97 false false false false", |
"T a", |
- "U 65 0 false false false" } }, |
+ "U 65 0 false false false false" } }, |
}; |
HTTPTestServer* server = StartHTTPServer(); |
+ ASSERT_TRUE(server); |
+ BringBrowserWindowToFront(); |
GURL url = server->TestServerPage(kTestingPage); |
ui_test_utils::NavigateToURL(browser(), url); |
@@ -365,67 +392,79 @@ IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, FLAKY_NormalKeyEvents) { |
<< GetTestDataDescription(kTestNoInput[i]); |
} |
+ // Input in normal text box. |
ASSERT_NO_FATAL_FAILURE(SetFocusedElement(tab_index, L"A")); |
for (size_t i = 0; i < arraysize(kTestWithInput); ++i) { |
EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestWithInput[i])) |
- << "kTestWithInput[" << i << "] failed:\n" |
+ << "kTestWithInput[" << i << "] in text box failed:\n" |
<< GetTestDataDescription(kTestWithInput[i]); |
} |
- |
EXPECT_NO_FATAL_FAILURE(CheckTextBoxValue(tab_index, L"A", L"aA")); |
+ |
+ // Input in password box. |
+ ASSERT_NO_FATAL_FAILURE(SetFocusedElement(tab_index, L"B")); |
+ for (size_t i = 0; i < arraysize(kTestWithInput); ++i) { |
+ EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestWithInput[i])) |
+ << "kTestWithInput[" << i << "] in password box failed:\n" |
+ << GetTestDataDescription(kTestWithInput[i]); |
+ } |
+ EXPECT_NO_FATAL_FAILURE(CheckTextBoxValue(tab_index, L"B", L"aA")); |
} |
+#if defined(OS_WIN) || defined(OS_LINUX) |
IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, CtrlKeyEvents) { |
static const KeyEventTestData kTestCtrlF = { |
- base::VKEY_F, true, false, false, |
+ base::VKEY_F, true, false, false, false, |
false, false, false, false, 2, |
- { "D 17 0 true false false", |
- "D 70 0 true false false" } |
+ { "D 17 0 true false false false", |
+ "D 70 0 true false false false" } |
}; |
static const KeyEventTestData kTestCtrlFSuppressKeyDown = { |
- base::VKEY_F, true, false, false, |
+ base::VKEY_F, true, false, false, false, |
true, false, false, false, 4, |
- { "D 17 0 true false false", |
- "D 70 0 true false false", |
- "U 70 0 true false false", |
- "U 17 0 true false false" } |
+ { "D 17 0 true false false false", |
+ "D 70 0 true false false false", |
+ "U 70 0 true false false false", |
+ "U 17 0 true false false false" } |
}; |
// Ctrl+Z doesn't bind to any accelerators, which then should generate a |
// keypress event with charCode=26. |
static const KeyEventTestData kTestCtrlZ = { |
- base::VKEY_Z, true, false, false, |
+ base::VKEY_Z, true, false, false, false, |
false, false, false, false, 5, |
- { "D 17 0 true false false", |
- "D 90 0 true false false", |
- "P 26 26 true false false", |
- "U 90 0 true false false", |
- "U 17 0 true false false" } |
+ { "D 17 0 true false false false", |
+ "D 90 0 true false false false", |
+ "P 26 26 true false false false", |
+ "U 90 0 true false false false", |
+ "U 17 0 true false false false" } |
}; |
static const KeyEventTestData kTestCtrlZSuppressKeyDown = { |
- base::VKEY_Z, true, false, false, |
+ base::VKEY_Z, true, false, false, false, |
true, false, false, false, 4, |
- { "D 17 0 true false false", |
- "D 90 0 true false false", |
- "U 90 0 true false false", |
- "U 17 0 true false false" } |
+ { "D 17 0 true false false false", |
+ "D 90 0 true false false false", |
+ "U 90 0 true false false false", |
+ "U 17 0 true false false false" } |
}; |
// Ctrl+Enter shall generate a keypress event with charCode=10 (LF). |
static const KeyEventTestData kTestCtrlEnter = { |
- base::VKEY_RETURN, true, false, false, |
+ base::VKEY_RETURN, true, false, false, false, |
false, false, false, false, 5, |
- { "D 17 0 true false false", |
- "D 13 0 true false false", |
- "P 10 10 true false false", |
- "U 13 0 true false false", |
- "U 17 0 true false false" } |
+ { "D 17 0 true false false false", |
+ "D 13 0 true false false false", |
+ "P 10 10 true false false false", |
+ "U 13 0 true false false false", |
+ "U 17 0 true false false false" } |
}; |
HTTPTestServer* server = StartHTTPServer(); |
+ ASSERT_TRUE(server); |
+ BringBrowserWindowToFront(); |
GURL url = server->TestServerPage(kTestingPage); |
ui_test_utils::NavigateToURL(browser(), url); |
@@ -438,7 +477,8 @@ IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, CtrlKeyEvents) { |
EXPECT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); |
// Press Escape to close the Find box and move the focus back to the web page. |
- ASSERT_NO_FATAL_FAILURE(SendKey(base::VKEY_ESCAPE, false, false, false)); |
+ ASSERT_NO_FATAL_FAILURE( |
+ SendKey(base::VKEY_ESCAPE, false, false, false, false)); |
ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); |
// Press Ctrl+F with keydown suppressed shall not open the find box. |
@@ -449,6 +489,49 @@ IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, CtrlKeyEvents) { |
EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCtrlZSuppressKeyDown)); |
EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCtrlEnter)); |
} |
+#elif defined(OS_MACOSX) |
+IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, CommandKeyEvents) { |
+ static const KeyEventTestData kTestCmdF = { |
+ base::VKEY_F, false, false, false, true, |
+ false, false, false, false, 2, |
+ { "D 91 0 false false false true", |
+ "D 70 0 false false false true" } |
+ }; |
+ |
+ // On Mac we don't send key up events when command modifier is down. |
+ static const KeyEventTestData kTestCmdFSuppressKeyDown = { |
+ base::VKEY_F, false, false, false, true, |
+ true, false, false, false, 3, |
+ { "D 91 0 false false false true", |
+ "D 70 0 false false false true", |
+ "U 91 0 false false false true" } |
+ }; |
+ |
+ HTTPTestServer* server = StartHTTPServer(); |
+ ASSERT_TRUE(server); |
+ |
+ BringBrowserWindowToFront(); |
+ GURL url = server->TestServerPage(kTestingPage); |
+ ui_test_utils::NavigateToURL(browser(), url); |
+ |
+ ASSERT_NO_FATAL_FAILURE(ClickOnView(VIEW_ID_TAB_CONTAINER)); |
+ ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); |
+ |
+ int tab_index = browser()->selected_index(); |
+ // Press Cmd+F, which will make the Find box open and request focus. |
+ EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCmdF)); |
+ EXPECT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); |
+ |
+ // Press Escape to close the Find box and move the focus back to the web page. |
+ ASSERT_NO_FATAL_FAILURE( |
+ SendKey(base::VKEY_ESCAPE, false, false, false, false)); |
+ ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); |
+ |
+ // Press Cmd+F with keydown suppressed shall not open the find box. |
+ EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCmdFSuppressKeyDown)); |
+ ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); |
+} |
+#endif |
#if defined(TOOLKIT_VIEWS) && defined(OS_LINUX) |
// See http://crbug.com/40037 for details. |
@@ -458,42 +541,80 @@ IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, CtrlKeyEvents) { |
#endif |
IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, MAYBE_AccessKeys) { |
- static const KeyEventTestData kTestAltA = { |
- base::VKEY_A, false, false, true, |
+#if defined(OS_MACOSX) |
+ // On Mac, access keys use ctrl+alt modifiers. |
+ static const KeyEventTestData kTestAccessA = { |
+ base::VKEY_A, true, false, true, false, |
+ false, false, false, false, 6, |
+ { "D 17 0 true false false false", |
+ "D 18 0 true false true false", |
+ "D 65 0 true false true false", |
+ "U 65 0 true false true false", |
+ "U 18 0 true false true false", |
+ "U 17 0 true false false false" } |
+ }; |
+ |
+ static const KeyEventTestData kTestAccessDSuppress = { |
+ base::VKEY_D, true, false, true, false, |
+ true, true, true, false, 6, |
+ { "D 17 0 true false false false", |
+ "D 18 0 true false true false", |
+ "D 68 0 true false true false", |
+ "U 68 0 true false true false", |
+ "U 18 0 true false true false", |
+ "U 17 0 true false false false" } |
+ }; |
+ |
+ static const KeyEventTestData kTestAccess1 = { |
+ base::VKEY_1, true, false, true, false, |
+ false, false, false, false, 6, |
+ { "D 17 0 true false false false", |
+ "D 18 0 true false true false", |
+ "D 49 0 true false true false", |
+ "U 49 0 true false true false", |
+ "U 18 0 true false true false", |
+ "U 17 0 true false false false" } |
+ }; |
+#else |
+ static const KeyEventTestData kTestAccessA = { |
+ base::VKEY_A, false, false, true, false, |
false, false, false, false, 4, |
- { "D 18 0 false false true", |
- "D 65 0 false false true", |
- "U 65 0 false false true", |
- "U 18 0 false false true" } |
+ { "D 18 0 false false true false", |
+ "D 65 0 false false true false", |
+ "U 65 0 false false true false", |
+ "U 18 0 false false true false" } |
}; |
- static const KeyEventTestData kTestAltD = { |
- base::VKEY_D, false, false, true, |
+ static const KeyEventTestData kTestAccessD = { |
+ base::VKEY_D, false, false, true, false, |
false, false, false, false, 2, |
- { "D 18 0 false false true", |
- "D 68 0 false false true" } |
+ { "D 18 0 false false true false", |
+ "D 68 0 false false true false" } |
}; |
- static const KeyEventTestData kTestAltDSuppress = { |
- base::VKEY_D, false, false, true, |
+ static const KeyEventTestData kTestAccessDSuppress = { |
+ base::VKEY_D, false, false, true, false, |
true, true, true, false, 4, |
- { "D 18 0 false false true", |
- "D 68 0 false false true", |
- "U 68 0 false false true", |
- "U 18 0 false false true" } |
+ { "D 18 0 false false true false", |
+ "D 68 0 false false true false", |
+ "U 68 0 false false true false", |
+ "U 18 0 false false true false" } |
}; |
- static const KeyEventTestData kTestAlt1 = { |
- base::VKEY_1, false, false, true, |
+ static const KeyEventTestData kTestAccess1 = { |
+ base::VKEY_1, false, false, true, false, |
false, false, false, false, 4, |
- { "D 18 0 false false true", |
- "D 49 0 false false true", |
- "U 49 0 false false true", |
- "U 18 0 false false true" } |
+ { "D 18 0 false false true false", |
+ "D 49 0 false false true false", |
+ "U 49 0 false false true false", |
+ "U 18 0 false false true false" } |
}; |
+#endif |
HTTPTestServer* server = StartHTTPServer(); |
+ ASSERT_TRUE(server); |
+ BringBrowserWindowToFront(); |
GURL url = server->TestServerPage(kTestingPage); |
ui_test_utils::NavigateToURL(browser(), url); |
@@ -505,15 +626,17 @@ IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, MAYBE_AccessKeys) { |
// Make sure no element is focused. |
EXPECT_NO_FATAL_FAILURE(CheckFocusedElement(tab_index, L"")); |
// Alt+A should focus the element with accesskey = "A". |
- EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestAltA)); |
+ EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestAccessA)); |
EXPECT_NO_FATAL_FAILURE(CheckFocusedElement(tab_index, L"A")); |
// Blur the focused element. |
EXPECT_NO_FATAL_FAILURE(SetFocusedElement(tab_index, L"")); |
// Make sure no element is focused. |
EXPECT_NO_FATAL_FAILURE(CheckFocusedElement(tab_index, L"")); |
+ |
+#if !defined(OS_MACOSX) |
// Alt+D should move the focus to the location entry. |
- EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestAltD)); |
+ EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestAccessD)); |
EXPECT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR)); |
// No element should be focused, as Alt+D was handled by the browser. |
EXPECT_NO_FATAL_FAILURE(CheckFocusedElement(tab_index, L"")); |
@@ -524,11 +647,13 @@ IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, MAYBE_AccessKeys) { |
// Make sure no element is focused. |
EXPECT_NO_FATAL_FAILURE(CheckFocusedElement(tab_index, L"")); |
+#endif |
+ |
// If the keydown event is suppressed, then Alt+D should be handled as an |
// accesskey rather than an accelerator key. Activation of an accesskey is not |
// a part of the default action of the key event, so it should not be |
// suppressed at all. |
- EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestAltDSuppress)); |
+ EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestAccessDSuppress)); |
ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); |
EXPECT_NO_FATAL_FAILURE(CheckFocusedElement(tab_index, L"D")); |
@@ -536,30 +661,32 @@ IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, MAYBE_AccessKeys) { |
EXPECT_NO_FATAL_FAILURE(SetFocusedElement(tab_index, L"")); |
// Make sure no element is focused. |
EXPECT_NO_FATAL_FAILURE(CheckFocusedElement(tab_index, L"")); |
- EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestAlt1)); |
+ EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestAccess1)); |
#if defined(TOOLKIT_GTK) |
// On GTK, alt-0..9 are assigned as tab selection accelerators, so they can |
// not be used as accesskeys. |
EXPECT_NO_FATAL_FAILURE(CheckFocusedElement(tab_index, L"")); |
-#elif defined(OS_WIN) |
+#else |
EXPECT_NO_FATAL_FAILURE(CheckFocusedElement(tab_index, L"1")); |
#endif |
} |
IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, ReservedAccelerators) { |
HTTPTestServer* server = StartHTTPServer(); |
+ ASSERT_TRUE(server); |
+ BringBrowserWindowToFront(); |
GURL url = server->TestServerPage(kTestingPage); |
ui_test_utils::NavigateToURL(browser(), url); |
ASSERT_NO_FATAL_FAILURE(ClickOnView(VIEW_ID_TAB_CONTAINER)); |
ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); |
-#if defined(OS_WIN) |
+#if defined(OS_WIN) || defined(TOOLKIT_VIEWS) |
static const KeyEventTestData kTestCtrlT = { |
- base::VKEY_T, true, false, false, |
+ base::VKEY_T, true, false, false, false, |
true, false, false, false, 1, |
- { "D 17 0 true false false" } |
+ { "D 17 0 true false false false" } |
}; |
ASSERT_EQ(1, browser()->tab_count()); |
@@ -576,46 +703,68 @@ IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, ReservedAccelerators) { |
// Reserved accelerators can't be suppressed. |
ASSERT_NO_FATAL_FAILURE(SuppressAllEvents(0, true)); |
// Press Ctrl+W, which will close the tab. |
- ASSERT_NO_FATAL_FAILURE(SendKey(base::VKEY_W, true, false, false)); |
+ ASSERT_NO_FATAL_FAILURE(SendKey(base::VKEY_W, true, false, false, false)); |
EXPECT_EQ(1, browser()->tab_count()); |
+#elif defined(OS_MACOSX) |
+ static const KeyEventTestData kTestCmdT = { |
+ base::VKEY_T, false, false, false, true, |
+ true, false, false, false, 1, |
+ { "D 91 0 false false false true" } |
+ }; |
+ |
+ ASSERT_EQ(1, browser()->tab_count()); |
+ // Press Cmd+T, which will open a new tab. |
+ EXPECT_NO_FATAL_FAILURE(TestKeyEvent(0, kTestCmdT)); |
+ EXPECT_EQ(2, browser()->tab_count()); |
+ browser()->SelectNumberedTab(0); |
+ ASSERT_EQ(0, browser()->selected_index()); |
+ |
+ int result_length; |
+ ASSERT_NO_FATAL_FAILURE(GetResultLength(0, &result_length)); |
+ EXPECT_EQ(1, result_length); |
+ // Reserved accelerators can't be suppressed. |
+ ASSERT_NO_FATAL_FAILURE(SuppressAllEvents(0, true)); |
+ // Press Cmd+W, which will close the tab. |
+ ASSERT_NO_FATAL_FAILURE(SendKey(base::VKEY_W, false, false, false, true)); |
+ EXPECT_EQ(1, browser()->tab_count()); |
#elif defined(TOOLKIT_GTK) |
// Ctrl-[a-z] are not treated as reserved accelerators on GTK. |
static const KeyEventTestData kTestCtrlT = { |
- base::VKEY_T, true, false, false, |
+ base::VKEY_T, true, false, false, false, |
false, false, false, false, 2, |
- { "D 17 0 true false false", |
- "D 84 0 true false false" } |
+ { "D 17 0 true false false false", |
+ "D 84 0 true false false false" } |
}; |
static const KeyEventTestData kTestCtrlPageDown = { |
- base::VKEY_NEXT, true, false, false, |
+ base::VKEY_NEXT, true, false, false, false, |
true, false, false, false, 1, |
- { "D 17 0 true false false" } |
+ { "D 17 0 true false false false" } |
}; |
static const KeyEventTestData kTestCtrlTab = { |
- base::VKEY_TAB, true, false, false, |
+ base::VKEY_TAB, true, false, false, false, |
true, false, false, false, 1, |
- { "D 17 0 true false false" } |
+ { "D 17 0 true false false false" } |
}; |
static const KeyEventTestData kTestCtrlTBlocked = { |
- base::VKEY_T, true, false, false, |
+ base::VKEY_T, true, false, false, false, |
true, false, false, false, 4, |
- { "D 17 0 true false false", |
- "D 84 0 true false false", |
- "U 84 0 true false false", |
- "U 17 0 true false false" } |
+ { "D 17 0 true false false false", |
+ "D 84 0 true false false false", |
+ "U 84 0 true false false false", |
+ "U 17 0 true false false false" } |
}; |
static const KeyEventTestData kTestCtrlWBlocked = { |
- base::VKEY_W, true, false, false, |
+ base::VKEY_W, true, false, false, false, |
true, false, false, false, 4, |
- { "D 17 0 true false false", |
- "D 87 0 true false false", |
- "U 87 0 true false false", |
- "U 17 0 true false false" } |
+ { "D 17 0 true false false false", |
+ "D 87 0 true false false false", |
+ "U 87 0 true false false false", |
+ "U 17 0 true false false false" } |
}; |
ASSERT_EQ(1, browser()->tab_count()); |
@@ -647,7 +796,91 @@ IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, ReservedAccelerators) { |
// Ctrl+F4 to close the tab. |
ASSERT_NO_FATAL_FAILURE(SuppressAllEvents(0, true)); |
- ASSERT_NO_FATAL_FAILURE(SendKey(base::VKEY_F4, true, false, false)); |
+ ASSERT_NO_FATAL_FAILURE( SendKey(base::VKEY_F4, true, false, false, false)); |
ASSERT_EQ(1, browser()->tab_count()); |
#endif |
} |
+ |
+#if defined(OS_MACOSX) |
+IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, EditorKeyBindings) { |
+ static const KeyEventTestData kTestCtrlA = { |
+ base::VKEY_A, true, false, false, false, |
+ false, false, false, false, 4, |
+ { "D 17 0 true false false false", |
+ "D 65 0 true false false false", |
+ "U 65 0 true false false false", |
+ "U 17 0 true false false false" } |
+ }; |
+ |
+ static const KeyEventTestData kTestCtrlF = { |
+ base::VKEY_F, true, false, false, false, |
+ false, false, false, false, 4, |
+ { "D 17 0 true false false false", |
+ "D 70 0 true false false false", |
+ "U 70 0 true false false false", |
+ "U 17 0 true false false false" } |
+ }; |
+ |
+ static const KeyEventTestData kTestCtrlK = { |
+ base::VKEY_K, true, false, false, false, |
+ false, false, false, false, 4, |
+ { "D 17 0 true false false false", |
+ "D 75 0 true false false false", |
+ "U 75 0 true false false false", |
+ "U 17 0 true false false false" } |
+ }; |
+ |
+ HTTPTestServer* server = StartHTTPServer(); |
+ ASSERT_TRUE(server); |
+ |
+ BringBrowserWindowToFront(); |
+ GURL url = server->TestServerPage(kTestingPage); |
+ ui_test_utils::NavigateToURL(browser(), url); |
+ |
+ ASSERT_NO_FATAL_FAILURE(ClickOnView(VIEW_ID_TAB_CONTAINER)); |
+ ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); |
+ |
+ int tab_index = browser()->selected_index(); |
+ ASSERT_NO_FATAL_FAILURE(SetFocusedElement(tab_index, L"A")); |
+ ASSERT_NO_FATAL_FAILURE(SetTextBoxValue(tab_index, L"A", L"Hello")); |
+ // Move the caret to the beginning of the line. |
+ EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCtrlA)); |
+ // Forward one character |
+ EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCtrlF)); |
+ // Delete to the end of the line. |
+ EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCtrlK)); |
+ EXPECT_NO_FATAL_FAILURE(CheckTextBoxValue(tab_index, L"A", L"H")); |
+} |
+#endif |
+ |
+IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, PageUpDownKeys) { |
+ static const KeyEventTestData kTestPageUp = { |
+ base::VKEY_PRIOR, false, false, false, false, |
+ false, false, false, false, 2, |
+ { "D 33 0 false false false false", |
+ "U 33 0 false false false false" } |
+ }; |
+ |
+ static const KeyEventTestData kTestPageDown = { |
+ base::VKEY_NEXT, false, false, false, false, |
+ false, false, false, false, 2, |
+ { "D 34 0 false false false false", |
+ "U 34 0 false false false false" } |
+ }; |
+ |
+ HTTPTestServer* server = StartHTTPServer(); |
+ ASSERT_TRUE(server); |
+ |
+ BringBrowserWindowToFront(); |
+ GURL url = server->TestServerPage(kTestingPage); |
+ ui_test_utils::NavigateToURL(browser(), url); |
+ |
+ ASSERT_NO_FATAL_FAILURE(ClickOnView(VIEW_ID_TAB_CONTAINER)); |
+ ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); |
+ |
+ int tab_index = browser()->selected_index(); |
+ ASSERT_NO_FATAL_FAILURE(SetFocusedElement(tab_index, L"A")); |
+ EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestPageUp)); |
+ EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestPageDown)); |
+ EXPECT_NO_FATAL_FAILURE(CheckTextBoxValue(tab_index, L"A", L"")); |
+} |