| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "build/build_config.h" | 5 #include "build/build_config.h" |
| 6 | 6 |
| 7 #include "app/keyboard_codes.h" | |
| 8 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 9 #include "base/logging.h" | 8 #include "base/logging.h" |
| 10 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
| 11 #include "base/string_util.h" | 10 #include "base/string_util.h" |
| 12 #include "base/utf_string_conversions.h" | 11 #include "base/utf_string_conversions.h" |
| 13 #include "base/values.h" | 12 #include "base/values.h" |
| 14 #include "chrome/browser/dom_operation_notification_details.h" | 13 #include "chrome/browser/dom_operation_notification_details.h" |
| 15 #include "chrome/browser/renderer_host/render_view_host.h" | 14 #include "chrome/browser/renderer_host/render_view_host.h" |
| 16 #include "chrome/browser/renderer_host/render_widget_host_view.h" | 15 #include "chrome/browser/renderer_host/render_widget_host_view.h" |
| 17 #include "chrome/browser/tab_contents/tab_contents.h" | 16 #include "chrome/browser/tab_contents/tab_contents.h" |
| 18 #include "chrome/browser/tab_contents/tab_contents_view.h" | 17 #include "chrome/browser/tab_contents/tab_contents_view.h" |
| 19 #include "chrome/browser/ui/browser.h" | 18 #include "chrome/browser/ui/browser.h" |
| 20 #include "chrome/common/chrome_paths.h" | 19 #include "chrome/common/chrome_paths.h" |
| 21 #include "chrome/common/notification_registrar.h" | 20 #include "chrome/common/notification_registrar.h" |
| 22 #include "chrome/common/notification_service.h" | 21 #include "chrome/common/notification_service.h" |
| 23 #include "chrome/test/in_process_browser_test.h" | 22 #include "chrome/test/in_process_browser_test.h" |
| 24 #include "chrome/test/ui_test_utils.h" | 23 #include "chrome/test/ui_test_utils.h" |
| 25 #include "net/test/test_server.h" | 24 #include "net/test/test_server.h" |
| 25 #include "ui/base/keycodes/keyboard_codes.h" |
| 26 | 26 |
| 27 namespace { | 27 namespace { |
| 28 | 28 |
| 29 const char kTestingPage[] = "files/keyevents_test.html"; | 29 const char kTestingPage[] = "files/keyevents_test.html"; |
| 30 const wchar_t kSuppressEventJS[] = | 30 const wchar_t kSuppressEventJS[] = |
| 31 L"window.domAutomationController.send(setDefaultAction('%ls', %ls));"; | 31 L"window.domAutomationController.send(setDefaultAction('%ls', %ls));"; |
| 32 const wchar_t kGetResultJS[] = | 32 const wchar_t kGetResultJS[] = |
| 33 L"window.domAutomationController.send(keyEventResult[%d]);"; | 33 L"window.domAutomationController.send(keyEventResult[%d]);"; |
| 34 const wchar_t kGetResultLengthJS[] = | 34 const wchar_t kGetResultLengthJS[] = |
| 35 L"window.domAutomationController.send(keyEventResult.length);"; | 35 L"window.domAutomationController.send(keyEventResult.length);"; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 54 // the result of keydown, keypress, keyup and textInput events. | 54 // the result of keydown, keypress, keyup and textInput events. |
| 55 // For keydown, keypress and keyup events, the format of the result string is: | 55 // For keydown, keypress and keyup events, the format of the result string is: |
| 56 // <type> <keyCode> <charCode> <ctrlKey> <shiftKey> <altKey> <commandKey> | 56 // <type> <keyCode> <charCode> <ctrlKey> <shiftKey> <altKey> <commandKey> |
| 57 // where <type> may be 'D' (keydown), 'P' (keypress) or 'U' (keyup). | 57 // where <type> may be 'D' (keydown), 'P' (keypress) or 'U' (keyup). |
| 58 // <ctrlKey>, <shiftKey> <altKey> and <commandKey> are boolean value indicating | 58 // <ctrlKey>, <shiftKey> <altKey> and <commandKey> are boolean value indicating |
| 59 // the state of corresponding modifier key. | 59 // the state of corresponding modifier key. |
| 60 // For textInput event, the format is: T <text>, where <text> is the text to be | 60 // For textInput event, the format is: T <text>, where <text> is the text to be |
| 61 // input. | 61 // input. |
| 62 // Please refer to chrome/test/data/keyevents_test.html for details. | 62 // Please refer to chrome/test/data/keyevents_test.html for details. |
| 63 struct KeyEventTestData { | 63 struct KeyEventTestData { |
| 64 app::KeyboardCode key; | 64 ui::KeyboardCode key; |
| 65 bool ctrl; | 65 bool ctrl; |
| 66 bool shift; | 66 bool shift; |
| 67 bool alt; | 67 bool alt; |
| 68 bool command; | 68 bool command; |
| 69 | 69 |
| 70 bool suppress_keydown; | 70 bool suppress_keydown; |
| 71 bool suppress_keypress; | 71 bool suppress_keypress; |
| 72 bool suppress_keyup; | 72 bool suppress_keyup; |
| 73 bool suppress_textinput; | 73 bool suppress_textinput; |
| 74 | 74 |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 282 desc.append(data.result[i]); | 282 desc.append(data.result[i]); |
| 283 desc.append("\n"); | 283 desc.append("\n"); |
| 284 } | 284 } |
| 285 return desc; | 285 return desc; |
| 286 } | 286 } |
| 287 }; | 287 }; |
| 288 | 288 |
| 289 IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, NormalKeyEvents) { | 289 IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, NormalKeyEvents) { |
| 290 static const KeyEventTestData kTestNoInput[] = { | 290 static const KeyEventTestData kTestNoInput[] = { |
| 291 // a | 291 // a |
| 292 { app::VKEY_A, false, false, false, false, | 292 { ui::VKEY_A, false, false, false, false, |
| 293 false, false, false, false, 3, | 293 false, false, false, false, 3, |
| 294 { "D 65 0 false false false false", | 294 { "D 65 0 false false false false", |
| 295 "P 97 97 false false false false", | 295 "P 97 97 false false false false", |
| 296 "U 65 0 false false false false" } }, | 296 "U 65 0 false false false false" } }, |
| 297 // shift-a | 297 // shift-a |
| 298 { app::VKEY_A, false, true, false, false, | 298 { ui::VKEY_A, false, true, false, false, |
| 299 false, false, false, false, 5, | 299 false, false, false, false, 5, |
| 300 { "D 16 0 false true false false", | 300 { "D 16 0 false true false false", |
| 301 "D 65 0 false true false false", | 301 "D 65 0 false true false false", |
| 302 "P 65 65 false true false false", | 302 "P 65 65 false true false false", |
| 303 "U 65 0 false true false false", | 303 "U 65 0 false true false false", |
| 304 "U 16 0 false true false false" } }, | 304 "U 16 0 false true false false" } }, |
| 305 // a, suppress keydown | 305 // a, suppress keydown |
| 306 { app::VKEY_A, false, false, false, false, | 306 { ui::VKEY_A, false, false, false, false, |
| 307 true, false, false, false, 2, | 307 true, false, false, false, 2, |
| 308 { "D 65 0 false false false false", | 308 { "D 65 0 false false false false", |
| 309 "U 65 0 false false false false" } }, | 309 "U 65 0 false false false false" } }, |
| 310 }; | 310 }; |
| 311 | 311 |
| 312 static const KeyEventTestData kTestWithInput[] = { | 312 static const KeyEventTestData kTestWithInput[] = { |
| 313 // a | 313 // a |
| 314 { app::VKEY_A, false, false, false, false, | 314 { ui::VKEY_A, false, false, false, false, |
| 315 false, false, false, false, 4, | 315 false, false, false, false, 4, |
| 316 { "D 65 0 false false false false", | 316 { "D 65 0 false false false false", |
| 317 "P 97 97 false false false false", | 317 "P 97 97 false false false false", |
| 318 "T a", | 318 "T a", |
| 319 "U 65 0 false false false false" } }, | 319 "U 65 0 false false false false" } }, |
| 320 // shift-a | 320 // shift-a |
| 321 { app::VKEY_A, false, true, false, false, | 321 { ui::VKEY_A, false, true, false, false, |
| 322 false, false, false, false, 6, | 322 false, false, false, false, 6, |
| 323 { "D 16 0 false true false false", | 323 { "D 16 0 false true false false", |
| 324 "D 65 0 false true false false", | 324 "D 65 0 false true false false", |
| 325 "P 65 65 false true false false", | 325 "P 65 65 false true false false", |
| 326 "T A", | 326 "T A", |
| 327 "U 65 0 false true false false", | 327 "U 65 0 false true false false", |
| 328 "U 16 0 false true false false" } }, | 328 "U 16 0 false true false false" } }, |
| 329 // a, suppress keydown | 329 // a, suppress keydown |
| 330 { app::VKEY_A, false, false, false, false, | 330 { ui::VKEY_A, false, false, false, false, |
| 331 true, false, false, false, 2, | 331 true, false, false, false, 2, |
| 332 { "D 65 0 false false false false", | 332 { "D 65 0 false false false false", |
| 333 "U 65 0 false false false false" } }, | 333 "U 65 0 false false false false" } }, |
| 334 // a, suppress keypress | 334 // a, suppress keypress |
| 335 { app::VKEY_A, false, false, false, false, | 335 { ui::VKEY_A, false, false, false, false, |
| 336 false, true, false, false, 3, | 336 false, true, false, false, 3, |
| 337 { "D 65 0 false false false false", | 337 { "D 65 0 false false false false", |
| 338 "P 97 97 false false false false", | 338 "P 97 97 false false false false", |
| 339 "U 65 0 false false false false" } }, | 339 "U 65 0 false false false false" } }, |
| 340 // a, suppress textInput | 340 // a, suppress textInput |
| 341 { app::VKEY_A, false, false, false, false, | 341 { ui::VKEY_A, false, false, false, false, |
| 342 false, false, false, true, 4, | 342 false, false, false, true, 4, |
| 343 { "D 65 0 false false false false", | 343 { "D 65 0 false false false false", |
| 344 "P 97 97 false false false false", | 344 "P 97 97 false false false false", |
| 345 "T a", | 345 "T a", |
| 346 "U 65 0 false false false false" } }, | 346 "U 65 0 false false false false" } }, |
| 347 }; | 347 }; |
| 348 | 348 |
| 349 ASSERT_TRUE(test_server()->Start()); | 349 ASSERT_TRUE(test_server()->Start()); |
| 350 | 350 |
| 351 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | 351 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 377 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestWithInput[i])) | 377 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestWithInput[i])) |
| 378 << "kTestWithInput[" << i << "] in password box failed:\n" | 378 << "kTestWithInput[" << i << "] in password box failed:\n" |
| 379 << GetTestDataDescription(kTestWithInput[i]); | 379 << GetTestDataDescription(kTestWithInput[i]); |
| 380 } | 380 } |
| 381 EXPECT_NO_FATAL_FAILURE(CheckTextBoxValue(tab_index, L"B", L"aA")); | 381 EXPECT_NO_FATAL_FAILURE(CheckTextBoxValue(tab_index, L"B", L"aA")); |
| 382 } | 382 } |
| 383 | 383 |
| 384 #if defined(OS_WIN) || defined(OS_LINUX) | 384 #if defined(OS_WIN) || defined(OS_LINUX) |
| 385 IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, CtrlKeyEvents) { | 385 IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, CtrlKeyEvents) { |
| 386 static const KeyEventTestData kTestCtrlF = { | 386 static const KeyEventTestData kTestCtrlF = { |
| 387 app::VKEY_F, true, false, false, false, | 387 ui::VKEY_F, true, false, false, false, |
| 388 false, false, false, false, 2, | 388 false, false, false, false, 2, |
| 389 { "D 17 0 true false false false", | 389 { "D 17 0 true false false false", |
| 390 "D 70 0 true false false false" } | 390 "D 70 0 true false false false" } |
| 391 }; | 391 }; |
| 392 | 392 |
| 393 static const KeyEventTestData kTestCtrlFSuppressKeyDown = { | 393 static const KeyEventTestData kTestCtrlFSuppressKeyDown = { |
| 394 app::VKEY_F, true, false, false, false, | 394 ui::VKEY_F, true, false, false, false, |
| 395 true, false, false, false, 4, | 395 true, false, false, false, 4, |
| 396 { "D 17 0 true false false false", | 396 { "D 17 0 true false false false", |
| 397 "D 70 0 true false false false", | 397 "D 70 0 true false false false", |
| 398 "U 70 0 true false false false", | 398 "U 70 0 true false false false", |
| 399 "U 17 0 true false false false" } | 399 "U 17 0 true false false false" } |
| 400 }; | 400 }; |
| 401 | 401 |
| 402 // Ctrl+Z doesn't bind to any accelerators, which then should generate a | 402 // Ctrl+Z doesn't bind to any accelerators, which then should generate a |
| 403 // keypress event with charCode=26. | 403 // keypress event with charCode=26. |
| 404 static const KeyEventTestData kTestCtrlZ = { | 404 static const KeyEventTestData kTestCtrlZ = { |
| 405 app::VKEY_Z, true, false, false, false, | 405 ui::VKEY_Z, true, false, false, false, |
| 406 false, false, false, false, 5, | 406 false, false, false, false, 5, |
| 407 { "D 17 0 true false false false", | 407 { "D 17 0 true false false false", |
| 408 "D 90 0 true false false false", | 408 "D 90 0 true false false false", |
| 409 "P 26 26 true false false false", | 409 "P 26 26 true false false false", |
| 410 "U 90 0 true false false false", | 410 "U 90 0 true false false false", |
| 411 "U 17 0 true false false false" } | 411 "U 17 0 true false false false" } |
| 412 }; | 412 }; |
| 413 | 413 |
| 414 static const KeyEventTestData kTestCtrlZSuppressKeyDown = { | 414 static const KeyEventTestData kTestCtrlZSuppressKeyDown = { |
| 415 app::VKEY_Z, true, false, false, false, | 415 ui::VKEY_Z, true, false, false, false, |
| 416 true, false, false, false, 4, | 416 true, false, false, false, 4, |
| 417 { "D 17 0 true false false false", | 417 { "D 17 0 true false false false", |
| 418 "D 90 0 true false false false", | 418 "D 90 0 true false false false", |
| 419 "U 90 0 true false false false", | 419 "U 90 0 true false false false", |
| 420 "U 17 0 true false false false" } | 420 "U 17 0 true false false false" } |
| 421 }; | 421 }; |
| 422 | 422 |
| 423 // Ctrl+Enter shall generate a keypress event with charCode=10 (LF). | 423 // Ctrl+Enter shall generate a keypress event with charCode=10 (LF). |
| 424 static const KeyEventTestData kTestCtrlEnter = { | 424 static const KeyEventTestData kTestCtrlEnter = { |
| 425 app::VKEY_RETURN, true, false, false, false, | 425 ui::VKEY_RETURN, true, false, false, false, |
| 426 false, false, false, false, 5, | 426 false, false, false, false, 5, |
| 427 { "D 17 0 true false false false", | 427 { "D 17 0 true false false false", |
| 428 "D 13 0 true false false false", | 428 "D 13 0 true false false false", |
| 429 "P 10 10 true false false false", | 429 "P 10 10 true false false false", |
| 430 "U 13 0 true false false false", | 430 "U 13 0 true false false false", |
| 431 "U 17 0 true false false false" } | 431 "U 17 0 true false false false" } |
| 432 }; | 432 }; |
| 433 | 433 |
| 434 ASSERT_TRUE(test_server()->Start()); | 434 ASSERT_TRUE(test_server()->Start()); |
| 435 | 435 |
| 436 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | 436 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
| 437 GURL url = test_server()->GetURL(kTestingPage); | 437 GURL url = test_server()->GetURL(kTestingPage); |
| 438 ui_test_utils::NavigateToURL(browser(), url); | 438 ui_test_utils::NavigateToURL(browser(), url); |
| 439 | 439 |
| 440 ASSERT_NO_FATAL_FAILURE(ClickOnView(VIEW_ID_TAB_CONTAINER)); | 440 ASSERT_NO_FATAL_FAILURE(ClickOnView(VIEW_ID_TAB_CONTAINER)); |
| 441 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); | 441 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); |
| 442 | 442 |
| 443 int tab_index = browser()->selected_index(); | 443 int tab_index = browser()->selected_index(); |
| 444 // Press Ctrl+F, which will make the Find box open and request focus. | 444 // Press Ctrl+F, which will make the Find box open and request focus. |
| 445 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCtrlF)); | 445 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCtrlF)); |
| 446 EXPECT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); | 446 EXPECT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); |
| 447 | 447 |
| 448 // Press Escape to close the Find box and move the focus back to the web page. | 448 // Press Escape to close the Find box and move the focus back to the web page. |
| 449 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | 449 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( |
| 450 browser(), app::VKEY_ESCAPE, false, false, false, false)); | 450 browser(), ui::VKEY_ESCAPE, false, false, false, false)); |
| 451 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); | 451 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); |
| 452 | 452 |
| 453 // Press Ctrl+F with keydown suppressed shall not open the find box. | 453 // Press Ctrl+F with keydown suppressed shall not open the find box. |
| 454 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCtrlFSuppressKeyDown)); | 454 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCtrlFSuppressKeyDown)); |
| 455 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); | 455 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); |
| 456 | 456 |
| 457 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCtrlZ)); | 457 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCtrlZ)); |
| 458 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCtrlZSuppressKeyDown)); | 458 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCtrlZSuppressKeyDown)); |
| 459 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCtrlEnter)); | 459 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCtrlEnter)); |
| 460 } | 460 } |
| 461 #elif defined(OS_MACOSX) | 461 #elif defined(OS_MACOSX) |
| 462 IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, CommandKeyEvents) { | 462 IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, CommandKeyEvents) { |
| 463 static const KeyEventTestData kTestCmdF = { | 463 static const KeyEventTestData kTestCmdF = { |
| 464 app::VKEY_F, false, false, false, true, | 464 ui::VKEY_F, false, false, false, true, |
| 465 false, false, false, false, 2, | 465 false, false, false, false, 2, |
| 466 { "D 91 0 false false false true", | 466 { "D 91 0 false false false true", |
| 467 "D 70 0 false false false true" } | 467 "D 70 0 false false false true" } |
| 468 }; | 468 }; |
| 469 | 469 |
| 470 // On Mac we don't send key up events when command modifier is down. | 470 // On Mac we don't send key up events when command modifier is down. |
| 471 static const KeyEventTestData kTestCmdFSuppressKeyDown = { | 471 static const KeyEventTestData kTestCmdFSuppressKeyDown = { |
| 472 app::VKEY_F, false, false, false, true, | 472 ui::VKEY_F, false, false, false, true, |
| 473 true, false, false, false, 3, | 473 true, false, false, false, 3, |
| 474 { "D 91 0 false false false true", | 474 { "D 91 0 false false false true", |
| 475 "D 70 0 false false false true", | 475 "D 70 0 false false false true", |
| 476 "U 91 0 false false false true" } | 476 "U 91 0 false false false true" } |
| 477 }; | 477 }; |
| 478 | 478 |
| 479 ASSERT_TRUE(test_server()->Start()); | 479 ASSERT_TRUE(test_server()->Start()); |
| 480 | 480 |
| 481 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | 481 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
| 482 GURL url = test_server()->GetURL(kTestingPage); | 482 GURL url = test_server()->GetURL(kTestingPage); |
| 483 ui_test_utils::NavigateToURL(browser(), url); | 483 ui_test_utils::NavigateToURL(browser(), url); |
| 484 | 484 |
| 485 ASSERT_NO_FATAL_FAILURE(ClickOnView(VIEW_ID_TAB_CONTAINER)); | 485 ASSERT_NO_FATAL_FAILURE(ClickOnView(VIEW_ID_TAB_CONTAINER)); |
| 486 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); | 486 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); |
| 487 | 487 |
| 488 int tab_index = browser()->selected_index(); | 488 int tab_index = browser()->selected_index(); |
| 489 // Press Cmd+F, which will make the Find box open and request focus. | 489 // Press Cmd+F, which will make the Find box open and request focus. |
| 490 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCmdF)); | 490 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCmdF)); |
| 491 EXPECT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); | 491 EXPECT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); |
| 492 | 492 |
| 493 // Press Escape to close the Find box and move the focus back to the web page. | 493 // Press Escape to close the Find box and move the focus back to the web page. |
| 494 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | 494 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( |
| 495 browser(), app::VKEY_ESCAPE, false, false, false, false)); | 495 browser(), ui::VKEY_ESCAPE, false, false, false, false)); |
| 496 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); | 496 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); |
| 497 | 497 |
| 498 // Press Cmd+F with keydown suppressed shall not open the find box. | 498 // Press Cmd+F with keydown suppressed shall not open the find box. |
| 499 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCmdFSuppressKeyDown)); | 499 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCmdFSuppressKeyDown)); |
| 500 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); | 500 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); |
| 501 } | 501 } |
| 502 #endif | 502 #endif |
| 503 | 503 |
| 504 IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, AccessKeys) { | 504 IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, AccessKeys) { |
| 505 #if defined(OS_MACOSX) | 505 #if defined(OS_MACOSX) |
| 506 // On Mac, access keys use ctrl+alt modifiers. | 506 // On Mac, access keys use ctrl+alt modifiers. |
| 507 static const KeyEventTestData kTestAccessA = { | 507 static const KeyEventTestData kTestAccessA = { |
| 508 app::VKEY_A, true, false, true, false, | 508 ui::VKEY_A, true, false, true, false, |
| 509 false, false, false, false, 6, | 509 false, false, false, false, 6, |
| 510 { "D 17 0 true false false false", | 510 { "D 17 0 true false false false", |
| 511 "D 18 0 true false true false", | 511 "D 18 0 true false true false", |
| 512 "D 65 0 true false true false", | 512 "D 65 0 true false true false", |
| 513 "U 65 0 true false true false", | 513 "U 65 0 true false true false", |
| 514 "U 18 0 true false true false", | 514 "U 18 0 true false true false", |
| 515 "U 17 0 true false false false" } | 515 "U 17 0 true false false false" } |
| 516 }; | 516 }; |
| 517 | 517 |
| 518 static const KeyEventTestData kTestAccessDSuppress = { | 518 static const KeyEventTestData kTestAccessDSuppress = { |
| 519 app::VKEY_D, true, false, true, false, | 519 ui::VKEY_D, true, false, true, false, |
| 520 true, true, true, false, 6, | 520 true, true, true, false, 6, |
| 521 { "D 17 0 true false false false", | 521 { "D 17 0 true false false false", |
| 522 "D 18 0 true false true false", | 522 "D 18 0 true false true false", |
| 523 "D 68 0 true false true false", | 523 "D 68 0 true false true false", |
| 524 "U 68 0 true false true false", | 524 "U 68 0 true false true false", |
| 525 "U 18 0 true false true false", | 525 "U 18 0 true false true false", |
| 526 "U 17 0 true false false false" } | 526 "U 17 0 true false false false" } |
| 527 }; | 527 }; |
| 528 | 528 |
| 529 static const KeyEventTestData kTestAccess1 = { | 529 static const KeyEventTestData kTestAccess1 = { |
| 530 app::VKEY_1, true, false, true, false, | 530 ui::VKEY_1, true, false, true, false, |
| 531 false, false, false, false, 6, | 531 false, false, false, false, 6, |
| 532 { "D 17 0 true false false false", | 532 { "D 17 0 true false false false", |
| 533 "D 18 0 true false true false", | 533 "D 18 0 true false true false", |
| 534 "D 49 0 true false true false", | 534 "D 49 0 true false true false", |
| 535 "U 49 0 true false true false", | 535 "U 49 0 true false true false", |
| 536 "U 18 0 true false true false", | 536 "U 18 0 true false true false", |
| 537 "U 17 0 true false false false" } | 537 "U 17 0 true false false false" } |
| 538 }; | 538 }; |
| 539 #else | 539 #else |
| 540 static const KeyEventTestData kTestAccessA = { | 540 static const KeyEventTestData kTestAccessA = { |
| 541 app::VKEY_A, false, false, true, false, | 541 ui::VKEY_A, false, false, true, false, |
| 542 false, false, false, false, 4, | 542 false, false, false, false, 4, |
| 543 { "D 18 0 false false true false", | 543 { "D 18 0 false false true false", |
| 544 "D 65 0 false false true false", | 544 "D 65 0 false false true false", |
| 545 "U 65 0 false false true false", | 545 "U 65 0 false false true false", |
| 546 "U 18 0 false false true false" } | 546 "U 18 0 false false true false" } |
| 547 }; | 547 }; |
| 548 | 548 |
| 549 static const KeyEventTestData kTestAccessD = { | 549 static const KeyEventTestData kTestAccessD = { |
| 550 app::VKEY_D, false, false, true, false, | 550 ui::VKEY_D, false, false, true, false, |
| 551 false, false, false, false, 2, | 551 false, false, false, false, 2, |
| 552 { "D 18 0 false false true false", | 552 { "D 18 0 false false true false", |
| 553 "D 68 0 false false true false" } | 553 "D 68 0 false false true false" } |
| 554 }; | 554 }; |
| 555 | 555 |
| 556 static const KeyEventTestData kTestAccessDSuppress = { | 556 static const KeyEventTestData kTestAccessDSuppress = { |
| 557 app::VKEY_D, false, false, true, false, | 557 ui::VKEY_D, false, false, true, false, |
| 558 true, true, true, false, 4, | 558 true, true, true, false, 4, |
| 559 { "D 18 0 false false true false", | 559 { "D 18 0 false false true false", |
| 560 "D 68 0 false false true false", | 560 "D 68 0 false false true false", |
| 561 "U 68 0 false false true false", | 561 "U 68 0 false false true false", |
| 562 "U 18 0 false false true false" } | 562 "U 18 0 false false true false" } |
| 563 }; | 563 }; |
| 564 | 564 |
| 565 static const KeyEventTestData kTestAccess1 = { | 565 static const KeyEventTestData kTestAccess1 = { |
| 566 app::VKEY_1, false, false, true, false, | 566 ui::VKEY_1, false, false, true, false, |
| 567 false, false, false, false, 4, | 567 false, false, false, false, 4, |
| 568 { "D 18 0 false false true false", | 568 { "D 18 0 false false true false", |
| 569 "D 49 0 false false true false", | 569 "D 49 0 false false true false", |
| 570 "U 49 0 false false true false", | 570 "U 49 0 false false true false", |
| 571 "U 18 0 false false true false" } | 571 "U 18 0 false false true false" } |
| 572 }; | 572 }; |
| 573 #endif | 573 #endif |
| 574 | 574 |
| 575 ASSERT_TRUE(test_server()->Start()); | 575 ASSERT_TRUE(test_server()->Start()); |
| 576 | 576 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 644 GURL url = test_server()->GetURL(kTestingPage); | 644 GURL url = test_server()->GetURL(kTestingPage); |
| 645 ui_test_utils::NavigateToURL(browser(), url); | 645 ui_test_utils::NavigateToURL(browser(), url); |
| 646 | 646 |
| 647 ASSERT_NO_FATAL_FAILURE(ClickOnView(VIEW_ID_TAB_CONTAINER)); | 647 ASSERT_NO_FATAL_FAILURE(ClickOnView(VIEW_ID_TAB_CONTAINER)); |
| 648 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); | 648 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); |
| 649 | 649 |
| 650 ASSERT_EQ(1, browser()->tab_count()); | 650 ASSERT_EQ(1, browser()->tab_count()); |
| 651 | 651 |
| 652 static const KeyEventTestData kTestCtrlOrCmdT = { | 652 static const KeyEventTestData kTestCtrlOrCmdT = { |
| 653 #if defined(OS_MACOSX) | 653 #if defined(OS_MACOSX) |
| 654 app::VKEY_T, false, false, false, true, | 654 ui::VKEY_T, false, false, false, true, |
| 655 true, false, false, false, 1, | 655 true, false, false, false, 1, |
| 656 { "D 91 0 false false false true" } | 656 { "D 91 0 false false false true" } |
| 657 #else | 657 #else |
| 658 app::VKEY_T, true, false, false, false, | 658 ui::VKEY_T, true, false, false, false, |
| 659 true, false, false, false, 1, | 659 true, false, false, false, 1, |
| 660 { "D 17 0 true false false false" } | 660 { "D 17 0 true false false false" } |
| 661 #endif | 661 #endif |
| 662 }; | 662 }; |
| 663 | 663 |
| 664 ui_test_utils::WindowedNotificationObserver wait_for_new_tab( | 664 ui_test_utils::WindowedNotificationObserver wait_for_new_tab( |
| 665 NotificationType::TAB_PARENTED, | 665 NotificationType::TAB_PARENTED, |
| 666 NotificationService::AllSources()); | 666 NotificationService::AllSources()); |
| 667 | 667 |
| 668 // Press Ctrl/Cmd+T, which will open a new tab. It cannot be suppressed. | 668 // Press Ctrl/Cmd+T, which will open a new tab. It cannot be suppressed. |
| (...skipping 22 matching lines...) Expand all Loading... |
| 691 // Reserved accelerators can't be suppressed. | 691 // Reserved accelerators can't be suppressed. |
| 692 ASSERT_NO_FATAL_FAILURE(SuppressAllEvents(1, true)); | 692 ASSERT_NO_FATAL_FAILURE(SuppressAllEvents(1, true)); |
| 693 | 693 |
| 694 ui_test_utils::WindowedNotificationObserver wait_for_tab_closed( | 694 ui_test_utils::WindowedNotificationObserver wait_for_tab_closed( |
| 695 NotificationType::TAB_CLOSED, Source<NavigationController>( | 695 NotificationType::TAB_CLOSED, Source<NavigationController>( |
| 696 &browser()->GetTabContentsAt(1)->controller())); | 696 &browser()->GetTabContentsAt(1)->controller())); |
| 697 | 697 |
| 698 // Press Ctrl/Cmd+W, which will close the tab. | 698 // Press Ctrl/Cmd+W, which will close the tab. |
| 699 #if defined(OS_MACOSX) | 699 #if defined(OS_MACOSX) |
| 700 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | 700 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( |
| 701 browser(), app::VKEY_W, false, false, false, true)); | 701 browser(), ui::VKEY_W, false, false, false, true)); |
| 702 #else | 702 #else |
| 703 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | 703 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( |
| 704 browser(), app::VKEY_W, true, false, false, false)); | 704 browser(), ui::VKEY_W, true, false, false, false)); |
| 705 #endif | 705 #endif |
| 706 | 706 |
| 707 ASSERT_NO_FATAL_FAILURE(wait_for_tab_closed.Wait()); | 707 ASSERT_NO_FATAL_FAILURE(wait_for_tab_closed.Wait()); |
| 708 | 708 |
| 709 EXPECT_EQ(1, browser()->tab_count()); | 709 EXPECT_EQ(1, browser()->tab_count()); |
| 710 } | 710 } |
| 711 | 711 |
| 712 #if defined(OS_MACOSX) | 712 #if defined(OS_MACOSX) |
| 713 IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, EditorKeyBindings) { | 713 IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, EditorKeyBindings) { |
| 714 static const KeyEventTestData kTestCtrlA = { | 714 static const KeyEventTestData kTestCtrlA = { |
| 715 app::VKEY_A, true, false, false, false, | 715 ui::VKEY_A, true, false, false, false, |
| 716 false, false, false, false, 4, | 716 false, false, false, false, 4, |
| 717 { "D 17 0 true false false false", | 717 { "D 17 0 true false false false", |
| 718 "D 65 0 true false false false", | 718 "D 65 0 true false false false", |
| 719 "U 65 0 true false false false", | 719 "U 65 0 true false false false", |
| 720 "U 17 0 true false false false" } | 720 "U 17 0 true false false false" } |
| 721 }; | 721 }; |
| 722 | 722 |
| 723 static const KeyEventTestData kTestCtrlF = { | 723 static const KeyEventTestData kTestCtrlF = { |
| 724 app::VKEY_F, true, false, false, false, | 724 ui::VKEY_F, true, false, false, false, |
| 725 false, false, false, false, 4, | 725 false, false, false, false, 4, |
| 726 { "D 17 0 true false false false", | 726 { "D 17 0 true false false false", |
| 727 "D 70 0 true false false false", | 727 "D 70 0 true false false false", |
| 728 "U 70 0 true false false false", | 728 "U 70 0 true false false false", |
| 729 "U 17 0 true false false false" } | 729 "U 17 0 true false false false" } |
| 730 }; | 730 }; |
| 731 | 731 |
| 732 static const KeyEventTestData kTestCtrlK = { | 732 static const KeyEventTestData kTestCtrlK = { |
| 733 app::VKEY_K, true, false, false, false, | 733 ui::VKEY_K, true, false, false, false, |
| 734 false, false, false, false, 4, | 734 false, false, false, false, 4, |
| 735 { "D 17 0 true false false false", | 735 { "D 17 0 true false false false", |
| 736 "D 75 0 true false false false", | 736 "D 75 0 true false false false", |
| 737 "U 75 0 true false false false", | 737 "U 75 0 true false false false", |
| 738 "U 17 0 true false false false" } | 738 "U 17 0 true false false false" } |
| 739 }; | 739 }; |
| 740 | 740 |
| 741 ASSERT_TRUE(test_server()->Start()); | 741 ASSERT_TRUE(test_server()->Start()); |
| 742 | 742 |
| 743 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | 743 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 755 // Forward one character | 755 // Forward one character |
| 756 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCtrlF)); | 756 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCtrlF)); |
| 757 // Delete to the end of the line. | 757 // Delete to the end of the line. |
| 758 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCtrlK)); | 758 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCtrlK)); |
| 759 EXPECT_NO_FATAL_FAILURE(CheckTextBoxValue(tab_index, L"A", L"H")); | 759 EXPECT_NO_FATAL_FAILURE(CheckTextBoxValue(tab_index, L"A", L"H")); |
| 760 } | 760 } |
| 761 #endif | 761 #endif |
| 762 | 762 |
| 763 IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, PageUpDownKeys) { | 763 IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, PageUpDownKeys) { |
| 764 static const KeyEventTestData kTestPageUp = { | 764 static const KeyEventTestData kTestPageUp = { |
| 765 app::VKEY_PRIOR, false, false, false, false, | 765 ui::VKEY_PRIOR, false, false, false, false, |
| 766 false, false, false, false, 2, | 766 false, false, false, false, 2, |
| 767 { "D 33 0 false false false false", | 767 { "D 33 0 false false false false", |
| 768 "U 33 0 false false false false" } | 768 "U 33 0 false false false false" } |
| 769 }; | 769 }; |
| 770 | 770 |
| 771 static const KeyEventTestData kTestPageDown = { | 771 static const KeyEventTestData kTestPageDown = { |
| 772 app::VKEY_NEXT, false, false, false, false, | 772 ui::VKEY_NEXT, false, false, false, false, |
| 773 false, false, false, false, 2, | 773 false, false, false, false, 2, |
| 774 { "D 34 0 false false false false", | 774 { "D 34 0 false false false false", |
| 775 "U 34 0 false false false false" } | 775 "U 34 0 false false false false" } |
| 776 }; | 776 }; |
| 777 | 777 |
| 778 ASSERT_TRUE(test_server()->Start()); | 778 ASSERT_TRUE(test_server()->Start()); |
| 779 | 779 |
| 780 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | 780 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
| 781 GURL url = test_server()->GetURL(kTestingPage); | 781 GURL url = test_server()->GetURL(kTestingPage); |
| 782 ui_test_utils::NavigateToURL(browser(), url); | 782 ui_test_utils::NavigateToURL(browser(), url); |
| 783 | 783 |
| 784 ASSERT_NO_FATAL_FAILURE(ClickOnView(VIEW_ID_TAB_CONTAINER)); | 784 ASSERT_NO_FATAL_FAILURE(ClickOnView(VIEW_ID_TAB_CONTAINER)); |
| 785 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); | 785 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); |
| 786 | 786 |
| 787 int tab_index = browser()->selected_index(); | 787 int tab_index = browser()->selected_index(); |
| 788 ASSERT_NO_FATAL_FAILURE(SetFocusedElement(tab_index, L"A")); | 788 ASSERT_NO_FATAL_FAILURE(SetFocusedElement(tab_index, L"A")); |
| 789 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestPageUp)); | 789 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestPageUp)); |
| 790 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestPageDown)); | 790 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestPageDown)); |
| 791 EXPECT_NO_FATAL_FAILURE(CheckTextBoxValue(tab_index, L"A", L"")); | 791 EXPECT_NO_FATAL_FAILURE(CheckTextBoxValue(tab_index, L"A", L"")); |
| 792 } | 792 } |
| 793 | 793 |
| 794 #if defined(OS_WIN) || defined(TOOLKIT_VIEWS) | 794 #if defined(OS_WIN) || defined(TOOLKIT_VIEWS) |
| 795 IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, FocusMenuBarByAltKey) { | 795 IN_PROC_BROWSER_TEST_F(BrowserKeyEventsTest, FocusMenuBarByAltKey) { |
| 796 static const KeyEventTestData kTestAltKey = { | 796 static const KeyEventTestData kTestAltKey = { |
| 797 app::VKEY_MENU, false, false, false, false, | 797 ui::VKEY_MENU, false, false, false, false, |
| 798 false, false, false, false, 2, | 798 false, false, false, false, 2, |
| 799 { "D 18 0 false false true false", | 799 { "D 18 0 false false true false", |
| 800 "U 18 0 false false true false" } | 800 "U 18 0 false false true false" } |
| 801 }; | 801 }; |
| 802 | 802 |
| 803 static const KeyEventTestData kTestAltKeySuppress = { | 803 static const KeyEventTestData kTestAltKeySuppress = { |
| 804 app::VKEY_MENU, false, false, false, false, | 804 ui::VKEY_MENU, false, false, false, false, |
| 805 true, false, false, false, 2, | 805 true, false, false, false, 2, |
| 806 { "D 18 0 false false true false", | 806 { "D 18 0 false false true false", |
| 807 "U 18 0 false false true false" } | 807 "U 18 0 false false true false" } |
| 808 }; | 808 }; |
| 809 | 809 |
| 810 static const KeyEventTestData kTestCtrlAltKey = { | 810 static const KeyEventTestData kTestCtrlAltKey = { |
| 811 app::VKEY_MENU, true, false, false, false, | 811 ui::VKEY_MENU, true, false, false, false, |
| 812 false, false, false, false, 4, | 812 false, false, false, false, 4, |
| 813 { "D 17 0 true false false false", | 813 { "D 17 0 true false false false", |
| 814 "D 18 0 true false true false", | 814 "D 18 0 true false true false", |
| 815 "U 18 0 true false true false", | 815 "U 18 0 true false true false", |
| 816 "U 17 0 true false false false" } | 816 "U 17 0 true false false false" } |
| 817 }; | 817 }; |
| 818 | 818 |
| 819 ASSERT_TRUE(test_server()->Start()); | 819 ASSERT_TRUE(test_server()->Start()); |
| 820 | 820 |
| 821 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | 821 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 837 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestAltKeySuppress)); | 837 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestAltKeySuppress)); |
| 838 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); | 838 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); |
| 839 | 839 |
| 840 // Ctrl+Alt should have no effect. | 840 // Ctrl+Alt should have no effect. |
| 841 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCtrlAltKey)); | 841 EXPECT_NO_FATAL_FAILURE(TestKeyEvent(tab_index, kTestCtrlAltKey)); |
| 842 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); | 842 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); |
| 843 } | 843 } |
| 844 #endif | 844 #endif |
| 845 | 845 |
| 846 } // namespace | 846 } // namespace |
| OLD | NEW |