Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/browser/renderer_host/web_input_event_aura.h" | 5 #include "content/browser/renderer_host/web_input_event_aura.h" |
| 6 | 6 |
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 #include "ui/events/event.h" | 9 #include "ui/events/event.h" |
| 10 #include "ui/events/event_utils.h" | 10 #include "ui/events/event_utils.h" |
| 11 #include "ui/events/keycodes/dom3/dom_code.h" | 11 #include "ui/events/keycodes/dom3/dom_code.h" |
| 12 #include "ui/events/keycodes/dom3/dom_key.h" | 12 #include "ui/events/keycodes/dom3/dom_key.h" |
| 13 #include "ui/events/keycodes/dom4/keycode_converter.h" | 13 #include "ui/events/keycodes/dom4/keycode_converter.h" |
| 14 | 14 |
| 15 #if defined(USE_X11) | 15 #if defined(USE_X11) |
| 16 #include <X11/keysym.h> | 16 #include <X11/keysym.h> |
| 17 #include <X11/Xlib.h> | 17 #include <X11/Xlib.h> |
| 18 #include "ui/events/test/events_test_utils_x11.h" | 18 #include "ui/events/test/events_test_utils_x11.h" |
| 19 #include "ui/gfx/x/x11_types.h" | 19 #include "ui/gfx/x/x11_types.h" |
| 20 #endif | 20 #endif |
| 21 | 21 |
| 22 namespace content { | 22 namespace content { |
| 23 | 23 |
| 24 // Checks that MakeWebKeyboardEvent makes a DOM3 spec compliant key event. | 24 // Checks that MakeWebKeyboardEvent makes a DOM3 spec compliant key event. |
| 25 // crbug.com/127142 | 25 // crbug.com/127142 |
| 26 TEST(WebInputEventAuraTest, TestMakeWebKeyboardEvent) { | 26 TEST(WebInputEventAuraTest, TestMakeWebKeyboardEvent) { |
| 27 { | |
| 28 // Press Ctrl. | |
| 29 ui::KeyEvent event(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, | |
| 30 ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN); | |
| 31 blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event); | |
| 32 // However, modifier bit for Control in |webkit_event| should be set. | |
| 33 EXPECT_EQ(blink::WebInputEvent::ControlKey | blink::WebInputEvent::IsLeft, | |
| 34 webkit_event.modifiers); | |
| 35 } | |
| 36 { | |
| 37 // Release Ctrl. | |
| 38 ui::KeyEvent event(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, | |
| 39 ui::DomCode::CONTROL_LEFT, ui::EF_NONE); | |
| 40 blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event); | |
| 41 // However, modifier bit for Control in |webkit_event| shouldn't be set. | |
| 42 EXPECT_EQ(blink::WebInputEvent::IsLeft, webkit_event.modifiers); | |
| 43 } | |
| 27 #if defined(USE_X11) | 44 #if defined(USE_X11) |
| 45 const int kLocationModifiers = | |
| 46 blink::WebInputEvent::IsLeft | blink::WebInputEvent::IsRight; | |
| 28 ui::ScopedXI2Event xev; | 47 ui::ScopedXI2Event xev; |
| 29 { | 48 { |
| 30 // Press Ctrl. | 49 // Press Ctrl. |
| 31 xev.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, 0); | 50 xev.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, 0); |
| 32 ui::KeyEvent event(xev); | 51 ui::KeyEvent event(xev); |
| 33 blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event); | 52 blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event); |
| 34 // However, modifier bit for Control in |webkit_event| should be set. | 53 // However, modifier bit for Control in |webkit_event| should be set. |
| 35 EXPECT_EQ(webkit_event.modifiers, blink::WebInputEvent::ControlKey); | 54 EXPECT_EQ(blink::WebInputEvent::ControlKey, |
| 55 webkit_event.modifiers & ~kLocationModifiers); | |
| 36 } | 56 } |
| 37 { | 57 { |
| 38 // Release Ctrl. | 58 // Release Ctrl. |
| 39 xev.InitKeyEvent(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, ControlMask); | 59 xev.InitKeyEvent(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, ControlMask); |
| 40 ui::KeyEvent event(xev); | 60 ui::KeyEvent event(xev); |
| 41 blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event); | 61 blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event); |
| 42 // However, modifier bit for Control in |webkit_event| shouldn't be set. | 62 // However, modifier bit for Control in |webkit_event| shouldn't be set. |
| 43 EXPECT_EQ(webkit_event.modifiers, 0); | 63 EXPECT_EQ(0, webkit_event.modifiers & ~kLocationModifiers); |
| 44 } | 64 } |
| 45 #endif | 65 #endif |
| 46 } | 66 } |
| 47 | 67 |
| 48 // Checks that MakeWebKeyboardEvent returns a correct windowsKeyCode. | 68 // Checks that MakeWebKeyboardEvent returns a correct windowsKeyCode. |
| 49 #if defined(OS_CHROMEOS) || defined(THREAD_SANITIZER) | 69 #if defined(OS_CHROMEOS) || defined(THREAD_SANITIZER) |
| 50 // Fails on Chrome OS and under ThreadSanitizer on Linux, see | 70 // Fails on Chrome OS and under ThreadSanitizer on Linux, see |
| 51 // https://crbug.com/449103. | 71 // https://crbug.com/449103. |
| 52 #define MAYBE_TestMakeWebKeyboardEventWindowsKeyCode \ | 72 #define MAYBE_TestMakeWebKeyboardEventWindowsKeyCode \ |
| 53 DISABLED_TestMakeWebKeyboardEventWindowsKeyCode | 73 DISABLED_TestMakeWebKeyboardEventWindowsKeyCode |
| 54 #else | 74 #else |
| 55 #define MAYBE_TestMakeWebKeyboardEventWindowsKeyCode \ | 75 #define MAYBE_TestMakeWebKeyboardEventWindowsKeyCode \ |
| 56 TestMakeWebKeyboardEventWindowsKeyCode | 76 TestMakeWebKeyboardEventWindowsKeyCode |
| 57 #endif | 77 #endif |
| 58 TEST(WebInputEventAuraTest, MAYBE_TestMakeWebKeyboardEventWindowsKeyCode) { | 78 TEST(WebInputEventAuraTest, MAYBE_TestMakeWebKeyboardEventWindowsKeyCode) { |
| 59 #if defined(USE_X11) | 79 #if defined(USE_X11) |
| 60 ui::ScopedXI2Event xev; | 80 ui::ScopedXI2Event xev; |
| 61 { | 81 { |
| 62 // Press left Ctrl. | 82 // Press left Ctrl. |
| 63 xev.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, 0); | 83 xev.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, 0); |
| 64 XEvent* xevent = xev; | 84 XEvent* xevent = xev; |
| 65 xevent->xkey.keycode = ui::KeycodeConverter::DomCodeToNativeKeycode( | 85 xevent->xkey.keycode = |
| 66 ui::DomCode::CONTROL_LEFT); | 86 ui::KeycodeConverter::DomCodeToNativeKeycode(ui::DomCode::CONTROL_LEFT); |
| 67 ui::KeyEvent event(xev); | 87 ui::KeyEvent event(xev); |
| 68 blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event); | 88 blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event); |
| 69 // ui::VKEY_LCONTROL, instead of ui::VKEY_CONTROL, should be filled. | 89 // ui::VKEY_LCONTROL, instead of ui::VKEY_CONTROL, should be filled. |
| 70 EXPECT_EQ(ui::VKEY_LCONTROL, webkit_event.windowsKeyCode); | 90 EXPECT_EQ(ui::VKEY_LCONTROL, webkit_event.windowsKeyCode); |
| 71 } | 91 } |
| 72 { | 92 { |
| 73 // Press right Ctrl. | 93 // Press right Ctrl. |
| 74 xev.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, 0); | 94 xev.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, 0); |
| 75 XEvent* xevent = xev; | 95 XEvent* xevent = xev; |
| 76 xevent->xkey.keycode = ui::KeycodeConverter::DomCodeToNativeKeycode( | 96 xevent->xkey.keycode = ui::KeycodeConverter::DomCodeToNativeKeycode( |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 99 // Press right Ctrl. | 119 // Press right Ctrl. |
| 100 ui::KeyEvent event(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, | 120 ui::KeyEvent event(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, |
| 101 ui::DomCode::CONTROL_RIGHT, ui::EF_CONTROL_DOWN, | 121 ui::DomCode::CONTROL_RIGHT, ui::EF_CONTROL_DOWN, |
| 102 ui::DomKey::CONTROL, 0, ui::EventTimeForNow()); | 122 ui::DomKey::CONTROL, 0, ui::EventTimeForNow()); |
| 103 blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event); | 123 blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event); |
| 104 // ui::VKEY_RCONTROL, instead of ui::VKEY_CONTROL, should be filled. | 124 // ui::VKEY_RCONTROL, instead of ui::VKEY_CONTROL, should be filled. |
| 105 EXPECT_EQ(ui::VKEY_RCONTROL, webkit_event.windowsKeyCode); | 125 EXPECT_EQ(ui::VKEY_RCONTROL, webkit_event.windowsKeyCode); |
| 106 } | 126 } |
| 107 } | 127 } |
| 108 | 128 |
| 109 // Checks that MakeWebKeyboardEvent fills a correct keypard modifier. | 129 // Checks that MakeWebKeyboardEvent fills a correct keypard modifier. |
|
Wez
2015/05/05 21:23:44
typo: keypard
kpschoedel
2015/05/05 22:19:08
Done.
| |
| 110 TEST(WebInputEventAuraTest, TestMakeWebKeyboardEventKeyPadKeyCode) { | 130 TEST(WebInputEventAuraTest, TestMakeWebKeyboardEventKeyPadKeyCode) { |
| 111 #if defined(USE_X11) | 131 #if defined(USE_X11) |
| 132 #define XK(x) XK_##x | |
| 133 #else | |
| 134 #define XK(x) 0 | |
| 135 #endif | |
| 112 struct TestCase { | 136 struct TestCase { |
| 137 ui::DomCode dom_code; // The physical key (location). | |
| 113 ui::KeyboardCode ui_keycode; // The virtual key code. | 138 ui::KeyboardCode ui_keycode; // The virtual key code. |
| 114 uint32 x_keycode; // The platform key code. | 139 uint32 x_keysym; // The X11 keysym. |
| 115 bool expected_result; // true if the event has "isKeyPad" modifier. | 140 bool expected_result; // true if the event has "isKeyPad" modifier. |
| 116 } kTesCases[] = { | 141 } kTesCases[] = { |
| 117 {ui::VKEY_0, XK_0, false}, | 142 {ui::DomCode::DIGIT0, ui::VKEY_0, XK(0), false}, |
| 118 {ui::VKEY_1, XK_1, false}, | 143 {ui::DomCode::DIGIT1, ui::VKEY_1, XK(1), false}, |
| 119 {ui::VKEY_2, XK_2, false}, | 144 {ui::DomCode::DIGIT2, ui::VKEY_2, XK(2), false}, |
| 120 {ui::VKEY_3, XK_3, false}, | 145 {ui::DomCode::DIGIT3, ui::VKEY_3, XK(3), false}, |
| 121 {ui::VKEY_4, XK_4, false}, | 146 {ui::DomCode::DIGIT4, ui::VKEY_4, XK(4), false}, |
| 122 {ui::VKEY_5, XK_5, false}, | 147 {ui::DomCode::DIGIT5, ui::VKEY_5, XK(5), false}, |
| 123 {ui::VKEY_6, XK_6, false}, | 148 {ui::DomCode::DIGIT6, ui::VKEY_6, XK(6), false}, |
| 124 {ui::VKEY_7, XK_7, false}, | 149 {ui::DomCode::DIGIT7, ui::VKEY_7, XK(7), false}, |
| 125 {ui::VKEY_8, XK_8, false}, | 150 {ui::DomCode::DIGIT8, ui::VKEY_8, XK(8), false}, |
| 126 {ui::VKEY_9, XK_9, false}, | 151 {ui::DomCode::DIGIT9, ui::VKEY_9, XK(9), false}, |
| 127 | 152 |
| 128 {ui::VKEY_NUMPAD0, XK_KP_0, true}, | 153 {ui::DomCode::NUMPAD0, ui::VKEY_NUMPAD0, XK(KP_0), true}, |
| 129 {ui::VKEY_NUMPAD1, XK_KP_1, true}, | 154 {ui::DomCode::NUMPAD1, ui::VKEY_NUMPAD1, XK(KP_1), true}, |
| 130 {ui::VKEY_NUMPAD2, XK_KP_2, true}, | 155 {ui::DomCode::NUMPAD2, ui::VKEY_NUMPAD2, XK(KP_2), true}, |
| 131 {ui::VKEY_NUMPAD3, XK_KP_3, true}, | 156 {ui::DomCode::NUMPAD3, ui::VKEY_NUMPAD3, XK(KP_3), true}, |
| 132 {ui::VKEY_NUMPAD4, XK_KP_4, true}, | 157 {ui::DomCode::NUMPAD4, ui::VKEY_NUMPAD4, XK(KP_4), true}, |
| 133 {ui::VKEY_NUMPAD5, XK_KP_5, true}, | 158 {ui::DomCode::NUMPAD5, ui::VKEY_NUMPAD5, XK(KP_5), true}, |
| 134 {ui::VKEY_NUMPAD6, XK_KP_6, true}, | 159 {ui::DomCode::NUMPAD6, ui::VKEY_NUMPAD6, XK(KP_6), true}, |
| 135 {ui::VKEY_NUMPAD7, XK_KP_7, true}, | 160 {ui::DomCode::NUMPAD7, ui::VKEY_NUMPAD7, XK(KP_7), true}, |
| 136 {ui::VKEY_NUMPAD8, XK_KP_8, true}, | 161 {ui::DomCode::NUMPAD8, ui::VKEY_NUMPAD8, XK(KP_8), true}, |
| 137 {ui::VKEY_NUMPAD9, XK_KP_9, true}, | 162 {ui::DomCode::NUMPAD9, ui::VKEY_NUMPAD9, XK(KP_9), true}, |
| 138 | 163 |
| 139 {ui::VKEY_MULTIPLY, XK_KP_Multiply, true}, | 164 {ui::DomCode::NUMPAD_MULTIPLY, ui::VKEY_MULTIPLY, XK(KP_Multiply), true}, |
| 140 {ui::VKEY_SUBTRACT, XK_KP_Subtract, true}, | 165 {ui::DomCode::NUMPAD_SUBTRACT, ui::VKEY_SUBTRACT, XK(KP_Subtract), true}, |
| 141 {ui::VKEY_ADD, XK_KP_Add, true}, | 166 {ui::DomCode::NUMPAD_ADD, ui::VKEY_ADD, XK(KP_Add), true}, |
| 142 {ui::VKEY_DIVIDE, XK_KP_Divide, true}, | 167 {ui::DomCode::NUMPAD_DIVIDE, ui::VKEY_DIVIDE, XK(KP_Divide), true}, |
| 143 {ui::VKEY_DECIMAL, XK_KP_Decimal, true}, | 168 {ui::DomCode::NUMPAD_DECIMAL, ui::VKEY_DECIMAL, XK(KP_Decimal), true}, |
| 144 {ui::VKEY_DELETE, XK_KP_Delete, true}, | 169 {ui::DomCode::NUMPAD_DECIMAL, ui::VKEY_DELETE, XK(KP_Delete), true}, |
| 145 {ui::VKEY_INSERT, XK_KP_Insert, true}, | 170 {ui::DomCode::NUMPAD0, ui::VKEY_INSERT, XK(KP_Insert), true}, |
| 146 {ui::VKEY_END, XK_KP_End, true}, | 171 {ui::DomCode::NUMPAD1, ui::VKEY_END, XK(KP_End), true}, |
| 147 {ui::VKEY_DOWN, XK_KP_Down, true}, | 172 {ui::DomCode::NUMPAD2, ui::VKEY_DOWN, XK(KP_Down), true}, |
| 148 {ui::VKEY_NEXT, XK_KP_Page_Down, true}, | 173 {ui::DomCode::NUMPAD3, ui::VKEY_NEXT, XK(KP_Page_Down), true}, |
| 149 {ui::VKEY_LEFT, XK_KP_Left, true}, | 174 {ui::DomCode::NUMPAD4, ui::VKEY_LEFT, XK(KP_Left), true}, |
| 150 {ui::VKEY_CLEAR, XK_KP_Begin, true}, | 175 {ui::DomCode::NUMPAD5, ui::VKEY_CLEAR, XK(KP_Begin), true}, |
| 151 {ui::VKEY_RIGHT, XK_KP_Right, true}, | 176 {ui::DomCode::NUMPAD6, ui::VKEY_RIGHT, XK(KP_Right), true}, |
| 152 {ui::VKEY_HOME, XK_KP_Home, true}, | 177 {ui::DomCode::NUMPAD7, ui::VKEY_HOME, XK(KP_Home), true}, |
| 153 {ui::VKEY_UP, XK_KP_Up, true}, | 178 {ui::DomCode::NUMPAD8, ui::VKEY_UP, XK(KP_Up), true}, |
| 154 {ui::VKEY_PRIOR, XK_KP_Page_Up, true}, | 179 {ui::DomCode::NUMPAD9, ui::VKEY_PRIOR, XK(KP_Page_Up), true}, |
| 155 }; | 180 }; |
| 181 for (const auto& test_case : kTesCases) { | |
| 182 ui::KeyEvent event(ui::ET_KEY_PRESSED, test_case.ui_keycode, | |
| 183 test_case.dom_code, ui::EF_NONE); | |
| 184 blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event); | |
| 185 EXPECT_EQ(test_case.expected_result, | |
| 186 (webkit_event.modifiers & blink::WebInputEvent::IsKeyPad) != 0) | |
| 187 << "Failed in " | |
| 188 << "{dom_code:" | |
| 189 << ui::KeycodeConverter::DomCodeToCodeString(test_case.dom_code) | |
| 190 << ", ui_keycode:" << test_case.ui_keycode | |
| 191 << "}, expect: " << test_case.expected_result; | |
| 192 } | |
| 193 #if defined(USE_X11) | |
| 156 ui::ScopedXI2Event xev; | 194 ui::ScopedXI2Event xev; |
| 157 for (size_t i = 0; i < arraysize(kTesCases); ++i) { | 195 for (size_t i = 0; i < arraysize(kTesCases); ++i) { |
| 158 const TestCase& test_case = kTesCases[i]; | 196 const TestCase& test_case = kTesCases[i]; |
| 159 | 197 |
| 160 xev.InitKeyEvent(ui::ET_KEY_PRESSED, test_case.ui_keycode, 0); | 198 xev.InitKeyEvent(ui::ET_KEY_PRESSED, test_case.ui_keycode, ui::EF_NONE); |
| 161 XEvent* xevent = xev; | 199 XEvent* xevent = xev; |
| 162 xevent->xkey.keycode = XKeysymToKeycode(gfx::GetXDisplay(), | 200 xevent->xkey.keycode = |
| 163 test_case.x_keycode); | 201 XKeysymToKeycode(gfx::GetXDisplay(), test_case.x_keysym); |
| 164 ui::KeyEvent event(xev); | 202 ui::KeyEvent event(xev); |
| 165 blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event); | 203 blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event); |
| 166 EXPECT_EQ(test_case.expected_result, | 204 EXPECT_EQ(test_case.expected_result, |
| 167 (webkit_event.modifiers & blink::WebInputEvent::IsKeyPad) != 0) | 205 (webkit_event.modifiers & blink::WebInputEvent::IsKeyPad) != 0) |
| 168 << "Failed in " << i << "th test case: " | 206 << "Failed in " << i << "th test case: " |
| 169 << "{ui_keycode:" << test_case.ui_keycode | 207 << "{dom_code:" |
| 170 << ", x_keycode:" << test_case.x_keycode | 208 << ui::KeycodeConverter::DomCodeToCodeString(test_case.dom_code) |
| 209 << ", ui_keycode:" << test_case.ui_keycode | |
| 210 << ", x_keysym:" << test_case.x_keysym | |
| 171 << "}, expect: " << test_case.expected_result; | 211 << "}, expect: " << test_case.expected_result; |
| 172 } | 212 } |
| 173 #endif | 213 #endif |
| 174 } | 214 } |
| 175 | 215 |
| 176 } // namespace content | 216 } // namespace content |
| OLD | NEW |