| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "chrome/browser/chromeos/events/event_rewriter.h" | 5 #include "chrome/browser/chromeos/events/event_rewriter.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "ash/shell.h" | 9 #include "ash/shell.h" |
| 10 #include "ash/sticky_keys/sticky_keys_controller.h" | 10 #include "ash/sticky_keys/sticky_keys_controller.h" |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 #include "chrome/test/base/testing_pref_service_syncable.h" | 23 #include "chrome/test/base/testing_pref_service_syncable.h" |
| 24 #include "chromeos/chromeos_switches.h" | 24 #include "chromeos/chromeos_switches.h" |
| 25 #include "components/user_manager/fake_user_manager.h" | 25 #include "components/user_manager/fake_user_manager.h" |
| 26 #include "testing/gtest/include/gtest/gtest.h" | 26 #include "testing/gtest/include/gtest/gtest.h" |
| 27 #include "ui/aura/window.h" | 27 #include "ui/aura/window.h" |
| 28 #include "ui/aura/window_tree_host.h" | 28 #include "ui/aura/window_tree_host.h" |
| 29 #include "ui/base/ime/chromeos/fake_ime_keyboard.h" | 29 #include "ui/base/ime/chromeos/fake_ime_keyboard.h" |
| 30 #include "ui/events/event.h" | 30 #include "ui/events/event.h" |
| 31 #include "ui/events/event_rewriter.h" | 31 #include "ui/events/event_rewriter.h" |
| 32 #include "ui/events/event_utils.h" | 32 #include "ui/events/event_utils.h" |
| 33 #include "ui/events/keycodes/dom3/dom_code.h" |
| 34 #include "ui/events/keycodes/dom3/dom_key.h" |
| 35 #include "ui/events/keycodes/dom4/keycode_converter.h" |
| 33 #include "ui/events/test/events_test_utils.h" | 36 #include "ui/events/test/events_test_utils.h" |
| 34 #include "ui/events/test/test_event_processor.h" | 37 #include "ui/events/test/test_event_processor.h" |
| 35 | 38 |
| 36 #if defined(USE_X11) | 39 #if defined(USE_X11) |
| 37 #include <X11/keysym.h> | 40 #include <X11/keysym.h> |
| 38 | 41 |
| 39 #include "ui/events/devices/x11/touch_factory_x11.h" | 42 #include "ui/events/devices/x11/touch_factory_x11.h" |
| 40 #include "ui/events/event_utils.h" | 43 #include "ui/events/event_utils.h" |
| 41 #include "ui/events/test/events_test_utils_x11.h" | 44 #include "ui/events/test/events_test_utils_x11.h" |
| 42 #include "ui/gfx/x/x11_types.h" | 45 #include "ui/gfx/x/x11_types.h" |
| 43 #endif | 46 #endif |
| 44 | 47 |
| 45 namespace { | 48 namespace { |
| 46 | 49 |
| 47 // The device id of the test touchpad device. | 50 // The device id of the test touchpad device. |
| 51 #if defined(USE_X11) |
| 48 const int kTouchPadDeviceId = 1; | 52 const int kTouchPadDeviceId = 1; |
| 53 const int kMasterKeyboardDeviceId = 3; |
| 54 #endif |
| 49 const int kKeyboardDeviceId = 2; | 55 const int kKeyboardDeviceId = 2; |
| 50 const int kMasterKeyboardDeviceId = 3; | |
| 51 | 56 |
| 52 std::string GetExpectedResultAsString(ui::KeyboardCode ui_keycode, | 57 std::string GetExpectedResultAsString(ui::EventType ui_type, |
| 53 int ui_flags, | 58 ui::KeyboardCode ui_keycode, |
| 54 ui::EventType ui_type) { | 59 ui::DomCode code, |
| 60 int ui_flags, // ui::EventFlags |
| 61 ui::DomKey key, |
| 62 base::char16 character) { |
| 55 return base::StringPrintf("ui_keycode=0x%X ui_flags=0x%X ui_type=%d", | 63 return base::StringPrintf("ui_keycode=0x%X ui_flags=0x%X ui_type=%d", |
| 56 ui_keycode, | 64 ui_keycode, |
| 57 ui_flags & ~ui::EF_IS_REPEAT, | 65 ui_flags & ~ui::EF_IS_REPEAT, |
| 58 ui_type); | 66 ui_type); |
| 59 } | 67 } |
| 60 | 68 |
| 61 std::string GetKeyEventAsString(const ui::KeyEvent& keyevent) { | 69 std::string GetKeyEventAsString(const ui::KeyEvent& keyevent) { |
| 62 return GetExpectedResultAsString( | 70 return GetExpectedResultAsString( |
| 63 keyevent.key_code(), keyevent.flags(), keyevent.type()); | 71 keyevent.type(), keyevent.key_code(), keyevent.code(), keyevent.flags(), |
| 72 keyevent.GetDomKey(), keyevent.GetCharacter()); |
| 64 } | 73 } |
| 65 | 74 |
| 66 std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter, | 75 std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter, |
| 76 ui::EventType ui_type, |
| 67 ui::KeyboardCode ui_keycode, | 77 ui::KeyboardCode ui_keycode, |
| 68 int ui_flags, | 78 ui::DomCode code, |
| 69 ui::EventType ui_type) { | 79 int ui_flags, // ui::EventFlags |
| 70 const ui::KeyEvent event(ui_type, ui_keycode, ui_flags); | 80 ui::DomKey key, |
| 81 base::char16 character) { |
| 82 const ui::KeyEvent event(ui_type, ui_keycode, code, ui_flags, key, character, |
| 83 ui::EventTimeForNow()); |
| 71 scoped_ptr<ui::Event> new_event; | 84 scoped_ptr<ui::Event> new_event; |
| 72 rewriter->RewriteEvent(event, &new_event); | 85 rewriter->RewriteEvent(event, &new_event); |
| 73 if (new_event) | 86 if (new_event) |
| 74 return GetKeyEventAsString( | 87 return GetKeyEventAsString( |
| 75 static_cast<const ui::KeyEvent&>(*new_event.get())); | 88 static_cast<const ui::KeyEvent&>(*new_event.get())); |
| 76 return GetKeyEventAsString(event); | 89 return GetKeyEventAsString(event); |
| 77 } | 90 } |
| 78 | 91 |
| 79 // Table entry for simple single key event rewriting tests. | 92 // Table entry for simple single key event rewriting tests. |
| 80 struct KeyTestCase { | 93 struct KeyTestCase { |
| 81 enum { | 94 enum { |
| 82 // Test types: | 95 // Test types: |
| 83 TEST_VKEY = 1 << 0, // Test ui::KeyEvent with no native event | 96 TEST_VKEY = 1 << 0, // Test ui::KeyEvent with no native event |
| 84 TEST_X11 = 1 << 1, // Test ui::KeyEvent with native XKeyEvent | 97 TEST_X11 = 1 << 1, // Test ui::KeyEvent with native XKeyEvent |
| 85 TEST_ALL = TEST_VKEY|TEST_X11, | 98 TEST_ALL = TEST_VKEY | TEST_X11, |
| 86 // Special test flags: | 99 // Special test flags: |
| 87 NUMPAD = 1 << 8, // Set EF_NUMPAD_KEY on native-based event, because | 100 NUMPAD = 1 << 8, // Reset the XKB scan code on an X11 event based |
| 88 // |XKeysymForWindowsKeyCode()| can not distinguish | 101 // on the test DomCode, because |
| 89 // between pairs like XK_Insert and XK_KP_Insert. | 102 // |XKeysymForWindowsKeyCode()| can not distinguish |
| 103 // between pairs like XK_Insert and XK_KP_Insert. |
| 90 }; | 104 }; |
| 91 int test; | 105 int test; |
| 92 ui::EventType type; | 106 ui::EventType type; |
| 93 struct { | 107 struct Event { |
| 94 ui::KeyboardCode key_code; | 108 ui::KeyboardCode key_code; |
| 95 int flags; | 109 ui::DomCode code; |
| 110 int flags; // ui::EventFlags |
| 111 ui::DomKey key; |
| 112 base::char16 character; |
| 96 } input, expected; | 113 } input, expected; |
| 97 }; | 114 }; |
| 98 | 115 |
| 116 std::string GetTestCaseAsString(ui::EventType ui_type, |
| 117 const KeyTestCase::Event& test) { |
| 118 return GetExpectedResultAsString(ui_type, test.key_code, test.code, |
| 119 test.flags, test.key, test.character); |
| 120 } |
| 121 |
| 99 #if defined(USE_X11) | 122 #if defined(USE_X11) |
| 100 // Check rewriting of an X11-based key event. | 123 // Check rewriting of an X11-based key event. |
| 101 void CheckX11KeyTestCase(const std::string& expected, | 124 void CheckX11KeyTestCase(const std::string& expected, |
| 102 chromeos::EventRewriter* rewriter, | 125 chromeos::EventRewriter* rewriter, |
| 103 const KeyTestCase& test, | 126 const KeyTestCase& test, |
| 104 XEvent* xevent) { | 127 XEvent* xevent) { |
| 105 ui::KeyEvent xkey_event(xevent); | 128 ui::KeyEvent xkey_event(xevent); |
| 106 if (test.test & KeyTestCase::NUMPAD) | |
| 107 xkey_event.set_flags(xkey_event.flags() | ui::EF_NUMPAD_KEY); | |
| 108 // Verify that the X11-based key event is as expected. | |
| 109 EXPECT_EQ(GetExpectedResultAsString( | |
| 110 test.input.key_code, test.input.flags, test.type), | |
| 111 GetKeyEventAsString(xkey_event)); | |
| 112 // Rewrite the event and check the result. | 129 // Rewrite the event and check the result. |
| 113 scoped_ptr<ui::Event> new_event; | 130 scoped_ptr<ui::Event> new_event; |
| 114 rewriter->RewriteEvent(xkey_event, &new_event); | 131 rewriter->RewriteEvent(xkey_event, &new_event); |
| 115 ui::KeyEvent& rewritten_key_event = | 132 ui::KeyEvent& rewritten_key_event = |
| 116 new_event ? *static_cast<ui::KeyEvent*>(new_event.get()) : xkey_event; | 133 new_event ? *static_cast<ui::KeyEvent*>(new_event.get()) : xkey_event; |
| 117 EXPECT_EQ(expected, GetKeyEventAsString(rewritten_key_event)); | 134 EXPECT_EQ(expected, GetKeyEventAsString(rewritten_key_event)); |
| 118 if ((rewritten_key_event.key_code() != ui::VKEY_UNKNOWN) && | 135 if ((rewritten_key_event.key_code() != ui::VKEY_UNKNOWN) && |
| 119 (rewritten_key_event.native_event()->xkey.keycode != 0)) { | 136 (rewritten_key_event.native_event()->xkey.keycode != 0)) { |
| 120 // Build a new ui::KeyEvent from the rewritten native component, | 137 // Build a new ui::KeyEvent from the rewritten native component, |
| 121 // and check that it also matches the rewritten event. | 138 // and check that it also matches the rewritten event. |
| 122 EXPECT_TRUE(rewritten_key_event.native_event()); | 139 EXPECT_TRUE(rewritten_key_event.native_event()); |
| 123 ui::KeyEvent from_native_event(rewritten_key_event.native_event()); | 140 ui::KeyEvent from_native_event(rewritten_key_event.native_event()); |
| 124 EXPECT_EQ(expected, GetKeyEventAsString(from_native_event)); | 141 EXPECT_EQ(expected, GetKeyEventAsString(from_native_event)); |
| 125 } | 142 } |
| 126 } | 143 } |
| 127 #endif | 144 #endif |
| 128 | 145 |
| 129 // Tests a single stateless key rewrite operation. | 146 // Tests a single stateless key rewrite operation. |
| 130 // |i| is a an identifying number to locate failing tests in the tables. | |
| 131 void CheckKeyTestCase(chromeos::EventRewriter* rewriter, | 147 void CheckKeyTestCase(chromeos::EventRewriter* rewriter, |
| 132 const KeyTestCase& test) { | 148 const KeyTestCase& test) { |
| 133 std::string expected = | 149 std::string expected = GetTestCaseAsString(test.type, test.expected); |
| 134 GetExpectedResultAsString( | |
| 135 test.expected.key_code, test.expected.flags, test.type); | |
| 136 | 150 |
| 137 if (test.test & KeyTestCase::TEST_VKEY) { | 151 if (test.test & KeyTestCase::TEST_VKEY) { |
| 138 // Check rewriting of a non-native-based key event. | 152 // Check rewriting of a non-native-based key event. |
| 139 EXPECT_EQ( | 153 EXPECT_EQ(expected, |
| 140 expected, | 154 GetRewrittenEventAsString( |
| 141 GetRewrittenEventAsString( | 155 rewriter, test.type, test.input.key_code, test.input.code, |
| 142 rewriter, test.input.key_code, test.input.flags, test.type)); | 156 test.input.flags, test.input.key, test.input.character)); |
| 143 } | 157 } |
| 144 | 158 |
| 145 #if defined(USE_X11) | 159 #if defined(USE_X11) |
| 146 if (test.test & KeyTestCase::TEST_X11) { | 160 if (test.test & KeyTestCase::TEST_X11) { |
| 147 ui::ScopedXI2Event xev; | 161 ui::ScopedXI2Event xev; |
| 148 // Test an XKeyEvent. | 162 // Test an XKeyEvent. |
| 149 xev.InitKeyEvent(test.type, test.input.key_code, test.input.flags); | 163 xev.InitKeyEvent(test.type, test.input.key_code, test.input.flags); |
| 150 XEvent* xevent = xev; | 164 XEvent* xevent = xev; |
| 151 DCHECK((xevent->type == KeyPress) || (xevent->type == KeyRelease)); | 165 DCHECK((xevent->type == KeyPress) || (xevent->type == KeyRelease)); |
| 152 if (xevent->xkey.keycode) | 166 if (test.test & KeyTestCase::NUMPAD) { |
| 167 xevent->xkey.keycode = |
| 168 ui::KeycodeConverter::DomCodeToNativeKeycode(test.input.code); |
| 169 } |
| 170 int keycode = xevent->xkey.keycode; |
| 171 if (keycode) { |
| 153 CheckX11KeyTestCase(expected, rewriter, test, xevent); | 172 CheckX11KeyTestCase(expected, rewriter, test, xevent); |
| 154 // Test an XI2 GenericEvent. | 173 // Test an XI2 GenericEvent. |
| 155 xev.InitGenericKeyEvent(kMasterKeyboardDeviceId, | 174 xev.InitGenericKeyEvent(kMasterKeyboardDeviceId, kKeyboardDeviceId, |
| 156 kKeyboardDeviceId, | 175 test.type, test.input.key_code, test.input.flags); |
| 157 test.type, | 176 xevent = xev; |
| 158 test.input.key_code, | 177 DCHECK(xevent->type == GenericEvent); |
| 159 test.input.flags); | 178 XIDeviceEvent* xievent = |
| 160 xevent = xev; | 179 static_cast<XIDeviceEvent*>(xevent->xcookie.data); |
| 161 DCHECK(xevent->type == GenericEvent); | 180 DCHECK((xievent->evtype == XI_KeyPress) || |
| 162 XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(xevent->xcookie.data); | 181 (xievent->evtype == XI_KeyRelease)); |
| 163 DCHECK((xievent->evtype == XI_KeyPress) || | 182 xievent->detail = keycode; |
| 164 (xievent->evtype == XI_KeyRelease)); | |
| 165 if (xievent->detail) | |
| 166 CheckX11KeyTestCase(expected, rewriter, test, xevent); | 183 CheckX11KeyTestCase(expected, rewriter, test, xevent); |
| 184 } |
| 167 } | 185 } |
| 168 #endif | 186 #endif |
| 169 } | 187 } |
| 170 | |
| 171 // Table entry for simple single function key event rewriting tests. | |
| 172 struct FunctionKeyTestCase { | |
| 173 ui::EventType type; | |
| 174 struct { | |
| 175 ui::KeyboardCode key_code; | |
| 176 int flags; | |
| 177 } input, vkey_expected, native_expected; | |
| 178 }; | |
| 179 | |
| 180 // Tests a single stateless function key rewrite operation. | |
| 181 // |i| is a an identifying number to locate failing tests in the tables. | |
| 182 // Function key mapping differs from the other key mappings because the | |
| 183 // EF_FUNCTION_KEY flag is set during ui::KeyEvent construction when passing in | |
| 184 // a native X11 event and the flag is not set when using other constructors. | |
| 185 void CheckFunctionKeyTestCase(chromeos::EventRewriter* rewriter, | |
| 186 const FunctionKeyTestCase& test) { | |
| 187 std::string vkey_expected = | |
| 188 GetExpectedResultAsString( | |
| 189 test.vkey_expected.key_code, | |
| 190 test.vkey_expected.flags, | |
| 191 test.type); | |
| 192 // Check rewriting of a non-native-based key event. | |
| 193 EXPECT_EQ( | |
| 194 vkey_expected, | |
| 195 GetRewrittenEventAsString( | |
| 196 rewriter, test.input.key_code, test.input.flags, test.type)); | |
| 197 | |
| 198 #if defined(USE_X11) | |
| 199 ui::ScopedXI2Event xev; | |
| 200 xev.InitKeyEvent(test.type, test.input.key_code, test.input.flags); | |
| 201 XEvent* xevent = xev; | |
| 202 if (xevent->xkey.keycode) { | |
| 203 ui::KeyEvent xkey_event(xevent); | |
| 204 // Rewrite the event and check the result. | |
| 205 scoped_ptr<ui::Event> new_event; | |
| 206 rewriter->RewriteEvent(xkey_event, &new_event); | |
| 207 ui::KeyEvent& rewritten_key_event = | |
| 208 new_event ? *static_cast<ui::KeyEvent*>(new_event.get()) : xkey_event; | |
| 209 std::string native_expected = | |
| 210 GetExpectedResultAsString( | |
| 211 test.native_expected.key_code, | |
| 212 test.native_expected.flags, | |
| 213 test.type); | |
| 214 EXPECT_EQ(native_expected, GetKeyEventAsString(rewritten_key_event)); | |
| 215 } | |
| 216 #endif | |
| 217 } | |
| 218 | 188 |
| 219 } // namespace | 189 } // namespace |
| 220 | 190 |
| 221 namespace chromeos { | 191 namespace chromeos { |
| 222 | 192 |
| 223 class EventRewriterTest : public ash::test::AshTestBase { | 193 class EventRewriterTest : public ash::test::AshTestBase { |
| 224 public: | 194 public: |
| 225 EventRewriterTest() | 195 EventRewriterTest() |
| 226 : fake_user_manager_(new user_manager::FakeUserManager), | 196 : fake_user_manager_(new user_manager::FakeUserManager), |
| 227 user_manager_enabler_(fake_user_manager_), | 197 user_manager_enabler_(fake_user_manager_), |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 TEST_F(EventRewriterTest, TestRewriteCommandToControl) { | 234 TEST_F(EventRewriterTest, TestRewriteCommandToControl) { |
| 265 // First, test with a PC keyboard. | 235 // First, test with a PC keyboard. |
| 266 TestingPrefServiceSyncable prefs; | 236 TestingPrefServiceSyncable prefs; |
| 267 EventRewriter rewriter(NULL); | 237 EventRewriter rewriter(NULL); |
| 268 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 238 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 269 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 239 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
| 270 rewriter.set_pref_service_for_testing(&prefs); | 240 rewriter.set_pref_service_for_testing(&prefs); |
| 271 | 241 |
| 272 KeyTestCase pc_keyboard_tests[] = { | 242 KeyTestCase pc_keyboard_tests[] = { |
| 273 // VKEY_A, Alt modifier. | 243 // VKEY_A, Alt modifier. |
| 274 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 244 {KeyTestCase::TEST_ALL, |
| 275 {ui::VKEY_A, ui::EF_ALT_DOWN}, | 245 ui::ET_KEY_PRESSED, |
| 276 {ui::VKEY_A, ui::EF_ALT_DOWN}}, | 246 {ui::VKEY_A, |
| 247 ui::DomCode::KEY_A, |
| 248 ui::EF_ALT_DOWN, |
| 249 ui::DomKey::CHARACTER, |
| 250 'a'}, |
| 251 {ui::VKEY_A, |
| 252 ui::DomCode::KEY_A, |
| 253 ui::EF_ALT_DOWN, |
| 254 ui::DomKey::CHARACTER, |
| 255 'a'}}, |
| 277 | 256 |
| 278 // VKEY_A, Win modifier. | 257 // VKEY_A, Win modifier. |
| 279 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 258 {KeyTestCase::TEST_ALL, |
| 280 {ui::VKEY_A, ui::EF_COMMAND_DOWN}, | 259 ui::ET_KEY_PRESSED, |
| 281 {ui::VKEY_A, ui::EF_COMMAND_DOWN}}, | 260 {ui::VKEY_A, |
| 261 ui::DomCode::KEY_A, |
| 262 ui::EF_COMMAND_DOWN, |
| 263 ui::DomKey::CHARACTER, |
| 264 'a'}, |
| 265 {ui::VKEY_A, |
| 266 ui::DomCode::KEY_A, |
| 267 ui::EF_COMMAND_DOWN, |
| 268 ui::DomKey::CHARACTER, |
| 269 'a'}}, |
| 282 | 270 |
| 283 // VKEY_A, Alt+Win modifier. | 271 // VKEY_A, Alt+Win modifier. |
| 284 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 272 {KeyTestCase::TEST_ALL, |
| 285 {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, | 273 ui::ET_KEY_PRESSED, |
| 286 {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}}, | 274 {ui::VKEY_A, |
| 275 ui::DomCode::KEY_A, |
| 276 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 277 ui::DomKey::CHARACTER, |
| 278 'a'}, |
| 279 {ui::VKEY_A, |
| 280 ui::DomCode::KEY_A, |
| 281 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 282 ui::DomKey::CHARACTER, |
| 283 'a'}}, |
| 287 | 284 |
| 288 // VKEY_LWIN (left Windows key), Alt modifier. | 285 // VKEY_LWIN (left Windows key), Alt modifier. |
| 289 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 286 {KeyTestCase::TEST_ALL, |
| 290 {ui::VKEY_LWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, | 287 ui::ET_KEY_PRESSED, |
| 291 {ui::VKEY_LWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}}, | 288 {ui::VKEY_LWIN, |
| 289 ui::DomCode::OS_LEFT, |
| 290 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 291 ui::DomKey::OS, |
| 292 0}, |
| 293 {ui::VKEY_LWIN, |
| 294 ui::DomCode::OS_LEFT, |
| 295 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 296 ui::DomKey::OS, |
| 297 0}}, |
| 292 | 298 |
| 293 // VKEY_RWIN (right Windows key), Alt modifier. | 299 // VKEY_RWIN (right Windows key), Alt modifier. |
| 294 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 300 {KeyTestCase::TEST_ALL, |
| 295 {ui::VKEY_RWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, | 301 ui::ET_KEY_PRESSED, |
| 296 {ui::VKEY_RWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}}, | 302 {ui::VKEY_RWIN, |
| 303 ui::DomCode::OS_RIGHT, |
| 304 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 305 ui::DomKey::OS, |
| 306 0}, |
| 307 {ui::VKEY_RWIN, |
| 308 ui::DomCode::OS_RIGHT, |
| 309 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 310 ui::DomKey::OS, |
| 311 0}}, |
| 297 }; | 312 }; |
| 298 | 313 |
| 299 for (size_t i = 0; i < arraysize(pc_keyboard_tests); ++i) { | 314 for (size_t i = 0; i < arraysize(pc_keyboard_tests); ++i) { |
| 300 SCOPED_TRACE(i); | 315 SCOPED_TRACE(i); |
| 301 CheckKeyTestCase(&rewriter, pc_keyboard_tests[i]); | 316 CheckKeyTestCase(&rewriter, pc_keyboard_tests[i]); |
| 302 } | 317 } |
| 303 | 318 |
| 304 // An Apple keyboard reusing the ID, zero. | 319 // An Apple keyboard reusing the ID, zero. |
| 305 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); | 320 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); |
| 306 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 321 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
| 307 | 322 |
| 308 KeyTestCase apple_keyboard_tests[] = { | 323 KeyTestCase apple_keyboard_tests[] = { |
| 309 // VKEY_A, Alt modifier. | 324 // VKEY_A, Alt modifier. |
| 310 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 325 {KeyTestCase::TEST_ALL, |
| 311 {ui::VKEY_A, ui::EF_ALT_DOWN}, | 326 ui::ET_KEY_PRESSED, |
| 312 {ui::VKEY_A, ui::EF_ALT_DOWN}}, | 327 {ui::VKEY_A, |
| 328 ui::DomCode::KEY_A, |
| 329 ui::EF_ALT_DOWN, |
| 330 ui::DomKey::CHARACTER, |
| 331 'a'}, |
| 332 {ui::VKEY_A, |
| 333 ui::DomCode::KEY_A, |
| 334 ui::EF_ALT_DOWN, |
| 335 ui::DomKey::CHARACTER, |
| 336 'a'}}, |
| 313 | 337 |
| 314 // VKEY_A, Win modifier. | 338 // VKEY_A, Win modifier. |
| 315 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 339 {KeyTestCase::TEST_ALL, |
| 316 {ui::VKEY_A, ui::EF_COMMAND_DOWN}, | 340 ui::ET_KEY_PRESSED, |
| 317 {ui::VKEY_A, ui::EF_CONTROL_DOWN}}, | 341 {ui::VKEY_A, |
| 342 ui::DomCode::KEY_A, |
| 343 ui::EF_COMMAND_DOWN, |
| 344 ui::DomKey::CHARACTER, |
| 345 'a'}, |
| 346 {ui::VKEY_A, |
| 347 ui::DomCode::KEY_A, |
| 348 ui::EF_CONTROL_DOWN, |
| 349 ui::DomKey::CHARACTER, |
| 350 'a'}}, |
| 318 | 351 |
| 319 // VKEY_A, Alt+Win modifier. | 352 // VKEY_A, Alt+Win modifier. |
| 320 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 353 {KeyTestCase::TEST_ALL, |
| 321 {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, | 354 ui::ET_KEY_PRESSED, |
| 322 {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}}, | 355 {ui::VKEY_A, |
| 356 ui::DomCode::KEY_A, |
| 357 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 358 ui::DomKey::CHARACTER, |
| 359 'a'}, |
| 360 {ui::VKEY_A, |
| 361 ui::DomCode::KEY_A, |
| 362 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
| 363 ui::DomKey::CHARACTER, |
| 364 'a'}}, |
| 323 | 365 |
| 324 // VKEY_LWIN (left Windows key), Alt modifier. | 366 // VKEY_LWIN (left Windows key), Alt modifier. |
| 325 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 367 {KeyTestCase::TEST_ALL, |
| 326 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, | 368 ui::ET_KEY_PRESSED, |
| 327 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}}, | 369 {ui::VKEY_LWIN, |
| 370 ui::DomCode::OS_LEFT, |
| 371 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, |
| 372 ui::DomKey::OS, |
| 373 0}, |
| 374 {ui::VKEY_CONTROL, |
| 375 ui::DomCode::CONTROL_LEFT, |
| 376 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
| 377 ui::DomKey::CONTROL, |
| 378 0}}, |
| 328 | 379 |
| 329 // VKEY_RWIN (right Windows key), Alt modifier. | 380 // VKEY_RWIN (right Windows key), Alt modifier. |
| 330 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 381 {KeyTestCase::TEST_ALL, |
| 331 {ui::VKEY_RWIN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, | 382 ui::ET_KEY_PRESSED, |
| 332 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}}, | 383 {ui::VKEY_RWIN, |
| 384 ui::DomCode::OS_RIGHT, |
| 385 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, |
| 386 ui::DomKey::OS, |
| 387 0}, |
| 388 {ui::VKEY_CONTROL, |
| 389 ui::DomCode::CONTROL_LEFT, |
| 390 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
| 391 ui::DomKey::CONTROL, |
| 392 0}}, |
| 333 }; | 393 }; |
| 334 | 394 |
| 335 for (size_t i = 0; i < arraysize(apple_keyboard_tests); ++i) { | 395 for (size_t i = 0; i < arraysize(apple_keyboard_tests); ++i) { |
| 336 SCOPED_TRACE(i); | 396 SCOPED_TRACE(i); |
| 337 CheckKeyTestCase(&rewriter, apple_keyboard_tests[i]); | 397 CheckKeyTestCase(&rewriter, apple_keyboard_tests[i]); |
| 338 } | 398 } |
| 339 } | 399 } |
| 340 | 400 |
| 341 // For crbug.com/133896. | 401 // For crbug.com/133896. |
| 342 TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) { | 402 TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) { |
| 343 // Remap Control to Alt. | 403 // Remap Control to Alt. |
| 344 TestingPrefServiceSyncable prefs; | 404 TestingPrefServiceSyncable prefs; |
| 345 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 405 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 346 IntegerPrefMember control; | 406 IntegerPrefMember control; |
| 347 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 407 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
| 348 control.SetValue(chromeos::input_method::kAltKey); | 408 control.SetValue(chromeos::input_method::kAltKey); |
| 349 | 409 |
| 350 EventRewriter rewriter(NULL); | 410 EventRewriter rewriter(NULL); |
| 351 rewriter.set_pref_service_for_testing(&prefs); | 411 rewriter.set_pref_service_for_testing(&prefs); |
| 352 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 412 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 353 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 413 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
| 354 | 414 |
| 355 KeyTestCase pc_keyboard_tests[] = {// Control should be remapped to Alt. | 415 KeyTestCase pc_keyboard_tests[] = { |
| 356 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 416 // Control should be remapped to Alt. |
| 357 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}, | 417 {KeyTestCase::TEST_ALL, |
| 358 {ui::VKEY_MENU, ui::EF_ALT_DOWN}}, | 418 ui::ET_KEY_PRESSED, |
| 419 {ui::VKEY_CONTROL, |
| 420 ui::DomCode::CONTROL_LEFT, |
| 421 ui::EF_CONTROL_DOWN, |
| 422 ui::DomKey::CONTROL, |
| 423 0}, |
| 424 {ui::VKEY_MENU, |
| 425 ui::DomCode::ALT_LEFT, |
| 426 ui::EF_ALT_DOWN, |
| 427 ui::DomKey::ALT, |
| 428 0}}, |
| 359 }; | 429 }; |
| 360 | 430 |
| 361 for (size_t i = 0; i < arraysize(pc_keyboard_tests); ++i) { | 431 for (size_t i = 0; i < arraysize(pc_keyboard_tests); ++i) { |
| 362 SCOPED_TRACE(i); | 432 SCOPED_TRACE(i); |
| 363 CheckKeyTestCase(&rewriter, pc_keyboard_tests[i]); | 433 CheckKeyTestCase(&rewriter, pc_keyboard_tests[i]); |
| 364 } | 434 } |
| 365 | 435 |
| 366 // An Apple keyboard reusing the ID, zero. | 436 // An Apple keyboard reusing the ID, zero. |
| 367 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); | 437 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); |
| 368 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 438 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
| 369 | 439 |
| 370 KeyTestCase apple_keyboard_tests[] = { | 440 KeyTestCase apple_keyboard_tests[] = { |
| 371 // VKEY_LWIN (left Command key) with Alt modifier. The remapped Command | 441 // VKEY_LWIN (left Command key) with Alt modifier. The remapped Command |
| 372 // key should never be re-remapped to Alt. | 442 // key should never be re-remapped to Alt. |
| 373 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 443 {KeyTestCase::TEST_ALL, |
| 374 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, | 444 ui::ET_KEY_PRESSED, |
| 375 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}}, | 445 {ui::VKEY_LWIN, |
| 446 ui::DomCode::OS_LEFT, |
| 447 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, |
| 448 ui::DomKey::OS, |
| 449 0}, |
| 450 {ui::VKEY_CONTROL, |
| 451 ui::DomCode::CONTROL_LEFT, |
| 452 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
| 453 ui::DomKey::CONTROL, |
| 454 0}}, |
| 376 | 455 |
| 377 // VKEY_RWIN (right Command key) with Alt modifier. The remapped Command | 456 // VKEY_RWIN (right Command key) with Alt modifier. The remapped Command |
| 378 // key should never be re-remapped to Alt. | 457 // key should never be re-remapped to Alt. |
| 379 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 458 {KeyTestCase::TEST_ALL, |
| 380 {ui::VKEY_RWIN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, | 459 ui::ET_KEY_PRESSED, |
| 381 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}}, | 460 {ui::VKEY_RWIN, |
| 461 ui::DomCode::OS_RIGHT, |
| 462 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, |
| 463 ui::DomKey::OS, |
| 464 0}, |
| 465 {ui::VKEY_CONTROL, |
| 466 ui::DomCode::CONTROL_LEFT, |
| 467 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
| 468 ui::DomKey::CONTROL, |
| 469 0}}, |
| 382 }; | 470 }; |
| 383 | 471 |
| 384 for (size_t i = 0; i < arraysize(apple_keyboard_tests); ++i) { | 472 for (size_t i = 0; i < arraysize(apple_keyboard_tests); ++i) { |
| 385 SCOPED_TRACE(i); | 473 SCOPED_TRACE(i); |
| 386 CheckKeyTestCase(&rewriter, apple_keyboard_tests[i]); | 474 CheckKeyTestCase(&rewriter, apple_keyboard_tests[i]); |
| 387 } | 475 } |
| 388 } | 476 } |
| 389 | 477 |
| 390 void EventRewriterTest::TestRewriteNumPadKeys() { | 478 void EventRewriterTest::TestRewriteNumPadKeys() { |
| 391 TestingPrefServiceSyncable prefs; | 479 TestingPrefServiceSyncable prefs; |
| 392 EventRewriter rewriter(NULL); | 480 EventRewriter rewriter(NULL); |
| 393 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 481 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 394 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 482 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
| 395 rewriter.set_pref_service_for_testing(&prefs); | 483 rewriter.set_pref_service_for_testing(&prefs); |
| 396 | 484 |
| 397 KeyTestCase tests[] = { | 485 KeyTestCase tests[] = { |
| 398 // XK_KP_Insert (= NumPad 0 without Num Lock), no modifier. | 486 // XK_KP_Insert (= NumPad 0 without Num Lock), no modifier. |
| 399 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 487 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, |
| 400 {ui::VKEY_INSERT, ui::EF_NUMPAD_KEY}, | 488 ui::ET_KEY_PRESSED, |
| 401 {ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY}}, | 489 {ui::VKEY_INSERT, |
| 490 ui::DomCode::NUMPAD0, |
| 491 ui::EF_NONE, |
| 492 ui::DomKey::INSERT, |
| 493 0}, |
| 494 {ui::VKEY_NUMPAD0, |
| 495 ui::DomCode::NUMPAD0, |
| 496 ui::EF_NONE, |
| 497 ui::DomKey::CHARACTER, |
| 498 '0'}}, |
| 402 | 499 |
| 403 // XK_KP_Insert (= NumPad 0 without Num Lock), Alt modifier. | 500 // XK_KP_Insert (= NumPad 0 without Num Lock), Alt modifier. |
| 404 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 501 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, |
| 405 {ui::VKEY_INSERT, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, | 502 ui::ET_KEY_PRESSED, |
| 406 {ui::VKEY_NUMPAD0, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, | 503 {ui::VKEY_INSERT, |
| 504 ui::DomCode::NUMPAD0, |
| 505 ui::EF_ALT_DOWN, |
| 506 ui::DomKey::INSERT, |
| 507 0}, |
| 508 {ui::VKEY_NUMPAD0, |
| 509 ui::DomCode::NUMPAD0, |
| 510 ui::EF_ALT_DOWN, |
| 511 ui::DomKey::CHARACTER, |
| 512 '0'}}, |
| 407 | 513 |
| 408 // XK_KP_Delete (= NumPad . without Num Lock), Alt modifier. | 514 // XK_KP_Delete (= NumPad . without Num Lock), Alt modifier. |
| 409 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 515 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, |
| 410 {ui::VKEY_DELETE, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, | 516 ui::ET_KEY_PRESSED, |
| 411 {ui::VKEY_DECIMAL, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, | 517 {ui::VKEY_DELETE, |
| 518 ui::DomCode::NUMPAD_DECIMAL, |
| 519 ui::EF_ALT_DOWN, |
| 520 ui::DomKey::DEL, |
| 521 0}, |
| 522 {ui::VKEY_DECIMAL, |
| 523 ui::DomCode::NUMPAD_DECIMAL, |
| 524 ui::EF_ALT_DOWN, |
| 525 ui::DomKey::CHARACTER, |
| 526 '.'}}, |
| 412 | 527 |
| 413 // XK_KP_End (= NumPad 1 without Num Lock), Alt modifier. | 528 // XK_KP_End (= NumPad 1 without Num Lock), Alt modifier. |
| 414 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 529 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, |
| 415 {ui::VKEY_END, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, | 530 ui::ET_KEY_PRESSED, |
| 416 {ui::VKEY_NUMPAD1, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, | 531 {ui::VKEY_END, |
| 532 ui::DomCode::NUMPAD1, |
| 533 ui::EF_ALT_DOWN, |
| 534 ui::DomKey::END, |
| 535 0}, |
| 536 {ui::VKEY_NUMPAD1, |
| 537 ui::DomCode::NUMPAD1, |
| 538 ui::EF_ALT_DOWN, |
| 539 ui::DomKey::CHARACTER, |
| 540 '1'}}, |
| 417 | 541 |
| 418 // XK_KP_Down (= NumPad 2 without Num Lock), Alt modifier. | 542 // XK_KP_Down (= NumPad 2 without Num Lock), Alt modifier. |
| 419 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 543 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, |
| 420 {ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, | 544 ui::ET_KEY_PRESSED, |
| 421 {ui::VKEY_NUMPAD2, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, | 545 {ui::VKEY_DOWN, |
| 546 ui::DomCode::NUMPAD2, |
| 547 ui::EF_ALT_DOWN, |
| 548 ui::DomKey::ARROW_DOWN, |
| 549 0}, |
| 550 {ui::VKEY_NUMPAD2, |
| 551 ui::DomCode::NUMPAD2, |
| 552 ui::EF_ALT_DOWN, |
| 553 ui::DomKey::CHARACTER, |
| 554 '2'}}, |
| 422 | 555 |
| 423 // XK_KP_Next (= NumPad 3 without Num Lock), Alt modifier. | 556 // XK_KP_Next (= NumPad 3 without Num Lock), Alt modifier. |
| 424 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 557 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, |
| 425 {ui::VKEY_NEXT, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, | 558 ui::ET_KEY_PRESSED, |
| 426 {ui::VKEY_NUMPAD3, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, | 559 {ui::VKEY_NEXT, |
| 560 ui::DomCode::NUMPAD3, |
| 561 ui::EF_ALT_DOWN, |
| 562 ui::DomKey::PAGE_DOWN, |
| 563 0}, |
| 564 {ui::VKEY_NUMPAD3, |
| 565 ui::DomCode::NUMPAD3, |
| 566 ui::EF_ALT_DOWN, |
| 567 ui::DomKey::CHARACTER, |
| 568 '3'}}, |
| 427 | 569 |
| 428 // XK_KP_Left (= NumPad 4 without Num Lock), Alt modifier. | 570 // XK_KP_Left (= NumPad 4 without Num Lock), Alt modifier. |
| 429 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 571 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, |
| 430 {ui::VKEY_LEFT, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, | 572 ui::ET_KEY_PRESSED, |
| 431 {ui::VKEY_NUMPAD4, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, | 573 {ui::VKEY_LEFT, |
| 574 ui::DomCode::NUMPAD4, |
| 575 ui::EF_ALT_DOWN, |
| 576 ui::DomKey::ARROW_LEFT, |
| 577 0}, |
| 578 {ui::VKEY_NUMPAD4, |
| 579 ui::DomCode::NUMPAD4, |
| 580 ui::EF_ALT_DOWN, |
| 581 ui::DomKey::CHARACTER, |
| 582 '4'}}, |
| 432 | 583 |
| 433 // XK_KP_Begin (= NumPad 5 without Num Lock), Alt modifier. | 584 // XK_KP_Begin (= NumPad 5 without Num Lock), Alt modifier. |
| 434 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 585 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, |
| 435 {ui::VKEY_CLEAR, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, | 586 ui::ET_KEY_PRESSED, |
| 436 {ui::VKEY_NUMPAD5, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, | 587 {ui::VKEY_CLEAR, |
| 588 ui::DomCode::NUMPAD5, |
| 589 ui::EF_ALT_DOWN, |
| 590 ui::DomKey::CLEAR, |
| 591 0}, |
| 592 {ui::VKEY_NUMPAD5, |
| 593 ui::DomCode::NUMPAD5, |
| 594 ui::EF_ALT_DOWN, |
| 595 ui::DomKey::CHARACTER, |
| 596 '5'}}, |
| 437 | 597 |
| 438 // XK_KP_Right (= NumPad 6 without Num Lock), Alt modifier. | 598 // XK_KP_Right (= NumPad 6 without Num Lock), Alt modifier. |
| 439 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 599 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, |
| 440 {ui::VKEY_RIGHT, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, | 600 ui::ET_KEY_PRESSED, |
| 441 {ui::VKEY_NUMPAD6, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, | 601 {ui::VKEY_RIGHT, |
| 602 ui::DomCode::NUMPAD6, |
| 603 ui::EF_ALT_DOWN, |
| 604 ui::DomKey::ARROW_RIGHT, |
| 605 0}, |
| 606 {ui::VKEY_NUMPAD6, |
| 607 ui::DomCode::NUMPAD6, |
| 608 ui::EF_ALT_DOWN, |
| 609 ui::DomKey::CHARACTER, |
| 610 '6'}}, |
| 442 | 611 |
| 443 // XK_KP_Home (= NumPad 7 without Num Lock), Alt modifier. | 612 // XK_KP_Home (= NumPad 7 without Num Lock), Alt modifier. |
| 444 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 613 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, |
| 445 {ui::VKEY_HOME, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, | 614 ui::ET_KEY_PRESSED, |
| 446 {ui::VKEY_NUMPAD7, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, | 615 {ui::VKEY_HOME, |
| 616 ui::DomCode::NUMPAD7, |
| 617 ui::EF_ALT_DOWN, |
| 618 ui::DomKey::HOME, |
| 619 0}, |
| 620 {ui::VKEY_NUMPAD7, |
| 621 ui::DomCode::NUMPAD7, |
| 622 ui::EF_ALT_DOWN, |
| 623 ui::DomKey::CHARACTER, |
| 624 '7'}}, |
| 447 | 625 |
| 448 // XK_KP_Up (= NumPad 8 without Num Lock), Alt modifier. | 626 // XK_KP_Up (= NumPad 8 without Num Lock), Alt modifier. |
| 449 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 627 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, |
| 450 {ui::VKEY_UP, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, | 628 ui::ET_KEY_PRESSED, |
| 451 {ui::VKEY_NUMPAD8, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, | 629 {ui::VKEY_UP, |
| 630 ui::DomCode::NUMPAD8, |
| 631 ui::EF_ALT_DOWN, |
| 632 ui::DomKey::ARROW_UP, |
| 633 0}, |
| 634 {ui::VKEY_NUMPAD8, |
| 635 ui::DomCode::NUMPAD8, |
| 636 ui::EF_ALT_DOWN, |
| 637 ui::DomKey::CHARACTER, |
| 638 '8'}}, |
| 452 | 639 |
| 453 // XK_KP_Prior (= NumPad 9 without Num Lock), Alt modifier. | 640 // XK_KP_Prior (= NumPad 9 without Num Lock), Alt modifier. |
| 454 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 641 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, |
| 455 {ui::VKEY_PRIOR, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, | 642 ui::ET_KEY_PRESSED, |
| 456 {ui::VKEY_NUMPAD9, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, | 643 {ui::VKEY_PRIOR, |
| 644 ui::DomCode::NUMPAD9, |
| 645 ui::EF_ALT_DOWN, |
| 646 ui::DomKey::PAGE_UP, |
| 647 0}, |
| 648 {ui::VKEY_NUMPAD9, |
| 649 ui::DomCode::NUMPAD9, |
| 650 ui::EF_ALT_DOWN, |
| 651 ui::DomKey::CHARACTER, |
| 652 '9'}}, |
| 457 | 653 |
| 458 // XK_KP_0 (= NumPad 0 with Num Lock), Num Lock modifier. | 654 // XK_KP_0 (= NumPad 0 with Num Lock), Num Lock modifier. |
| 459 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 655 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, |
| 460 {ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY}, | 656 ui::ET_KEY_PRESSED, |
| 461 {ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY}}, | 657 {ui::VKEY_NUMPAD0, |
| 658 ui::DomCode::NUMPAD0, |
| 659 ui::EF_NONE, |
| 660 ui::DomKey::CHARACTER, |
| 661 '0'}, |
| 662 {ui::VKEY_NUMPAD0, |
| 663 ui::DomCode::NUMPAD0, |
| 664 ui::EF_NONE, |
| 665 ui::DomKey::CHARACTER, |
| 666 '0'}}, |
| 462 | 667 |
| 463 // XK_KP_DECIMAL (= NumPad . with Num Lock), Num Lock modifier. | 668 // XK_KP_DECIMAL (= NumPad . with Num Lock), Num Lock modifier. |
| 464 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 669 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, |
| 465 {ui::VKEY_DECIMAL, ui::EF_NUMPAD_KEY}, | 670 ui::ET_KEY_PRESSED, |
| 466 {ui::VKEY_DECIMAL, ui::EF_NUMPAD_KEY}}, | 671 {ui::VKEY_DECIMAL, |
| 672 ui::DomCode::NUMPAD_DECIMAL, |
| 673 ui::EF_NONE, |
| 674 ui::DomKey::CHARACTER, |
| 675 '.'}, |
| 676 {ui::VKEY_DECIMAL, |
| 677 ui::DomCode::NUMPAD_DECIMAL, |
| 678 ui::EF_NONE, |
| 679 ui::DomKey::CHARACTER, |
| 680 '.'}}, |
| 467 | 681 |
| 468 // XK_KP_1 (= NumPad 1 with Num Lock), Num Lock modifier. | 682 // XK_KP_1 (= NumPad 1 with Num Lock), Num Lock modifier. |
| 469 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 683 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, |
| 470 {ui::VKEY_NUMPAD1, ui::EF_NUMPAD_KEY}, | 684 ui::ET_KEY_PRESSED, |
| 471 {ui::VKEY_NUMPAD1, ui::EF_NUMPAD_KEY}}, | 685 {ui::VKEY_NUMPAD1, |
| 686 ui::DomCode::NUMPAD1, |
| 687 ui::EF_NONE, |
| 688 ui::DomKey::CHARACTER, |
| 689 '1'}, |
| 690 {ui::VKEY_NUMPAD1, |
| 691 ui::DomCode::NUMPAD1, |
| 692 ui::EF_NONE, |
| 693 ui::DomKey::CHARACTER, |
| 694 '1'}}, |
| 472 | 695 |
| 473 // XK_KP_2 (= NumPad 2 with Num Lock), Num Lock modifier. | 696 // XK_KP_2 (= NumPad 2 with Num Lock), Num Lock modifier. |
| 474 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 697 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, |
| 475 {ui::VKEY_NUMPAD2, ui::EF_NUMPAD_KEY}, | 698 ui::ET_KEY_PRESSED, |
| 476 {ui::VKEY_NUMPAD2, ui::EF_NUMPAD_KEY}}, | 699 {ui::VKEY_NUMPAD2, |
| 700 ui::DomCode::NUMPAD2, |
| 701 ui::EF_NONE, |
| 702 ui::DomKey::CHARACTER, |
| 703 '2'}, |
| 704 {ui::VKEY_NUMPAD2, |
| 705 ui::DomCode::NUMPAD2, |
| 706 ui::EF_NONE, |
| 707 ui::DomKey::CHARACTER, |
| 708 '2'}}, |
| 477 | 709 |
| 478 // XK_KP_3 (= NumPad 3 with Num Lock), Num Lock modifier. | 710 // XK_KP_3 (= NumPad 3 with Num Lock), Num Lock modifier. |
| 479 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 711 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, |
| 480 {ui::VKEY_NUMPAD3, ui::EF_NUMPAD_KEY}, | 712 ui::ET_KEY_PRESSED, |
| 481 {ui::VKEY_NUMPAD3, ui::EF_NUMPAD_KEY}}, | 713 {ui::VKEY_NUMPAD3, |
| 714 ui::DomCode::NUMPAD3, |
| 715 ui::EF_NONE, |
| 716 ui::DomKey::CHARACTER, |
| 717 '3'}, |
| 718 {ui::VKEY_NUMPAD3, |
| 719 ui::DomCode::NUMPAD3, |
| 720 ui::EF_NONE, |
| 721 ui::DomKey::CHARACTER, |
| 722 '3'}}, |
| 482 | 723 |
| 483 // XK_KP_4 (= NumPad 4 with Num Lock), Num Lock modifier. | 724 // XK_KP_4 (= NumPad 4 with Num Lock), Num Lock modifier. |
| 484 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 725 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, |
| 485 {ui::VKEY_NUMPAD4, ui::EF_NUMPAD_KEY}, | 726 ui::ET_KEY_PRESSED, |
| 486 {ui::VKEY_NUMPAD4, ui::EF_NUMPAD_KEY}}, | 727 {ui::VKEY_NUMPAD4, |
| 487 | 728 ui::DomCode::NUMPAD4, |
| 488 // XK_KP_5 (= NumPad 5 with Num Lock), Num Lock modifier. | 729 ui::EF_NONE, |
| 489 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 730 ui::DomKey::CHARACTER, |
| 490 {ui::VKEY_NUMPAD5, ui::EF_NUMPAD_KEY}, | 731 '4'}, |
| 491 {ui::VKEY_NUMPAD5, ui::EF_NUMPAD_KEY}}, | 732 {ui::VKEY_NUMPAD4, |
| 492 | 733 ui::DomCode::NUMPAD4, |
| 493 // XK_KP_6 (= NumPad 6 with Num Lock), Num Lock modifier. | 734 ui::EF_NONE, |
| 494 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 735 ui::DomKey::CHARACTER, |
| 495 {ui::VKEY_NUMPAD6, ui::EF_NUMPAD_KEY}, | 736 '4'}}, |
| 496 {ui::VKEY_NUMPAD6, ui::EF_NUMPAD_KEY}}, | 737 |
| 497 | 738 // XK_KP_5 (= NumPad 5 with Num Lock), Num Lock |
| 498 // XK_KP_7 (= NumPad 7 with Num Lock), Num Lock modifier. | 739 // modifier. |
| 499 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 740 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, |
| 500 {ui::VKEY_NUMPAD7, ui::EF_NUMPAD_KEY}, | 741 ui::ET_KEY_PRESSED, |
| 501 {ui::VKEY_NUMPAD7, ui::EF_NUMPAD_KEY}}, | 742 {ui::VKEY_NUMPAD5, |
| 502 | 743 ui::DomCode::NUMPAD5, |
| 503 // XK_KP_8 (= NumPad 8 with Num Lock), Num Lock modifier. | 744 ui::EF_NONE, |
| 504 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 745 ui::DomKey::CHARACTER, |
| 505 {ui::VKEY_NUMPAD8, ui::EF_NUMPAD_KEY}, | 746 '5'}, |
| 506 {ui::VKEY_NUMPAD8, ui::EF_NUMPAD_KEY}}, | 747 {ui::VKEY_NUMPAD5, |
| 507 | 748 ui::DomCode::NUMPAD5, |
| 508 // XK_KP_9 (= NumPad 9 with Num Lock), Num Lock modifier. | 749 ui::EF_NONE, |
| 509 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 750 ui::DomKey::CHARACTER, |
| 510 {ui::VKEY_NUMPAD9, ui::EF_NUMPAD_KEY}, | 751 '5'}}, |
| 511 {ui::VKEY_NUMPAD9, ui::EF_NUMPAD_KEY}}, | 752 |
| 753 // XK_KP_6 (= NumPad 6 with Num Lock), Num Lock |
| 754 // modifier. |
| 755 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, |
| 756 ui::ET_KEY_PRESSED, |
| 757 {ui::VKEY_NUMPAD6, |
| 758 ui::DomCode::NUMPAD6, |
| 759 ui::EF_NONE, |
| 760 ui::DomKey::CHARACTER, |
| 761 '6'}, |
| 762 {ui::VKEY_NUMPAD6, |
| 763 ui::DomCode::NUMPAD6, |
| 764 ui::EF_NONE, |
| 765 ui::DomKey::CHARACTER, |
| 766 '6'}}, |
| 767 |
| 768 // XK_KP_7 (= NumPad 7 with Num Lock), Num Lock |
| 769 // modifier. |
| 770 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, |
| 771 ui::ET_KEY_PRESSED, |
| 772 {ui::VKEY_NUMPAD7, |
| 773 ui::DomCode::NUMPAD7, |
| 774 ui::EF_NONE, |
| 775 ui::DomKey::CHARACTER, |
| 776 '7'}, |
| 777 {ui::VKEY_NUMPAD7, |
| 778 ui::DomCode::NUMPAD7, |
| 779 ui::EF_NONE, |
| 780 ui::DomKey::CHARACTER, |
| 781 '7'}}, |
| 782 |
| 783 // XK_KP_8 (= NumPad 8 with Num Lock), Num Lock |
| 784 // modifier. |
| 785 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, |
| 786 ui::ET_KEY_PRESSED, |
| 787 {ui::VKEY_NUMPAD8, |
| 788 ui::DomCode::NUMPAD8, |
| 789 ui::EF_NONE, |
| 790 ui::DomKey::CHARACTER, |
| 791 '8'}, |
| 792 {ui::VKEY_NUMPAD8, |
| 793 ui::DomCode::NUMPAD8, |
| 794 ui::EF_NONE, |
| 795 ui::DomKey::CHARACTER, |
| 796 '8'}}, |
| 797 |
| 798 // XK_KP_9 (= NumPad 9 with Num Lock), Num Lock |
| 799 // modifier. |
| 800 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, |
| 801 ui::ET_KEY_PRESSED, |
| 802 {ui::VKEY_NUMPAD9, |
| 803 ui::DomCode::NUMPAD9, |
| 804 ui::EF_NONE, |
| 805 ui::DomKey::CHARACTER, |
| 806 '9'}, |
| 807 {ui::VKEY_NUMPAD9, |
| 808 ui::DomCode::NUMPAD9, |
| 809 ui::EF_NONE, |
| 810 ui::DomKey::CHARACTER, |
| 811 '9'}}, |
| 512 }; | 812 }; |
| 513 | 813 |
| 514 for (size_t i = 0; i < arraysize(tests); ++i) { | 814 for (size_t i = 0; i < arraysize(tests); ++i) { |
| 515 SCOPED_TRACE(i); | 815 SCOPED_TRACE(i); |
| 516 CheckKeyTestCase(&rewriter, tests[i]); | 816 CheckKeyTestCase(&rewriter, tests[i]); |
| 517 } | 817 } |
| 518 } | 818 } |
| 519 | 819 |
| 520 TEST_F(EventRewriterTest, TestRewriteNumPadKeys) { | 820 TEST_F(EventRewriterTest, TestRewriteNumPadKeys) { |
| 521 TestRewriteNumPadKeys(); | 821 TestRewriteNumPadKeys(); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 535 void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() { | 835 void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() { |
| 536 TestingPrefServiceSyncable prefs; | 836 TestingPrefServiceSyncable prefs; |
| 537 EventRewriter rewriter(NULL); | 837 EventRewriter rewriter(NULL); |
| 538 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); | 838 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); |
| 539 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 839 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
| 540 rewriter.set_pref_service_for_testing(&prefs); | 840 rewriter.set_pref_service_for_testing(&prefs); |
| 541 | 841 |
| 542 KeyTestCase tests[] = { | 842 KeyTestCase tests[] = { |
| 543 // XK_KP_End (= NumPad 1 without Num Lock), Win modifier. | 843 // XK_KP_End (= NumPad 1 without Num Lock), Win modifier. |
| 544 // The result should be "Num Pad 1 with Control + Num Lock modifiers". | 844 // The result should be "Num Pad 1 with Control + Num Lock modifiers". |
| 545 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 845 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, |
| 546 {ui::VKEY_END, ui::EF_COMMAND_DOWN | ui::EF_NUMPAD_KEY}, | 846 ui::ET_KEY_PRESSED, |
| 547 {ui::VKEY_NUMPAD1, ui::EF_CONTROL_DOWN | ui::EF_NUMPAD_KEY}}, | 847 {ui::VKEY_END, |
| 848 ui::DomCode::NUMPAD1, |
| 849 ui::EF_COMMAND_DOWN, |
| 850 ui::DomKey::END, |
| 851 0}, |
| 852 {ui::VKEY_NUMPAD1, |
| 853 ui::DomCode::NUMPAD1, |
| 854 ui::EF_CONTROL_DOWN, |
| 855 ui::DomKey::CHARACTER, |
| 856 '1'}}, |
| 548 | 857 |
| 549 // XK_KP_1 (= NumPad 1 with Num Lock), Win modifier. | 858 // XK_KP_1 (= NumPad 1 with Num Lock), Win modifier. |
| 550 // The result should also be "Num Pad 1 with Control + Num Lock | 859 // The result should also be "Num Pad 1 with Control + Num Lock |
| 551 // modifiers". | 860 // modifiers". |
| 552 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 861 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, |
| 553 {ui::VKEY_NUMPAD1, ui::EF_COMMAND_DOWN | ui::EF_NUMPAD_KEY}, | 862 ui::ET_KEY_PRESSED, |
| 554 {ui::VKEY_NUMPAD1, ui::EF_CONTROL_DOWN | ui::EF_NUMPAD_KEY}}, | 863 {ui::VKEY_NUMPAD1, |
| 555 }; | 864 ui::DomCode::NUMPAD1, |
| 865 ui::EF_COMMAND_DOWN, |
| 866 ui::DomKey::CHARACTER, |
| 867 '1'}, |
| 868 {ui::VKEY_NUMPAD1, |
| 869 ui::DomCode::NUMPAD1, |
| 870 ui::EF_CONTROL_DOWN, |
| 871 ui::DomKey::CHARACTER, |
| 872 '1'}}}; |
| 556 | 873 |
| 557 for (size_t i = 0; i < arraysize(tests); ++i) { | 874 for (size_t i = 0; i < arraysize(tests); ++i) { |
| 558 SCOPED_TRACE(i); | 875 SCOPED_TRACE(i); |
| 559 CheckKeyTestCase(&rewriter, tests[i]); | 876 CheckKeyTestCase(&rewriter, tests[i]); |
| 560 } | 877 } |
| 561 } | 878 } |
| 562 | 879 |
| 563 TEST_F(EventRewriterTest, TestRewriteNumPadKeysOnAppleKeyboard) { | 880 TEST_F(EventRewriterTest, TestRewriteNumPadKeysOnAppleKeyboard) { |
| 564 TestRewriteNumPadKeysOnAppleKeyboard(); | 881 TestRewriteNumPadKeysOnAppleKeyboard(); |
| 565 } | 882 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 576 } | 893 } |
| 577 | 894 |
| 578 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) { | 895 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) { |
| 579 TestingPrefServiceSyncable prefs; | 896 TestingPrefServiceSyncable prefs; |
| 580 EventRewriter rewriter(NULL); | 897 EventRewriter rewriter(NULL); |
| 581 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 898 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 582 rewriter.set_pref_service_for_testing(&prefs); | 899 rewriter.set_pref_service_for_testing(&prefs); |
| 583 | 900 |
| 584 KeyTestCase tests[] = { | 901 KeyTestCase tests[] = { |
| 585 // Press Search. Confirm the event is not rewritten. | 902 // Press Search. Confirm the event is not rewritten. |
| 586 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 903 {KeyTestCase::TEST_ALL, |
| 587 {ui::VKEY_LWIN, ui::EF_NONE}, | 904 ui::ET_KEY_PRESSED, |
| 588 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}}, | 905 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS, 0}, |
| 906 {ui::VKEY_LWIN, |
| 907 ui::DomCode::OS_LEFT, |
| 908 ui::EF_COMMAND_DOWN, |
| 909 ui::DomKey::OS, |
| 910 0}}, |
| 589 | 911 |
| 590 // Press left Control. Confirm the event is not rewritten. | 912 // Press left Control. Confirm the event is not rewritten. |
| 591 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 913 {KeyTestCase::TEST_ALL, |
| 592 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}, | 914 ui::ET_KEY_PRESSED, |
| 593 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, | 915 {ui::VKEY_CONTROL, |
| 916 ui::DomCode::CONTROL_LEFT, |
| 917 ui::EF_CONTROL_DOWN, |
| 918 ui::DomKey::CONTROL, |
| 919 0}, |
| 920 {ui::VKEY_CONTROL, |
| 921 ui::DomCode::CONTROL_LEFT, |
| 922 ui::EF_CONTROL_DOWN, |
| 923 ui::DomKey::CONTROL, |
| 924 0}}, |
| 594 | 925 |
| 595 // Press right Control. Confirm the event is not rewritten. | 926 // Press right Control. Confirm the event is not rewritten. |
| 596 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 927 {KeyTestCase::TEST_ALL, |
| 597 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}, | 928 ui::ET_KEY_PRESSED, |
| 598 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, | 929 {ui::VKEY_CONTROL, |
| 930 ui::DomCode::CONTROL_LEFT, |
| 931 ui::EF_CONTROL_DOWN, |
| 932 ui::DomKey::CONTROL, |
| 933 0}, |
| 934 {ui::VKEY_CONTROL, |
| 935 ui::DomCode::CONTROL_LEFT, |
| 936 ui::EF_CONTROL_DOWN, |
| 937 ui::DomKey::CONTROL, |
| 938 0}}, |
| 599 | 939 |
| 600 // Press left Alt. Confirm the event is not rewritten. | 940 // Press left Alt. Confirm the event is not rewritten. |
| 601 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 941 {KeyTestCase::TEST_ALL, |
| 602 {ui::VKEY_MENU, ui::EF_ALT_DOWN}, | 942 ui::ET_KEY_PRESSED, |
| 603 {ui::VKEY_MENU, ui::EF_ALT_DOWN}}, | 943 {ui::VKEY_MENU, |
| 944 ui::DomCode::ALT_LEFT, |
| 945 ui::EF_ALT_DOWN, |
| 946 ui::DomKey::ALT, |
| 947 0}, |
| 948 {ui::VKEY_MENU, |
| 949 ui::DomCode::ALT_LEFT, |
| 950 ui::EF_ALT_DOWN, |
| 951 ui::DomKey::ALT, |
| 952 0}}, |
| 604 | 953 |
| 605 // Press right Alt. Confirm the event is not rewritten. | 954 // Press right Alt. Confirm the event is not rewritten. |
| 606 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 955 {KeyTestCase::TEST_ALL, |
| 607 {ui::VKEY_MENU, ui::EF_ALT_DOWN}, | 956 ui::ET_KEY_PRESSED, |
| 608 {ui::VKEY_MENU, ui::EF_ALT_DOWN}}, | 957 {ui::VKEY_MENU, |
| 958 ui::DomCode::ALT_LEFT, |
| 959 ui::EF_ALT_DOWN, |
| 960 ui::DomKey::ALT, |
| 961 0}, |
| 962 {ui::VKEY_MENU, |
| 963 ui::DomCode::ALT_LEFT, |
| 964 ui::EF_ALT_DOWN, |
| 965 ui::DomKey::ALT, |
| 966 0}}, |
| 609 | 967 |
| 610 // Test KeyRelease event, just in case. | 968 // Test KeyRelease event, just in case. |
| 611 // Release Search. Confirm the release event is not rewritten. | 969 // Release Search. Confirm the release event is not rewritten. |
| 612 {KeyTestCase::TEST_ALL, ui::ET_KEY_RELEASED, | 970 {KeyTestCase::TEST_ALL, |
| 613 {ui::VKEY_LWIN, ui::EF_NONE}, | 971 ui::ET_KEY_RELEASED, |
| 614 {ui::VKEY_LWIN, ui::EF_NONE}}, | 972 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS, 0}, |
| 973 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS, 0}}, |
| 615 }; | 974 }; |
| 616 | 975 |
| 617 for (size_t i = 0; i < arraysize(tests); ++i) { | 976 for (size_t i = 0; i < arraysize(tests); ++i) { |
| 618 SCOPED_TRACE(i); | 977 SCOPED_TRACE(i); |
| 619 CheckKeyTestCase(&rewriter, tests[i]); | 978 CheckKeyTestCase(&rewriter, tests[i]); |
| 620 } | 979 } |
| 621 } | 980 } |
| 622 | 981 |
| 623 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) { | 982 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) { |
| 624 TestingPrefServiceSyncable prefs; | 983 TestingPrefServiceSyncable prefs; |
| 625 EventRewriter rewriter(NULL); | 984 EventRewriter rewriter(NULL); |
| 626 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 985 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 627 rewriter.set_pref_service_for_testing(&prefs); | 986 rewriter.set_pref_service_for_testing(&prefs); |
| 628 | 987 |
| 629 KeyTestCase tests[] = { | 988 KeyTestCase tests[] = { |
| 630 // Press Alt with Shift. Confirm the event is not rewritten. | 989 // Press Alt with Shift. Confirm the event is not rewritten. |
| 631 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 990 {KeyTestCase::TEST_ALL, |
| 632 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}, | 991 ui::ET_KEY_PRESSED, |
| 633 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}}, | 992 {ui::VKEY_MENU, |
| 993 ui::DomCode::ALT_LEFT, |
| 994 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, |
| 995 ui::DomKey::ALT, |
| 996 0}, |
| 997 {ui::VKEY_MENU, |
| 998 ui::DomCode::ALT_LEFT, |
| 999 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, |
| 1000 ui::DomKey::ALT, |
| 1001 0}}, |
| 634 | 1002 |
| 635 // Press Search with Caps Lock mask. Confirm the event is not rewritten. | 1003 // Press Search with Caps Lock mask. Confirm the event is not rewritten. |
| 636 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1004 {KeyTestCase::TEST_ALL, |
| 637 {ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN}, | 1005 ui::ET_KEY_PRESSED, |
| 638 {ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN}}, | 1006 {ui::VKEY_LWIN, |
| 1007 ui::DomCode::OS_LEFT, |
| 1008 ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN, |
| 1009 ui::DomKey::OS, |
| 1010 0}, |
| 1011 {ui::VKEY_LWIN, |
| 1012 ui::DomCode::OS_LEFT, |
| 1013 ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN, |
| 1014 ui::DomKey::OS, |
| 1015 0}}, |
| 639 | 1016 |
| 640 // Release Search with Caps Lock mask. Confirm the event is not rewritten. | 1017 // Release Search with Caps Lock mask. Confirm the event is not rewritten. |
| 641 {KeyTestCase::TEST_ALL, ui::ET_KEY_RELEASED, | 1018 {KeyTestCase::TEST_ALL, |
| 642 {ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN}, | 1019 ui::ET_KEY_RELEASED, |
| 643 {ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN}}, | 1020 {ui::VKEY_LWIN, |
| 1021 ui::DomCode::OS_LEFT, |
| 1022 ui::EF_CAPS_LOCK_DOWN, |
| 1023 ui::DomKey::OS, |
| 1024 0}, |
| 1025 {ui::VKEY_LWIN, |
| 1026 ui::DomCode::OS_LEFT, |
| 1027 ui::EF_CAPS_LOCK_DOWN, |
| 1028 ui::DomKey::OS, |
| 1029 0}}, |
| 644 | 1030 |
| 645 // Press Shift+Ctrl+Alt+Search+A. Confirm the event is not rewritten. | 1031 // Press Shift+Ctrl+Alt+Search+A. Confirm the event is not rewritten. |
| 646 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1032 {KeyTestCase::TEST_ALL, |
| 647 {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 1033 ui::ET_KEY_PRESSED, |
| 648 ui::EF_COMMAND_DOWN}, | 1034 {ui::VKEY_B, |
| 649 {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 1035 ui::DomCode::KEY_B, |
| 650 ui::EF_COMMAND_DOWN}}, | 1036 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
| 1037 ui::EF_COMMAND_DOWN, |
| 1038 ui::DomKey::CHARACTER, |
| 1039 'B'}, |
| 1040 {ui::VKEY_B, |
| 1041 ui::DomCode::KEY_B, |
| 1042 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
| 1043 ui::EF_COMMAND_DOWN, |
| 1044 ui::DomKey::CHARACTER, |
| 1045 'B'}}, |
| 651 }; | 1046 }; |
| 652 | 1047 |
| 653 for (size_t i = 0; i < arraysize(tests); ++i) { | 1048 for (size_t i = 0; i < arraysize(tests); ++i) { |
| 654 SCOPED_TRACE(i); | 1049 SCOPED_TRACE(i); |
| 655 CheckKeyTestCase(&rewriter, tests[i]); | 1050 CheckKeyTestCase(&rewriter, tests[i]); |
| 656 } | 1051 } |
| 657 } | 1052 } |
| 658 | 1053 |
| 659 TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) { | 1054 TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) { |
| 660 // Disable Search and Control keys. | 1055 // Disable Search and Control keys. |
| 661 TestingPrefServiceSyncable prefs; | 1056 TestingPrefServiceSyncable prefs; |
| 662 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1057 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 663 IntegerPrefMember search; | 1058 IntegerPrefMember search; |
| 664 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 1059 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
| 665 search.SetValue(chromeos::input_method::kVoidKey); | 1060 search.SetValue(chromeos::input_method::kVoidKey); |
| 666 IntegerPrefMember control; | 1061 IntegerPrefMember control; |
| 667 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 1062 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
| 668 control.SetValue(chromeos::input_method::kVoidKey); | 1063 control.SetValue(chromeos::input_method::kVoidKey); |
| 669 | 1064 |
| 670 EventRewriter rewriter(NULL); | 1065 EventRewriter rewriter(NULL); |
| 671 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1066 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 672 rewriter.set_pref_service_for_testing(&prefs); | 1067 rewriter.set_pref_service_for_testing(&prefs); |
| 673 | 1068 |
| 674 KeyTestCase disabled_modifier_tests[] = { | 1069 KeyTestCase disabled_modifier_tests[] = { |
| 675 // Press Alt with Shift. This key press shouldn't be affected by the | 1070 // Press Alt with Shift. This key press shouldn't be affected by the |
| 676 // pref. Confirm the event is not rewritten. | 1071 // pref. Confirm the event is not rewritten. |
| 677 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1072 {KeyTestCase::TEST_ALL, |
| 678 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}, | 1073 ui::ET_KEY_PRESSED, |
| 679 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}}, | 1074 {ui::VKEY_MENU, |
| 1075 ui::DomCode::ALT_LEFT, |
| 1076 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, |
| 1077 ui::DomKey::ALT, |
| 1078 0}, |
| 1079 {ui::VKEY_MENU, |
| 1080 ui::DomCode::ALT_LEFT, |
| 1081 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, |
| 1082 ui::DomKey::ALT, |
| 1083 0}}, |
| 680 | 1084 |
| 681 // Press Search. Confirm the event is now VKEY_UNKNOWN. | 1085 // Press Search. Confirm the event is now VKEY_UNKNOWN. |
| 682 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1086 {KeyTestCase::TEST_ALL, |
| 683 {ui::VKEY_LWIN, ui::EF_NONE}, | 1087 ui::ET_KEY_PRESSED, |
| 684 {ui::VKEY_UNKNOWN, ui::EF_NONE}}, | 1088 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS, 0}, |
| 1089 {ui::VKEY_UNKNOWN, |
| 1090 ui::DomCode::NONE, |
| 1091 ui::EF_NONE, |
| 1092 ui::DomKey::UNIDENTIFIED, |
| 1093 0}}, |
| 685 | 1094 |
| 686 // Press Control. Confirm the event is now VKEY_UNKNOWN. | 1095 // Press Control. Confirm the event is now VKEY_UNKNOWN. |
| 687 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1096 {KeyTestCase::TEST_ALL, |
| 688 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}, | 1097 ui::ET_KEY_PRESSED, |
| 689 {ui::VKEY_UNKNOWN, ui::EF_NONE}}, | 1098 {ui::VKEY_CONTROL, |
| 1099 ui::DomCode::CONTROL_LEFT, |
| 1100 ui::EF_CONTROL_DOWN, |
| 1101 ui::DomKey::CONTROL, |
| 1102 0}, |
| 1103 {ui::VKEY_UNKNOWN, |
| 1104 ui::DomCode::NONE, |
| 1105 ui::EF_NONE, |
| 1106 ui::DomKey::UNIDENTIFIED, |
| 1107 0}}, |
| 690 | 1108 |
| 691 // Press Control+Search. Confirm the event is now VKEY_UNKNOWN | 1109 // Press Control+Search. Confirm the event is now VKEY_UNKNOWN |
| 692 // without any modifiers. | 1110 // without any modifiers. |
| 693 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1111 {KeyTestCase::TEST_ALL, |
| 694 {ui::VKEY_LWIN, ui::EF_CONTROL_DOWN}, | 1112 ui::ET_KEY_PRESSED, |
| 695 {ui::VKEY_UNKNOWN, ui::EF_NONE}}, | 1113 {ui::VKEY_LWIN, |
| 1114 ui::DomCode::OS_LEFT, |
| 1115 ui::EF_CONTROL_DOWN, |
| 1116 ui::DomKey::OS, |
| 1117 0}, |
| 1118 {ui::VKEY_UNKNOWN, |
| 1119 ui::DomCode::NONE, |
| 1120 ui::EF_NONE, |
| 1121 ui::DomKey::UNIDENTIFIED, |
| 1122 0}}, |
| 696 | 1123 |
| 697 // Press Control+Search+a. Confirm the event is now VKEY_A without any | 1124 // Press Control+Search+a. Confirm the event is now VKEY_A without any |
| 698 // modifiers. | 1125 // modifiers. |
| 699 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1126 {KeyTestCase::TEST_ALL, |
| 700 {ui::VKEY_A, ui::EF_CONTROL_DOWN}, | 1127 ui::ET_KEY_PRESSED, |
| 701 {ui::VKEY_A, ui::EF_NONE}}, | 1128 {ui::VKEY_A, |
| 1129 ui::DomCode::KEY_A, |
| 1130 ui::EF_CONTROL_DOWN, |
| 1131 ui::DomKey::CHARACTER, |
| 1132 'a'}, |
| 1133 {ui::VKEY_A, |
| 1134 ui::DomCode::KEY_A, |
| 1135 ui::EF_NONE, |
| 1136 ui::DomKey::CHARACTER, |
| 1137 'a'}}, |
| 702 | 1138 |
| 703 // Press Control+Search+Alt+a. Confirm the event is now VKEY_A only with | 1139 // Press Control+Search+Alt+a. Confirm the event is now VKEY_A only with |
| 704 // the Alt modifier. | 1140 // the Alt modifier. |
| 705 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1141 {KeyTestCase::TEST_ALL, |
| 706 {ui::VKEY_A, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}, | 1142 ui::ET_KEY_PRESSED, |
| 707 {ui::VKEY_A, ui::EF_ALT_DOWN}}, | 1143 {ui::VKEY_A, |
| 1144 ui::DomCode::KEY_A, |
| 1145 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
| 1146 ui::DomKey::CHARACTER, |
| 1147 'a'}, |
| 1148 {ui::VKEY_A, |
| 1149 ui::DomCode::KEY_A, |
| 1150 ui::EF_ALT_DOWN, |
| 1151 ui::DomKey::CHARACTER, |
| 1152 'a'}}, |
| 708 }; | 1153 }; |
| 709 | 1154 |
| 710 for (size_t i = 0; i < arraysize(disabled_modifier_tests); ++i) { | 1155 for (size_t i = 0; i < arraysize(disabled_modifier_tests); ++i) { |
| 711 SCOPED_TRACE(i); | 1156 SCOPED_TRACE(i); |
| 712 CheckKeyTestCase(&rewriter, disabled_modifier_tests[i]); | 1157 CheckKeyTestCase(&rewriter, disabled_modifier_tests[i]); |
| 713 } | 1158 } |
| 714 | 1159 |
| 715 // Remap Alt to Control. | 1160 // Remap Alt to Control. |
| 716 IntegerPrefMember alt; | 1161 IntegerPrefMember alt; |
| 717 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); | 1162 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); |
| 718 alt.SetValue(chromeos::input_method::kControlKey); | 1163 alt.SetValue(chromeos::input_method::kControlKey); |
| 719 | 1164 |
| 720 KeyTestCase tests[] = { | 1165 KeyTestCase tests[] = { |
| 721 // Press left Alt. Confirm the event is now VKEY_CONTROL | 1166 // Press left Alt. Confirm the event is now VKEY_CONTROL |
| 722 // even though the Control key itself is disabled. | 1167 // even though the Control key itself is disabled. |
| 723 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1168 {KeyTestCase::TEST_ALL, |
| 724 {ui::VKEY_MENU, ui::EF_ALT_DOWN}, | 1169 ui::ET_KEY_PRESSED, |
| 725 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, | 1170 {ui::VKEY_MENU, |
| 1171 ui::DomCode::ALT_LEFT, |
| 1172 ui::EF_ALT_DOWN, |
| 1173 ui::DomKey::ALT, |
| 1174 0}, |
| 1175 {ui::VKEY_CONTROL, |
| 1176 ui::DomCode::CONTROL_LEFT, |
| 1177 ui::EF_CONTROL_DOWN, |
| 1178 ui::DomKey::CONTROL, |
| 1179 0}}, |
| 726 | 1180 |
| 727 // Press Alt+a. Confirm the event is now Control+a even though the Control | 1181 // Press Alt+a. Confirm the event is now Control+a even though the Control |
| 728 // key itself is disabled. | 1182 // key itself is disabled. |
| 729 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1183 {KeyTestCase::TEST_ALL, |
| 730 {ui::VKEY_A, ui::EF_ALT_DOWN}, | 1184 ui::ET_KEY_PRESSED, |
| 731 {ui::VKEY_A, ui::EF_CONTROL_DOWN}}, | 1185 {ui::VKEY_A, |
| 1186 ui::DomCode::KEY_A, |
| 1187 ui::EF_ALT_DOWN, |
| 1188 ui::DomKey::CHARACTER, |
| 1189 'a'}, |
| 1190 {ui::VKEY_A, |
| 1191 ui::DomCode::KEY_A, |
| 1192 ui::EF_CONTROL_DOWN, |
| 1193 ui::DomKey::CHARACTER, |
| 1194 'a'}}, |
| 732 }; | 1195 }; |
| 733 | 1196 |
| 734 for (size_t i = 0; i < arraysize(tests); ++i) { | 1197 for (size_t i = 0; i < arraysize(tests); ++i) { |
| 735 SCOPED_TRACE(i); | 1198 SCOPED_TRACE(i); |
| 736 CheckKeyTestCase(&rewriter, tests[i]); | 1199 CheckKeyTestCase(&rewriter, tests[i]); |
| 737 } | 1200 } |
| 738 } | 1201 } |
| 739 | 1202 |
| 740 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) { | 1203 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) { |
| 741 // Remap Search to Control. | 1204 // Remap Search to Control. |
| 742 TestingPrefServiceSyncable prefs; | 1205 TestingPrefServiceSyncable prefs; |
| 743 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1206 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 744 IntegerPrefMember search; | 1207 IntegerPrefMember search; |
| 745 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 1208 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
| 746 search.SetValue(chromeos::input_method::kControlKey); | 1209 search.SetValue(chromeos::input_method::kControlKey); |
| 747 | 1210 |
| 748 EventRewriter rewriter(NULL); | 1211 EventRewriter rewriter(NULL); |
| 749 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1212 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 750 rewriter.set_pref_service_for_testing(&prefs); | 1213 rewriter.set_pref_service_for_testing(&prefs); |
| 751 | 1214 |
| 752 KeyTestCase s_tests[] = { | 1215 KeyTestCase s_tests[] = { |
| 753 // Press Search. Confirm the event is now VKEY_CONTROL. | 1216 // Press Search. Confirm the event is now VKEY_CONTROL. |
| 754 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1217 {KeyTestCase::TEST_ALL, |
| 755 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}, | 1218 ui::ET_KEY_PRESSED, |
| 756 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, | 1219 {ui::VKEY_LWIN, |
| 1220 ui::DomCode::OS_LEFT, |
| 1221 ui::EF_COMMAND_DOWN, |
| 1222 ui::DomKey::OS, |
| 1223 0}, |
| 1224 {ui::VKEY_CONTROL, |
| 1225 ui::DomCode::CONTROL_LEFT, |
| 1226 ui::EF_CONTROL_DOWN, |
| 1227 ui::DomKey::CONTROL, |
| 1228 0}}, |
| 757 }; | 1229 }; |
| 758 | 1230 |
| 759 for (size_t i = 0; i < arraysize(s_tests); ++i) { | 1231 for (size_t i = 0; i < arraysize(s_tests); ++i) { |
| 760 SCOPED_TRACE(i); | 1232 SCOPED_TRACE(i); |
| 761 CheckKeyTestCase(&rewriter, s_tests[i]); | 1233 CheckKeyTestCase(&rewriter, s_tests[i]); |
| 762 } | 1234 } |
| 763 | 1235 |
| 764 // Remap Alt to Control too. | 1236 // Remap Alt to Control too. |
| 765 IntegerPrefMember alt; | 1237 IntegerPrefMember alt; |
| 766 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); | 1238 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); |
| 767 alt.SetValue(chromeos::input_method::kControlKey); | 1239 alt.SetValue(chromeos::input_method::kControlKey); |
| 768 | 1240 |
| 769 KeyTestCase sa_tests[] = { | 1241 KeyTestCase sa_tests[] = { |
| 770 // Press Alt. Confirm the event is now VKEY_CONTROL. | 1242 // Press Alt. Confirm the event is now VKEY_CONTROL. |
| 771 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1243 {KeyTestCase::TEST_ALL, |
| 772 {ui::VKEY_MENU, ui::EF_ALT_DOWN}, | 1244 ui::ET_KEY_PRESSED, |
| 773 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, | 1245 {ui::VKEY_MENU, |
| 1246 ui::DomCode::ALT_LEFT, |
| 1247 ui::EF_ALT_DOWN, |
| 1248 ui::DomKey::ALT, |
| 1249 0}, |
| 1250 {ui::VKEY_CONTROL, |
| 1251 ui::DomCode::CONTROL_LEFT, |
| 1252 ui::EF_CONTROL_DOWN, |
| 1253 ui::DomKey::CONTROL, |
| 1254 0}}, |
| 774 | 1255 |
| 775 // Press Alt+Search. Confirm the event is now VKEY_CONTROL. | 1256 // Press Alt+Search. Confirm the event is now VKEY_CONTROL. |
| 776 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1257 {KeyTestCase::TEST_ALL, |
| 777 {ui::VKEY_LWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, | 1258 ui::ET_KEY_PRESSED, |
| 778 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, | 1259 {ui::VKEY_LWIN, |
| 1260 ui::DomCode::OS_LEFT, |
| 1261 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 1262 ui::DomKey::OS, |
| 1263 0}, |
| 1264 {ui::VKEY_CONTROL, |
| 1265 ui::DomCode::CONTROL_LEFT, |
| 1266 ui::EF_CONTROL_DOWN, |
| 1267 ui::DomKey::CONTROL, |
| 1268 0}}, |
| 779 | 1269 |
| 780 // Press Control+Alt+Search. Confirm the event is now VKEY_CONTROL. | 1270 // Press Control+Alt+Search. Confirm the event is now VKEY_CONTROL. |
| 781 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1271 {KeyTestCase::TEST_ALL, |
| 1272 ui::ET_KEY_PRESSED, |
| 782 {ui::VKEY_LWIN, | 1273 {ui::VKEY_LWIN, |
| 783 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, | 1274 ui::DomCode::OS_LEFT, |
| 784 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, | 1275 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 1276 ui::DomKey::OS, |
| 1277 0}, |
| 1278 {ui::VKEY_CONTROL, |
| 1279 ui::DomCode::CONTROL_LEFT, |
| 1280 ui::EF_CONTROL_DOWN, |
| 1281 ui::DomKey::CONTROL, |
| 1282 0}}, |
| 785 | 1283 |
| 786 // Press Shift+Control+Alt+Search. Confirm the event is now Control with | 1284 // Press Shift+Control+Alt+Search. Confirm the event is now Control with |
| 787 // Shift and Control modifiers. | 1285 // Shift and Control modifiers. |
| 788 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1286 {KeyTestCase::TEST_ALL, |
| 789 {ui::VKEY_LWIN, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | | 1287 ui::ET_KEY_PRESSED, |
| 790 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, | 1288 {ui::VKEY_LWIN, |
| 791 {ui::VKEY_CONTROL, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}}, | 1289 ui::DomCode::OS_LEFT, |
| 1290 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
| 1291 ui::EF_COMMAND_DOWN, |
| 1292 ui::DomKey::OS, |
| 1293 0}, |
| 1294 {ui::VKEY_CONTROL, |
| 1295 ui::DomCode::CONTROL_LEFT, |
| 1296 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
| 1297 ui::DomKey::CONTROL, |
| 1298 0}}, |
| 792 | 1299 |
| 793 // Press Shift+Control+Alt+Search+B. Confirm the event is now B with Shift | 1300 // Press Shift+Control+Alt+Search+B. Confirm the event is now B with Shift |
| 794 // and Control modifiers. | 1301 // and Control modifiers. |
| 795 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1302 {KeyTestCase::TEST_ALL, |
| 796 {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 1303 ui::ET_KEY_PRESSED, |
| 797 ui::EF_COMMAND_DOWN}, | 1304 {ui::VKEY_B, |
| 798 {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}}, | 1305 ui::DomCode::KEY_B, |
| 1306 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
| 1307 ui::EF_COMMAND_DOWN, |
| 1308 ui::DomKey::CHARACTER, |
| 1309 'B'}, |
| 1310 {ui::VKEY_B, |
| 1311 ui::DomCode::KEY_B, |
| 1312 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
| 1313 ui::DomKey::CHARACTER, |
| 1314 'B'}}, |
| 799 }; | 1315 }; |
| 800 | 1316 |
| 801 for (size_t i = 0; i < arraysize(sa_tests); ++i) { | 1317 for (size_t i = 0; i < arraysize(sa_tests); ++i) { |
| 802 SCOPED_TRACE(i); | 1318 SCOPED_TRACE(i); |
| 803 CheckKeyTestCase(&rewriter, sa_tests[i]); | 1319 CheckKeyTestCase(&rewriter, sa_tests[i]); |
| 804 } | 1320 } |
| 805 } | 1321 } |
| 806 | 1322 |
| 807 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) { | 1323 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) { |
| 808 // Remap Search to ESC. | 1324 // Remap Search to ESC. |
| 809 TestingPrefServiceSyncable prefs; | 1325 TestingPrefServiceSyncable prefs; |
| 810 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1326 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 811 IntegerPrefMember search; | 1327 IntegerPrefMember search; |
| 812 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 1328 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
| 813 search.SetValue(chromeos::input_method::kEscapeKey); | 1329 search.SetValue(chromeos::input_method::kEscapeKey); |
| 814 | 1330 |
| 815 EventRewriter rewriter(NULL); | 1331 EventRewriter rewriter(NULL); |
| 816 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1332 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 817 rewriter.set_pref_service_for_testing(&prefs); | 1333 rewriter.set_pref_service_for_testing(&prefs); |
| 818 | 1334 |
| 819 KeyTestCase tests[] = {// Press Search. Confirm the event is now VKEY_ESCAPE. | 1335 KeyTestCase tests[] = { |
| 820 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1336 // Press Search. Confirm the event is now VKEY_ESCAPE. |
| 821 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}, | 1337 {KeyTestCase::TEST_ALL, |
| 822 {ui::VKEY_ESCAPE, ui::EF_NONE}}, | 1338 ui::ET_KEY_PRESSED, |
| 1339 {ui::VKEY_LWIN, |
| 1340 ui::DomCode::OS_LEFT, |
| 1341 ui::EF_COMMAND_DOWN, |
| 1342 ui::DomKey::OS, |
| 1343 0}, |
| 1344 {ui::VKEY_ESCAPE, |
| 1345 ui::DomCode::ESCAPE, |
| 1346 ui::EF_NONE, |
| 1347 ui::DomKey::ESCAPE, |
| 1348 0}}, |
| 823 }; | 1349 }; |
| 824 | 1350 |
| 825 for (size_t i = 0; i < arraysize(tests); ++i) { | 1351 for (size_t i = 0; i < arraysize(tests); ++i) { |
| 826 SCOPED_TRACE(i); | 1352 SCOPED_TRACE(i); |
| 827 CheckKeyTestCase(&rewriter, tests[i]); | 1353 CheckKeyTestCase(&rewriter, tests[i]); |
| 828 } | 1354 } |
| 829 } | 1355 } |
| 830 | 1356 |
| 831 TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) { | 1357 TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) { |
| 832 // Remap Search to Alt. | 1358 // Remap Search to Alt. |
| 833 TestingPrefServiceSyncable prefs; | 1359 TestingPrefServiceSyncable prefs; |
| 834 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1360 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 835 IntegerPrefMember search; | 1361 IntegerPrefMember search; |
| 836 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 1362 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
| 837 search.SetValue(chromeos::input_method::kAltKey); | 1363 search.SetValue(chromeos::input_method::kAltKey); |
| 838 | 1364 |
| 839 EventRewriter rewriter(NULL); | 1365 EventRewriter rewriter(NULL); |
| 840 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1366 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 841 rewriter.set_pref_service_for_testing(&prefs); | 1367 rewriter.set_pref_service_for_testing(&prefs); |
| 842 | 1368 |
| 843 KeyTestCase s2a_tests[] = { | 1369 KeyTestCase s2a_tests[] = { |
| 844 // Press Search. Confirm the event is now VKEY_MENU. | 1370 // Press Search. Confirm the event is now VKEY_MENU. |
| 845 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1371 {KeyTestCase::TEST_ALL, |
| 846 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}, | 1372 ui::ET_KEY_PRESSED, |
| 847 {ui::VKEY_MENU, ui::EF_ALT_DOWN}}, | 1373 {ui::VKEY_LWIN, |
| 1374 ui::DomCode::OS_LEFT, |
| 1375 ui::EF_COMMAND_DOWN, |
| 1376 ui::DomKey::OS, |
| 1377 0}, |
| 1378 {ui::VKEY_MENU, |
| 1379 ui::DomCode::ALT_LEFT, |
| 1380 ui::EF_ALT_DOWN, |
| 1381 ui::DomKey::ALT, |
| 1382 0}}, |
| 848 }; | 1383 }; |
| 849 | 1384 |
| 850 for (size_t i = 0; i < arraysize(s2a_tests); ++i) { | 1385 for (size_t i = 0; i < arraysize(s2a_tests); ++i) { |
| 851 SCOPED_TRACE(i); | 1386 SCOPED_TRACE(i); |
| 852 CheckKeyTestCase(&rewriter, s2a_tests[i]); | 1387 CheckKeyTestCase(&rewriter, s2a_tests[i]); |
| 853 } | 1388 } |
| 854 | 1389 |
| 855 // Remap Alt to Control. | 1390 // Remap Alt to Control. |
| 856 IntegerPrefMember alt; | 1391 IntegerPrefMember alt; |
| 857 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); | 1392 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); |
| 858 alt.SetValue(chromeos::input_method::kControlKey); | 1393 alt.SetValue(chromeos::input_method::kControlKey); |
| 859 | 1394 |
| 860 KeyTestCase a2c_tests[] = { | 1395 KeyTestCase a2c_tests[] = { |
| 861 // Press left Alt. Confirm the event is now VKEY_CONTROL. | 1396 // Press left Alt. Confirm the event is now VKEY_CONTROL. |
| 862 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1397 {KeyTestCase::TEST_ALL, |
| 863 {ui::VKEY_MENU, ui::EF_ALT_DOWN}, | 1398 ui::ET_KEY_PRESSED, |
| 864 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, | 1399 {ui::VKEY_MENU, |
| 1400 ui::DomCode::ALT_LEFT, |
| 1401 ui::EF_ALT_DOWN, |
| 1402 ui::DomKey::ALT, |
| 1403 0}, |
| 1404 {ui::VKEY_CONTROL, |
| 1405 ui::DomCode::CONTROL_LEFT, |
| 1406 ui::EF_CONTROL_DOWN, |
| 1407 ui::DomKey::CONTROL, |
| 1408 0}}, |
| 865 // Press Shift+comma. Verify that only the flags are changed. | 1409 // Press Shift+comma. Verify that only the flags are changed. |
| 866 // The X11 portion of the test addresses crbug.com/390263 by verifying | 1410 // The X11 portion of the test addresses crbug.com/390263 by verifying |
| 867 // that the X keycode remains that for ',<' and not for 105-key '<>'. | 1411 // that the X keycode remains that for ',<' and not for 105-key '<>'. |
| 868 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1412 {KeyTestCase::TEST_ALL, |
| 869 {ui::VKEY_OEM_COMMA, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}, | 1413 ui::ET_KEY_PRESSED, |
| 870 {ui::VKEY_OEM_COMMA, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}}, | 1414 {ui::VKEY_OEM_COMMA, |
| 1415 ui::DomCode::COMMA, |
| 1416 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, |
| 1417 ui::DomKey::UNIDENTIFIED, |
| 1418 0}, |
| 1419 {ui::VKEY_OEM_COMMA, |
| 1420 ui::DomCode::COMMA, |
| 1421 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
| 1422 ui::DomKey::UNIDENTIFIED, |
| 1423 0}}, |
| 871 // Press Shift+9. Verify that only the flags are changed. | 1424 // Press Shift+9. Verify that only the flags are changed. |
| 872 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1425 {KeyTestCase::TEST_ALL, |
| 873 {ui::VKEY_9, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}, | 1426 ui::ET_KEY_PRESSED, |
| 874 {ui::VKEY_9, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}}, | 1427 {ui::VKEY_9, |
| 1428 ui::DomCode::DIGIT9, |
| 1429 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, |
| 1430 ui::DomKey::CHARACTER, |
| 1431 '9'}, |
| 1432 {ui::VKEY_9, |
| 1433 ui::DomCode::DIGIT9, |
| 1434 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
| 1435 ui::DomKey::CHARACTER, |
| 1436 '9'}}, |
| 875 }; | 1437 }; |
| 876 | 1438 |
| 877 for (size_t i = 0; i < arraysize(a2c_tests); ++i) { | 1439 for (size_t i = 0; i < arraysize(a2c_tests); ++i) { |
| 878 SCOPED_TRACE(i); | 1440 SCOPED_TRACE(i); |
| 879 CheckKeyTestCase(&rewriter, a2c_tests[i]); | 1441 CheckKeyTestCase(&rewriter, a2c_tests[i]); |
| 880 } | 1442 } |
| 881 | 1443 |
| 882 // Remap Control to Search. | 1444 // Remap Control to Search. |
| 883 IntegerPrefMember control; | 1445 IntegerPrefMember control; |
| 884 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 1446 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
| 885 control.SetValue(chromeos::input_method::kSearchKey); | 1447 control.SetValue(chromeos::input_method::kSearchKey); |
| 886 | 1448 |
| 887 KeyTestCase c2s_tests[] = { | 1449 KeyTestCase c2s_tests[] = { |
| 888 // Press left Control. Confirm the event is now VKEY_LWIN. | 1450 // Press left Control. Confirm the event is now VKEY_LWIN. |
| 889 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1451 {KeyTestCase::TEST_ALL, |
| 890 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}, | 1452 ui::ET_KEY_PRESSED, |
| 891 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}}, | 1453 {ui::VKEY_CONTROL, |
| 1454 ui::DomCode::CONTROL_LEFT, |
| 1455 ui::EF_CONTROL_DOWN, |
| 1456 ui::DomKey::CONTROL, |
| 1457 0}, |
| 1458 {ui::VKEY_LWIN, |
| 1459 ui::DomCode::OS_LEFT, |
| 1460 ui::EF_COMMAND_DOWN, |
| 1461 ui::DomKey::OS, |
| 1462 0}}, |
| 892 | 1463 |
| 893 // Then, press all of the three, Control+Alt+Search. | 1464 // Then, press all of the three, Control+Alt+Search. |
| 894 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1465 {KeyTestCase::TEST_ALL, |
| 1466 ui::ET_KEY_PRESSED, |
| 895 {ui::VKEY_LWIN, | 1467 {ui::VKEY_LWIN, |
| 896 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, | 1468 ui::DomCode::OS_LEFT, |
| 1469 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 1470 ui::DomKey::OS, |
| 1471 0}, |
| 897 {ui::VKEY_MENU, | 1472 {ui::VKEY_MENU, |
| 898 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}}, | 1473 ui::DomCode::ALT_LEFT, |
| 1474 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 1475 ui::DomKey::ALT, |
| 1476 0}}, |
| 899 | 1477 |
| 900 // Press Shift+Control+Alt+Search. | 1478 // Press Shift+Control+Alt+Search. |
| 901 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1479 {KeyTestCase::TEST_ALL, |
| 902 {ui::VKEY_LWIN, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | | 1480 ui::ET_KEY_PRESSED, |
| 903 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, | 1481 {ui::VKEY_LWIN, |
| 904 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | | 1482 ui::DomCode::OS_LEFT, |
| 905 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}}, | 1483 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
| 1484 ui::EF_COMMAND_DOWN, |
| 1485 ui::DomKey::OS, |
| 1486 0}, |
| 1487 {ui::VKEY_MENU, |
| 1488 ui::DomCode::ALT_LEFT, |
| 1489 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
| 1490 ui::EF_COMMAND_DOWN, |
| 1491 ui::DomKey::ALT, |
| 1492 0}}, |
| 906 | 1493 |
| 907 // Press Shift+Control+Alt+Search+B | 1494 // Press Shift+Control+Alt+Search+B |
| 908 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1495 {KeyTestCase::TEST_ALL, |
| 909 {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 1496 ui::ET_KEY_PRESSED, |
| 910 ui::EF_COMMAND_DOWN}, | 1497 {ui::VKEY_B, |
| 911 {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 1498 ui::DomCode::KEY_B, |
| 912 ui::EF_COMMAND_DOWN}}, | 1499 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
| 1500 ui::EF_COMMAND_DOWN, |
| 1501 ui::DomKey::CHARACTER, |
| 1502 'B'}, |
| 1503 {ui::VKEY_B, |
| 1504 ui::DomCode::KEY_B, |
| 1505 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
| 1506 ui::EF_COMMAND_DOWN, |
| 1507 ui::DomKey::CHARACTER, |
| 1508 'B'}}, |
| 913 }; | 1509 }; |
| 914 | 1510 |
| 915 for (size_t i = 0; i < arraysize(c2s_tests); ++i) { | 1511 for (size_t i = 0; i < arraysize(c2s_tests); ++i) { |
| 916 SCOPED_TRACE(i); | 1512 SCOPED_TRACE(i); |
| 917 CheckKeyTestCase(&rewriter, c2s_tests[i]); | 1513 CheckKeyTestCase(&rewriter, c2s_tests[i]); |
| 918 } | 1514 } |
| 919 } | 1515 } |
| 920 | 1516 |
| 921 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) { | 1517 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) { |
| 922 // Remap Search to Caps Lock. | 1518 // Remap Search to Caps Lock. |
| 923 TestingPrefServiceSyncable prefs; | 1519 TestingPrefServiceSyncable prefs; |
| 924 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1520 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 925 IntegerPrefMember search; | 1521 IntegerPrefMember search; |
| 926 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 1522 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
| 927 search.SetValue(chromeos::input_method::kCapsLockKey); | 1523 search.SetValue(chromeos::input_method::kCapsLockKey); |
| 928 | 1524 |
| 929 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 1525 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
| 930 EventRewriter rewriter(NULL); | 1526 EventRewriter rewriter(NULL); |
| 931 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1527 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 932 rewriter.set_pref_service_for_testing(&prefs); | 1528 rewriter.set_pref_service_for_testing(&prefs); |
| 933 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 1529 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
| 934 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 1530 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
| 935 | 1531 |
| 936 // Press Search. | 1532 // Press Search. |
| 937 EXPECT_EQ( | 1533 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, |
| 938 GetExpectedResultAsString(ui::VKEY_CAPITAL, | 1534 ui::DomCode::CAPS_LOCK, |
| 939 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1535 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
| 940 ui::ET_KEY_PRESSED), | 1536 ui::DomKey::CAPS_LOCK, 0), |
| 941 GetRewrittenEventAsString( | 1537 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
| 942 &rewriter, ui::VKEY_LWIN, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED)); | 1538 ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
| 1539 ui::EF_COMMAND_DOWN, ui::DomKey::OS, 0)); |
| 943 // Confirm that the Caps Lock status is changed. | 1540 // Confirm that the Caps Lock status is changed. |
| 944 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 1541 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
| 945 | 1542 |
| 946 // Release Search. | 1543 // Release Search. |
| 947 EXPECT_EQ(GetExpectedResultAsString( | 1544 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, |
| 948 ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED), | 1545 ui::DomCode::CAPS_LOCK, ui::EF_NONE, |
| 949 GetRewrittenEventAsString( | 1546 ui::DomKey::CAPS_LOCK, 0), |
| 950 &rewriter, ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_RELEASED)); | 1547 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
| 1548 ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
| 1549 ui::EF_NONE, ui::DomKey::OS, 0)); |
| 951 // Confirm that the Caps Lock status is not changed. | 1550 // Confirm that the Caps Lock status is not changed. |
| 952 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 1551 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
| 953 | 1552 |
| 954 // Press Search. | 1553 // Press Search. |
| 955 EXPECT_EQ( | 1554 EXPECT_EQ( |
| 956 GetExpectedResultAsString(ui::VKEY_CAPITAL, | 1555 GetExpectedResultAsString( |
| 957 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1556 ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, |
| 958 ui::ET_KEY_PRESSED), | 1557 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, ui::DomKey::CAPS_LOCK, 0), |
| 959 GetRewrittenEventAsString(&rewriter, | 1558 GetRewrittenEventAsString( |
| 960 ui::VKEY_LWIN, | 1559 &rewriter, ui::ET_KEY_PRESSED, ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
| 961 ui::EF_COMMAND_DOWN | ui::EF_CAPS_LOCK_DOWN, | 1560 ui::EF_COMMAND_DOWN | ui::EF_CAPS_LOCK_DOWN, ui::DomKey::OS, 0)); |
| 962 ui::ET_KEY_PRESSED)); | |
| 963 // Confirm that the Caps Lock status is changed. | 1561 // Confirm that the Caps Lock status is changed. |
| 964 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 1562 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
| 965 | 1563 |
| 966 // Release Search. | 1564 // Release Search. |
| 967 EXPECT_EQ(GetExpectedResultAsString( | 1565 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, |
| 968 ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED), | 1566 ui::DomCode::CAPS_LOCK, ui::EF_NONE, |
| 969 GetRewrittenEventAsString( | 1567 ui::DomKey::CAPS_LOCK, 0), |
| 970 &rewriter, ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_RELEASED)); | 1568 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
| 1569 ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
| 1570 ui::EF_NONE, ui::DomKey::OS, 0)); |
| 971 // Confirm that the Caps Lock status is not changed. | 1571 // Confirm that the Caps Lock status is not changed. |
| 972 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 1572 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
| 973 | 1573 |
| 974 // Press Caps Lock (on an external keyboard). | 1574 // Press Caps Lock (on an external keyboard). |
| 975 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, | 1575 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, |
| 1576 ui::DomCode::CAPS_LOCK, |
| 976 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1577 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
| 977 ui::ET_KEY_PRESSED), | 1578 ui::DomKey::CAPS_LOCK, 0), |
| 978 GetRewrittenEventAsString(&rewriter, | 1579 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
| 979 ui::VKEY_CAPITAL, | 1580 ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, |
| 980 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1581 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
| 981 ui::ET_KEY_PRESSED)); | 1582 ui::DomKey::CAPS_LOCK, 0)); |
| 982 | 1583 |
| 983 // Confirm that calling RewriteForTesting() does not change the state of | 1584 // Confirm that calling RewriteForTesting() does not change the state of |
| 984 // |ime_keyboard|. In this case, X Window system itself should change the | 1585 // |ime_keyboard|. In this case, X Window system itself should change the |
| 985 // Caps Lock state, not ash::EventRewriter. | 1586 // Caps Lock state, not ash::EventRewriter. |
| 986 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 1587 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
| 987 | 1588 |
| 988 // Release Caps Lock (on an external keyboard). | 1589 // Release Caps Lock (on an external keyboard). |
| 989 EXPECT_EQ(GetExpectedResultAsString( | 1590 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, |
| 990 ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED), | 1591 ui::DomCode::CAPS_LOCK, ui::EF_NONE, |
| 991 GetRewrittenEventAsString( | 1592 ui::DomKey::CAPS_LOCK, 0), |
| 992 &rewriter, ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED)); | 1593 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
| 1594 ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, |
| 1595 ui::EF_NONE, ui::DomKey::CAPS_LOCK, 0)); |
| 993 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 1596 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
| 994 } | 1597 } |
| 995 | 1598 |
| 996 TEST_F(EventRewriterTest, TestRewriteCapsLock) { | 1599 TEST_F(EventRewriterTest, TestRewriteCapsLock) { |
| 997 TestingPrefServiceSyncable prefs; | 1600 TestingPrefServiceSyncable prefs; |
| 998 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1601 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 999 | 1602 |
| 1000 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 1603 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
| 1001 EventRewriter rewriter(NULL); | 1604 EventRewriter rewriter(NULL); |
| 1002 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1605 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1003 rewriter.set_pref_service_for_testing(&prefs); | 1606 rewriter.set_pref_service_for_testing(&prefs); |
| 1004 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 1607 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
| 1005 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 1608 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
| 1006 | 1609 |
| 1007 // On Chrome OS, CapsLock is mapped to F16 with Mod3Mask. | 1610 // On Chrome OS, CapsLock is mapped to F16 with Mod3Mask. |
| 1008 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, | 1611 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, |
| 1612 ui::DomCode::CAPS_LOCK, |
| 1009 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1613 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
| 1010 ui::ET_KEY_PRESSED), | 1614 ui::DomKey::CAPS_LOCK, 0), |
| 1011 GetRewrittenEventAsString( | 1615 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
| 1012 &rewriter, ui::VKEY_F16, ui::EF_MOD3_DOWN, ui::ET_KEY_PRESSED)); | 1616 ui::VKEY_F16, ui::DomCode::F16, |
| 1617 ui::EF_MOD3_DOWN, ui::DomKey::F16, 0)); |
| 1013 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 1618 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
| 1014 } | 1619 } |
| 1015 | 1620 |
| 1016 TEST_F(EventRewriterTest, TestRewriteDiamondKey) { | 1621 TEST_F(EventRewriterTest, TestRewriteDiamondKey) { |
| 1017 TestingPrefServiceSyncable prefs; | 1622 TestingPrefServiceSyncable prefs; |
| 1018 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1623 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 1019 | 1624 |
| 1020 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 1625 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
| 1021 EventRewriter rewriter(NULL); | 1626 EventRewriter rewriter(NULL); |
| 1022 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1627 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1023 rewriter.set_pref_service_for_testing(&prefs); | 1628 rewriter.set_pref_service_for_testing(&prefs); |
| 1024 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 1629 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
| 1025 | 1630 |
| 1026 KeyTestCase tests[] = { | 1631 KeyTestCase tests[] = { |
| 1027 // F15 should work as Ctrl when --has-chromeos-diamond-key is not | 1632 // F15 should work as Ctrl when --has-chromeos-diamond-key is not |
| 1028 // specified. | 1633 // specified. |
| 1029 {KeyTestCase::TEST_VKEY, | 1634 {KeyTestCase::TEST_VKEY, |
| 1030 ui::ET_KEY_PRESSED, | 1635 ui::ET_KEY_PRESSED, |
| 1031 {ui::VKEY_F15, ui::EF_NONE}, | 1636 {ui::VKEY_F15, ui::DomCode::F15, ui::EF_NONE, ui::DomKey::F15, 0}, |
| 1032 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, | 1637 {ui::VKEY_CONTROL, |
| 1638 ui::DomCode::CONTROL_LEFT, |
| 1639 ui::EF_CONTROL_DOWN, |
| 1640 ui::DomKey::CONTROL, |
| 1641 0}}, |
| 1033 | 1642 |
| 1034 {KeyTestCase::TEST_VKEY, | 1643 {KeyTestCase::TEST_VKEY, |
| 1035 ui::ET_KEY_RELEASED, | 1644 ui::ET_KEY_RELEASED, |
| 1036 {ui::VKEY_F15, ui::EF_NONE}, | 1645 {ui::VKEY_F15, ui::DomCode::F15, ui::EF_NONE, ui::DomKey::F15, 0}, |
| 1037 {ui::VKEY_CONTROL, ui::EF_NONE}}, | 1646 {ui::VKEY_CONTROL, |
| 1647 ui::DomCode::CONTROL_LEFT, |
| 1648 ui::EF_NONE, |
| 1649 ui::DomKey::CONTROL, |
| 1650 0}}, |
| 1038 | 1651 |
| 1039 // However, Mod2Mask should not be rewritten to CtrlMask when | 1652 // However, Mod2Mask should not be rewritten to CtrlMask when |
| 1040 // --has-chromeos-diamond-key is not specified. | 1653 // --has-chromeos-diamond-key is not specified. |
| 1041 {KeyTestCase::TEST_VKEY, | 1654 {KeyTestCase::TEST_VKEY, |
| 1042 ui::ET_KEY_PRESSED, | 1655 ui::ET_KEY_PRESSED, |
| 1043 {ui::VKEY_A, ui::EF_NONE}, | 1656 {ui::VKEY_A, |
| 1044 {ui::VKEY_A, ui::EF_NONE}}, | 1657 ui::DomCode::KEY_A, |
| 1658 ui::EF_NONE, |
| 1659 ui::DomKey::CHARACTER, |
| 1660 'a'}, |
| 1661 {ui::VKEY_A, |
| 1662 ui::DomCode::KEY_A, |
| 1663 ui::EF_NONE, |
| 1664 ui::DomKey::CHARACTER, |
| 1665 'a'}}, |
| 1045 }; | 1666 }; |
| 1046 | 1667 |
| 1047 for (size_t i = 0; i < arraysize(tests); ++i) { | 1668 for (size_t i = 0; i < arraysize(tests); ++i) { |
| 1048 SCOPED_TRACE(i); | 1669 SCOPED_TRACE(i); |
| 1049 CheckKeyTestCase(&rewriter, tests[i]); | 1670 CheckKeyTestCase(&rewriter, tests[i]); |
| 1050 } | 1671 } |
| 1051 } | 1672 } |
| 1052 | 1673 |
| 1053 TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) { | 1674 TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) { |
| 1054 const base::CommandLine original_cl(*base::CommandLine::ForCurrentProcess()); | 1675 const base::CommandLine original_cl(*base::CommandLine::ForCurrentProcess()); |
| 1055 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 1676 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| 1056 chromeos::switches::kHasChromeOSDiamondKey, ""); | 1677 chromeos::switches::kHasChromeOSDiamondKey, ""); |
| 1057 | 1678 |
| 1058 TestingPrefServiceSyncable prefs; | 1679 TestingPrefServiceSyncable prefs; |
| 1059 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1680 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 1060 | 1681 |
| 1061 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 1682 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
| 1062 EventRewriter rewriter(NULL); | 1683 EventRewriter rewriter(NULL); |
| 1063 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1684 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1064 rewriter.set_pref_service_for_testing(&prefs); | 1685 rewriter.set_pref_service_for_testing(&prefs); |
| 1065 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 1686 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
| 1066 | 1687 |
| 1067 // By default, F15 should work as Control. | 1688 // By default, F15 should work as Control. |
| 1068 EXPECT_EQ(GetExpectedResultAsString( | 1689 EXPECT_EQ(GetExpectedResultAsString( |
| 1069 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), | 1690 ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 1070 GetRewrittenEventAsString( | 1691 ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL, 0), |
| 1071 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1692 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
| 1693 ui::VKEY_F15, ui::DomCode::F15, |
| 1694 ui::EF_NONE, ui::DomKey::F15, 0)); |
| 1072 // Check that Control is applied to a subsequent key press. | 1695 // Check that Control is applied to a subsequent key press. |
| 1073 EXPECT_EQ(GetExpectedResultAsString( | 1696 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1074 ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), | 1697 ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, |
| 1075 GetRewrittenEventAsString( | 1698 ui::DomKey::CHARACTER, 'a'), |
| 1076 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1699 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1700 ui::DomCode::KEY_A, ui::EF_NONE, |
| 1701 ui::DomKey::CHARACTER, 'a')); |
| 1077 // Release F15 | 1702 // Release F15 |
| 1078 EXPECT_EQ(GetExpectedResultAsString( | 1703 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, |
| 1079 ui::VKEY_CONTROL, ui::EF_NONE, ui::ET_KEY_RELEASED), | 1704 ui::DomCode::CONTROL_LEFT, ui::EF_NONE, |
| 1080 GetRewrittenEventAsString( | 1705 ui::DomKey::CONTROL, 0), |
| 1081 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_RELEASED)); | 1706 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
| 1707 ui::VKEY_F15, ui::DomCode::F15, |
| 1708 ui::EF_NONE, ui::DomKey::F15, 0)); |
| 1082 // Check that Control is no longer applied to a subsequent key press. | 1709 // Check that Control is no longer applied to a subsequent key press. |
| 1083 EXPECT_EQ( | 1710 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1084 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), | 1711 ui::DomCode::KEY_A, ui::EF_NONE, |
| 1085 GetRewrittenEventAsString( | 1712 ui::DomKey::CHARACTER, 'a'), |
| 1086 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1713 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1714 ui::DomCode::KEY_A, ui::EF_NONE, |
| 1715 ui::DomKey::CHARACTER, 'a')); |
| 1087 | 1716 |
| 1088 IntegerPrefMember diamond; | 1717 IntegerPrefMember diamond; |
| 1089 diamond.Init(prefs::kLanguageRemapDiamondKeyTo, &prefs); | 1718 diamond.Init(prefs::kLanguageRemapDiamondKeyTo, &prefs); |
| 1090 diamond.SetValue(chromeos::input_method::kVoidKey); | 1719 diamond.SetValue(chromeos::input_method::kVoidKey); |
| 1091 | 1720 |
| 1092 EXPECT_EQ(GetExpectedResultAsString( | 1721 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_UNKNOWN, |
| 1093 ui::VKEY_UNKNOWN, ui::EF_NONE, ui::ET_KEY_PRESSED), | 1722 ui::DomCode::NONE, ui::EF_NONE, |
| 1094 GetRewrittenEventAsString( | 1723 ui::DomKey::NONE, 0), |
| 1095 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1724 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
| 1725 ui::VKEY_F15, ui::DomCode::F15, |
| 1726 ui::EF_NONE, ui::DomKey::F15, 0)); |
| 1096 // Check that no modifier is applied to another key. | 1727 // Check that no modifier is applied to another key. |
| 1097 EXPECT_EQ( | 1728 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1098 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), | 1729 ui::DomCode::KEY_A, ui::EF_NONE, |
| 1099 GetRewrittenEventAsString( | 1730 ui::DomKey::CHARACTER, 'a'), |
| 1100 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1731 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1732 ui::DomCode::KEY_A, ui::EF_NONE, |
| 1733 ui::DomKey::CHARACTER, 'a')); |
| 1101 | 1734 |
| 1102 diamond.SetValue(chromeos::input_method::kControlKey); | 1735 diamond.SetValue(chromeos::input_method::kControlKey); |
| 1103 | 1736 |
| 1104 EXPECT_EQ(GetExpectedResultAsString( | 1737 EXPECT_EQ(GetExpectedResultAsString( |
| 1105 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), | 1738 ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 1106 GetRewrittenEventAsString( | 1739 ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL, 0), |
| 1107 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1740 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
| 1741 ui::VKEY_F15, ui::DomCode::F15, |
| 1742 ui::EF_NONE, ui::DomKey::F15, 0)); |
| 1108 // Check that Control is applied to a subsequent key press. | 1743 // Check that Control is applied to a subsequent key press. |
| 1109 EXPECT_EQ(GetExpectedResultAsString( | 1744 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1110 ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), | 1745 ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, |
| 1111 GetRewrittenEventAsString( | 1746 ui::DomKey::CHARACTER, 'a'), |
| 1112 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1747 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1748 ui::DomCode::KEY_A, ui::EF_NONE, |
| 1749 ui::DomKey::CHARACTER, 'a')); |
| 1113 // Release F15 | 1750 // Release F15 |
| 1114 EXPECT_EQ(GetExpectedResultAsString( | 1751 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, |
| 1115 ui::VKEY_CONTROL, ui::EF_NONE, ui::ET_KEY_RELEASED), | 1752 ui::DomCode::CONTROL_LEFT, ui::EF_NONE, |
| 1116 GetRewrittenEventAsString( | 1753 ui::DomKey::CONTROL, 0), |
| 1117 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_RELEASED)); | 1754 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
| 1755 ui::VKEY_F15, ui::DomCode::F15, |
| 1756 ui::EF_NONE, ui::DomKey::F15, 0)); |
| 1118 // Check that Control is no longer applied to a subsequent key press. | 1757 // Check that Control is no longer applied to a subsequent key press. |
| 1119 EXPECT_EQ( | 1758 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1120 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), | 1759 ui::DomCode::KEY_A, ui::EF_NONE, |
| 1121 GetRewrittenEventAsString( | 1760 ui::DomKey::CHARACTER, 'a'), |
| 1122 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1761 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1762 ui::DomCode::KEY_A, ui::EF_NONE, |
| 1763 ui::DomKey::CHARACTER, 'a')); |
| 1123 | 1764 |
| 1124 diamond.SetValue(chromeos::input_method::kAltKey); | 1765 diamond.SetValue(chromeos::input_method::kAltKey); |
| 1125 | 1766 |
| 1126 EXPECT_EQ(GetExpectedResultAsString( | 1767 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_MENU, |
| 1127 ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), | 1768 ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, |
| 1128 GetRewrittenEventAsString( | 1769 ui::DomKey::ALT, 0), |
| 1129 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1770 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
| 1771 ui::VKEY_F15, ui::DomCode::F15, |
| 1772 ui::EF_NONE, ui::DomKey::F15, 0)); |
| 1130 // Check that Alt is applied to a subsequent key press. | 1773 // Check that Alt is applied to a subsequent key press. |
| 1131 EXPECT_EQ(GetExpectedResultAsString( | 1774 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1132 ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), | 1775 ui::DomCode::KEY_A, ui::EF_ALT_DOWN, |
| 1133 GetRewrittenEventAsString( | 1776 ui::DomKey::CHARACTER, 'a'), |
| 1134 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1777 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1778 ui::DomCode::KEY_A, ui::EF_NONE, |
| 1779 ui::DomKey::CHARACTER, 'a')); |
| 1135 // Release F15 | 1780 // Release F15 |
| 1136 EXPECT_EQ(GetExpectedResultAsString( | 1781 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_MENU, |
| 1137 ui::VKEY_MENU, ui::EF_NONE, ui::ET_KEY_RELEASED), | 1782 ui::DomCode::ALT_LEFT, ui::EF_NONE, |
| 1138 GetRewrittenEventAsString( | 1783 ui::DomKey::ALT, 0), |
| 1139 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_RELEASED)); | 1784 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
| 1785 ui::VKEY_F15, ui::DomCode::F15, |
| 1786 ui::EF_NONE, ui::DomKey::F15, 0)); |
| 1140 // Check that Alt is no longer applied to a subsequent key press. | 1787 // Check that Alt is no longer applied to a subsequent key press. |
| 1141 EXPECT_EQ( | 1788 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1142 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), | 1789 ui::DomCode::KEY_A, ui::EF_NONE, |
| 1143 GetRewrittenEventAsString( | 1790 ui::DomKey::CHARACTER, 'a'), |
| 1144 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1791 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1792 ui::DomCode::KEY_A, ui::EF_NONE, |
| 1793 ui::DomKey::CHARACTER, 'a')); |
| 1145 | 1794 |
| 1146 diamond.SetValue(chromeos::input_method::kCapsLockKey); | 1795 diamond.SetValue(chromeos::input_method::kCapsLockKey); |
| 1147 | 1796 |
| 1148 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, | 1797 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, |
| 1798 ui::DomCode::CAPS_LOCK, |
| 1149 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1799 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
| 1150 ui::ET_KEY_PRESSED), | 1800 ui::DomKey::CAPS_LOCK, 0), |
| 1151 GetRewrittenEventAsString( | 1801 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
| 1152 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1802 ui::VKEY_F15, ui::DomCode::F15, |
| 1803 ui::EF_NONE, ui::DomKey::F15, 0)); |
| 1153 // Check that Caps is applied to a subsequent key press. | 1804 // Check that Caps is applied to a subsequent key press. |
| 1154 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, | 1805 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1806 ui::DomCode::KEY_A, |
| 1155 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1807 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
| 1156 ui::ET_KEY_PRESSED), | 1808 ui::DomKey::CHARACTER, 'a'), |
| 1157 GetRewrittenEventAsString( | 1809 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1158 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1810 ui::DomCode::KEY_A, ui::EF_NONE, |
| 1811 ui::DomKey::CHARACTER, 'a')); |
| 1159 // Release F15 | 1812 // Release F15 |
| 1160 EXPECT_EQ(GetExpectedResultAsString( | 1813 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, |
| 1161 ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED), | 1814 ui::DomCode::CAPS_LOCK, ui::EF_NONE, |
| 1162 GetRewrittenEventAsString( | 1815 ui::DomKey::CAPS_LOCK, 0), |
| 1163 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_RELEASED)); | 1816 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
| 1817 ui::VKEY_F15, ui::DomCode::F15, |
| 1818 ui::EF_NONE, ui::DomKey::F15, 0)); |
| 1164 // Check that Control is no longer applied to a subsequent key press. | 1819 // Check that Control is no longer applied to a subsequent key press. |
| 1165 EXPECT_EQ( | 1820 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1166 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), | 1821 ui::DomCode::KEY_A, ui::EF_NONE, |
| 1167 GetRewrittenEventAsString( | 1822 ui::DomKey::CHARACTER, 'a'), |
| 1168 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1823 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1824 ui::DomCode::KEY_A, ui::EF_NONE, |
| 1825 ui::DomKey::CHARACTER, 'a')); |
| 1169 | 1826 |
| 1170 *base::CommandLine::ForCurrentProcess() = original_cl; | 1827 *base::CommandLine::ForCurrentProcess() = original_cl; |
| 1171 } | 1828 } |
| 1172 | 1829 |
| 1173 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) { | 1830 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) { |
| 1174 // Remap CapsLock to Control. | 1831 // Remap CapsLock to Control. |
| 1175 TestingPrefServiceSyncable prefs; | 1832 TestingPrefServiceSyncable prefs; |
| 1176 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1833 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 1177 IntegerPrefMember control; | 1834 IntegerPrefMember control; |
| 1178 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); | 1835 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); |
| 1179 control.SetValue(chromeos::input_method::kControlKey); | 1836 control.SetValue(chromeos::input_method::kControlKey); |
| 1180 | 1837 |
| 1181 EventRewriter rewriter(NULL); | 1838 EventRewriter rewriter(NULL); |
| 1182 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1839 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1183 rewriter.set_pref_service_for_testing(&prefs); | 1840 rewriter.set_pref_service_for_testing(&prefs); |
| 1184 | 1841 |
| 1185 KeyTestCase tests[] = { | 1842 KeyTestCase tests[] = { |
| 1186 // Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. | 1843 // Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. |
| 1187 // On Chrome OS, CapsLock works as a Mod3 modifier. | 1844 // On Chrome OS, CapsLock works as a Mod3 modifier. |
| 1188 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1845 {KeyTestCase::TEST_ALL, |
| 1189 {ui::VKEY_A, ui::EF_MOD3_DOWN}, | 1846 ui::ET_KEY_PRESSED, |
| 1190 {ui::VKEY_A, ui::EF_CONTROL_DOWN}}, | 1847 {ui::VKEY_A, |
| 1848 ui::DomCode::KEY_A, |
| 1849 ui::EF_MOD3_DOWN, |
| 1850 ui::DomKey::CHARACTER, |
| 1851 'a'}, |
| 1852 {ui::VKEY_A, |
| 1853 ui::DomCode::KEY_A, |
| 1854 ui::EF_CONTROL_DOWN, |
| 1855 ui::DomKey::CHARACTER, |
| 1856 'a'}}, |
| 1191 | 1857 |
| 1192 // Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to | 1858 // Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to |
| 1193 // ControlMask | 1859 // ControlMask |
| 1194 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1860 {KeyTestCase::TEST_ALL, |
| 1195 {ui::VKEY_A, ui::EF_CONTROL_DOWN | ui::EF_MOD3_DOWN}, | 1861 ui::ET_KEY_PRESSED, |
| 1196 {ui::VKEY_A, ui::EF_CONTROL_DOWN}}, | 1862 {ui::VKEY_A, |
| 1863 ui::DomCode::KEY_A, |
| 1864 ui::EF_CONTROL_DOWN | ui::EF_MOD3_DOWN, |
| 1865 ui::DomKey::CHARACTER, |
| 1866 'a'}, |
| 1867 {ui::VKEY_A, |
| 1868 ui::DomCode::KEY_A, |
| 1869 ui::EF_CONTROL_DOWN, |
| 1870 ui::DomKey::CHARACTER, |
| 1871 'a'}}, |
| 1197 | 1872 |
| 1198 // Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to | 1873 // Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to |
| 1199 // ControlMask. | 1874 // ControlMask. |
| 1200 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1875 {KeyTestCase::TEST_ALL, |
| 1201 {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_MOD3_DOWN}, | 1876 ui::ET_KEY_PRESSED, |
| 1202 {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}}, | 1877 {ui::VKEY_A, |
| 1878 ui::DomCode::KEY_A, |
| 1879 ui::EF_ALT_DOWN | ui::EF_MOD3_DOWN, |
| 1880 ui::DomKey::CHARACTER, |
| 1881 'a'}, |
| 1882 {ui::VKEY_A, |
| 1883 ui::DomCode::KEY_A, |
| 1884 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
| 1885 ui::DomKey::CHARACTER, |
| 1886 'a'}}, |
| 1203 }; | 1887 }; |
| 1204 | 1888 |
| 1205 for (size_t i = 0; i < arraysize(tests); ++i) { | 1889 for (size_t i = 0; i < arraysize(tests); ++i) { |
| 1206 SCOPED_TRACE(i); | 1890 SCOPED_TRACE(i); |
| 1207 CheckKeyTestCase(&rewriter, tests[i]); | 1891 CheckKeyTestCase(&rewriter, tests[i]); |
| 1208 } | 1892 } |
| 1209 } | 1893 } |
| 1210 | 1894 |
| 1211 TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) { | 1895 TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) { |
| 1212 // Remap CapsLock to Control. | 1896 // Remap CapsLock to Control. |
| 1213 TestingPrefServiceSyncable prefs; | 1897 TestingPrefServiceSyncable prefs; |
| 1214 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1898 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 1215 IntegerPrefMember control; | 1899 IntegerPrefMember control; |
| 1216 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); | 1900 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); |
| 1217 control.SetValue(chromeos::input_method::kControlKey); | 1901 control.SetValue(chromeos::input_method::kControlKey); |
| 1218 | 1902 |
| 1219 EventRewriter rewriter(NULL); | 1903 EventRewriter rewriter(NULL); |
| 1220 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1904 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1221 rewriter.set_pref_service_for_testing(&prefs); | 1905 rewriter.set_pref_service_for_testing(&prefs); |
| 1222 input_method_manager_mock_->set_mod3_used(true); | 1906 input_method_manager_mock_->set_mod3_used(true); |
| 1223 | 1907 |
| 1224 // Press CapsLock+a. Confirm that Mod3Mask is NOT rewritten to ControlMask | 1908 // Press CapsLock+a. Confirm that Mod3Mask is NOT rewritten to ControlMask |
| 1225 // when Mod3Mask is already in use by the current XKB layout. | 1909 // when Mod3Mask is already in use by the current XKB layout. |
| 1226 EXPECT_EQ( | 1910 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1227 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), | 1911 ui::DomCode::KEY_A, ui::EF_NONE, |
| 1228 GetRewrittenEventAsString( | 1912 ui::DomKey::CHARACTER, 'a'), |
| 1229 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1913 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1914 ui::DomCode::KEY_A, ui::EF_NONE, |
| 1915 ui::DomKey::CHARACTER, 'a')); |
| 1230 | 1916 |
| 1231 input_method_manager_mock_->set_mod3_used(false); | 1917 input_method_manager_mock_->set_mod3_used(false); |
| 1232 } | 1918 } |
| 1233 | 1919 |
| 1234 TEST_F(EventRewriterTest, TestRewriteExtendedKeys) { | 1920 TEST_F(EventRewriterTest, TestRewriteExtendedKeys) { |
| 1235 TestingPrefServiceSyncable prefs; | 1921 TestingPrefServiceSyncable prefs; |
| 1236 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1922 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 1237 EventRewriter rewriter(NULL); | 1923 EventRewriter rewriter(NULL); |
| 1238 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1924 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1239 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 1925 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
| 1240 rewriter.set_pref_service_for_testing(&prefs); | 1926 rewriter.set_pref_service_for_testing(&prefs); |
| 1241 | 1927 |
| 1242 KeyTestCase tests[] = { | 1928 KeyTestCase tests[] = { |
| 1243 // Alt+Backspace -> Delete | 1929 // Alt+Backspace -> Delete |
| 1244 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1930 {KeyTestCase::TEST_ALL, |
| 1245 {ui::VKEY_BACK, ui::EF_ALT_DOWN}, | 1931 ui::ET_KEY_PRESSED, |
| 1246 {ui::VKEY_DELETE, ui::EF_NONE}}, | 1932 {ui::VKEY_BACK, |
| 1933 ui::DomCode::BACKSPACE, |
| 1934 ui::EF_ALT_DOWN, |
| 1935 ui::DomKey::BACKSPACE, |
| 1936 0}, |
| 1937 {ui::VKEY_DELETE, ui::DomCode::DEL, ui::EF_NONE, ui::DomKey::DEL, 0}}, |
| 1247 // Control+Alt+Backspace -> Control+Delete | 1938 // Control+Alt+Backspace -> Control+Delete |
| 1248 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1939 {KeyTestCase::TEST_ALL, |
| 1249 {ui::VKEY_BACK, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, | 1940 ui::ET_KEY_PRESSED, |
| 1250 {ui::VKEY_DELETE, ui::EF_CONTROL_DOWN}}, | 1941 {ui::VKEY_BACK, |
| 1942 ui::DomCode::BACKSPACE, |
| 1943 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
| 1944 ui::DomKey::BACKSPACE, |
| 1945 0}, |
| 1946 {ui::VKEY_DELETE, |
| 1947 ui::DomCode::DEL, |
| 1948 ui::EF_CONTROL_DOWN, |
| 1949 ui::DomKey::DEL, |
| 1950 0}}, |
| 1251 // Search+Alt+Backspace -> Alt+Backspace | 1951 // Search+Alt+Backspace -> Alt+Backspace |
| 1252 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1952 {KeyTestCase::TEST_ALL, |
| 1253 {ui::VKEY_BACK, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, | 1953 ui::ET_KEY_PRESSED, |
| 1254 {ui::VKEY_BACK, ui::EF_ALT_DOWN}}, | 1954 {ui::VKEY_BACK, |
| 1955 ui::DomCode::BACKSPACE, |
| 1956 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, |
| 1957 ui::DomKey::BACKSPACE, |
| 1958 0}, |
| 1959 {ui::VKEY_BACK, |
| 1960 ui::DomCode::BACKSPACE, |
| 1961 ui::EF_ALT_DOWN, |
| 1962 ui::DomKey::BACKSPACE, |
| 1963 0}}, |
| 1255 // Search+Control+Alt+Backspace -> Control+Alt+Backspace | 1964 // Search+Control+Alt+Backspace -> Control+Alt+Backspace |
| 1256 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1965 {KeyTestCase::TEST_ALL, |
| 1257 {ui::VKEY_BACK, | 1966 ui::ET_KEY_PRESSED, |
| 1258 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, | 1967 {ui::VKEY_BACK, |
| 1259 {ui::VKEY_BACK, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}}, | 1968 ui::DomCode::BACKSPACE, |
| 1969 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
| 1970 ui::DomKey::BACKSPACE, |
| 1971 0}, |
| 1972 {ui::VKEY_BACK, |
| 1973 ui::DomCode::BACKSPACE, |
| 1974 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
| 1975 ui::DomKey::BACKSPACE, |
| 1976 0}}, |
| 1260 // Alt+Up -> Prior | 1977 // Alt+Up -> Prior |
| 1261 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1978 {KeyTestCase::TEST_ALL, |
| 1262 {ui::VKEY_UP, ui::EF_ALT_DOWN}, | 1979 ui::ET_KEY_PRESSED, |
| 1263 {ui::VKEY_PRIOR, ui::EF_NONE}}, | 1980 {ui::VKEY_UP, |
| 1981 ui::DomCode::ARROW_UP, |
| 1982 ui::EF_ALT_DOWN, |
| 1983 ui::DomKey::ARROW_UP, |
| 1984 0}, |
| 1985 {ui::VKEY_PRIOR, |
| 1986 ui::DomCode::PAGE_UP, |
| 1987 ui::EF_NONE, |
| 1988 ui::DomKey::PAGE_UP, |
| 1989 0}}, |
| 1264 // Alt+Down -> Next | 1990 // Alt+Down -> Next |
| 1265 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1991 {KeyTestCase::TEST_ALL, |
| 1266 {ui::VKEY_DOWN, ui::EF_ALT_DOWN}, | 1992 ui::ET_KEY_PRESSED, |
| 1267 {ui::VKEY_NEXT, ui::EF_NONE}}, | 1993 {ui::VKEY_DOWN, |
| 1994 ui::DomCode::ARROW_DOWN, |
| 1995 ui::EF_ALT_DOWN, |
| 1996 ui::DomKey::ARROW_DOWN, |
| 1997 0}, |
| 1998 {ui::VKEY_NEXT, |
| 1999 ui::DomCode::PAGE_DOWN, |
| 2000 ui::EF_NONE, |
| 2001 ui::DomKey::PAGE_DOWN, |
| 2002 0}}, |
| 1268 // Ctrl+Alt+Up -> Home | 2003 // Ctrl+Alt+Up -> Home |
| 1269 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 2004 {KeyTestCase::TEST_ALL, |
| 1270 {ui::VKEY_UP, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, | 2005 ui::ET_KEY_PRESSED, |
| 1271 {ui::VKEY_HOME, ui::EF_NONE}}, | 2006 {ui::VKEY_UP, |
| 2007 ui::DomCode::ARROW_UP, |
| 2008 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
| 2009 ui::DomKey::ARROW_UP, |
| 2010 0}, |
| 2011 {ui::VKEY_HOME, ui::DomCode::HOME, ui::EF_NONE, ui::DomKey::HOME, 0}}, |
| 1272 // Ctrl+Alt+Down -> End | 2012 // Ctrl+Alt+Down -> End |
| 1273 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 2013 {KeyTestCase::TEST_ALL, |
| 1274 {ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, | 2014 ui::ET_KEY_PRESSED, |
| 1275 {ui::VKEY_END, ui::EF_NONE}}, | 2015 {ui::VKEY_DOWN, |
| 2016 ui::DomCode::ARROW_DOWN, |
| 2017 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
| 2018 ui::DomKey::ARROW_DOWN, |
| 2019 0}, |
| 2020 {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END, 0}}, |
| 1276 | 2021 |
| 1277 // Search+Alt+Up -> Alt+Up | 2022 // Search+Alt+Up -> Alt+Up |
| 1278 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 2023 {KeyTestCase::TEST_ALL, |
| 1279 {ui::VKEY_UP, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, | 2024 ui::ET_KEY_PRESSED, |
| 1280 {ui::VKEY_UP, ui::EF_ALT_DOWN}}, | 2025 {ui::VKEY_UP, |
| 2026 ui::DomCode::ARROW_UP, |
| 2027 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, |
| 2028 ui::DomKey::ARROW_UP, |
| 2029 0}, |
| 2030 {ui::VKEY_UP, |
| 2031 ui::DomCode::ARROW_UP, |
| 2032 ui::EF_ALT_DOWN, |
| 2033 ui::DomKey::ARROW_UP, |
| 2034 0}}, |
| 1281 // Search+Alt+Down -> Alt+Down | 2035 // Search+Alt+Down -> Alt+Down |
| 1282 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 2036 {KeyTestCase::TEST_ALL, |
| 1283 {ui::VKEY_DOWN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, | 2037 ui::ET_KEY_PRESSED, |
| 1284 {ui::VKEY_DOWN, ui::EF_ALT_DOWN}}, | 2038 {ui::VKEY_DOWN, |
| 2039 ui::DomCode::ARROW_DOWN, |
| 2040 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, |
| 2041 ui::DomKey::ARROW_DOWN, |
| 2042 0}, |
| 2043 {ui::VKEY_DOWN, |
| 2044 ui::DomCode::ARROW_DOWN, |
| 2045 ui::EF_ALT_DOWN, |
| 2046 ui::DomKey::ARROW_DOWN, |
| 2047 0}}, |
| 1285 // Search+Ctrl+Alt+Up -> Search+Ctrl+Alt+Up | 2048 // Search+Ctrl+Alt+Up -> Search+Ctrl+Alt+Up |
| 1286 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 2049 {KeyTestCase::TEST_ALL, |
| 1287 {ui::VKEY_UP, | 2050 ui::ET_KEY_PRESSED, |
| 1288 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, | 2051 {ui::VKEY_UP, |
| 1289 {ui::VKEY_UP, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}}, | 2052 ui::DomCode::ARROW_UP, |
| 2053 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
| 2054 ui::DomKey::ARROW_UP, |
| 2055 0}, |
| 2056 {ui::VKEY_UP, |
| 2057 ui::DomCode::ARROW_UP, |
| 2058 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
| 2059 ui::DomKey::ARROW_UP, |
| 2060 0}}, |
| 1290 // Search+Ctrl+Alt+Down -> Ctrl+Alt+Down | 2061 // Search+Ctrl+Alt+Down -> Ctrl+Alt+Down |
| 1291 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 2062 {KeyTestCase::TEST_ALL, |
| 1292 {ui::VKEY_DOWN, | 2063 ui::ET_KEY_PRESSED, |
| 1293 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, | 2064 {ui::VKEY_DOWN, |
| 1294 {ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}}, | 2065 ui::DomCode::ARROW_DOWN, |
| 2066 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
| 2067 ui::DomKey::ARROW_DOWN, |
| 2068 0}, |
| 2069 {ui::VKEY_DOWN, |
| 2070 ui::DomCode::ARROW_DOWN, |
| 2071 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
| 2072 ui::DomKey::ARROW_DOWN, |
| 2073 0}}, |
| 1295 | 2074 |
| 1296 // Period -> Period | 2075 // Period -> Period |
| 1297 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 2076 {KeyTestCase::TEST_ALL, |
| 1298 {ui::VKEY_OEM_PERIOD, ui::EF_NONE}, | 2077 ui::ET_KEY_PRESSED, |
| 1299 {ui::VKEY_OEM_PERIOD, ui::EF_NONE}}, | 2078 {ui::VKEY_OEM_PERIOD, |
| 2079 ui::DomCode::PERIOD, |
| 2080 ui::EF_NONE, |
| 2081 ui::DomKey::CHARACTER, |
| 2082 '.'}, |
| 2083 {ui::VKEY_OEM_PERIOD, |
| 2084 ui::DomCode::PERIOD, |
| 2085 ui::EF_NONE, |
| 2086 ui::DomKey::CHARACTER, |
| 2087 '.'}}, |
| 1300 | 2088 |
| 1301 // Search+Backspace -> Delete | 2089 // Search+Backspace -> Delete |
| 1302 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 2090 {KeyTestCase::TEST_ALL, |
| 1303 {ui::VKEY_BACK, ui::EF_COMMAND_DOWN}, | 2091 ui::ET_KEY_PRESSED, |
| 1304 {ui::VKEY_DELETE, ui::EF_NONE}}, | 2092 {ui::VKEY_BACK, |
| 2093 ui::DomCode::BACKSPACE, |
| 2094 ui::EF_COMMAND_DOWN, |
| 2095 ui::DomKey::BACKSPACE, |
| 2096 0}, |
| 2097 {ui::VKEY_DELETE, ui::DomCode::DEL, ui::EF_NONE, ui::DomKey::DEL, 0}}, |
| 1305 // Search+Up -> Prior | 2098 // Search+Up -> Prior |
| 1306 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 2099 {KeyTestCase::TEST_ALL, |
| 1307 {ui::VKEY_UP, ui::EF_COMMAND_DOWN}, | 2100 ui::ET_KEY_PRESSED, |
| 1308 {ui::VKEY_PRIOR, ui::EF_NONE}}, | 2101 {ui::VKEY_UP, |
| 2102 ui::DomCode::ARROW_UP, |
| 2103 ui::EF_COMMAND_DOWN, |
| 2104 ui::DomKey::ARROW_UP, |
| 2105 0}, |
| 2106 {ui::VKEY_PRIOR, |
| 2107 ui::DomCode::PAGE_UP, |
| 2108 ui::EF_NONE, |
| 2109 ui::DomKey::PAGE_UP, |
| 2110 0}}, |
| 1309 // Search+Down -> Next | 2111 // Search+Down -> Next |
| 1310 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 2112 {KeyTestCase::TEST_ALL, |
| 1311 {ui::VKEY_DOWN, ui::EF_COMMAND_DOWN}, | 2113 ui::ET_KEY_PRESSED, |
| 1312 {ui::VKEY_NEXT, ui::EF_NONE}}, | 2114 {ui::VKEY_DOWN, |
| 2115 ui::DomCode::ARROW_DOWN, |
| 2116 ui::EF_COMMAND_DOWN, |
| 2117 ui::DomKey::ARROW_DOWN, |
| 2118 0}, |
| 2119 {ui::VKEY_NEXT, |
| 2120 ui::DomCode::PAGE_DOWN, |
| 2121 ui::EF_NONE, |
| 2122 ui::DomKey::PAGE_DOWN, |
| 2123 0}}, |
| 1313 // Search+Left -> Home | 2124 // Search+Left -> Home |
| 1314 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 2125 {KeyTestCase::TEST_ALL, |
| 1315 {ui::VKEY_LEFT, ui::EF_COMMAND_DOWN}, | 2126 ui::ET_KEY_PRESSED, |
| 1316 {ui::VKEY_HOME, ui::EF_NONE}}, | 2127 {ui::VKEY_LEFT, |
| 2128 ui::DomCode::ARROW_LEFT, |
| 2129 ui::EF_COMMAND_DOWN, |
| 2130 ui::DomKey::ARROW_LEFT, |
| 2131 0}, |
| 2132 {ui::VKEY_HOME, ui::DomCode::HOME, ui::EF_NONE, ui::DomKey::HOME, 0}}, |
| 1317 // Control+Search+Left -> Home | 2133 // Control+Search+Left -> Home |
| 1318 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 2134 {KeyTestCase::TEST_ALL, |
| 1319 {ui::VKEY_LEFT, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN}, | 2135 ui::ET_KEY_PRESSED, |
| 1320 {ui::VKEY_HOME, ui::EF_CONTROL_DOWN}}, | 2136 {ui::VKEY_LEFT, |
| 2137 ui::DomCode::ARROW_LEFT, |
| 2138 ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, |
| 2139 ui::DomKey::ARROW_LEFT, |
| 2140 0}, |
| 2141 {ui::VKEY_HOME, |
| 2142 ui::DomCode::HOME, |
| 2143 ui::EF_CONTROL_DOWN, |
| 2144 ui::DomKey::HOME, |
| 2145 0}}, |
| 1321 // Search+Right -> End | 2146 // Search+Right -> End |
| 1322 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 2147 {KeyTestCase::TEST_ALL, |
| 1323 {ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN}, | 2148 ui::ET_KEY_PRESSED, |
| 1324 {ui::VKEY_END, ui::EF_NONE}}, | 2149 {ui::VKEY_RIGHT, |
| 2150 ui::DomCode::ARROW_RIGHT, |
| 2151 ui::EF_COMMAND_DOWN, |
| 2152 ui::DomKey::ARROW_RIGHT, |
| 2153 0}, |
| 2154 {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END, 0}}, |
| 1325 // Control+Search+Right -> End | 2155 // Control+Search+Right -> End |
| 1326 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 2156 {KeyTestCase::TEST_ALL, |
| 1327 {ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN}, | 2157 ui::ET_KEY_PRESSED, |
| 1328 {ui::VKEY_END, ui::EF_CONTROL_DOWN}}, | 2158 {ui::VKEY_RIGHT, |
| 2159 ui::DomCode::ARROW_RIGHT, |
| 2160 ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, |
| 2161 ui::DomKey::ARROW_RIGHT, |
| 2162 0}, |
| 2163 {ui::VKEY_END, |
| 2164 ui::DomCode::END, |
| 2165 ui::EF_CONTROL_DOWN, |
| 2166 ui::DomKey::END, |
| 2167 0}}, |
| 1329 // Search+Period -> Insert | 2168 // Search+Period -> Insert |
| 1330 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 2169 {KeyTestCase::TEST_ALL, |
| 1331 {ui::VKEY_OEM_PERIOD, ui::EF_COMMAND_DOWN}, | 2170 ui::ET_KEY_PRESSED, |
| 1332 {ui::VKEY_INSERT, ui::EF_NONE}}, | 2171 {ui::VKEY_OEM_PERIOD, |
| 2172 ui::DomCode::PERIOD, |
| 2173 ui::EF_COMMAND_DOWN, |
| 2174 ui::DomKey::CHARACTER, |
| 2175 '.'}, |
| 2176 {ui::VKEY_INSERT, |
| 2177 ui::DomCode::INSERT, |
| 2178 ui::EF_NONE, |
| 2179 ui::DomKey::INSERT, |
| 2180 0}}, |
| 1333 // Control+Search+Period -> Control+Insert | 2181 // Control+Search+Period -> Control+Insert |
| 1334 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 2182 {KeyTestCase::TEST_ALL, |
| 1335 {ui::VKEY_OEM_PERIOD, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN}, | 2183 ui::ET_KEY_PRESSED, |
| 1336 {ui::VKEY_INSERT, ui::EF_CONTROL_DOWN}}}; | 2184 {ui::VKEY_OEM_PERIOD, |
| 2185 ui::DomCode::PERIOD, |
| 2186 ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, |
| 2187 ui::DomKey::CHARACTER, |
| 2188 '.'}, |
| 2189 {ui::VKEY_INSERT, |
| 2190 ui::DomCode::INSERT, |
| 2191 ui::EF_CONTROL_DOWN, |
| 2192 ui::DomKey::INSERT, |
| 2193 0}}}; |
| 1337 | 2194 |
| 1338 for (size_t i = 0; i < arraysize(tests); ++i) { | 2195 for (size_t i = 0; i < arraysize(tests); ++i) { |
| 1339 SCOPED_TRACE(i); | 2196 SCOPED_TRACE(i); |
| 1340 CheckKeyTestCase(&rewriter, tests[i]); | 2197 CheckKeyTestCase(&rewriter, tests[i]); |
| 1341 } | 2198 } |
| 1342 } | 2199 } |
| 1343 | 2200 |
| 1344 TEST_F(EventRewriterTest, TestRewriteFunctionKeys) { | 2201 TEST_F(EventRewriterTest, TestRewriteFunctionKeys) { |
| 1345 TestingPrefServiceSyncable prefs; | 2202 TestingPrefServiceSyncable prefs; |
| 1346 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 2203 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 1347 EventRewriter rewriter(NULL); | 2204 EventRewriter rewriter(NULL); |
| 1348 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 2205 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1349 rewriter.set_pref_service_for_testing(&prefs); | 2206 rewriter.set_pref_service_for_testing(&prefs); |
| 1350 | 2207 |
| 1351 FunctionKeyTestCase tests[] = { | 2208 KeyTestCase tests[] = { |
| 1352 // F1 -> Back | 2209 // F1 -> Back |
| 1353 {ui::ET_KEY_PRESSED, | 2210 {KeyTestCase::TEST_ALL, |
| 1354 {ui::VKEY_F1, ui::EF_NONE}, | 2211 ui::ET_KEY_PRESSED, |
| 1355 {ui::VKEY_BROWSER_BACK, ui::EF_NONE}, | 2212 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1, 0}, |
| 1356 {ui::VKEY_BROWSER_BACK, ui::EF_FUNCTION_KEY}}, | 2213 {ui::VKEY_BROWSER_BACK, |
| 1357 {ui::ET_KEY_PRESSED, | 2214 ui::DomCode::BROWSER_BACK, |
| 1358 {ui::VKEY_F1, ui::EF_CONTROL_DOWN}, | 2215 ui::EF_NONE, |
| 1359 {ui::VKEY_BROWSER_BACK, ui::EF_CONTROL_DOWN}, | 2216 ui::DomKey::BROWSER_BACK, |
| 1360 {ui::VKEY_BROWSER_BACK, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, | 2217 0}}, |
| 1361 {ui::ET_KEY_PRESSED, | 2218 {KeyTestCase::TEST_ALL, |
| 1362 {ui::VKEY_F1, ui::EF_ALT_DOWN}, | 2219 ui::ET_KEY_PRESSED, |
| 1363 {ui::VKEY_BROWSER_BACK, ui::EF_ALT_DOWN}, | 2220 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_CONTROL_DOWN, ui::DomKey::F1, 0}, |
| 1364 {ui::VKEY_BROWSER_BACK, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, | 2221 {ui::VKEY_BROWSER_BACK, |
| 2222 ui::DomCode::BROWSER_BACK, |
| 2223 ui::EF_CONTROL_DOWN, |
| 2224 ui::DomKey::BROWSER_BACK, |
| 2225 0}}, |
| 2226 {KeyTestCase::TEST_ALL, |
| 2227 ui::ET_KEY_PRESSED, |
| 2228 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_ALT_DOWN, ui::DomKey::F1, 0}, |
| 2229 {ui::VKEY_BROWSER_BACK, |
| 2230 ui::DomCode::BROWSER_BACK, |
| 2231 ui::EF_ALT_DOWN, |
| 2232 ui::DomKey::BROWSER_BACK, |
| 2233 0}}, |
| 1365 // F2 -> Forward | 2234 // F2 -> Forward |
| 1366 {ui::ET_KEY_PRESSED, | 2235 {KeyTestCase::TEST_ALL, |
| 1367 {ui::VKEY_F2, ui::EF_NONE}, | 2236 ui::ET_KEY_PRESSED, |
| 1368 {ui::VKEY_BROWSER_FORWARD, ui::EF_NONE}, | 2237 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2, 0}, |
| 1369 {ui::VKEY_BROWSER_FORWARD, ui::EF_FUNCTION_KEY}}, | 2238 {ui::VKEY_BROWSER_FORWARD, |
| 1370 {ui::ET_KEY_PRESSED, | 2239 ui::DomCode::BROWSER_FORWARD, |
| 1371 {ui::VKEY_F2, ui::EF_CONTROL_DOWN}, | 2240 ui::EF_NONE, |
| 1372 {ui::VKEY_BROWSER_FORWARD, ui::EF_CONTROL_DOWN}, | 2241 ui::DomKey::BROWSER_FORWARD, |
| 1373 {ui::VKEY_BROWSER_FORWARD, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, | 2242 0}}, |
| 1374 {ui::ET_KEY_PRESSED, | 2243 {KeyTestCase::TEST_ALL, |
| 1375 {ui::VKEY_F2, ui::EF_ALT_DOWN}, | 2244 ui::ET_KEY_PRESSED, |
| 1376 {ui::VKEY_BROWSER_FORWARD, ui::EF_ALT_DOWN}, | 2245 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_CONTROL_DOWN, ui::DomKey::F2, 0}, |
| 1377 {ui::VKEY_BROWSER_FORWARD, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, | 2246 {ui::VKEY_BROWSER_FORWARD, |
| 2247 ui::DomCode::BROWSER_FORWARD, |
| 2248 ui::EF_CONTROL_DOWN, |
| 2249 ui::DomKey::BROWSER_FORWARD, |
| 2250 0}}, |
| 2251 {KeyTestCase::TEST_ALL, |
| 2252 ui::ET_KEY_PRESSED, |
| 2253 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_ALT_DOWN, ui::DomKey::F2, 0}, |
| 2254 {ui::VKEY_BROWSER_FORWARD, |
| 2255 ui::DomCode::BROWSER_FORWARD, |
| 2256 ui::EF_ALT_DOWN, |
| 2257 ui::DomKey::BROWSER_FORWARD, |
| 2258 0}}, |
| 1378 // F3 -> Refresh | 2259 // F3 -> Refresh |
| 1379 {ui::ET_KEY_PRESSED, | 2260 {KeyTestCase::TEST_ALL, |
| 1380 {ui::VKEY_F3, ui::EF_NONE}, | 2261 ui::ET_KEY_PRESSED, |
| 1381 {ui::VKEY_BROWSER_REFRESH, ui::EF_NONE}, | 2262 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3, 0}, |
| 1382 {ui::VKEY_BROWSER_REFRESH, ui::EF_FUNCTION_KEY}}, | 2263 {ui::VKEY_BROWSER_REFRESH, |
| 1383 {ui::ET_KEY_PRESSED, | 2264 ui::DomCode::BROWSER_REFRESH, |
| 1384 {ui::VKEY_F3, ui::EF_CONTROL_DOWN}, | 2265 ui::EF_NONE, |
| 1385 {ui::VKEY_BROWSER_REFRESH, ui::EF_CONTROL_DOWN}, | 2266 ui::DomKey::BROWSER_REFRESH, |
| 1386 {ui::VKEY_BROWSER_REFRESH, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, | 2267 0}}, |
| 1387 {ui::ET_KEY_PRESSED, | 2268 {KeyTestCase::TEST_ALL, |
| 1388 {ui::VKEY_F3, ui::EF_ALT_DOWN}, | 2269 ui::ET_KEY_PRESSED, |
| 1389 {ui::VKEY_BROWSER_REFRESH, ui::EF_ALT_DOWN}, | 2270 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_CONTROL_DOWN, ui::DomKey::F3, 0}, |
| 1390 {ui::VKEY_BROWSER_REFRESH, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, | 2271 {ui::VKEY_BROWSER_REFRESH, |
| 2272 ui::DomCode::BROWSER_REFRESH, |
| 2273 ui::EF_CONTROL_DOWN, |
| 2274 ui::DomKey::BROWSER_REFRESH, |
| 2275 0}}, |
| 2276 {KeyTestCase::TEST_ALL, |
| 2277 ui::ET_KEY_PRESSED, |
| 2278 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_ALT_DOWN, ui::DomKey::F3, 0}, |
| 2279 {ui::VKEY_BROWSER_REFRESH, |
| 2280 ui::DomCode::BROWSER_REFRESH, |
| 2281 ui::EF_ALT_DOWN, |
| 2282 ui::DomKey::BROWSER_REFRESH, |
| 2283 0}}, |
| 1391 // F4 -> Launch App 2 | 2284 // F4 -> Launch App 2 |
| 1392 {ui::ET_KEY_PRESSED, | 2285 {KeyTestCase::TEST_ALL, |
| 1393 {ui::VKEY_F4, ui::EF_NONE}, | 2286 ui::ET_KEY_PRESSED, |
| 1394 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_NONE}, | 2287 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4, 0}, |
| 1395 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_FUNCTION_KEY}}, | 2288 {ui::VKEY_MEDIA_LAUNCH_APP2, |
| 1396 {ui::ET_KEY_PRESSED, | 2289 ui::DomCode::ZOOM_TOGGLE, |
| 1397 {ui::VKEY_F4, ui::EF_CONTROL_DOWN}, | 2290 ui::EF_NONE, |
| 1398 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_CONTROL_DOWN}, | 2291 ui::DomKey::ZOOM_TOGGLE, |
| 1399 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, | 2292 0}}, |
| 1400 {ui::ET_KEY_PRESSED, | 2293 {KeyTestCase::TEST_ALL, |
| 1401 {ui::VKEY_F4, ui::EF_ALT_DOWN}, | 2294 ui::ET_KEY_PRESSED, |
| 1402 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_ALT_DOWN}, | 2295 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_CONTROL_DOWN, ui::DomKey::F4, 0}, |
| 1403 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, | 2296 {ui::VKEY_MEDIA_LAUNCH_APP2, |
| 2297 ui::DomCode::ZOOM_TOGGLE, |
| 2298 ui::EF_CONTROL_DOWN, |
| 2299 ui::DomKey::ZOOM_TOGGLE, |
| 2300 0}}, |
| 2301 {KeyTestCase::TEST_ALL, |
| 2302 ui::ET_KEY_PRESSED, |
| 2303 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_ALT_DOWN, ui::DomKey::F4, 0}, |
| 2304 {ui::VKEY_MEDIA_LAUNCH_APP2, |
| 2305 ui::DomCode::ZOOM_TOGGLE, |
| 2306 ui::EF_ALT_DOWN, |
| 2307 ui::DomKey::ZOOM_TOGGLE, |
| 2308 0}}, |
| 1404 // F5 -> Launch App 1 | 2309 // F5 -> Launch App 1 |
| 1405 {ui::ET_KEY_PRESSED, | 2310 {KeyTestCase::TEST_ALL, |
| 1406 {ui::VKEY_F5, ui::EF_NONE}, | 2311 ui::ET_KEY_PRESSED, |
| 1407 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_NONE}, | 2312 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5, 0}, |
| 1408 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_FUNCTION_KEY}}, | 2313 {ui::VKEY_MEDIA_LAUNCH_APP1, |
| 1409 {ui::ET_KEY_PRESSED, | 2314 ui::DomCode::SELECT_TASK, |
| 1410 {ui::VKEY_F5, ui::EF_CONTROL_DOWN}, | 2315 ui::EF_NONE, |
| 1411 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_CONTROL_DOWN}, | 2316 ui::DomKey::LAUNCH_MY_COMPUTER, |
| 1412 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, | 2317 0}}, |
| 1413 {ui::ET_KEY_PRESSED, | 2318 {KeyTestCase::TEST_ALL, |
| 1414 {ui::VKEY_F5, ui::EF_ALT_DOWN}, | 2319 ui::ET_KEY_PRESSED, |
| 1415 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_ALT_DOWN}, | 2320 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_CONTROL_DOWN, ui::DomKey::F5, 0}, |
| 1416 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, | 2321 {ui::VKEY_MEDIA_LAUNCH_APP1, |
| 2322 ui::DomCode::SELECT_TASK, |
| 2323 ui::EF_CONTROL_DOWN, |
| 2324 ui::DomKey::LAUNCH_MY_COMPUTER, |
| 2325 0}}, |
| 2326 {KeyTestCase::TEST_ALL, |
| 2327 ui::ET_KEY_PRESSED, |
| 2328 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_ALT_DOWN, ui::DomKey::F5, 0}, |
| 2329 {ui::VKEY_MEDIA_LAUNCH_APP1, |
| 2330 ui::DomCode::SELECT_TASK, |
| 2331 ui::EF_ALT_DOWN, |
| 2332 ui::DomKey::LAUNCH_MY_COMPUTER, |
| 2333 0}}, |
| 1417 // F6 -> Brightness down | 2334 // F6 -> Brightness down |
| 1418 {ui::ET_KEY_PRESSED, | 2335 {KeyTestCase::TEST_ALL, |
| 1419 {ui::VKEY_F6, ui::EF_NONE}, | 2336 ui::ET_KEY_PRESSED, |
| 1420 {ui::VKEY_BRIGHTNESS_DOWN, ui::EF_NONE}, | 2337 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6, 0}, |
| 1421 {ui::VKEY_BRIGHTNESS_DOWN, ui::EF_FUNCTION_KEY}}, | 2338 {ui::VKEY_BRIGHTNESS_DOWN, |
| 1422 {ui::ET_KEY_PRESSED, | 2339 ui::DomCode::BRIGHTNESS_DOWN, |
| 1423 {ui::VKEY_F6, ui::EF_CONTROL_DOWN}, | 2340 ui::EF_NONE, |
| 1424 {ui::VKEY_BRIGHTNESS_DOWN, ui::EF_CONTROL_DOWN}, | 2341 ui::DomKey::BRIGHTNESS_DOWN, |
| 1425 {ui::VKEY_BRIGHTNESS_DOWN, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, | 2342 0}}, |
| 1426 {ui::ET_KEY_PRESSED, | 2343 {KeyTestCase::TEST_ALL, |
| 1427 {ui::VKEY_F6, ui::EF_ALT_DOWN}, | 2344 ui::ET_KEY_PRESSED, |
| 1428 {ui::VKEY_BRIGHTNESS_DOWN, ui::EF_ALT_DOWN}, | 2345 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_CONTROL_DOWN, ui::DomKey::F6, 0}, |
| 1429 {ui::VKEY_BRIGHTNESS_DOWN, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, | 2346 {ui::VKEY_BRIGHTNESS_DOWN, |
| 2347 ui::DomCode::BRIGHTNESS_DOWN, |
| 2348 ui::EF_CONTROL_DOWN, |
| 2349 ui::DomKey::BRIGHTNESS_DOWN, |
| 2350 0}}, |
| 2351 {KeyTestCase::TEST_ALL, |
| 2352 ui::ET_KEY_PRESSED, |
| 2353 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_ALT_DOWN, ui::DomKey::F6, 0}, |
| 2354 {ui::VKEY_BRIGHTNESS_DOWN, |
| 2355 ui::DomCode::BRIGHTNESS_DOWN, |
| 2356 ui::EF_ALT_DOWN, |
| 2357 ui::DomKey::BRIGHTNESS_DOWN, |
| 2358 0}}, |
| 1430 // F7 -> Brightness up | 2359 // F7 -> Brightness up |
| 1431 {ui::ET_KEY_PRESSED, | 2360 {KeyTestCase::TEST_ALL, |
| 1432 {ui::VKEY_F7, ui::EF_NONE}, | 2361 ui::ET_KEY_PRESSED, |
| 1433 {ui::VKEY_BRIGHTNESS_UP, ui::EF_NONE}, | 2362 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7, 0}, |
| 1434 {ui::VKEY_BRIGHTNESS_UP, ui::EF_FUNCTION_KEY}}, | 2363 {ui::VKEY_BRIGHTNESS_UP, |
| 1435 {ui::ET_KEY_PRESSED, | 2364 ui::DomCode::BRIGHTNESS_UP, |
| 1436 {ui::VKEY_F7, ui::EF_CONTROL_DOWN}, | 2365 ui::EF_NONE, |
| 1437 {ui::VKEY_BRIGHTNESS_UP, ui::EF_CONTROL_DOWN}, | 2366 ui::DomKey::BRIGHTNESS_UP, |
| 1438 {ui::VKEY_BRIGHTNESS_UP, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, | 2367 0}}, |
| 1439 {ui::ET_KEY_PRESSED, | 2368 {KeyTestCase::TEST_ALL, |
| 1440 {ui::VKEY_F7, ui::EF_ALT_DOWN}, | 2369 ui::ET_KEY_PRESSED, |
| 1441 {ui::VKEY_BRIGHTNESS_UP, ui::EF_ALT_DOWN}, | 2370 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_CONTROL_DOWN, ui::DomKey::F7, 0}, |
| 1442 {ui::VKEY_BRIGHTNESS_UP, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, | 2371 {ui::VKEY_BRIGHTNESS_UP, |
| 2372 ui::DomCode::BRIGHTNESS_UP, |
| 2373 ui::EF_CONTROL_DOWN, |
| 2374 ui::DomKey::BRIGHTNESS_UP, |
| 2375 0}}, |
| 2376 {KeyTestCase::TEST_ALL, |
| 2377 ui::ET_KEY_PRESSED, |
| 2378 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_ALT_DOWN, ui::DomKey::F7, 0}, |
| 2379 {ui::VKEY_BRIGHTNESS_UP, |
| 2380 ui::DomCode::BRIGHTNESS_UP, |
| 2381 ui::EF_ALT_DOWN, |
| 2382 ui::DomKey::BRIGHTNESS_UP, |
| 2383 0}}, |
| 1443 // F8 -> Volume Mute | 2384 // F8 -> Volume Mute |
| 1444 {ui::ET_KEY_PRESSED, | 2385 {KeyTestCase::TEST_ALL, |
| 1445 {ui::VKEY_F8, ui::EF_NONE}, | 2386 ui::ET_KEY_PRESSED, |
| 1446 {ui::VKEY_VOLUME_MUTE, ui::EF_NONE}, | 2387 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8, 0}, |
| 1447 {ui::VKEY_VOLUME_MUTE, ui::EF_FUNCTION_KEY}}, | 2388 {ui::VKEY_VOLUME_MUTE, |
| 1448 {ui::ET_KEY_PRESSED, | 2389 ui::DomCode::VOLUME_MUTE, |
| 1449 {ui::VKEY_F8, ui::EF_CONTROL_DOWN}, | 2390 ui::EF_NONE, |
| 1450 {ui::VKEY_VOLUME_MUTE, ui::EF_CONTROL_DOWN}, | 2391 ui::DomKey::VOLUME_MUTE, |
| 1451 {ui::VKEY_VOLUME_MUTE, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, | 2392 0}}, |
| 1452 {ui::ET_KEY_PRESSED, | 2393 {KeyTestCase::TEST_ALL, |
| 1453 {ui::VKEY_F8, ui::EF_ALT_DOWN}, | 2394 ui::ET_KEY_PRESSED, |
| 1454 {ui::VKEY_VOLUME_MUTE, ui::EF_ALT_DOWN}, | 2395 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_CONTROL_DOWN, ui::DomKey::F8, 0}, |
| 1455 {ui::VKEY_VOLUME_MUTE, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, | 2396 {ui::VKEY_VOLUME_MUTE, |
| 2397 ui::DomCode::VOLUME_MUTE, |
| 2398 ui::EF_CONTROL_DOWN, |
| 2399 ui::DomKey::VOLUME_MUTE, |
| 2400 0}}, |
| 2401 {KeyTestCase::TEST_ALL, |
| 2402 ui::ET_KEY_PRESSED, |
| 2403 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_ALT_DOWN, ui::DomKey::F8, 0}, |
| 2404 {ui::VKEY_VOLUME_MUTE, |
| 2405 ui::DomCode::VOLUME_MUTE, |
| 2406 ui::EF_ALT_DOWN, |
| 2407 ui::DomKey::VOLUME_MUTE, |
| 2408 0}}, |
| 1456 // F9 -> Volume Down | 2409 // F9 -> Volume Down |
| 1457 {ui::ET_KEY_PRESSED, | 2410 {KeyTestCase::TEST_ALL, |
| 1458 {ui::VKEY_F9, ui::EF_NONE}, | 2411 ui::ET_KEY_PRESSED, |
| 1459 {ui::VKEY_VOLUME_DOWN, ui::EF_NONE}, | 2412 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9, 0}, |
| 1460 {ui::VKEY_VOLUME_DOWN, ui::EF_FUNCTION_KEY}}, | 2413 {ui::VKEY_VOLUME_DOWN, |
| 1461 {ui::ET_KEY_PRESSED, | 2414 ui::DomCode::VOLUME_DOWN, |
| 1462 {ui::VKEY_F9, ui::EF_CONTROL_DOWN}, | 2415 ui::EF_NONE, |
| 1463 {ui::VKEY_VOLUME_DOWN, ui::EF_CONTROL_DOWN}, | 2416 ui::DomKey::VOLUME_DOWN, |
| 1464 {ui::VKEY_VOLUME_DOWN, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, | 2417 0}}, |
| 1465 {ui::ET_KEY_PRESSED, | 2418 {KeyTestCase::TEST_ALL, |
| 1466 {ui::VKEY_F9, ui::EF_ALT_DOWN}, | 2419 ui::ET_KEY_PRESSED, |
| 1467 {ui::VKEY_VOLUME_DOWN, ui::EF_ALT_DOWN}, | 2420 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_CONTROL_DOWN, ui::DomKey::F9, 0}, |
| 1468 {ui::VKEY_VOLUME_DOWN, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, | 2421 {ui::VKEY_VOLUME_DOWN, |
| 2422 ui::DomCode::VOLUME_DOWN, |
| 2423 ui::EF_CONTROL_DOWN, |
| 2424 ui::DomKey::VOLUME_DOWN, |
| 2425 0}}, |
| 2426 {KeyTestCase::TEST_ALL, |
| 2427 ui::ET_KEY_PRESSED, |
| 2428 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_ALT_DOWN, ui::DomKey::F9, 0}, |
| 2429 {ui::VKEY_VOLUME_DOWN, |
| 2430 ui::DomCode::VOLUME_DOWN, |
| 2431 ui::EF_ALT_DOWN, |
| 2432 ui::DomKey::VOLUME_DOWN, |
| 2433 0}}, |
| 1469 // F10 -> Volume Up | 2434 // F10 -> Volume Up |
| 1470 {ui::ET_KEY_PRESSED, | 2435 {KeyTestCase::TEST_ALL, |
| 1471 {ui::VKEY_F10, ui::EF_NONE}, | 2436 ui::ET_KEY_PRESSED, |
| 1472 {ui::VKEY_VOLUME_UP, ui::EF_NONE}, | 2437 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10, 0}, |
| 1473 {ui::VKEY_VOLUME_UP, ui::EF_FUNCTION_KEY}}, | 2438 {ui::VKEY_VOLUME_UP, |
| 1474 {ui::ET_KEY_PRESSED, | 2439 ui::DomCode::VOLUME_UP, |
| 1475 {ui::VKEY_F10, ui::EF_CONTROL_DOWN}, | 2440 ui::EF_NONE, |
| 1476 {ui::VKEY_VOLUME_UP, ui::EF_CONTROL_DOWN}, | 2441 ui::DomKey::VOLUME_UP, |
| 1477 {ui::VKEY_VOLUME_UP, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, | 2442 0}}, |
| 1478 {ui::ET_KEY_PRESSED, | 2443 {KeyTestCase::TEST_ALL, |
| 1479 {ui::VKEY_F10, ui::EF_ALT_DOWN}, | 2444 ui::ET_KEY_PRESSED, |
| 1480 {ui::VKEY_VOLUME_UP, ui::EF_ALT_DOWN}, | 2445 {ui::VKEY_F10, |
| 1481 {ui::VKEY_VOLUME_UP, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, | 2446 ui::DomCode::F10, |
| 2447 ui::EF_CONTROL_DOWN, |
| 2448 ui::DomKey::F10, |
| 2449 0}, |
| 2450 {ui::VKEY_VOLUME_UP, |
| 2451 ui::DomCode::VOLUME_UP, |
| 2452 ui::EF_CONTROL_DOWN, |
| 2453 ui::DomKey::VOLUME_UP, |
| 2454 0}}, |
| 2455 {KeyTestCase::TEST_ALL, |
| 2456 ui::ET_KEY_PRESSED, |
| 2457 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_ALT_DOWN, ui::DomKey::F10, 0}, |
| 2458 {ui::VKEY_VOLUME_UP, |
| 2459 ui::DomCode::VOLUME_UP, |
| 2460 ui::EF_ALT_DOWN, |
| 2461 ui::DomKey::VOLUME_UP, |
| 2462 0}}, |
| 1482 // F11 -> F11 | 2463 // F11 -> F11 |
| 1483 {ui::ET_KEY_PRESSED, | 2464 {KeyTestCase::TEST_ALL, |
| 1484 {ui::VKEY_F11, ui::EF_NONE}, | 2465 ui::ET_KEY_PRESSED, |
| 1485 {ui::VKEY_F11, ui::EF_NONE}, | 2466 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11, 0}, |
| 1486 {ui::VKEY_F11, ui::EF_FUNCTION_KEY}}, | 2467 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11, 0}}, |
| 1487 {ui::ET_KEY_PRESSED, | 2468 {KeyTestCase::TEST_ALL, |
| 1488 {ui::VKEY_F11, ui::EF_CONTROL_DOWN}, | 2469 ui::ET_KEY_PRESSED, |
| 1489 {ui::VKEY_F11, ui::EF_CONTROL_DOWN}, | 2470 {ui::VKEY_F11, |
| 1490 {ui::VKEY_F11, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, | 2471 ui::DomCode::F11, |
| 1491 {ui::ET_KEY_PRESSED, | 2472 ui::EF_CONTROL_DOWN, |
| 1492 {ui::VKEY_F11, ui::EF_ALT_DOWN}, | 2473 ui::DomKey::F11, |
| 1493 {ui::VKEY_F11, ui::EF_ALT_DOWN}, | 2474 0}, |
| 1494 {ui::VKEY_F11, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, | 2475 {ui::VKEY_F11, |
| 2476 ui::DomCode::F11, |
| 2477 ui::EF_CONTROL_DOWN, |
| 2478 ui::DomKey::F11, |
| 2479 0}}, |
| 2480 {KeyTestCase::TEST_ALL, |
| 2481 ui::ET_KEY_PRESSED, |
| 2482 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_ALT_DOWN, ui::DomKey::F11, 0}, |
| 2483 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_ALT_DOWN, ui::DomKey::F11, 0}}, |
| 1495 // F12 -> F12 | 2484 // F12 -> F12 |
| 1496 {ui::ET_KEY_PRESSED, | 2485 {KeyTestCase::TEST_ALL, |
| 1497 {ui::VKEY_F12, ui::EF_NONE}, | 2486 ui::ET_KEY_PRESSED, |
| 1498 {ui::VKEY_F12, ui::EF_NONE}, | 2487 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12, 0}, |
| 1499 {ui::VKEY_F12, ui::EF_FUNCTION_KEY}}, | 2488 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12, 0}}, |
| 1500 {ui::ET_KEY_PRESSED, | 2489 {KeyTestCase::TEST_ALL, |
| 1501 {ui::VKEY_F12, ui::EF_CONTROL_DOWN}, | 2490 ui::ET_KEY_PRESSED, |
| 1502 {ui::VKEY_F12, ui::EF_CONTROL_DOWN}, | 2491 {ui::VKEY_F12, |
| 1503 {ui::VKEY_F12, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, | 2492 ui::DomCode::F12, |
| 1504 {ui::ET_KEY_PRESSED, | 2493 ui::EF_CONTROL_DOWN, |
| 1505 {ui::VKEY_F12, ui::EF_ALT_DOWN}, | 2494 ui::DomKey::F12, |
| 1506 {ui::VKEY_F12, ui::EF_ALT_DOWN}, | 2495 0}, |
| 1507 {ui::VKEY_F12, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, | 2496 {ui::VKEY_F12, |
| 2497 ui::DomCode::F12, |
| 2498 ui::EF_CONTROL_DOWN, |
| 2499 ui::DomKey::F12, |
| 2500 0}}, |
| 2501 {KeyTestCase::TEST_ALL, |
| 2502 ui::ET_KEY_PRESSED, |
| 2503 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_ALT_DOWN, ui::DomKey::F12, 0}, |
| 2504 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_ALT_DOWN, ui::DomKey::F12, 0}}, |
| 1508 | 2505 |
| 1509 // The number row should not be rewritten without Search key. | 2506 // The number row should not be rewritten without Search key. |
| 1510 {ui::ET_KEY_PRESSED, | 2507 {KeyTestCase::TEST_ALL, |
| 1511 {ui::VKEY_1, ui::EF_NONE}, | 2508 ui::ET_KEY_PRESSED, |
| 1512 {ui::VKEY_1, ui::EF_NONE}, | 2509 {ui::VKEY_1, |
| 1513 {ui::VKEY_1, ui::EF_NONE}}, | 2510 ui::DomCode::DIGIT1, |
| 1514 {ui::ET_KEY_PRESSED, | 2511 ui::EF_NONE, |
| 1515 {ui::VKEY_2, ui::EF_NONE}, | 2512 ui::DomKey::CHARACTER, |
| 1516 {ui::VKEY_2, ui::EF_NONE}, | 2513 '1'}, |
| 1517 {ui::VKEY_2, ui::EF_NONE}}, | 2514 {ui::VKEY_1, |
| 1518 {ui::ET_KEY_PRESSED, | 2515 ui::DomCode::DIGIT1, |
| 1519 {ui::VKEY_3, ui::EF_NONE}, | 2516 ui::EF_NONE, |
| 1520 {ui::VKEY_3, ui::EF_NONE}, | 2517 ui::DomKey::CHARACTER, |
| 1521 {ui::VKEY_3, ui::EF_NONE}}, | 2518 '1'}}, |
| 1522 {ui::ET_KEY_PRESSED, | 2519 {KeyTestCase::TEST_ALL, |
| 1523 {ui::VKEY_4, ui::EF_NONE}, | 2520 ui::ET_KEY_PRESSED, |
| 1524 {ui::VKEY_4, ui::EF_NONE}, | 2521 {ui::VKEY_2, |
| 1525 {ui::VKEY_4, ui::EF_NONE}}, | 2522 ui::DomCode::DIGIT2, |
| 1526 {ui::ET_KEY_PRESSED, | 2523 ui::EF_NONE, |
| 1527 {ui::VKEY_5, ui::EF_NONE}, | 2524 ui::DomKey::CHARACTER, |
| 1528 {ui::VKEY_5, ui::EF_NONE}, | 2525 '2'}, |
| 1529 {ui::VKEY_5, ui::EF_NONE}}, | 2526 {ui::VKEY_2, |
| 1530 {ui::ET_KEY_PRESSED, | 2527 ui::DomCode::DIGIT2, |
| 1531 {ui::VKEY_6, ui::EF_NONE}, | 2528 ui::EF_NONE, |
| 1532 {ui::VKEY_6, ui::EF_NONE}, | 2529 ui::DomKey::CHARACTER, |
| 1533 {ui::VKEY_6, ui::EF_NONE}}, | 2530 '2'}}, |
| 1534 {ui::ET_KEY_PRESSED, | 2531 {KeyTestCase::TEST_ALL, |
| 1535 {ui::VKEY_7, ui::EF_NONE}, | 2532 ui::ET_KEY_PRESSED, |
| 1536 {ui::VKEY_7, ui::EF_NONE}, | 2533 {ui::VKEY_3, |
| 1537 {ui::VKEY_7, ui::EF_NONE}}, | 2534 ui::DomCode::DIGIT3, |
| 1538 {ui::ET_KEY_PRESSED, | 2535 ui::EF_NONE, |
| 1539 {ui::VKEY_8, ui::EF_NONE}, | 2536 ui::DomKey::CHARACTER, |
| 1540 {ui::VKEY_8, ui::EF_NONE}, | 2537 '3'}, |
| 1541 {ui::VKEY_8, ui::EF_NONE}}, | 2538 {ui::VKEY_3, |
| 1542 {ui::ET_KEY_PRESSED, | 2539 ui::DomCode::DIGIT3, |
| 1543 {ui::VKEY_9, ui::EF_NONE}, | 2540 ui::EF_NONE, |
| 1544 {ui::VKEY_9, ui::EF_NONE}, | 2541 ui::DomKey::CHARACTER, |
| 1545 {ui::VKEY_9, ui::EF_NONE}}, | 2542 '3'}}, |
| 1546 {ui::ET_KEY_PRESSED, | 2543 {KeyTestCase::TEST_ALL, |
| 1547 {ui::VKEY_0, ui::EF_NONE}, | 2544 ui::ET_KEY_PRESSED, |
| 1548 {ui::VKEY_0, ui::EF_NONE}, | 2545 {ui::VKEY_4, |
| 1549 {ui::VKEY_0, ui::EF_NONE}}, | 2546 ui::DomCode::DIGIT4, |
| 1550 {ui::ET_KEY_PRESSED, | 2547 ui::EF_NONE, |
| 1551 {ui::VKEY_OEM_MINUS, ui::EF_NONE}, | 2548 ui::DomKey::CHARACTER, |
| 1552 {ui::VKEY_OEM_MINUS, ui::EF_NONE}, | 2549 '4'}, |
| 1553 {ui::VKEY_OEM_MINUS, ui::EF_NONE}}, | 2550 {ui::VKEY_4, |
| 1554 {ui::ET_KEY_PRESSED, | 2551 ui::DomCode::DIGIT4, |
| 1555 {ui::VKEY_OEM_PLUS, ui::EF_NONE}, | 2552 ui::EF_NONE, |
| 1556 {ui::VKEY_OEM_PLUS, ui::EF_NONE}, | 2553 ui::DomKey::CHARACTER, |
| 1557 {ui::VKEY_OEM_PLUS, ui::EF_NONE}}, | 2554 '4'}}, |
| 2555 {KeyTestCase::TEST_ALL, |
| 2556 ui::ET_KEY_PRESSED, |
| 2557 {ui::VKEY_5, |
| 2558 ui::DomCode::DIGIT5, |
| 2559 ui::EF_NONE, |
| 2560 ui::DomKey::CHARACTER, |
| 2561 '5'}, |
| 2562 {ui::VKEY_5, |
| 2563 ui::DomCode::DIGIT5, |
| 2564 ui::EF_NONE, |
| 2565 ui::DomKey::CHARACTER, |
| 2566 '5'}}, |
| 2567 {KeyTestCase::TEST_ALL, |
| 2568 ui::ET_KEY_PRESSED, |
| 2569 {ui::VKEY_6, |
| 2570 ui::DomCode::DIGIT6, |
| 2571 ui::EF_NONE, |
| 2572 ui::DomKey::CHARACTER, |
| 2573 '6'}, |
| 2574 {ui::VKEY_6, |
| 2575 ui::DomCode::DIGIT6, |
| 2576 ui::EF_NONE, |
| 2577 ui::DomKey::CHARACTER, |
| 2578 '6'}}, |
| 2579 {KeyTestCase::TEST_ALL, |
| 2580 ui::ET_KEY_PRESSED, |
| 2581 {ui::VKEY_7, |
| 2582 ui::DomCode::DIGIT7, |
| 2583 ui::EF_NONE, |
| 2584 ui::DomKey::CHARACTER, |
| 2585 '7'}, |
| 2586 {ui::VKEY_7, |
| 2587 ui::DomCode::DIGIT7, |
| 2588 ui::EF_NONE, |
| 2589 ui::DomKey::CHARACTER, |
| 2590 '7'}}, |
| 2591 {KeyTestCase::TEST_ALL, |
| 2592 ui::ET_KEY_PRESSED, |
| 2593 {ui::VKEY_8, |
| 2594 ui::DomCode::DIGIT8, |
| 2595 ui::EF_NONE, |
| 2596 ui::DomKey::CHARACTER, |
| 2597 '8'}, |
| 2598 {ui::VKEY_8, |
| 2599 ui::DomCode::DIGIT8, |
| 2600 ui::EF_NONE, |
| 2601 ui::DomKey::CHARACTER, |
| 2602 '8'}}, |
| 2603 {KeyTestCase::TEST_ALL, |
| 2604 ui::ET_KEY_PRESSED, |
| 2605 {ui::VKEY_9, |
| 2606 ui::DomCode::DIGIT9, |
| 2607 ui::EF_NONE, |
| 2608 ui::DomKey::CHARACTER, |
| 2609 '9'}, |
| 2610 {ui::VKEY_9, |
| 2611 ui::DomCode::DIGIT9, |
| 2612 ui::EF_NONE, |
| 2613 ui::DomKey::CHARACTER, |
| 2614 '9'}}, |
| 2615 {KeyTestCase::TEST_ALL, |
| 2616 ui::ET_KEY_PRESSED, |
| 2617 {ui::VKEY_0, |
| 2618 ui::DomCode::DIGIT0, |
| 2619 ui::EF_NONE, |
| 2620 ui::DomKey::CHARACTER, |
| 2621 '0'}, |
| 2622 {ui::VKEY_0, |
| 2623 ui::DomCode::DIGIT0, |
| 2624 ui::EF_NONE, |
| 2625 ui::DomKey::CHARACTER, |
| 2626 '0'}}, |
| 2627 {KeyTestCase::TEST_ALL, |
| 2628 ui::ET_KEY_PRESSED, |
| 2629 {ui::VKEY_OEM_MINUS, |
| 2630 ui::DomCode::MINUS, |
| 2631 ui::EF_NONE, |
| 2632 ui::DomKey::CHARACTER, |
| 2633 '-'}, |
| 2634 {ui::VKEY_OEM_MINUS, |
| 2635 ui::DomCode::MINUS, |
| 2636 ui::EF_NONE, |
| 2637 ui::DomKey::CHARACTER, |
| 2638 '-'}}, |
| 2639 {KeyTestCase::TEST_ALL, |
| 2640 ui::ET_KEY_PRESSED, |
| 2641 {ui::VKEY_OEM_PLUS, |
| 2642 ui::DomCode::EQUAL, |
| 2643 ui::EF_NONE, |
| 2644 ui::DomKey::CHARACTER, |
| 2645 '='}, |
| 2646 {ui::VKEY_OEM_PLUS, |
| 2647 ui::DomCode::EQUAL, |
| 2648 ui::EF_NONE, |
| 2649 ui::DomKey::CHARACTER, |
| 2650 '='}}, |
| 1558 | 2651 |
| 1559 // The number row should be rewritten as the F<number> row with Search | 2652 // The number row should be rewritten as the F<number> row with Search |
| 1560 // key. | 2653 // key. |
| 1561 {ui::ET_KEY_PRESSED, | 2654 {KeyTestCase::TEST_ALL, |
| 1562 {ui::VKEY_1, ui::EF_COMMAND_DOWN}, | 2655 ui::ET_KEY_PRESSED, |
| 1563 {ui::VKEY_F1, ui::EF_NONE}, | 2656 {ui::VKEY_1, |
| 1564 {ui::VKEY_F1, ui::EF_NONE}}, | 2657 ui::DomCode::DIGIT1, |
| 1565 {ui::ET_KEY_PRESSED, | 2658 ui::EF_COMMAND_DOWN, |
| 1566 {ui::VKEY_2, ui::EF_COMMAND_DOWN}, | 2659 ui::DomKey::CHARACTER, |
| 1567 {ui::VKEY_F2, ui::EF_NONE}, | 2660 '1'}, |
| 1568 {ui::VKEY_F2, ui::EF_NONE}}, | 2661 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1, 0}}, |
| 1569 {ui::ET_KEY_PRESSED, | 2662 {KeyTestCase::TEST_ALL, |
| 1570 {ui::VKEY_3, ui::EF_COMMAND_DOWN}, | 2663 ui::ET_KEY_PRESSED, |
| 1571 {ui::VKEY_F3, ui::EF_NONE}, | 2664 {ui::VKEY_2, |
| 1572 {ui::VKEY_F3, ui::EF_NONE}}, | 2665 ui::DomCode::DIGIT2, |
| 1573 {ui::ET_KEY_PRESSED, | 2666 ui::EF_COMMAND_DOWN, |
| 1574 {ui::VKEY_4, ui::EF_COMMAND_DOWN}, | 2667 ui::DomKey::CHARACTER, |
| 1575 {ui::VKEY_F4, ui::EF_NONE}, | 2668 '2'}, |
| 1576 {ui::VKEY_F4, ui::EF_NONE}}, | 2669 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2, 0}}, |
| 1577 {ui::ET_KEY_PRESSED, | 2670 {KeyTestCase::TEST_ALL, |
| 1578 {ui::VKEY_5, ui::EF_COMMAND_DOWN}, | 2671 ui::ET_KEY_PRESSED, |
| 1579 {ui::VKEY_F5, ui::EF_NONE}, | 2672 {ui::VKEY_3, |
| 1580 {ui::VKEY_F5, ui::EF_NONE}}, | 2673 ui::DomCode::DIGIT3, |
| 1581 {ui::ET_KEY_PRESSED, | 2674 ui::EF_COMMAND_DOWN, |
| 1582 {ui::VKEY_6, ui::EF_COMMAND_DOWN}, | 2675 ui::DomKey::CHARACTER, |
| 1583 {ui::VKEY_F6, ui::EF_NONE}, | 2676 '3'}, |
| 1584 {ui::VKEY_F6, ui::EF_NONE}}, | 2677 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3, 0}}, |
| 1585 {ui::ET_KEY_PRESSED, | 2678 {KeyTestCase::TEST_ALL, |
| 1586 {ui::VKEY_7, ui::EF_COMMAND_DOWN}, | 2679 ui::ET_KEY_PRESSED, |
| 1587 {ui::VKEY_F7, ui::EF_NONE}, | 2680 {ui::VKEY_4, |
| 1588 {ui::VKEY_F7, ui::EF_NONE}}, | 2681 ui::DomCode::DIGIT4, |
| 1589 {ui::ET_KEY_PRESSED, | 2682 ui::EF_COMMAND_DOWN, |
| 1590 {ui::VKEY_8, ui::EF_COMMAND_DOWN}, | 2683 ui::DomKey::CHARACTER, |
| 1591 {ui::VKEY_F8, ui::EF_NONE}, | 2684 '4'}, |
| 1592 {ui::VKEY_F8, ui::EF_NONE}}, | 2685 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4, 0}}, |
| 1593 {ui::ET_KEY_PRESSED, | 2686 {KeyTestCase::TEST_ALL, |
| 1594 {ui::VKEY_9, ui::EF_COMMAND_DOWN}, | 2687 ui::ET_KEY_PRESSED, |
| 1595 {ui::VKEY_F9, ui::EF_NONE}, | 2688 {ui::VKEY_5, |
| 1596 {ui::VKEY_F9, ui::EF_NONE}}, | 2689 ui::DomCode::DIGIT5, |
| 1597 {ui::ET_KEY_PRESSED, | 2690 ui::EF_COMMAND_DOWN, |
| 1598 {ui::VKEY_0, ui::EF_COMMAND_DOWN}, | 2691 ui::DomKey::CHARACTER, |
| 1599 {ui::VKEY_F10, ui::EF_NONE}, | 2692 '5'}, |
| 1600 {ui::VKEY_F10, ui::EF_NONE}}, | 2693 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5, 0}}, |
| 1601 {ui::ET_KEY_PRESSED, | 2694 {KeyTestCase::TEST_ALL, |
| 1602 {ui::VKEY_OEM_MINUS, ui::EF_COMMAND_DOWN}, | 2695 ui::ET_KEY_PRESSED, |
| 1603 {ui::VKEY_F11, ui::EF_NONE}, | 2696 {ui::VKEY_6, |
| 1604 {ui::VKEY_F11, ui::EF_NONE}}, | 2697 ui::DomCode::DIGIT6, |
| 1605 {ui::ET_KEY_PRESSED, | 2698 ui::EF_COMMAND_DOWN, |
| 1606 {ui::VKEY_OEM_PLUS, ui::EF_COMMAND_DOWN}, | 2699 ui::DomKey::CHARACTER, |
| 1607 {ui::VKEY_F12, ui::EF_NONE}, | 2700 '6'}, |
| 1608 {ui::VKEY_F12, ui::EF_NONE}}, | 2701 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6, 0}}, |
| 2702 {KeyTestCase::TEST_ALL, |
| 2703 ui::ET_KEY_PRESSED, |
| 2704 {ui::VKEY_7, |
| 2705 ui::DomCode::DIGIT7, |
| 2706 ui::EF_COMMAND_DOWN, |
| 2707 ui::DomKey::CHARACTER, |
| 2708 '7'}, |
| 2709 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7, 0}}, |
| 2710 {KeyTestCase::TEST_ALL, |
| 2711 ui::ET_KEY_PRESSED, |
| 2712 {ui::VKEY_8, |
| 2713 ui::DomCode::DIGIT8, |
| 2714 ui::EF_COMMAND_DOWN, |
| 2715 ui::DomKey::CHARACTER, |
| 2716 '8'}, |
| 2717 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8, 0}}, |
| 2718 {KeyTestCase::TEST_ALL, |
| 2719 ui::ET_KEY_PRESSED, |
| 2720 {ui::VKEY_9, |
| 2721 ui::DomCode::DIGIT9, |
| 2722 ui::EF_COMMAND_DOWN, |
| 2723 ui::DomKey::CHARACTER, |
| 2724 '9'}, |
| 2725 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9, 0}}, |
| 2726 {KeyTestCase::TEST_ALL, |
| 2727 ui::ET_KEY_PRESSED, |
| 2728 {ui::VKEY_0, |
| 2729 ui::DomCode::DIGIT0, |
| 2730 ui::EF_COMMAND_DOWN, |
| 2731 ui::DomKey::CHARACTER, |
| 2732 '0'}, |
| 2733 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10, 0}}, |
| 2734 {KeyTestCase::TEST_ALL, |
| 2735 ui::ET_KEY_PRESSED, |
| 2736 {ui::VKEY_OEM_MINUS, |
| 2737 ui::DomCode::MINUS, |
| 2738 ui::EF_COMMAND_DOWN, |
| 2739 ui::DomKey::CHARACTER, |
| 2740 '-'}, |
| 2741 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11, 0}}, |
| 2742 {KeyTestCase::TEST_ALL, |
| 2743 ui::ET_KEY_PRESSED, |
| 2744 {ui::VKEY_OEM_PLUS, |
| 2745 ui::DomCode::EQUAL, |
| 2746 ui::EF_COMMAND_DOWN, |
| 2747 ui::DomKey::CHARACTER, |
| 2748 '='}, |
| 2749 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12, 0}}, |
| 1609 | 2750 |
| 1610 // The function keys should not be rewritten with Search key pressed. | 2751 // The function keys should not be rewritten with Search key pressed. |
| 1611 {ui::ET_KEY_PRESSED, | 2752 {KeyTestCase::TEST_ALL, |
| 1612 {ui::VKEY_F1, ui::EF_COMMAND_DOWN}, | 2753 ui::ET_KEY_PRESSED, |
| 1613 {ui::VKEY_F1, ui::EF_NONE}, | 2754 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_COMMAND_DOWN, ui::DomKey::F1, 0}, |
| 1614 {ui::VKEY_F1, ui::EF_FUNCTION_KEY}}, | 2755 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1, 0}}, |
| 1615 {ui::ET_KEY_PRESSED, | 2756 {KeyTestCase::TEST_ALL, |
| 1616 {ui::VKEY_F2, ui::EF_COMMAND_DOWN}, | 2757 ui::ET_KEY_PRESSED, |
| 1617 {ui::VKEY_F2, ui::EF_NONE}, | 2758 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_COMMAND_DOWN, ui::DomKey::F2, 0}, |
| 1618 {ui::VKEY_F2, ui::EF_FUNCTION_KEY}}, | 2759 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2, 0}}, |
| 1619 {ui::ET_KEY_PRESSED, | 2760 {KeyTestCase::TEST_ALL, |
| 1620 {ui::VKEY_F3, ui::EF_COMMAND_DOWN}, | 2761 ui::ET_KEY_PRESSED, |
| 1621 {ui::VKEY_F3, ui::EF_NONE}, | 2762 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_COMMAND_DOWN, ui::DomKey::F3, 0}, |
| 1622 {ui::VKEY_F3, ui::EF_FUNCTION_KEY}}, | 2763 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3, 0}}, |
| 1623 {ui::ET_KEY_PRESSED, | 2764 {KeyTestCase::TEST_ALL, |
| 1624 {ui::VKEY_F4, ui::EF_COMMAND_DOWN}, | 2765 ui::ET_KEY_PRESSED, |
| 1625 {ui::VKEY_F4, ui::EF_NONE}, | 2766 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_COMMAND_DOWN, ui::DomKey::F4, 0}, |
| 1626 {ui::VKEY_F4, ui::EF_FUNCTION_KEY}}, | 2767 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4, 0}}, |
| 1627 {ui::ET_KEY_PRESSED, | 2768 {KeyTestCase::TEST_ALL, |
| 1628 {ui::VKEY_F5, ui::EF_COMMAND_DOWN}, | 2769 ui::ET_KEY_PRESSED, |
| 1629 {ui::VKEY_F5, ui::EF_NONE}, | 2770 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_COMMAND_DOWN, ui::DomKey::F5, 0}, |
| 1630 {ui::VKEY_F5, ui::EF_FUNCTION_KEY}}, | 2771 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5, 0}}, |
| 1631 {ui::ET_KEY_PRESSED, | 2772 {KeyTestCase::TEST_ALL, |
| 1632 {ui::VKEY_F6, ui::EF_COMMAND_DOWN}, | 2773 ui::ET_KEY_PRESSED, |
| 1633 {ui::VKEY_F6, ui::EF_NONE}, | 2774 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_COMMAND_DOWN, ui::DomKey::F6, 0}, |
| 1634 {ui::VKEY_F6, ui::EF_FUNCTION_KEY}}, | 2775 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6, 0}}, |
| 1635 {ui::ET_KEY_PRESSED, | 2776 {KeyTestCase::TEST_ALL, |
| 1636 {ui::VKEY_F7, ui::EF_COMMAND_DOWN}, | 2777 ui::ET_KEY_PRESSED, |
| 1637 {ui::VKEY_F7, ui::EF_NONE}, | 2778 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_COMMAND_DOWN, ui::DomKey::F7, 0}, |
| 1638 {ui::VKEY_F7, ui::EF_FUNCTION_KEY}}, | 2779 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7, 0}}, |
| 1639 {ui::ET_KEY_PRESSED, | 2780 {KeyTestCase::TEST_ALL, |
| 1640 {ui::VKEY_F8, ui::EF_COMMAND_DOWN}, | 2781 ui::ET_KEY_PRESSED, |
| 1641 {ui::VKEY_F8, ui::EF_NONE}, | 2782 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_COMMAND_DOWN, ui::DomKey::F8, 0}, |
| 1642 {ui::VKEY_F8, ui::EF_FUNCTION_KEY}}, | 2783 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8, 0}}, |
| 1643 {ui::ET_KEY_PRESSED, | 2784 {KeyTestCase::TEST_ALL, |
| 1644 {ui::VKEY_F9, ui::EF_COMMAND_DOWN}, | 2785 ui::ET_KEY_PRESSED, |
| 1645 {ui::VKEY_F9, ui::EF_NONE}, | 2786 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_COMMAND_DOWN, ui::DomKey::F9, 0}, |
| 1646 {ui::VKEY_F9, ui::EF_FUNCTION_KEY}}, | 2787 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9, 0}}, |
| 1647 {ui::ET_KEY_PRESSED, | 2788 {KeyTestCase::TEST_ALL, |
| 1648 {ui::VKEY_F10, ui::EF_COMMAND_DOWN}, | 2789 ui::ET_KEY_PRESSED, |
| 1649 {ui::VKEY_F10, ui::EF_NONE}, | 2790 {ui::VKEY_F10, |
| 1650 {ui::VKEY_F10, ui::EF_FUNCTION_KEY}}, | 2791 ui::DomCode::F10, |
| 1651 {ui::ET_KEY_PRESSED, | 2792 ui::EF_COMMAND_DOWN, |
| 1652 {ui::VKEY_F11, ui::EF_COMMAND_DOWN}, | 2793 ui::DomKey::F10, |
| 1653 {ui::VKEY_F11, ui::EF_NONE}, | 2794 0}, |
| 1654 {ui::VKEY_F11, ui::EF_FUNCTION_KEY}}, | 2795 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10, 0}}, |
| 1655 {ui::ET_KEY_PRESSED, | 2796 {KeyTestCase::TEST_ALL, |
| 1656 {ui::VKEY_F12, ui::EF_COMMAND_DOWN}, | 2797 ui::ET_KEY_PRESSED, |
| 1657 {ui::VKEY_F12, ui::EF_NONE}, | 2798 {ui::VKEY_F11, |
| 1658 {ui::VKEY_F12, ui::EF_FUNCTION_KEY}}, | 2799 ui::DomCode::F11, |
| 1659 }; | 2800 ui::EF_COMMAND_DOWN, |
| 2801 ui::DomKey::F11, |
| 2802 0}, |
| 2803 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11, 0}}, |
| 2804 {KeyTestCase::TEST_ALL, |
| 2805 ui::ET_KEY_PRESSED, |
| 2806 {ui::VKEY_F12, |
| 2807 ui::DomCode::F12, |
| 2808 ui::EF_COMMAND_DOWN, |
| 2809 ui::DomKey::F12, |
| 2810 0}, |
| 2811 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12, 0}}}; |
| 1660 | 2812 |
| 1661 for (size_t i = 0; i < arraysize(tests); ++i) { | 2813 for (size_t i = 0; i < arraysize(tests); ++i) { |
| 1662 SCOPED_TRACE(i); | 2814 SCOPED_TRACE(i); |
| 1663 CheckFunctionKeyTestCase(&rewriter, tests[i]); | 2815 CheckKeyTestCase(&rewriter, tests[i]); |
| 1664 } | 2816 } |
| 1665 } | 2817 } |
| 1666 | 2818 |
| 1667 TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) { | 2819 TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) { |
| 1668 const base::CommandLine original_cl(*base::CommandLine::ForCurrentProcess()); | 2820 const base::CommandLine original_cl(*base::CommandLine::ForCurrentProcess()); |
| 1669 | 2821 |
| 1670 // Remap Search to Control. | 2822 // Remap Search to Control. |
| 1671 TestingPrefServiceSyncable prefs; | 2823 TestingPrefServiceSyncable prefs; |
| 1672 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 2824 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 1673 IntegerPrefMember search; | 2825 IntegerPrefMember search; |
| 1674 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 2826 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
| 1675 search.SetValue(chromeos::input_method::kControlKey); | 2827 search.SetValue(chromeos::input_method::kControlKey); |
| 1676 | 2828 |
| 1677 EventRewriter rewriter(NULL); | 2829 EventRewriter rewriter(NULL); |
| 1678 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 2830 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1679 rewriter.set_pref_service_for_testing(&prefs); | 2831 rewriter.set_pref_service_for_testing(&prefs); |
| 1680 | 2832 |
| 1681 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 2833 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| 1682 chromeos::switches::kHasChromeOSKeyboard, ""); | 2834 chromeos::switches::kHasChromeOSKeyboard, ""); |
| 1683 | 2835 |
| 1684 KeyTestCase tests[] = { | 2836 KeyTestCase tests[] = { |
| 1685 // Alt+Search+Down -> End | 2837 // Alt+Search+Down -> End |
| 1686 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 2838 {KeyTestCase::TEST_ALL, |
| 1687 {ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, | 2839 ui::ET_KEY_PRESSED, |
| 1688 {ui::VKEY_END, ui::EF_NONE}}, | 2840 {ui::VKEY_DOWN, |
| 2841 ui::DomCode::ARROW_DOWN, |
| 2842 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 2843 ui::DomKey::ARROW_DOWN, |
| 2844 0}, |
| 2845 {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END, 0}}, |
| 1689 | 2846 |
| 1690 // Shift+Alt+Search+Down -> Shift+End | 2847 // Shift+Alt+Search+Down -> Shift+End |
| 1691 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 2848 {KeyTestCase::TEST_ALL, |
| 2849 ui::ET_KEY_PRESSED, |
| 1692 {ui::VKEY_DOWN, | 2850 {ui::VKEY_DOWN, |
| 1693 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, | 2851 ui::DomCode::ARROW_DOWN, |
| 1694 {ui::VKEY_END, ui::EF_SHIFT_DOWN}}, | 2852 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 2853 ui::DomKey::ARROW_DOWN, |
| 2854 0}, |
| 2855 {ui::VKEY_END, ui::DomCode::END, ui::EF_SHIFT_DOWN, ui::DomKey::END, 0}}, |
| 1695 }; | 2856 }; |
| 1696 | 2857 |
| 1697 for (size_t i = 0; i < arraysize(tests); ++i) { | 2858 for (size_t i = 0; i < arraysize(tests); ++i) { |
| 1698 SCOPED_TRACE(i); | 2859 SCOPED_TRACE(i); |
| 1699 CheckKeyTestCase(&rewriter, tests[i]); | 2860 CheckKeyTestCase(&rewriter, tests[i]); |
| 1700 } | 2861 } |
| 1701 | 2862 |
| 1702 *base::CommandLine::ForCurrentProcess() = original_cl; | 2863 *base::CommandLine::ForCurrentProcess() = original_cl; |
| 1703 } | 2864 } |
| 1704 | 2865 |
| 1705 TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) { | 2866 TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) { |
| 1706 // Remap Control to Alt. | 2867 // Remap Control to Alt. |
| 1707 TestingPrefServiceSyncable prefs; | 2868 TestingPrefServiceSyncable prefs; |
| 1708 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 2869 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 1709 IntegerPrefMember control; | 2870 IntegerPrefMember control; |
| 1710 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 2871 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
| 1711 control.SetValue(chromeos::input_method::kAltKey); | 2872 control.SetValue(chromeos::input_method::kAltKey); |
| 1712 | 2873 |
| 1713 EventRewriter rewriter(NULL); | 2874 EventRewriter rewriter(NULL); |
| 1714 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 2875 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1715 rewriter.set_pref_service_for_testing(&prefs); | 2876 rewriter.set_pref_service_for_testing(&prefs); |
| 1716 | 2877 |
| 1717 // Send left control press. | 2878 // Send left control press. |
| 1718 { | 2879 { |
| 1719 ui::KeyEvent keyevent( | 2880 ui::KeyEvent keyevent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, |
| 1720 ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, ui::EF_FINAL); | 2881 ui::DomCode::CONTROL_LEFT, ui::EF_FINAL, |
| 2882 ui::DomKey::CONTROL, 0, ui::EventTimeForNow()); |
| 1721 scoped_ptr<ui::Event> new_event; | 2883 scoped_ptr<ui::Event> new_event; |
| 1722 // Control should NOT be remapped to Alt if EF_FINAL is set. | 2884 // Control should NOT be remapped to Alt if EF_FINAL is set. |
| 1723 EXPECT_EQ(ui::EVENT_REWRITE_CONTINUE, | 2885 EXPECT_EQ(ui::EVENT_REWRITE_CONTINUE, |
| 1724 rewriter.RewriteEvent(keyevent, &new_event)); | 2886 rewriter.RewriteEvent(keyevent, &new_event)); |
| 1725 EXPECT_FALSE(new_event); | 2887 EXPECT_FALSE(new_event); |
| 1726 } | 2888 } |
| 1727 #if defined(USE_X11) | 2889 #if defined(USE_X11) |
| 1728 // Send left control press, using XI2 native events. | 2890 // Send left control press, using XI2 native events. |
| 1729 { | 2891 { |
| 1730 ui::ScopedXI2Event xev; | 2892 ui::ScopedXI2Event xev; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1750 IntegerPrefMember control; | 2912 IntegerPrefMember control; |
| 1751 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 2913 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
| 1752 control.SetValue(chromeos::input_method::kAltKey); | 2914 control.SetValue(chromeos::input_method::kAltKey); |
| 1753 | 2915 |
| 1754 EventRewriter rewriter(NULL); | 2916 EventRewriter rewriter(NULL); |
| 1755 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 2917 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1756 rewriter.set_pref_service_for_testing(&prefs); | 2918 rewriter.set_pref_service_for_testing(&prefs); |
| 1757 | 2919 |
| 1758 const int kTouchId = 2; | 2920 const int kTouchId = 2; |
| 1759 gfx::Point location(0, 0); | 2921 gfx::Point location(0, 0); |
| 1760 ui::TouchEvent press( | 2922 ui::TouchEvent press(ui::ET_TOUCH_PRESSED, location, kTouchId, |
| 1761 ui::ET_TOUCH_PRESSED, location, kTouchId, base::TimeDelta()); | 2923 base::TimeDelta()); |
| 1762 press.set_flags(ui::EF_CONTROL_DOWN); | 2924 press.set_flags(ui::EF_CONTROL_DOWN); |
| 1763 #if defined(USE_X11) | 2925 #if defined(USE_X11) |
| 1764 ui::UpdateX11EventForFlags(&press); | 2926 ui::UpdateX11EventForFlags(&press); |
| 1765 #endif | 2927 #endif |
| 1766 | 2928 |
| 1767 scoped_ptr<ui::Event> new_event; | 2929 scoped_ptr<ui::Event> new_event; |
| 1768 rewriter.RewriteEvent(press, &new_event); | 2930 rewriter.RewriteEvent(press, &new_event); |
| 1769 EXPECT_TRUE(new_event); | 2931 EXPECT_TRUE(new_event); |
| 1770 // Control should be remapped to Alt. | 2932 // Control should be remapped to Alt. |
| 1771 EXPECT_EQ(ui::EF_ALT_DOWN, | 2933 EXPECT_EQ(ui::EF_ALT_DOWN, |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1828 | 2990 |
| 1829 bool RewriteFunctionKeys(const ui::Event& event, | 2991 bool RewriteFunctionKeys(const ui::Event& event, |
| 1830 scoped_ptr<ui::Event>* rewritten_event) { | 2992 scoped_ptr<ui::Event>* rewritten_event) { |
| 1831 return rewriter_->RewriteEvent(event, rewritten_event); | 2993 return rewriter_->RewriteEvent(event, rewritten_event); |
| 1832 } | 2994 } |
| 1833 | 2995 |
| 1834 ui::EventDispatchDetails Send(ui::Event* event) { | 2996 ui::EventDispatchDetails Send(ui::Event* event) { |
| 1835 return source_.Send(event); | 2997 return source_.Send(event); |
| 1836 } | 2998 } |
| 1837 | 2999 |
| 1838 void SendKeyEvent(ui::EventType type, ui::KeyboardCode key_code) { | 3000 void SendKeyEvent(ui::EventType type, |
| 1839 ui::KeyEvent press(type, key_code, ui::EF_NONE); | 3001 ui::KeyboardCode key_code, |
| 3002 ui::DomCode code, |
| 3003 ui::DomKey key, |
| 3004 base::char16 character) { |
| 3005 ui::KeyEvent press(type, key_code, code, ui::EF_NONE, key, character, |
| 3006 ui::EventTimeForNow()); |
| 1840 ui::EventDispatchDetails details = Send(&press); | 3007 ui::EventDispatchDetails details = Send(&press); |
| 1841 CHECK(!details.dispatcher_destroyed); | 3008 CHECK(!details.dispatcher_destroyed); |
| 1842 } | 3009 } |
| 1843 | 3010 |
| 1844 void SendActivateStickyKeyPattern(ui::KeyboardCode key_code) { | 3011 void SendActivateStickyKeyPattern(ui::KeyboardCode key_code, |
| 1845 SendKeyEvent(ui::ET_KEY_PRESSED, key_code); | 3012 ui::DomCode code, |
| 1846 SendKeyEvent(ui::ET_KEY_RELEASED, key_code); | 3013 ui::DomKey key, |
| 3014 base::char16 character) { |
| 3015 SendKeyEvent(ui::ET_KEY_PRESSED, key_code, code, key, character); |
| 3016 SendKeyEvent(ui::ET_KEY_RELEASED, key_code, code, key, character); |
| 1847 } | 3017 } |
| 1848 | 3018 |
| 1849 protected: | 3019 protected: |
| 1850 TestingPrefServiceSyncable* prefs() { return &prefs_; } | 3020 TestingPrefServiceSyncable* prefs() { return &prefs_; } |
| 1851 | 3021 |
| 1852 void PopEvents(ScopedVector<ui::Event>* events) { | 3022 void PopEvents(ScopedVector<ui::Event>* events) { buffer_.PopEvents(events); } |
| 1853 buffer_.PopEvents(events); | |
| 1854 } | |
| 1855 | 3023 |
| 1856 void SetUp() override { | 3024 void SetUp() override { |
| 1857 AshTestBase::SetUp(); | 3025 AshTestBase::SetUp(); |
| 1858 sticky_keys_controller_ = | 3026 sticky_keys_controller_ = |
| 1859 ash::Shell::GetInstance()->sticky_keys_controller(); | 3027 ash::Shell::GetInstance()->sticky_keys_controller(); |
| 1860 rewriter_.reset(new EventRewriter(sticky_keys_controller_)); | 3028 rewriter_.reset(new EventRewriter(sticky_keys_controller_)); |
| 1861 chromeos::Preferences::RegisterProfilePrefs(prefs_.registry()); | 3029 chromeos::Preferences::RegisterProfilePrefs(prefs_.registry()); |
| 1862 rewriter_->set_pref_service_for_testing(&prefs_); | 3030 rewriter_->set_pref_service_for_testing(&prefs_); |
| 1863 #if defined(USE_X11) | 3031 #if defined(USE_X11) |
| 1864 ui::SetUpTouchPadForTest(kTouchPadDeviceId); | 3032 ui::SetUpTouchPadForTest(kTouchPadDeviceId); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1888 DISALLOW_COPY_AND_ASSIGN(EventRewriterAshTest); | 3056 DISALLOW_COPY_AND_ASSIGN(EventRewriterAshTest); |
| 1889 }; | 3057 }; |
| 1890 | 3058 |
| 1891 TEST_F(EventRewriterAshTest, TopRowKeysAreFunctionKeys) { | 3059 TEST_F(EventRewriterAshTest, TopRowKeysAreFunctionKeys) { |
| 1892 scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(1)); | 3060 scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(1)); |
| 1893 ash::wm::WindowState* window_state = ash::wm::GetWindowState(window.get()); | 3061 ash::wm::WindowState* window_state = ash::wm::GetWindowState(window.get()); |
| 1894 window_state->Activate(); | 3062 window_state->Activate(); |
| 1895 ScopedVector<ui::Event> events; | 3063 ScopedVector<ui::Event> events; |
| 1896 | 3064 |
| 1897 // Create a simulated keypress of F1 targetted at the window. | 3065 // Create a simulated keypress of F1 targetted at the window. |
| 1898 ui::KeyEvent press_f1(ui::ET_KEY_PRESSED, ui::VKEY_F1, ui::EF_NONE); | 3066 ui::KeyEvent press_f1(ui::ET_KEY_PRESSED, ui::VKEY_F1, ui::DomCode::F1, |
| 3067 ui::EF_NONE, ui::DomKey::F1, 0, ui::EventTimeForNow()); |
| 1899 | 3068 |
| 1900 // Simulate an apps v2 window that has requested top row keys as function | 3069 // Simulate an apps v2 window that has requested top row keys as function |
| 1901 // keys. The event should not be rewritten. | 3070 // keys. The event should not be rewritten. |
| 1902 window_state->set_top_row_keys_are_function_keys(true); | 3071 window_state->set_top_row_keys_are_function_keys(true); |
| 1903 ui::EventDispatchDetails details = Send(&press_f1); | 3072 ui::EventDispatchDetails details = Send(&press_f1); |
| 1904 ASSERT_FALSE(details.dispatcher_destroyed); | 3073 ASSERT_FALSE(details.dispatcher_destroyed); |
| 1905 PopEvents(&events); | 3074 PopEvents(&events); |
| 1906 EXPECT_EQ(1u, events.size()); | 3075 EXPECT_EQ(1u, events.size()); |
| 1907 EXPECT_EQ( | 3076 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_F1, |
| 1908 GetExpectedResultAsString(ui::VKEY_F1, ui::EF_NONE, ui::ET_KEY_PRESSED), | 3077 ui::DomCode::F1, ui::EF_NONE, |
| 1909 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); | 3078 ui::DomKey::F1, 0), |
| 3079 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); |
| 1910 | 3080 |
| 1911 // The event should also not be rewritten if the send-function-keys pref is | 3081 // The event should also not be rewritten if the send-function-keys pref is |
| 1912 // additionally set, for both apps v2 and regular windows. | 3082 // additionally set, for both apps v2 and regular windows. |
| 1913 BooleanPrefMember send_function_keys_pref; | 3083 BooleanPrefMember send_function_keys_pref; |
| 1914 send_function_keys_pref.Init(prefs::kLanguageSendFunctionKeys, prefs()); | 3084 send_function_keys_pref.Init(prefs::kLanguageSendFunctionKeys, prefs()); |
| 1915 send_function_keys_pref.SetValue(true); | 3085 send_function_keys_pref.SetValue(true); |
| 1916 window_state->set_top_row_keys_are_function_keys(false); | 3086 window_state->set_top_row_keys_are_function_keys(false); |
| 1917 details = Send(&press_f1); | 3087 details = Send(&press_f1); |
| 1918 ASSERT_FALSE(details.dispatcher_destroyed); | 3088 ASSERT_FALSE(details.dispatcher_destroyed); |
| 1919 PopEvents(&events); | 3089 PopEvents(&events); |
| 1920 EXPECT_EQ(1u, events.size()); | 3090 EXPECT_EQ(1u, events.size()); |
| 1921 EXPECT_EQ( | 3091 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_F1, |
| 1922 GetExpectedResultAsString(ui::VKEY_F1, ui::EF_NONE, ui::ET_KEY_PRESSED), | 3092 ui::DomCode::F1, ui::EF_NONE, |
| 1923 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); | 3093 ui::DomKey::F1, 0), |
| 3094 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); |
| 1924 | 3095 |
| 1925 // If the pref isn't set when an event is sent to a regular window, F1 is | 3096 // If the pref isn't set when an event is sent to a regular window, F1 is |
| 1926 // rewritten to the back key. | 3097 // rewritten to the back key. |
| 1927 send_function_keys_pref.SetValue(false); | 3098 send_function_keys_pref.SetValue(false); |
| 1928 details = Send(&press_f1); | 3099 details = Send(&press_f1); |
| 1929 ASSERT_FALSE(details.dispatcher_destroyed); | 3100 ASSERT_FALSE(details.dispatcher_destroyed); |
| 1930 PopEvents(&events); | 3101 PopEvents(&events); |
| 1931 EXPECT_EQ(1u, events.size()); | 3102 EXPECT_EQ(1u, events.size()); |
| 1932 EXPECT_EQ(GetExpectedResultAsString( | 3103 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_BROWSER_BACK, |
| 1933 ui::VKEY_BROWSER_BACK, ui::EF_NONE, ui::ET_KEY_PRESSED), | 3104 ui::DomCode::BROWSER_BACK, ui::EF_NONE, |
| 3105 ui::DomKey::BROWSER_BACK, 0), |
| 1934 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); | 3106 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); |
| 1935 } | 3107 } |
| 1936 | 3108 |
| 1937 TEST_F(EventRewriterTest, TestRewrittenModifierClick) { | 3109 TEST_F(EventRewriterTest, TestRewrittenModifierClick) { |
| 3110 #if defined(USE_X11) |
| 1938 std::vector<int> device_list; | 3111 std::vector<int> device_list; |
| 1939 device_list.push_back(10); | 3112 device_list.push_back(10); |
| 1940 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); | 3113 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); |
| 1941 | 3114 |
| 1942 // Remap Control to Search. | 3115 // Remap Control to Search. |
| 1943 TestingPrefServiceSyncable prefs; | 3116 TestingPrefServiceSyncable prefs; |
| 1944 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 3117 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 1945 IntegerPrefMember control; | 3118 IntegerPrefMember control; |
| 1946 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 3119 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
| 1947 control.SetValue(chromeos::input_method::kSearchKey); | 3120 control.SetValue(chromeos::input_method::kSearchKey); |
| 1948 | 3121 |
| 1949 EventRewriter rewriter(NULL); | 3122 EventRewriter rewriter(NULL); |
| 1950 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 3123 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1951 rewriter.set_pref_service_for_testing(&prefs); | 3124 rewriter.set_pref_service_for_testing(&prefs); |
| 1952 | 3125 |
| 1953 // Check that Control + Left Button is converted (via Search + Left Button) | 3126 // Check that Control + Left Button is converted (via Search + Left Button) |
| 1954 // to Right Button. | 3127 // to Right Button. |
| 1955 ui::ScopedXI2Event xev; | 3128 ui::ScopedXI2Event xev; |
| 1956 xev.InitGenericButtonEvent(10, | 3129 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_PRESSED, gfx::Point(), |
| 1957 ui::ET_MOUSE_PRESSED, | |
| 1958 gfx::Point(), | |
| 1959 ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN); | 3130 ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN); |
| 1960 ui::MouseEvent press(xev); | 3131 ui::MouseEvent press(xev); |
| 1961 // Sanity check. | 3132 // Sanity check. |
| 1962 EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type()); | 3133 EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type()); |
| 1963 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN, press.flags()); | 3134 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN, press.flags()); |
| 1964 scoped_ptr<ui::Event> new_event; | 3135 scoped_ptr<ui::Event> new_event; |
| 1965 const ui::MouseEvent* result = | 3136 const ui::MouseEvent* result = |
| 1966 RewriteMouseButtonEvent(&rewriter, press, &new_event); | 3137 RewriteMouseButtonEvent(&rewriter, press, &new_event); |
| 1967 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); | 3138 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); |
| 1968 EXPECT_FALSE(ui::EF_LEFT_MOUSE_BUTTON & result->flags()); | 3139 EXPECT_FALSE(ui::EF_LEFT_MOUSE_BUTTON & result->flags()); |
| 1969 EXPECT_FALSE(ui::EF_CONTROL_DOWN & result->flags()); | 3140 EXPECT_FALSE(ui::EF_CONTROL_DOWN & result->flags()); |
| 1970 EXPECT_FALSE(ui::EF_COMMAND_DOWN & result->flags()); | 3141 EXPECT_FALSE(ui::EF_COMMAND_DOWN & result->flags()); |
| 1971 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); | 3142 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); |
| 3143 #endif |
| 1972 } | 3144 } |
| 1973 | 3145 |
| 1974 TEST_F(EventRewriterTest, DontRewriteIfNotRewritten) { | 3146 TEST_F(EventRewriterTest, DontRewriteIfNotRewritten) { |
| 1975 // TODO(kpschoedel): pending changes for crbug.com/360377 | 3147 // TODO(kpschoedel): pending changes for crbug.com/360377 |
| 1976 // to |chromeos::EventRewriter::RewriteLocatedEvent() | 3148 // to |chromeos::EventRewriter::RewriteLocatedEvent() |
| 3149 #if defined(USE_X11) |
| 1977 std::vector<int> device_list; | 3150 std::vector<int> device_list; |
| 1978 device_list.push_back(10); | 3151 device_list.push_back(10); |
| 1979 device_list.push_back(11); | 3152 device_list.push_back(11); |
| 1980 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); | 3153 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); |
| 3154 #endif |
| 1981 TestingPrefServiceSyncable prefs; | 3155 TestingPrefServiceSyncable prefs; |
| 1982 EventRewriter rewriter(NULL); | 3156 EventRewriter rewriter(NULL); |
| 1983 rewriter.set_pref_service_for_testing(&prefs); | 3157 rewriter.set_pref_service_for_testing(&prefs); |
| 1984 const int kLeftAndSearchFlag = ui::EF_LEFT_MOUSE_BUTTON | ui::EF_COMMAND_DOWN; | 3158 const int kLeftAndSearchFlag = ui::EF_LEFT_MOUSE_BUTTON | ui::EF_COMMAND_DOWN; |
| 1985 | 3159 |
| 1986 // Test Search + Left click. | 3160 // Test Search + Left click. |
| 1987 { | 3161 { |
| 1988 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), | 3162 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), |
| 1989 ui::EventTimeForNow(), kLeftAndSearchFlag, | 3163 ui::EventTimeForNow(), kLeftAndSearchFlag, |
| 1990 ui::EF_LEFT_MOUSE_BUTTON); | 3164 ui::EF_LEFT_MOUSE_BUTTON); |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2066 scoped_ptr<ui::Event> new_event; | 3240 scoped_ptr<ui::Event> new_event; |
| 2067 const ui::MouseEvent* result = | 3241 const ui::MouseEvent* result = |
| 2068 RewriteMouseButtonEvent(&rewriter, release, &new_event); | 3242 RewriteMouseButtonEvent(&rewriter, release, &new_event); |
| 2069 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_COMMAND_DOWN, result->flags()); | 3243 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_COMMAND_DOWN, result->flags()); |
| 2070 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); | 3244 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2071 } | 3245 } |
| 2072 #if defined(USE_X11) | 3246 #if defined(USE_X11) |
| 2073 // No SEARCH in first click, using XI2 native events. | 3247 // No SEARCH in first click, using XI2 native events. |
| 2074 { | 3248 { |
| 2075 ui::ScopedXI2Event xev; | 3249 ui::ScopedXI2Event xev; |
| 2076 xev.InitGenericButtonEvent( | 3250 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_PRESSED, gfx::Point(), |
| 2077 10, ui::ET_MOUSE_PRESSED, gfx::Point(), ui::EF_LEFT_MOUSE_BUTTON); | 3251 ui::EF_LEFT_MOUSE_BUTTON); |
| 2078 ui::MouseEvent press(xev); | 3252 ui::MouseEvent press(xev); |
| 2079 scoped_ptr<ui::Event> new_event; | 3253 scoped_ptr<ui::Event> new_event; |
| 2080 const ui::MouseEvent* result = | 3254 const ui::MouseEvent* result = |
| 2081 RewriteMouseButtonEvent(&rewriter, press, &new_event); | 3255 RewriteMouseButtonEvent(&rewriter, press, &new_event); |
| 2082 EXPECT_TRUE(ui::EF_LEFT_MOUSE_BUTTON & result->flags()); | 3256 EXPECT_TRUE(ui::EF_LEFT_MOUSE_BUTTON & result->flags()); |
| 2083 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); | 3257 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2084 } | 3258 } |
| 2085 { | 3259 { |
| 2086 ui::ScopedXI2Event xev; | 3260 ui::ScopedXI2Event xev; |
| 2087 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_RELEASED, gfx::Point(), | 3261 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_RELEASED, gfx::Point(), |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2171 EXPECT_FALSE(kLeftAndSearchFlag & result->flags()); | 3345 EXPECT_FALSE(kLeftAndSearchFlag & result->flags()); |
| 2172 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); | 3346 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2173 } | 3347 } |
| 2174 #endif | 3348 #endif |
| 2175 } | 3349 } |
| 2176 | 3350 |
| 2177 TEST_F(EventRewriterAshTest, StickyKeyEventDispatchImpl) { | 3351 TEST_F(EventRewriterAshTest, StickyKeyEventDispatchImpl) { |
| 2178 // Test the actual key event dispatch implementation. | 3352 // Test the actual key event dispatch implementation. |
| 2179 ScopedVector<ui::Event> events; | 3353 ScopedVector<ui::Event> events; |
| 2180 | 3354 |
| 2181 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); | 3355 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 3356 ui::DomKey::CONTROL, 0); |
| 2182 PopEvents(&events); | 3357 PopEvents(&events); |
| 2183 EXPECT_EQ(1u, events.size()); | 3358 EXPECT_EQ(1u, events.size()); |
| 2184 EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type()); | 3359 EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type()); |
| 2185 EXPECT_EQ(ui::VKEY_CONTROL, | 3360 EXPECT_EQ(ui::VKEY_CONTROL, |
| 2186 static_cast<ui::KeyEvent*>(events[0])->key_code()); | 3361 static_cast<ui::KeyEvent*>(events[0])->key_code()); |
| 2187 | 3362 |
| 2188 // Test key press event is correctly modified and modifier release | 3363 // Test key press event is correctly modified and modifier release |
| 2189 // event is sent. | 3364 // event is sent. |
| 2190 ui::KeyEvent press(ui::ET_KEY_PRESSED, ui::VKEY_C, ui::EF_NONE); | 3365 ui::KeyEvent press(ui::ET_KEY_PRESSED, ui::VKEY_C, ui::DomCode::KEY_C, |
| 3366 ui::EF_NONE, ui::DomKey::CHARACTER, 'c', |
| 3367 ui::EventTimeForNow()); |
| 2191 ui::EventDispatchDetails details = Send(&press); | 3368 ui::EventDispatchDetails details = Send(&press); |
| 2192 PopEvents(&events); | 3369 PopEvents(&events); |
| 2193 EXPECT_EQ(2u, events.size()); | 3370 EXPECT_EQ(2u, events.size()); |
| 2194 EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type()); | 3371 EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type()); |
| 2195 EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code()); | 3372 EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code()); |
| 2196 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); | 3373 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); |
| 2197 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); | 3374 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); |
| 2198 EXPECT_EQ(ui::VKEY_CONTROL, | 3375 EXPECT_EQ(ui::VKEY_CONTROL, |
| 2199 static_cast<ui::KeyEvent*>(events[1])->key_code()); | 3376 static_cast<ui::KeyEvent*>(events[1])->key_code()); |
| 2200 | 3377 |
| 2201 // Test key release event is not modified. | 3378 // Test key release event is not modified. |
| 2202 ui::KeyEvent release(ui::ET_KEY_RELEASED, ui::VKEY_C, ui::EF_NONE); | 3379 ui::KeyEvent release(ui::ET_KEY_RELEASED, ui::VKEY_C, ui::DomCode::KEY_C, |
| 3380 ui::EF_NONE, ui::DomKey::CHARACTER, 'c', |
| 3381 ui::EventTimeForNow()); |
| 2203 details = Send(&release); | 3382 details = Send(&release); |
| 2204 ASSERT_FALSE(details.dispatcher_destroyed); | 3383 ASSERT_FALSE(details.dispatcher_destroyed); |
| 2205 PopEvents(&events); | 3384 PopEvents(&events); |
| 2206 EXPECT_EQ(1u, events.size()); | 3385 EXPECT_EQ(1u, events.size()); |
| 2207 EXPECT_EQ(ui::ET_KEY_RELEASED, events[0]->type()); | 3386 EXPECT_EQ(ui::ET_KEY_RELEASED, events[0]->type()); |
| 2208 EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code()); | 3387 EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code()); |
| 2209 EXPECT_FALSE(events[0]->flags() & ui::EF_CONTROL_DOWN); | 3388 EXPECT_FALSE(events[0]->flags() & ui::EF_CONTROL_DOWN); |
| 2210 } | 3389 } |
| 2211 | 3390 |
| 2212 TEST_F(EventRewriterAshTest, MouseEventDispatchImpl) { | 3391 TEST_F(EventRewriterAshTest, MouseEventDispatchImpl) { |
| 2213 ScopedVector<ui::Event> events; | 3392 ScopedVector<ui::Event> events; |
| 2214 | 3393 |
| 2215 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); | 3394 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 3395 ui::DomKey::CONTROL, 0); |
| 2216 PopEvents(&events); | 3396 PopEvents(&events); |
| 2217 | 3397 |
| 2218 // Test mouse press event is correctly modified. | 3398 // Test mouse press event is correctly modified. |
| 2219 gfx::Point location(0, 0); | 3399 gfx::Point location(0, 0); |
| 2220 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, location, location, | 3400 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, location, location, |
| 2221 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, | 3401 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, |
| 2222 ui::EF_LEFT_MOUSE_BUTTON); | 3402 ui::EF_LEFT_MOUSE_BUTTON); |
| 2223 ui::EventDispatchDetails details = Send(&press); | 3403 ui::EventDispatchDetails details = Send(&press); |
| 2224 ASSERT_FALSE(details.dispatcher_destroyed); | 3404 ASSERT_FALSE(details.dispatcher_destroyed); |
| 2225 PopEvents(&events); | 3405 PopEvents(&events); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 2241 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); | 3421 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); |
| 2242 EXPECT_EQ(ui::VKEY_CONTROL, | 3422 EXPECT_EQ(ui::VKEY_CONTROL, |
| 2243 static_cast<ui::KeyEvent*>(events[1])->key_code()); | 3423 static_cast<ui::KeyEvent*>(events[1])->key_code()); |
| 2244 } | 3424 } |
| 2245 | 3425 |
| 2246 TEST_F(EventRewriterAshTest, MouseWheelEventDispatchImpl) { | 3426 TEST_F(EventRewriterAshTest, MouseWheelEventDispatchImpl) { |
| 2247 ScopedVector<ui::Event> events; | 3427 ScopedVector<ui::Event> events; |
| 2248 | 3428 |
| 2249 // Test positive mouse wheel event is correctly modified and modifier release | 3429 // Test positive mouse wheel event is correctly modified and modifier release |
| 2250 // event is sent. | 3430 // event is sent. |
| 2251 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); | 3431 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 3432 ui::DomKey::CONTROL, 0); |
| 2252 PopEvents(&events); | 3433 PopEvents(&events); |
| 2253 gfx::Point location(0, 0); | 3434 gfx::Point location(0, 0); |
| 2254 ui::MouseEvent mev(ui::ET_MOUSEWHEEL, location, location, | 3435 ui::MouseEvent mev(ui::ET_MOUSEWHEEL, location, location, |
| 2255 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, | 3436 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, |
| 2256 ui::EF_LEFT_MOUSE_BUTTON); | 3437 ui::EF_LEFT_MOUSE_BUTTON); |
| 2257 ui::MouseWheelEvent positive(mev, 0, ui::MouseWheelEvent::kWheelDelta); | 3438 ui::MouseWheelEvent positive(mev, 0, ui::MouseWheelEvent::kWheelDelta); |
| 2258 ui::EventDispatchDetails details = Send(&positive); | 3439 ui::EventDispatchDetails details = Send(&positive); |
| 2259 ASSERT_FALSE(details.dispatcher_destroyed); | 3440 ASSERT_FALSE(details.dispatcher_destroyed); |
| 2260 PopEvents(&events); | 3441 PopEvents(&events); |
| 2261 EXPECT_EQ(2u, events.size()); | 3442 EXPECT_EQ(2u, events.size()); |
| 2262 EXPECT_TRUE(events[0]->IsMouseWheelEvent()); | 3443 EXPECT_TRUE(events[0]->IsMouseWheelEvent()); |
| 2263 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); | 3444 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); |
| 2264 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); | 3445 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); |
| 2265 EXPECT_EQ(ui::VKEY_CONTROL, | 3446 EXPECT_EQ(ui::VKEY_CONTROL, |
| 2266 static_cast<ui::KeyEvent*>(events[1])->key_code()); | 3447 static_cast<ui::KeyEvent*>(events[1])->key_code()); |
| 2267 | 3448 |
| 2268 // Test negative mouse wheel event is correctly modified and modifier release | 3449 // Test negative mouse wheel event is correctly modified and modifier release |
| 2269 // event is sent. | 3450 // event is sent. |
| 2270 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); | 3451 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 3452 ui::DomKey::CONTROL, 0); |
| 2271 PopEvents(&events); | 3453 PopEvents(&events); |
| 2272 ui::MouseWheelEvent negative(mev, 0, -ui::MouseWheelEvent::kWheelDelta); | 3454 ui::MouseWheelEvent negative(mev, 0, -ui::MouseWheelEvent::kWheelDelta); |
| 2273 details = Send(&negative); | 3455 details = Send(&negative); |
| 2274 ASSERT_FALSE(details.dispatcher_destroyed); | 3456 ASSERT_FALSE(details.dispatcher_destroyed); |
| 2275 PopEvents(&events); | 3457 PopEvents(&events); |
| 2276 EXPECT_EQ(2u, events.size()); | 3458 EXPECT_EQ(2u, events.size()); |
| 2277 EXPECT_TRUE(events[0]->IsMouseWheelEvent()); | 3459 EXPECT_TRUE(events[0]->IsMouseWheelEvent()); |
| 2278 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); | 3460 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); |
| 2279 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); | 3461 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); |
| 2280 EXPECT_EQ(ui::VKEY_CONTROL, | 3462 EXPECT_EQ(ui::VKEY_CONTROL, |
| (...skipping 14 matching lines...) Expand all Loading... |
| 2295 | 3477 |
| 2296 ash::StickyKeysOverlay* overlay_; | 3478 ash::StickyKeysOverlay* overlay_; |
| 2297 }; | 3479 }; |
| 2298 | 3480 |
| 2299 TEST_F(StickyKeysOverlayTest, OneModifierEnabled) { | 3481 TEST_F(StickyKeysOverlayTest, OneModifierEnabled) { |
| 2300 EXPECT_FALSE(overlay_->is_visible()); | 3482 EXPECT_FALSE(overlay_->is_visible()); |
| 2301 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 3483 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 2302 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 3484 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 2303 | 3485 |
| 2304 // Pressing modifier key should show overlay. | 3486 // Pressing modifier key should show overlay. |
| 2305 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); | 3487 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 3488 ui::DomKey::CONTROL, 0); |
| 2306 EXPECT_TRUE(overlay_->is_visible()); | 3489 EXPECT_TRUE(overlay_->is_visible()); |
| 2307 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 3490 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
| 2308 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 3491 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 2309 | 3492 |
| 2310 // Pressing a normal key should hide overlay. | 3493 // Pressing a normal key should hide overlay. |
| 2311 SendActivateStickyKeyPattern(ui::VKEY_T); | 3494 SendActivateStickyKeyPattern(ui::VKEY_T, ui::DomCode::KEY_T, |
| 3495 ui::DomKey::CHARACTER, 't'); |
| 2312 EXPECT_FALSE(overlay_->is_visible()); | 3496 EXPECT_FALSE(overlay_->is_visible()); |
| 2313 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 3497 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 2314 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 3498 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 2315 } | 3499 } |
| 2316 | 3500 |
| 2317 TEST_F(StickyKeysOverlayTest, TwoModifiersEnabled) { | 3501 TEST_F(StickyKeysOverlayTest, TwoModifiersEnabled) { |
| 2318 EXPECT_FALSE(overlay_->is_visible()); | 3502 EXPECT_FALSE(overlay_->is_visible()); |
| 2319 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 3503 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 2320 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 3504 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 2321 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 3505 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 2322 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 3506 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
| 2323 | 3507 |
| 2324 // Pressing two modifiers should show overlay. | 3508 // Pressing two modifiers should show overlay. |
| 2325 SendActivateStickyKeyPattern(ui::VKEY_SHIFT); | 3509 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, |
| 2326 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); | 3510 ui::DomKey::SHIFT, 0); |
| 3511 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 3512 ui::DomKey::CONTROL, 0); |
| 2327 EXPECT_TRUE(overlay_->is_visible()); | 3513 EXPECT_TRUE(overlay_->is_visible()); |
| 2328 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 3514 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
| 2329 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 3515 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
| 2330 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 3516 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
| 2331 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 3517 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 2332 | 3518 |
| 2333 // Pressing a normal key should hide overlay. | 3519 // Pressing a normal key should hide overlay. |
| 2334 SendActivateStickyKeyPattern(ui::VKEY_N); | 3520 SendActivateStickyKeyPattern(ui::VKEY_N, ui::DomCode::KEY_N, |
| 3521 ui::DomKey::CHARACTER, 'n'); |
| 2335 EXPECT_FALSE(overlay_->is_visible()); | 3522 EXPECT_FALSE(overlay_->is_visible()); |
| 2336 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 3523 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 2337 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 3524 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 2338 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 3525 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 2339 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 3526 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
| 2340 } | 3527 } |
| 2341 | 3528 |
| 2342 TEST_F(StickyKeysOverlayTest, LockedModifier) { | 3529 TEST_F(StickyKeysOverlayTest, LockedModifier) { |
| 2343 EXPECT_FALSE(overlay_->is_visible()); | 3530 EXPECT_FALSE(overlay_->is_visible()); |
| 2344 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 3531 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 2345 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 3532 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
| 2346 | 3533 |
| 2347 // Pressing a modifier key twice should lock modifier and show overlay. | 3534 // Pressing a modifier key twice should lock modifier and show overlay. |
| 2348 SendActivateStickyKeyPattern(ui::VKEY_LMENU); | 3535 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, |
| 2349 SendActivateStickyKeyPattern(ui::VKEY_LMENU); | 3536 ui::DomKey::ALT, 0); |
| 3537 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, |
| 3538 ui::DomKey::ALT, 0); |
| 2350 EXPECT_TRUE(overlay_->is_visible()); | 3539 EXPECT_TRUE(overlay_->is_visible()); |
| 2351 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 3540 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
| 2352 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 3541 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
| 2353 | 3542 |
| 2354 // Pressing a normal key should not hide overlay. | 3543 // Pressing a normal key should not hide overlay. |
| 2355 SendActivateStickyKeyPattern(ui::VKEY_D); | 3544 SendActivateStickyKeyPattern(ui::VKEY_D, ui::DomCode::KEY_D, |
| 3545 ui::DomKey::CHARACTER, 'd'); |
| 2356 EXPECT_TRUE(overlay_->is_visible()); | 3546 EXPECT_TRUE(overlay_->is_visible()); |
| 2357 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 3547 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
| 2358 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 3548 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
| 2359 } | 3549 } |
| 2360 | 3550 |
| 2361 TEST_F(StickyKeysOverlayTest, LockedAndNormalModifier) { | 3551 TEST_F(StickyKeysOverlayTest, LockedAndNormalModifier) { |
| 2362 EXPECT_FALSE(overlay_->is_visible()); | 3552 EXPECT_FALSE(overlay_->is_visible()); |
| 2363 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 3553 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 2364 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 3554 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 2365 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 3555 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 2366 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 3556 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
| 2367 | 3557 |
| 2368 // Pressing a modifier key twice should lock modifier and show overlay. | 3558 // Pressing a modifier key twice should lock modifier and show overlay. |
| 2369 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); | 3559 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 2370 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); | 3560 ui::DomKey::CONTROL, 0); |
| 3561 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 3562 ui::DomKey::CONTROL, 0); |
| 2371 EXPECT_TRUE(overlay_->is_visible()); | 3563 EXPECT_TRUE(overlay_->is_visible()); |
| 2372 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 3564 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
| 2373 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 3565 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 2374 | 3566 |
| 2375 // Pressing another modifier key should still show overlay. | 3567 // Pressing another modifier key should still show overlay. |
| 2376 SendActivateStickyKeyPattern(ui::VKEY_SHIFT); | 3568 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, |
| 3569 ui::DomKey::SHIFT, 0); |
| 2377 EXPECT_TRUE(overlay_->is_visible()); | 3570 EXPECT_TRUE(overlay_->is_visible()); |
| 2378 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 3571 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
| 2379 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 3572 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 2380 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 3573 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
| 2381 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 3574 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
| 2382 | 3575 |
| 2383 // Pressing a normal key should not hide overlay but disable normal modifier. | 3576 // Pressing a normal key should not hide overlay but disable normal modifier. |
| 2384 SendActivateStickyKeyPattern(ui::VKEY_D); | 3577 SendActivateStickyKeyPattern(ui::VKEY_D, ui::DomCode::KEY_D, |
| 3578 ui::DomKey::CHARACTER, 'd'); |
| 2385 EXPECT_TRUE(overlay_->is_visible()); | 3579 EXPECT_TRUE(overlay_->is_visible()); |
| 2386 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 3580 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
| 2387 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 3581 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 2388 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 3582 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 2389 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 3583 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
| 2390 } | 3584 } |
| 2391 | 3585 |
| 2392 TEST_F(StickyKeysOverlayTest, ModifiersDisabled) { | 3586 TEST_F(StickyKeysOverlayTest, ModifiersDisabled) { |
| 2393 EXPECT_FALSE(overlay_->is_visible()); | 3587 EXPECT_FALSE(overlay_->is_visible()); |
| 2394 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 3588 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 2395 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 3589 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 2396 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 3590 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 2397 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 3591 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
| 2398 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 3592 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 2399 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 3593 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
| 2400 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 3594 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 2401 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); | 3595 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); |
| 2402 | 3596 |
| 2403 // Enable modifiers. | 3597 // Enable modifiers. |
| 2404 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); | 3598 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 2405 SendActivateStickyKeyPattern(ui::VKEY_SHIFT); | 3599 ui::DomKey::CONTROL, 0); |
| 2406 SendActivateStickyKeyPattern(ui::VKEY_SHIFT); | 3600 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, |
| 2407 SendActivateStickyKeyPattern(ui::VKEY_LMENU); | 3601 ui::DomKey::SHIFT, 0); |
| 2408 SendActivateStickyKeyPattern(ui::VKEY_COMMAND); | 3602 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, |
| 2409 SendActivateStickyKeyPattern(ui::VKEY_COMMAND); | 3603 ui::DomKey::SHIFT, 0); |
| 3604 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, |
| 3605 ui::DomKey::ALT, 0); |
| 3606 SendActivateStickyKeyPattern(ui::VKEY_COMMAND, ui::DomCode::OS_LEFT, |
| 3607 ui::DomKey::OS, 0); |
| 3608 SendActivateStickyKeyPattern(ui::VKEY_COMMAND, ui::DomCode::OS_LEFT, |
| 3609 ui::DomKey::OS, 0); |
| 2410 | 3610 |
| 2411 EXPECT_TRUE(overlay_->is_visible()); | 3611 EXPECT_TRUE(overlay_->is_visible()); |
| 2412 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 3612 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
| 2413 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 3613 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 2414 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 3614 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
| 2415 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 3615 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
| 2416 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 3616 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
| 2417 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 3617 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
| 2418 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 3618 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
| 2419 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); | 3619 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); |
| 2420 | 3620 |
| 2421 // Disable modifiers and overlay should be hidden. | 3621 // Disable modifiers and overlay should be hidden. |
| 2422 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); | 3622 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 2423 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); | 3623 ui::DomKey::CONTROL, 0); |
| 2424 SendActivateStickyKeyPattern(ui::VKEY_SHIFT); | 3624 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 2425 SendActivateStickyKeyPattern(ui::VKEY_LMENU); | 3625 ui::DomKey::CONTROL, 0); |
| 2426 SendActivateStickyKeyPattern(ui::VKEY_LMENU); | 3626 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, |
| 2427 SendActivateStickyKeyPattern(ui::VKEY_COMMAND); | 3627 ui::DomKey::SHIFT, 0); |
| 3628 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, |
| 3629 ui::DomKey::ALT, 0); |
| 3630 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, |
| 3631 ui::DomKey::ALT, 0); |
| 3632 SendActivateStickyKeyPattern(ui::VKEY_COMMAND, ui::DomCode::OS_LEFT, |
| 3633 ui::DomKey::OS, 0); |
| 2428 | 3634 |
| 2429 EXPECT_FALSE(overlay_->is_visible()); | 3635 EXPECT_FALSE(overlay_->is_visible()); |
| 2430 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 3636 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 2431 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 3637 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 2432 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 3638 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 2433 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 3639 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
| 2434 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 3640 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 2435 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 3641 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
| 2436 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 3642 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 2437 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); | 3643 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 2465 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); | 3671 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); |
| 2466 EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); | 3672 EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); |
| 2467 | 3673 |
| 2468 // Turn off AltGr and Mod3. | 3674 // Turn off AltGr and Mod3. |
| 2469 sticky_keys_controller_->SetModifiersEnabled(false, false); | 3675 sticky_keys_controller_->SetModifiersEnabled(false, false); |
| 2470 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); | 3676 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); |
| 2471 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); | 3677 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); |
| 2472 } | 3678 } |
| 2473 | 3679 |
| 2474 } // namespace chromeos | 3680 } // namespace chromeos |
| OLD | NEW |