| 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 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 50 // The device id of the test touchpad device. | 50 // The device id of the test touchpad device. |
| 51 #if defined(USE_X11) | 51 #if defined(USE_X11) |
| 52 const int kTouchPadDeviceId = 1; | 52 const int kTouchPadDeviceId = 1; |
| 53 #endif | 53 #endif |
| 54 const int kKeyboardDeviceId = 2; | 54 const int kKeyboardDeviceId = 2; |
| 55 | 55 |
| 56 std::string GetExpectedResultAsString(ui::EventType ui_type, | 56 std::string GetExpectedResultAsString(ui::EventType ui_type, |
| 57 ui::KeyboardCode ui_keycode, | 57 ui::KeyboardCode ui_keycode, |
| 58 ui::DomCode code, | 58 ui::DomCode code, |
| 59 int ui_flags, // ui::EventFlags | 59 int ui_flags, // ui::EventFlags |
| 60 ui::DomKey key, | 60 ui::DomKey key) { |
| 61 base::char16 character) { | |
| 62 return base::StringPrintf( | 61 return base::StringPrintf( |
| 63 "type=%d code=0x%06X flags=0x%X vk=0x%02X key=0x%03X c=0x%02X", ui_type, | 62 "type=%d code=0x%06X flags=0x%X vk=0x%02X key=0x%08X", ui_type, |
| 64 static_cast<unsigned int>(code), ui_flags & ~ui::EF_IS_REPEAT, ui_keycode, | 63 static_cast<unsigned int>(code), ui_flags & ~ui::EF_IS_REPEAT, ui_keycode, |
| 65 static_cast<unsigned int>(key), character); | 64 static_cast<unsigned int>(key)); |
| 66 } | 65 } |
| 67 | 66 |
| 68 std::string GetKeyEventAsString(const ui::KeyEvent& keyevent) { | 67 std::string GetKeyEventAsString(const ui::KeyEvent& keyevent) { |
| 69 return GetExpectedResultAsString( | 68 return GetExpectedResultAsString(keyevent.type(), keyevent.key_code(), |
| 70 keyevent.type(), keyevent.key_code(), keyevent.code(), keyevent.flags(), | 69 keyevent.code(), keyevent.flags(), |
| 71 keyevent.GetDomKey(), keyevent.GetCharacter()); | 70 keyevent.GetDomKey()); |
| 72 } | 71 } |
| 73 | 72 |
| 74 std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter, | 73 std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter, |
| 75 ui::EventType ui_type, | 74 ui::EventType ui_type, |
| 76 ui::KeyboardCode ui_keycode, | 75 ui::KeyboardCode ui_keycode, |
| 77 ui::DomCode code, | 76 ui::DomCode code, |
| 78 int ui_flags, // ui::EventFlags | 77 int ui_flags, // ui::EventFlags |
| 79 ui::DomKey key, | 78 ui::DomKey key) { |
| 80 base::char16 character) { | 79 const ui::KeyEvent event(ui_type, ui_keycode, code, ui_flags, key, |
| 81 const ui::KeyEvent event(ui_type, ui_keycode, code, ui_flags, key, character, | |
| 82 ui::EventTimeForNow()); | 80 ui::EventTimeForNow()); |
| 83 scoped_ptr<ui::Event> new_event; | 81 scoped_ptr<ui::Event> new_event; |
| 84 rewriter->RewriteEvent(event, &new_event); | 82 rewriter->RewriteEvent(event, &new_event); |
| 85 if (new_event) | 83 if (new_event) |
| 86 return GetKeyEventAsString( | 84 return GetKeyEventAsString( |
| 87 static_cast<const ui::KeyEvent&>(*new_event.get())); | 85 static_cast<const ui::KeyEvent&>(*new_event.get())); |
| 88 return GetKeyEventAsString(event); | 86 return GetKeyEventAsString(event); |
| 89 } | 87 } |
| 90 | 88 |
| 91 // Table entry for simple single key event rewriting tests. | 89 // Table entry for simple single key event rewriting tests. |
| 92 struct KeyTestCase { | 90 struct KeyTestCase { |
| 93 ui::EventType type; | 91 ui::EventType type; |
| 94 struct Event { | 92 struct Event { |
| 95 ui::KeyboardCode key_code; | 93 ui::KeyboardCode key_code; |
| 96 ui::DomCode code; | 94 ui::DomCode code; |
| 97 int flags; // ui::EventFlags | 95 int flags; // ui::EventFlags |
| 98 ui::DomKey key; | 96 ui::DomKey key; |
| 99 base::char16 character; | |
| 100 } input, expected; | 97 } input, expected; |
| 101 }; | 98 }; |
| 102 | 99 |
| 103 std::string GetTestCaseAsString(ui::EventType ui_type, | 100 std::string GetTestCaseAsString(ui::EventType ui_type, |
| 104 const KeyTestCase::Event& test) { | 101 const KeyTestCase::Event& test) { |
| 105 return GetExpectedResultAsString(ui_type, test.key_code, test.code, | 102 return GetExpectedResultAsString(ui_type, test.key_code, test.code, |
| 106 test.flags, test.key, test.character); | 103 test.flags, test.key); |
| 107 } | 104 } |
| 108 | 105 |
| 109 // Tests a single stateless key rewrite operation. | 106 // Tests a single stateless key rewrite operation. |
| 110 void CheckKeyTestCase(chromeos::EventRewriter* rewriter, | 107 void CheckKeyTestCase(chromeos::EventRewriter* rewriter, |
| 111 const KeyTestCase& test) { | 108 const KeyTestCase& test) { |
| 112 SCOPED_TRACE("\nSource: " + GetTestCaseAsString(test.type, test.input)); | 109 SCOPED_TRACE("\nSource: " + GetTestCaseAsString(test.type, test.input)); |
| 113 std::string expected = GetTestCaseAsString(test.type, test.expected); | 110 std::string expected = GetTestCaseAsString(test.type, test.expected); |
| 114 EXPECT_EQ(expected, | 111 EXPECT_EQ(expected, GetRewrittenEventAsString( |
| 115 GetRewrittenEventAsString(rewriter, test.type, test.input.key_code, | 112 rewriter, test.type, test.input.key_code, |
| 116 test.input.code, test.input.flags, | 113 test.input.code, test.input.flags, test.input.key)); |
| 117 test.input.key, test.input.character)); | |
| 118 } | 114 } |
| 119 | 115 |
| 120 } // namespace | 116 } // namespace |
| 121 | 117 |
| 122 namespace chromeos { | 118 namespace chromeos { |
| 123 | 119 |
| 124 class EventRewriterTest : public ash::test::AshTestBase { | 120 class EventRewriterTest : public ash::test::AshTestBase { |
| 125 public: | 121 public: |
| 126 EventRewriterTest() | 122 EventRewriterTest() |
| 127 : fake_user_manager_(new user_manager::FakeUserManager), | 123 : fake_user_manager_(new user_manager::FakeUserManager), |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 166 // First, test with a PC keyboard. | 162 // First, test with a PC keyboard. |
| 167 TestingPrefServiceSyncable prefs; | 163 TestingPrefServiceSyncable prefs; |
| 168 EventRewriter rewriter(NULL); | 164 EventRewriter rewriter(NULL); |
| 169 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 165 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 170 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 166 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
| 171 rewriter.set_pref_service_for_testing(&prefs); | 167 rewriter.set_pref_service_for_testing(&prefs); |
| 172 | 168 |
| 173 KeyTestCase pc_keyboard_tests[] = { | 169 KeyTestCase pc_keyboard_tests[] = { |
| 174 // VKEY_A, Alt modifier. | 170 // VKEY_A, Alt modifier. |
| 175 {ui::ET_KEY_PRESSED, | 171 {ui::ET_KEY_PRESSED, |
| 176 {ui::VKEY_A, | 172 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN, |
| 177 ui::DomCode::KEY_A, | 173 ui::DomKey::UNIDENTIFIED}, |
| 178 ui::EF_ALT_DOWN, | 174 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN, |
| 179 ui::DomKey::UNIDENTIFIED, | 175 ui::DomKey::UNIDENTIFIED}}, |
| 180 0}, | |
| 181 {ui::VKEY_A, | |
| 182 ui::DomCode::KEY_A, | |
| 183 ui::EF_ALT_DOWN, | |
| 184 ui::DomKey::UNIDENTIFIED, | |
| 185 0}}, | |
| 186 | 176 |
| 187 // VKEY_A, Win modifier. | 177 // VKEY_A, Win modifier. |
| 188 {ui::ET_KEY_PRESSED, | 178 {ui::ET_KEY_PRESSED, |
| 189 {ui::VKEY_A, | 179 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_COMMAND_DOWN, |
| 190 ui::DomCode::KEY_A, | 180 ui::DomKey::UNIDENTIFIED}, |
| 191 ui::EF_COMMAND_DOWN, | 181 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_COMMAND_DOWN, |
| 192 ui::DomKey::UNIDENTIFIED, | 182 ui::DomKey::UNIDENTIFIED}}, |
| 193 0}, | |
| 194 {ui::VKEY_A, | |
| 195 ui::DomCode::KEY_A, | |
| 196 ui::EF_COMMAND_DOWN, | |
| 197 ui::DomKey::UNIDENTIFIED, | |
| 198 0}}, | |
| 199 | 183 |
| 200 // VKEY_A, Alt+Win modifier. | 184 // VKEY_A, Alt+Win modifier. |
| 201 {ui::ET_KEY_PRESSED, | 185 {ui::ET_KEY_PRESSED, |
| 202 {ui::VKEY_A, | 186 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 203 ui::DomCode::KEY_A, | 187 ui::DomKey::UNIDENTIFIED}, |
| 204 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | 188 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 205 ui::DomKey::UNIDENTIFIED, | 189 ui::DomKey::UNIDENTIFIED}}, |
| 206 0}, | |
| 207 {ui::VKEY_A, | |
| 208 ui::DomCode::KEY_A, | |
| 209 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | |
| 210 ui::DomKey::UNIDENTIFIED, | |
| 211 0}}, | |
| 212 | 190 |
| 213 // VKEY_LWIN (left Windows key), Alt modifier. | 191 // VKEY_LWIN (left Windows key), Alt modifier. |
| 214 {ui::ET_KEY_PRESSED, | 192 {ui::ET_KEY_PRESSED, |
| 215 {ui::VKEY_LWIN, | 193 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
| 216 ui::DomCode::OS_LEFT, | 194 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}, |
| 217 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | 195 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
| 218 ui::DomKey::OS, | 196 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}}, |
| 219 0}, | |
| 220 {ui::VKEY_LWIN, | |
| 221 ui::DomCode::OS_LEFT, | |
| 222 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | |
| 223 ui::DomKey::OS, | |
| 224 0}}, | |
| 225 | 197 |
| 226 // VKEY_RWIN (right Windows key), Alt modifier. | 198 // VKEY_RWIN (right Windows key), Alt modifier. |
| 227 {ui::ET_KEY_PRESSED, | 199 {ui::ET_KEY_PRESSED, |
| 228 {ui::VKEY_RWIN, | 200 {ui::VKEY_RWIN, ui::DomCode::OS_RIGHT, |
| 229 ui::DomCode::OS_RIGHT, | 201 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}, |
| 230 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | 202 {ui::VKEY_RWIN, ui::DomCode::OS_RIGHT, |
| 231 ui::DomKey::OS, | 203 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}}, |
| 232 0}, | |
| 233 {ui::VKEY_RWIN, | |
| 234 ui::DomCode::OS_RIGHT, | |
| 235 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | |
| 236 ui::DomKey::OS, | |
| 237 0}}, | |
| 238 }; | 204 }; |
| 239 | 205 |
| 240 for (const auto& test : pc_keyboard_tests) { | 206 for (const auto& test : pc_keyboard_tests) { |
| 241 CheckKeyTestCase(&rewriter, test); | 207 CheckKeyTestCase(&rewriter, test); |
| 242 } | 208 } |
| 243 | 209 |
| 244 // An Apple keyboard reusing the ID, zero. | 210 // An Apple keyboard reusing the ID, zero. |
| 245 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); | 211 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); |
| 246 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 212 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
| 247 | 213 |
| 248 KeyTestCase apple_keyboard_tests[] = { | 214 KeyTestCase apple_keyboard_tests[] = { |
| 249 // VKEY_A, Alt modifier. | 215 // VKEY_A, Alt modifier. |
| 250 {ui::ET_KEY_PRESSED, | 216 {ui::ET_KEY_PRESSED, |
| 251 {ui::VKEY_A, | 217 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN, |
| 252 ui::DomCode::KEY_A, | 218 ui::DomKey::UNIDENTIFIED}, |
| 253 ui::EF_ALT_DOWN, | 219 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN, |
| 254 ui::DomKey::UNIDENTIFIED, | 220 ui::DomKey::UNIDENTIFIED}}, |
| 255 0}, | |
| 256 {ui::VKEY_A, | |
| 257 ui::DomCode::KEY_A, | |
| 258 ui::EF_ALT_DOWN, | |
| 259 ui::DomKey::UNIDENTIFIED, | |
| 260 0}}, | |
| 261 | 221 |
| 262 // VKEY_A, Win modifier. | 222 // VKEY_A, Win modifier. |
| 263 {ui::ET_KEY_PRESSED, | 223 {ui::ET_KEY_PRESSED, |
| 264 {ui::VKEY_A, | 224 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_COMMAND_DOWN, |
| 265 ui::DomCode::KEY_A, | 225 ui::DomKey::UNIDENTIFIED}, |
| 266 ui::EF_COMMAND_DOWN, | 226 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, 0x01}}, |
| 267 ui::DomKey::UNIDENTIFIED, | |
| 268 0}, | |
| 269 {ui::VKEY_A, | |
| 270 ui::DomCode::KEY_A, | |
| 271 ui::EF_CONTROL_DOWN, | |
| 272 ui::DomKey::CHARACTER, | |
| 273 0x01}}, | |
| 274 | 227 |
| 275 // VKEY_A, Alt+Win modifier. | 228 // VKEY_A, Alt+Win modifier. |
| 276 {ui::ET_KEY_PRESSED, | 229 {ui::ET_KEY_PRESSED, |
| 277 {ui::VKEY_A, | 230 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 278 ui::DomCode::KEY_A, | 231 ui::DomKey::UNIDENTIFIED}, |
| 279 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | 232 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
| 280 ui::DomKey::UNIDENTIFIED, | |
| 281 0}, | |
| 282 {ui::VKEY_A, | |
| 283 ui::DomCode::KEY_A, | |
| 284 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | |
| 285 ui::DomKey::CHARACTER, | |
| 286 0x01}}, | 233 0x01}}, |
| 287 | 234 |
| 288 // VKEY_LWIN (left Windows key), Alt modifier. | 235 // VKEY_LWIN (left Windows key), Alt modifier. |
| 289 {ui::ET_KEY_PRESSED, | 236 {ui::ET_KEY_PRESSED, |
| 290 {ui::VKEY_LWIN, | 237 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
| 291 ui::DomCode::OS_LEFT, | 238 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::OS}, |
| 292 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, | 239 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 293 ui::DomKey::OS, | 240 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ui::DomKey::CONTROL}}, |
| 294 0}, | |
| 295 {ui::VKEY_CONTROL, | |
| 296 ui::DomCode::CONTROL_LEFT, | |
| 297 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | |
| 298 ui::DomKey::CONTROL, | |
| 299 0}}, | |
| 300 | 241 |
| 301 // VKEY_RWIN (right Windows key), Alt modifier. | 242 // VKEY_RWIN (right Windows key), Alt modifier. |
| 302 {ui::ET_KEY_PRESSED, | 243 {ui::ET_KEY_PRESSED, |
| 303 {ui::VKEY_RWIN, | 244 {ui::VKEY_RWIN, ui::DomCode::OS_RIGHT, |
| 304 ui::DomCode::OS_RIGHT, | 245 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::OS}, |
| 305 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, | 246 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_RIGHT, |
| 306 ui::DomKey::OS, | 247 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ui::DomKey::CONTROL}}, |
| 307 0}, | |
| 308 {ui::VKEY_CONTROL, | |
| 309 ui::DomCode::CONTROL_RIGHT, | |
| 310 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | |
| 311 ui::DomKey::CONTROL, | |
| 312 0}}, | |
| 313 }; | 248 }; |
| 314 | 249 |
| 315 for (const auto& test : apple_keyboard_tests) { | 250 for (const auto& test : apple_keyboard_tests) { |
| 316 CheckKeyTestCase(&rewriter, test); | 251 CheckKeyTestCase(&rewriter, test); |
| 317 } | 252 } |
| 318 } | 253 } |
| 319 | 254 |
| 320 // For crbug.com/133896. | 255 // For crbug.com/133896. |
| 321 TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) { | 256 TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) { |
| 322 // Remap Control to Alt. | 257 // Remap Control to Alt. |
| 323 TestingPrefServiceSyncable prefs; | 258 TestingPrefServiceSyncable prefs; |
| 324 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 259 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 325 IntegerPrefMember control; | 260 IntegerPrefMember control; |
| 326 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 261 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
| 327 control.SetValue(chromeos::input_method::kAltKey); | 262 control.SetValue(chromeos::input_method::kAltKey); |
| 328 | 263 |
| 329 EventRewriter rewriter(NULL); | 264 EventRewriter rewriter(NULL); |
| 330 rewriter.set_pref_service_for_testing(&prefs); | 265 rewriter.set_pref_service_for_testing(&prefs); |
| 331 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 266 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 332 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 267 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
| 333 | 268 |
| 334 KeyTestCase pc_keyboard_tests[] = { | 269 KeyTestCase pc_keyboard_tests[] = { |
| 335 // Control should be remapped to Alt. | 270 // Control should be remapped to Alt. |
| 336 {ui::ET_KEY_PRESSED, | 271 {ui::ET_KEY_PRESSED, |
| 337 {ui::VKEY_CONTROL, | 272 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
| 338 ui::DomCode::CONTROL_LEFT, | 273 ui::DomKey::CONTROL}, |
| 339 ui::EF_CONTROL_DOWN, | 274 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, |
| 340 ui::DomKey::CONTROL, | 275 ui::DomKey::ALT}}, |
| 341 0}, | |
| 342 {ui::VKEY_MENU, | |
| 343 ui::DomCode::ALT_LEFT, | |
| 344 ui::EF_ALT_DOWN, | |
| 345 ui::DomKey::ALT, | |
| 346 0}}, | |
| 347 }; | 276 }; |
| 348 | 277 |
| 349 for (const auto& test : pc_keyboard_tests) { | 278 for (const auto& test : pc_keyboard_tests) { |
| 350 CheckKeyTestCase(&rewriter, test); | 279 CheckKeyTestCase(&rewriter, test); |
| 351 } | 280 } |
| 352 | 281 |
| 353 // An Apple keyboard reusing the ID, zero. | 282 // An Apple keyboard reusing the ID, zero. |
| 354 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); | 283 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); |
| 355 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 284 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
| 356 | 285 |
| 357 KeyTestCase apple_keyboard_tests[] = { | 286 KeyTestCase apple_keyboard_tests[] = { |
| 358 // VKEY_LWIN (left Command key) with Alt modifier. The remapped Command | 287 // VKEY_LWIN (left Command key) with Alt modifier. The remapped Command |
| 359 // key should never be re-remapped to Alt. | 288 // key should never be re-remapped to Alt. |
| 360 {ui::ET_KEY_PRESSED, | 289 {ui::ET_KEY_PRESSED, |
| 361 {ui::VKEY_LWIN, | 290 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
| 362 ui::DomCode::OS_LEFT, | 291 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::OS}, |
| 363 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, | 292 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 364 ui::DomKey::OS, | 293 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ui::DomKey::CONTROL}}, |
| 365 0}, | |
| 366 {ui::VKEY_CONTROL, | |
| 367 ui::DomCode::CONTROL_LEFT, | |
| 368 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | |
| 369 ui::DomKey::CONTROL, | |
| 370 0}}, | |
| 371 | 294 |
| 372 // VKEY_RWIN (right Command key) with Alt modifier. The remapped Command | 295 // VKEY_RWIN (right Command key) with Alt modifier. The remapped Command |
| 373 // key should never be re-remapped to Alt. | 296 // key should never be re-remapped to Alt. |
| 374 {ui::ET_KEY_PRESSED, | 297 {ui::ET_KEY_PRESSED, |
| 375 {ui::VKEY_RWIN, | 298 {ui::VKEY_RWIN, ui::DomCode::OS_RIGHT, |
| 376 ui::DomCode::OS_RIGHT, | 299 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::OS}, |
| 377 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, | 300 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_RIGHT, |
| 378 ui::DomKey::OS, | 301 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ui::DomKey::CONTROL}}, |
| 379 0}, | |
| 380 {ui::VKEY_CONTROL, | |
| 381 ui::DomCode::CONTROL_RIGHT, | |
| 382 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | |
| 383 ui::DomKey::CONTROL, | |
| 384 0}}, | |
| 385 }; | 302 }; |
| 386 | 303 |
| 387 for (const auto& test : apple_keyboard_tests) { | 304 for (const auto& test : apple_keyboard_tests) { |
| 388 CheckKeyTestCase(&rewriter, test); | 305 CheckKeyTestCase(&rewriter, test); |
| 389 } | 306 } |
| 390 } | 307 } |
| 391 | 308 |
| 392 void EventRewriterTest::TestRewriteNumPadKeys() { | 309 void EventRewriterTest::TestRewriteNumPadKeys() { |
| 393 TestingPrefServiceSyncable prefs; | 310 TestingPrefServiceSyncable prefs; |
| 394 EventRewriter rewriter(NULL); | 311 EventRewriter rewriter(NULL); |
| 395 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 312 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 396 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 313 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
| 397 rewriter.set_pref_service_for_testing(&prefs); | 314 rewriter.set_pref_service_for_testing(&prefs); |
| 398 | 315 |
| 399 KeyTestCase tests[] = { | 316 KeyTestCase tests[] = { |
| 400 // XK_KP_Insert (= NumPad 0 without Num Lock), no modifier. | 317 // XK_KP_Insert (= NumPad 0 without Num Lock), no modifier. |
| 401 {ui::ET_KEY_PRESSED, | 318 {ui::ET_KEY_PRESSED, |
| 402 {ui::VKEY_INSERT, | 319 {ui::VKEY_INSERT, ui::DomCode::NUMPAD0, ui::EF_NONE, ui::DomKey::INSERT}, |
| 403 ui::DomCode::NUMPAD0, | 320 {ui::VKEY_NUMPAD0, ui::DomCode::NUMPAD0, ui::EF_NONE, '0'}}, |
| 404 ui::EF_NONE, | |
| 405 ui::DomKey::INSERT, | |
| 406 0}, | |
| 407 {ui::VKEY_NUMPAD0, | |
| 408 ui::DomCode::NUMPAD0, | |
| 409 ui::EF_NONE, | |
| 410 ui::DomKey::CHARACTER, | |
| 411 '0'}}, | |
| 412 | 321 |
| 413 // XK_KP_Insert (= NumPad 0 without Num Lock), Alt modifier. | 322 // XK_KP_Insert (= NumPad 0 without Num Lock), Alt modifier. |
| 414 {ui::ET_KEY_PRESSED, | 323 {ui::ET_KEY_PRESSED, |
| 415 {ui::VKEY_INSERT, | 324 {ui::VKEY_INSERT, ui::DomCode::NUMPAD0, ui::EF_ALT_DOWN, |
| 416 ui::DomCode::NUMPAD0, | 325 ui::DomKey::INSERT}, |
| 417 ui::EF_ALT_DOWN, | 326 {ui::VKEY_NUMPAD0, ui::DomCode::NUMPAD0, ui::EF_ALT_DOWN, '0'}}, |
| 418 ui::DomKey::INSERT, | |
| 419 0}, | |
| 420 {ui::VKEY_NUMPAD0, | |
| 421 ui::DomCode::NUMPAD0, | |
| 422 ui::EF_ALT_DOWN, | |
| 423 ui::DomKey::CHARACTER, | |
| 424 '0'}}, | |
| 425 | 327 |
| 426 // XK_KP_Delete (= NumPad . without Num Lock), Alt modifier. | 328 // XK_KP_Delete (= NumPad . without Num Lock), Alt modifier. |
| 427 {ui::ET_KEY_PRESSED, | 329 {ui::ET_KEY_PRESSED, |
| 428 {ui::VKEY_DELETE, | 330 {ui::VKEY_DELETE, ui::DomCode::NUMPAD_DECIMAL, ui::EF_ALT_DOWN, |
| 429 ui::DomCode::NUMPAD_DECIMAL, | 331 ui::DomKey::DEL}, |
| 430 ui::EF_ALT_DOWN, | 332 {ui::VKEY_DECIMAL, ui::DomCode::NUMPAD_DECIMAL, ui::EF_ALT_DOWN, '.'}}, |
| 431 ui::DomKey::DEL, | |
| 432 0x7F}, | |
| 433 {ui::VKEY_DECIMAL, | |
| 434 ui::DomCode::NUMPAD_DECIMAL, | |
| 435 ui::EF_ALT_DOWN, | |
| 436 ui::DomKey::CHARACTER, | |
| 437 '.'}}, | |
| 438 | 333 |
| 439 // XK_KP_End (= NumPad 1 without Num Lock), Alt modifier. | 334 // XK_KP_End (= NumPad 1 without Num Lock), Alt modifier. |
| 440 {ui::ET_KEY_PRESSED, | 335 {ui::ET_KEY_PRESSED, |
| 441 {ui::VKEY_END, | 336 {ui::VKEY_END, ui::DomCode::NUMPAD1, ui::EF_ALT_DOWN, ui::DomKey::END}, |
| 442 ui::DomCode::NUMPAD1, | 337 {ui::VKEY_NUMPAD1, ui::DomCode::NUMPAD1, ui::EF_ALT_DOWN, '1'}}, |
| 443 ui::EF_ALT_DOWN, | |
| 444 ui::DomKey::END, | |
| 445 0}, | |
| 446 {ui::VKEY_NUMPAD1, | |
| 447 ui::DomCode::NUMPAD1, | |
| 448 ui::EF_ALT_DOWN, | |
| 449 ui::DomKey::CHARACTER, | |
| 450 '1'}}, | |
| 451 | 338 |
| 452 // XK_KP_Down (= NumPad 2 without Num Lock), Alt modifier. | 339 // XK_KP_Down (= NumPad 2 without Num Lock), Alt modifier. |
| 453 {ui::ET_KEY_PRESSED, | 340 {ui::ET_KEY_PRESSED, |
| 454 {ui::VKEY_DOWN, | 341 {ui::VKEY_DOWN, ui::DomCode::NUMPAD2, ui::EF_ALT_DOWN, |
| 455 ui::DomCode::NUMPAD2, | 342 ui::DomKey::ARROW_DOWN}, |
| 456 ui::EF_ALT_DOWN, | 343 {ui::VKEY_NUMPAD2, ui::DomCode::NUMPAD2, ui::EF_ALT_DOWN, '2'}}, |
| 457 ui::DomKey::ARROW_DOWN, | |
| 458 0}, | |
| 459 {ui::VKEY_NUMPAD2, | |
| 460 ui::DomCode::NUMPAD2, | |
| 461 ui::EF_ALT_DOWN, | |
| 462 ui::DomKey::CHARACTER, | |
| 463 '2'}}, | |
| 464 | 344 |
| 465 // XK_KP_Next (= NumPad 3 without Num Lock), Alt modifier. | 345 // XK_KP_Next (= NumPad 3 without Num Lock), Alt modifier. |
| 466 {ui::ET_KEY_PRESSED, | 346 {ui::ET_KEY_PRESSED, |
| 467 {ui::VKEY_NEXT, | 347 {ui::VKEY_NEXT, ui::DomCode::NUMPAD3, ui::EF_ALT_DOWN, |
| 468 ui::DomCode::NUMPAD3, | 348 ui::DomKey::PAGE_DOWN}, |
| 469 ui::EF_ALT_DOWN, | 349 {ui::VKEY_NUMPAD3, ui::DomCode::NUMPAD3, ui::EF_ALT_DOWN, '3'}}, |
| 470 ui::DomKey::PAGE_DOWN, | |
| 471 0}, | |
| 472 {ui::VKEY_NUMPAD3, | |
| 473 ui::DomCode::NUMPAD3, | |
| 474 ui::EF_ALT_DOWN, | |
| 475 ui::DomKey::CHARACTER, | |
| 476 '3'}}, | |
| 477 | 350 |
| 478 // XK_KP_Left (= NumPad 4 without Num Lock), Alt modifier. | 351 // XK_KP_Left (= NumPad 4 without Num Lock), Alt modifier. |
| 479 {ui::ET_KEY_PRESSED, | 352 {ui::ET_KEY_PRESSED, |
| 480 {ui::VKEY_LEFT, | 353 {ui::VKEY_LEFT, ui::DomCode::NUMPAD4, ui::EF_ALT_DOWN, |
| 481 ui::DomCode::NUMPAD4, | 354 ui::DomKey::ARROW_LEFT}, |
| 482 ui::EF_ALT_DOWN, | 355 {ui::VKEY_NUMPAD4, ui::DomCode::NUMPAD4, ui::EF_ALT_DOWN, '4'}}, |
| 483 ui::DomKey::ARROW_LEFT, | |
| 484 0}, | |
| 485 {ui::VKEY_NUMPAD4, | |
| 486 ui::DomCode::NUMPAD4, | |
| 487 ui::EF_ALT_DOWN, | |
| 488 ui::DomKey::CHARACTER, | |
| 489 '4'}}, | |
| 490 | 356 |
| 491 // XK_KP_Begin (= NumPad 5 without Num Lock), Alt modifier. | 357 // XK_KP_Begin (= NumPad 5 without Num Lock), Alt modifier. |
| 492 {ui::ET_KEY_PRESSED, | 358 {ui::ET_KEY_PRESSED, |
| 493 {ui::VKEY_CLEAR, | 359 {ui::VKEY_CLEAR, ui::DomCode::NUMPAD5, ui::EF_ALT_DOWN, |
| 494 ui::DomCode::NUMPAD5, | 360 ui::DomKey::CLEAR}, |
| 495 ui::EF_ALT_DOWN, | 361 {ui::VKEY_NUMPAD5, ui::DomCode::NUMPAD5, ui::EF_ALT_DOWN, '5'}}, |
| 496 ui::DomKey::CLEAR, | |
| 497 0}, | |
| 498 {ui::VKEY_NUMPAD5, | |
| 499 ui::DomCode::NUMPAD5, | |
| 500 ui::EF_ALT_DOWN, | |
| 501 ui::DomKey::CHARACTER, | |
| 502 '5'}}, | |
| 503 | 362 |
| 504 // XK_KP_Right (= NumPad 6 without Num Lock), Alt modifier. | 363 // XK_KP_Right (= NumPad 6 without Num Lock), Alt modifier. |
| 505 {ui::ET_KEY_PRESSED, | 364 {ui::ET_KEY_PRESSED, |
| 506 {ui::VKEY_RIGHT, | 365 {ui::VKEY_RIGHT, ui::DomCode::NUMPAD6, ui::EF_ALT_DOWN, |
| 507 ui::DomCode::NUMPAD6, | 366 ui::DomKey::ARROW_RIGHT}, |
| 508 ui::EF_ALT_DOWN, | 367 {ui::VKEY_NUMPAD6, ui::DomCode::NUMPAD6, ui::EF_ALT_DOWN, '6'}}, |
| 509 ui::DomKey::ARROW_RIGHT, | |
| 510 0}, | |
| 511 {ui::VKEY_NUMPAD6, | |
| 512 ui::DomCode::NUMPAD6, | |
| 513 ui::EF_ALT_DOWN, | |
| 514 ui::DomKey::CHARACTER, | |
| 515 '6'}}, | |
| 516 | 368 |
| 517 // XK_KP_Home (= NumPad 7 without Num Lock), Alt modifier. | 369 // XK_KP_Home (= NumPad 7 without Num Lock), Alt modifier. |
| 518 {ui::ET_KEY_PRESSED, | 370 {ui::ET_KEY_PRESSED, |
| 519 {ui::VKEY_HOME, | 371 {ui::VKEY_HOME, ui::DomCode::NUMPAD7, ui::EF_ALT_DOWN, ui::DomKey::HOME}, |
| 520 ui::DomCode::NUMPAD7, | 372 {ui::VKEY_NUMPAD7, ui::DomCode::NUMPAD7, ui::EF_ALT_DOWN, '7'}}, |
| 521 ui::EF_ALT_DOWN, | |
| 522 ui::DomKey::HOME, | |
| 523 0}, | |
| 524 {ui::VKEY_NUMPAD7, | |
| 525 ui::DomCode::NUMPAD7, | |
| 526 ui::EF_ALT_DOWN, | |
| 527 ui::DomKey::CHARACTER, | |
| 528 '7'}}, | |
| 529 | 373 |
| 530 // XK_KP_Up (= NumPad 8 without Num Lock), Alt modifier. | 374 // XK_KP_Up (= NumPad 8 without Num Lock), Alt modifier. |
| 531 {ui::ET_KEY_PRESSED, | 375 {ui::ET_KEY_PRESSED, |
| 532 {ui::VKEY_UP, | 376 {ui::VKEY_UP, ui::DomCode::NUMPAD8, ui::EF_ALT_DOWN, |
| 533 ui::DomCode::NUMPAD8, | 377 ui::DomKey::ARROW_UP}, |
| 534 ui::EF_ALT_DOWN, | 378 {ui::VKEY_NUMPAD8, ui::DomCode::NUMPAD8, ui::EF_ALT_DOWN, '8'}}, |
| 535 ui::DomKey::ARROW_UP, | |
| 536 0}, | |
| 537 {ui::VKEY_NUMPAD8, | |
| 538 ui::DomCode::NUMPAD8, | |
| 539 ui::EF_ALT_DOWN, | |
| 540 ui::DomKey::CHARACTER, | |
| 541 '8'}}, | |
| 542 | 379 |
| 543 // XK_KP_Prior (= NumPad 9 without Num Lock), Alt modifier. | 380 // XK_KP_Prior (= NumPad 9 without Num Lock), Alt modifier. |
| 544 {ui::ET_KEY_PRESSED, | 381 {ui::ET_KEY_PRESSED, |
| 545 {ui::VKEY_PRIOR, | 382 {ui::VKEY_PRIOR, ui::DomCode::NUMPAD9, ui::EF_ALT_DOWN, |
| 546 ui::DomCode::NUMPAD9, | 383 ui::DomKey::PAGE_UP}, |
| 547 ui::EF_ALT_DOWN, | 384 {ui::VKEY_NUMPAD9, ui::DomCode::NUMPAD9, ui::EF_ALT_DOWN, '9'}}, |
| 548 ui::DomKey::PAGE_UP, | |
| 549 0}, | |
| 550 {ui::VKEY_NUMPAD9, | |
| 551 ui::DomCode::NUMPAD9, | |
| 552 ui::EF_ALT_DOWN, | |
| 553 ui::DomKey::CHARACTER, | |
| 554 '9'}}, | |
| 555 | 385 |
| 556 // XK_KP_0 (= NumPad 0 with Num Lock), Num Lock modifier. | 386 // XK_KP_0 (= NumPad 0 with Num Lock), Num Lock modifier. |
| 557 {ui::ET_KEY_PRESSED, | 387 {ui::ET_KEY_PRESSED, |
| 558 {ui::VKEY_NUMPAD0, | 388 {ui::VKEY_NUMPAD0, ui::DomCode::NUMPAD0, ui::EF_NONE, '0'}, |
| 559 ui::DomCode::NUMPAD0, | 389 {ui::VKEY_NUMPAD0, ui::DomCode::NUMPAD0, ui::EF_NONE, '0'}}, |
| 560 ui::EF_NONE, | |
| 561 ui::DomKey::CHARACTER, | |
| 562 '0'}, | |
| 563 {ui::VKEY_NUMPAD0, | |
| 564 ui::DomCode::NUMPAD0, | |
| 565 ui::EF_NONE, | |
| 566 ui::DomKey::CHARACTER, | |
| 567 '0'}}, | |
| 568 | 390 |
| 569 // XK_KP_DECIMAL (= NumPad . with Num Lock), Num Lock modifier. | 391 // XK_KP_DECIMAL (= NumPad . with Num Lock), Num Lock modifier. |
| 570 {ui::ET_KEY_PRESSED, | 392 {ui::ET_KEY_PRESSED, |
| 571 {ui::VKEY_DECIMAL, | 393 {ui::VKEY_DECIMAL, ui::DomCode::NUMPAD_DECIMAL, ui::EF_NONE, '.'}, |
| 572 ui::DomCode::NUMPAD_DECIMAL, | 394 {ui::VKEY_DECIMAL, ui::DomCode::NUMPAD_DECIMAL, ui::EF_NONE, '.'}}, |
| 573 ui::EF_NONE, | |
| 574 ui::DomKey::CHARACTER, | |
| 575 '.'}, | |
| 576 {ui::VKEY_DECIMAL, | |
| 577 ui::DomCode::NUMPAD_DECIMAL, | |
| 578 ui::EF_NONE, | |
| 579 ui::DomKey::CHARACTER, | |
| 580 '.'}}, | |
| 581 | 395 |
| 582 // XK_KP_1 (= NumPad 1 with Num Lock), Num Lock modifier. | 396 // XK_KP_1 (= NumPad 1 with Num Lock), Num Lock modifier. |
| 583 {ui::ET_KEY_PRESSED, | 397 {ui::ET_KEY_PRESSED, |
| 584 {ui::VKEY_NUMPAD1, | 398 {ui::VKEY_NUMPAD1, ui::DomCode::NUMPAD1, ui::EF_NONE, '1'}, |
| 585 ui::DomCode::NUMPAD1, | 399 {ui::VKEY_NUMPAD1, ui::DomCode::NUMPAD1, ui::EF_NONE, '1'}}, |
| 586 ui::EF_NONE, | |
| 587 ui::DomKey::CHARACTER, | |
| 588 '1'}, | |
| 589 {ui::VKEY_NUMPAD1, | |
| 590 ui::DomCode::NUMPAD1, | |
| 591 ui::EF_NONE, | |
| 592 ui::DomKey::CHARACTER, | |
| 593 '1'}}, | |
| 594 | 400 |
| 595 // XK_KP_2 (= NumPad 2 with Num Lock), Num Lock modifier. | 401 // XK_KP_2 (= NumPad 2 with Num Lock), Num Lock modifier. |
| 596 {ui::ET_KEY_PRESSED, | 402 {ui::ET_KEY_PRESSED, |
| 597 {ui::VKEY_NUMPAD2, | 403 {ui::VKEY_NUMPAD2, ui::DomCode::NUMPAD2, ui::EF_NONE, '2'}, |
| 598 ui::DomCode::NUMPAD2, | 404 {ui::VKEY_NUMPAD2, ui::DomCode::NUMPAD2, ui::EF_NONE, '2'}}, |
| 599 ui::EF_NONE, | |
| 600 ui::DomKey::CHARACTER, | |
| 601 '2'}, | |
| 602 {ui::VKEY_NUMPAD2, | |
| 603 ui::DomCode::NUMPAD2, | |
| 604 ui::EF_NONE, | |
| 605 ui::DomKey::CHARACTER, | |
| 606 '2'}}, | |
| 607 | 405 |
| 608 // XK_KP_3 (= NumPad 3 with Num Lock), Num Lock modifier. | 406 // XK_KP_3 (= NumPad 3 with Num Lock), Num Lock modifier. |
| 609 {ui::ET_KEY_PRESSED, | 407 {ui::ET_KEY_PRESSED, |
| 610 {ui::VKEY_NUMPAD3, | 408 {ui::VKEY_NUMPAD3, ui::DomCode::NUMPAD3, ui::EF_NONE, '3'}, |
| 611 ui::DomCode::NUMPAD3, | 409 {ui::VKEY_NUMPAD3, ui::DomCode::NUMPAD3, ui::EF_NONE, '3'}}, |
| 612 ui::EF_NONE, | |
| 613 ui::DomKey::CHARACTER, | |
| 614 '3'}, | |
| 615 {ui::VKEY_NUMPAD3, | |
| 616 ui::DomCode::NUMPAD3, | |
| 617 ui::EF_NONE, | |
| 618 ui::DomKey::CHARACTER, | |
| 619 '3'}}, | |
| 620 | 410 |
| 621 // XK_KP_4 (= NumPad 4 with Num Lock), Num Lock modifier. | 411 // XK_KP_4 (= NumPad 4 with Num Lock), Num Lock modifier. |
| 622 {ui::ET_KEY_PRESSED, | 412 {ui::ET_KEY_PRESSED, |
| 623 {ui::VKEY_NUMPAD4, | 413 {ui::VKEY_NUMPAD4, ui::DomCode::NUMPAD4, ui::EF_NONE, '4'}, |
| 624 ui::DomCode::NUMPAD4, | 414 {ui::VKEY_NUMPAD4, ui::DomCode::NUMPAD4, ui::EF_NONE, '4'}}, |
| 625 ui::EF_NONE, | |
| 626 ui::DomKey::CHARACTER, | |
| 627 '4'}, | |
| 628 {ui::VKEY_NUMPAD4, | |
| 629 ui::DomCode::NUMPAD4, | |
| 630 ui::EF_NONE, | |
| 631 ui::DomKey::CHARACTER, | |
| 632 '4'}}, | |
| 633 | 415 |
| 634 // XK_KP_5 (= NumPad 5 with Num Lock), Num Lock | 416 // XK_KP_5 (= NumPad 5 with Num Lock), Num Lock |
| 635 // modifier. | 417 // modifier. |
| 636 {ui::ET_KEY_PRESSED, | 418 {ui::ET_KEY_PRESSED, |
| 637 {ui::VKEY_NUMPAD5, | 419 {ui::VKEY_NUMPAD5, ui::DomCode::NUMPAD5, ui::EF_NONE, '5'}, |
| 638 ui::DomCode::NUMPAD5, | 420 {ui::VKEY_NUMPAD5, ui::DomCode::NUMPAD5, ui::EF_NONE, '5'}}, |
| 639 ui::EF_NONE, | |
| 640 ui::DomKey::CHARACTER, | |
| 641 '5'}, | |
| 642 {ui::VKEY_NUMPAD5, | |
| 643 ui::DomCode::NUMPAD5, | |
| 644 ui::EF_NONE, | |
| 645 ui::DomKey::CHARACTER, | |
| 646 '5'}}, | |
| 647 | 421 |
| 648 // XK_KP_6 (= NumPad 6 with Num Lock), Num Lock | 422 // XK_KP_6 (= NumPad 6 with Num Lock), Num Lock |
| 649 // modifier. | 423 // modifier. |
| 650 {ui::ET_KEY_PRESSED, | 424 {ui::ET_KEY_PRESSED, |
| 651 {ui::VKEY_NUMPAD6, | 425 {ui::VKEY_NUMPAD6, ui::DomCode::NUMPAD6, ui::EF_NONE, '6'}, |
| 652 ui::DomCode::NUMPAD6, | 426 {ui::VKEY_NUMPAD6, ui::DomCode::NUMPAD6, ui::EF_NONE, '6'}}, |
| 653 ui::EF_NONE, | |
| 654 ui::DomKey::CHARACTER, | |
| 655 '6'}, | |
| 656 {ui::VKEY_NUMPAD6, | |
| 657 ui::DomCode::NUMPAD6, | |
| 658 ui::EF_NONE, | |
| 659 ui::DomKey::CHARACTER, | |
| 660 '6'}}, | |
| 661 | 427 |
| 662 // XK_KP_7 (= NumPad 7 with Num Lock), Num Lock | 428 // XK_KP_7 (= NumPad 7 with Num Lock), Num Lock |
| 663 // modifier. | 429 // modifier. |
| 664 {ui::ET_KEY_PRESSED, | 430 {ui::ET_KEY_PRESSED, |
| 665 {ui::VKEY_NUMPAD7, | 431 {ui::VKEY_NUMPAD7, ui::DomCode::NUMPAD7, ui::EF_NONE, '7'}, |
| 666 ui::DomCode::NUMPAD7, | 432 {ui::VKEY_NUMPAD7, ui::DomCode::NUMPAD7, ui::EF_NONE, '7'}}, |
| 667 ui::EF_NONE, | |
| 668 ui::DomKey::CHARACTER, | |
| 669 '7'}, | |
| 670 {ui::VKEY_NUMPAD7, | |
| 671 ui::DomCode::NUMPAD7, | |
| 672 ui::EF_NONE, | |
| 673 ui::DomKey::CHARACTER, | |
| 674 '7'}}, | |
| 675 | 433 |
| 676 // XK_KP_8 (= NumPad 8 with Num Lock), Num Lock | 434 // XK_KP_8 (= NumPad 8 with Num Lock), Num Lock |
| 677 // modifier. | 435 // modifier. |
| 678 {ui::ET_KEY_PRESSED, | 436 {ui::ET_KEY_PRESSED, |
| 679 {ui::VKEY_NUMPAD8, | 437 {ui::VKEY_NUMPAD8, ui::DomCode::NUMPAD8, ui::EF_NONE, '8'}, |
| 680 ui::DomCode::NUMPAD8, | 438 {ui::VKEY_NUMPAD8, ui::DomCode::NUMPAD8, ui::EF_NONE, '8'}}, |
| 681 ui::EF_NONE, | |
| 682 ui::DomKey::CHARACTER, | |
| 683 '8'}, | |
| 684 {ui::VKEY_NUMPAD8, | |
| 685 ui::DomCode::NUMPAD8, | |
| 686 ui::EF_NONE, | |
| 687 ui::DomKey::CHARACTER, | |
| 688 '8'}}, | |
| 689 | 439 |
| 690 // XK_KP_9 (= NumPad 9 with Num Lock), Num Lock | 440 // XK_KP_9 (= NumPad 9 with Num Lock), Num Lock |
| 691 // modifier. | 441 // modifier. |
| 692 {ui::ET_KEY_PRESSED, | 442 {ui::ET_KEY_PRESSED, |
| 693 {ui::VKEY_NUMPAD9, | 443 {ui::VKEY_NUMPAD9, ui::DomCode::NUMPAD9, ui::EF_NONE, '9'}, |
| 694 ui::DomCode::NUMPAD9, | 444 {ui::VKEY_NUMPAD9, ui::DomCode::NUMPAD9, ui::EF_NONE, '9'}}, |
| 695 ui::EF_NONE, | |
| 696 ui::DomKey::CHARACTER, | |
| 697 '9'}, | |
| 698 {ui::VKEY_NUMPAD9, | |
| 699 ui::DomCode::NUMPAD9, | |
| 700 ui::EF_NONE, | |
| 701 ui::DomKey::CHARACTER, | |
| 702 '9'}}, | |
| 703 }; | 445 }; |
| 704 | 446 |
| 705 for (const auto& test : tests) { | 447 for (const auto& test : tests) { |
| 706 CheckKeyTestCase(&rewriter, test); | 448 CheckKeyTestCase(&rewriter, test); |
| 707 } | 449 } |
| 708 } | 450 } |
| 709 | 451 |
| 710 TEST_F(EventRewriterTest, TestRewriteNumPadKeys) { | 452 TEST_F(EventRewriterTest, TestRewriteNumPadKeys) { |
| 711 TestRewriteNumPadKeys(); | 453 TestRewriteNumPadKeys(); |
| 712 } | 454 } |
| (...skipping 13 matching lines...) Expand all Loading... |
| 726 TestingPrefServiceSyncable prefs; | 468 TestingPrefServiceSyncable prefs; |
| 727 EventRewriter rewriter(NULL); | 469 EventRewriter rewriter(NULL); |
| 728 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); | 470 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); |
| 729 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 471 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
| 730 rewriter.set_pref_service_for_testing(&prefs); | 472 rewriter.set_pref_service_for_testing(&prefs); |
| 731 | 473 |
| 732 KeyTestCase tests[] = { | 474 KeyTestCase tests[] = { |
| 733 // XK_KP_End (= NumPad 1 without Num Lock), Win modifier. | 475 // XK_KP_End (= NumPad 1 without Num Lock), Win modifier. |
| 734 // The result should be "Num Pad 1 with Control + Num Lock modifiers". | 476 // The result should be "Num Pad 1 with Control + Num Lock modifiers". |
| 735 {ui::ET_KEY_PRESSED, | 477 {ui::ET_KEY_PRESSED, |
| 736 {ui::VKEY_END, | 478 {ui::VKEY_END, ui::DomCode::NUMPAD1, ui::EF_COMMAND_DOWN, |
| 737 ui::DomCode::NUMPAD1, | 479 ui::DomKey::END}, |
| 738 ui::EF_COMMAND_DOWN, | 480 {ui::VKEY_NUMPAD1, ui::DomCode::NUMPAD1, ui::EF_CONTROL_DOWN, |
| 739 ui::DomKey::END, | 481 ui::DomKey::UNIDENTIFIED}}, |
| 740 0}, | |
| 741 {ui::VKEY_NUMPAD1, | |
| 742 ui::DomCode::NUMPAD1, | |
| 743 ui::EF_CONTROL_DOWN, | |
| 744 ui::DomKey::UNIDENTIFIED, | |
| 745 0}}, | |
| 746 | 482 |
| 747 // XK_KP_1 (= NumPad 1 with Num Lock), Win modifier. | 483 // XK_KP_1 (= NumPad 1 with Num Lock), Win modifier. |
| 748 // The result should also be "Num Pad 1 with Control + Num Lock | 484 // The result should also be "Num Pad 1 with Control + Num Lock |
| 749 // modifiers". | 485 // modifiers". |
| 750 {ui::ET_KEY_PRESSED, | 486 {ui::ET_KEY_PRESSED, |
| 751 {ui::VKEY_NUMPAD1, | 487 {ui::VKEY_NUMPAD1, ui::DomCode::NUMPAD1, ui::EF_COMMAND_DOWN, '1'}, |
| 752 ui::DomCode::NUMPAD1, | 488 {ui::VKEY_NUMPAD1, ui::DomCode::NUMPAD1, ui::EF_CONTROL_DOWN, |
| 753 ui::EF_COMMAND_DOWN, | 489 ui::DomKey::UNIDENTIFIED}}}; |
| 754 ui::DomKey::CHARACTER, | |
| 755 '1'}, | |
| 756 {ui::VKEY_NUMPAD1, | |
| 757 ui::DomCode::NUMPAD1, | |
| 758 ui::EF_CONTROL_DOWN, | |
| 759 ui::DomKey::UNIDENTIFIED, | |
| 760 0}}}; | |
| 761 | 490 |
| 762 for (const auto& test : tests) { | 491 for (const auto& test : tests) { |
| 763 CheckKeyTestCase(&rewriter, test); | 492 CheckKeyTestCase(&rewriter, test); |
| 764 } | 493 } |
| 765 } | 494 } |
| 766 | 495 |
| 767 TEST_F(EventRewriterTest, TestRewriteNumPadKeysOnAppleKeyboard) { | 496 TEST_F(EventRewriterTest, TestRewriteNumPadKeysOnAppleKeyboard) { |
| 768 TestRewriteNumPadKeysOnAppleKeyboard(); | 497 TestRewriteNumPadKeysOnAppleKeyboard(); |
| 769 } | 498 } |
| 770 | 499 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 781 | 510 |
| 782 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) { | 511 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) { |
| 783 TestingPrefServiceSyncable prefs; | 512 TestingPrefServiceSyncable prefs; |
| 784 EventRewriter rewriter(NULL); | 513 EventRewriter rewriter(NULL); |
| 785 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 514 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 786 rewriter.set_pref_service_for_testing(&prefs); | 515 rewriter.set_pref_service_for_testing(&prefs); |
| 787 | 516 |
| 788 KeyTestCase tests[] = { | 517 KeyTestCase tests[] = { |
| 789 // Press Search. Confirm the event is not rewritten. | 518 // Press Search. Confirm the event is not rewritten. |
| 790 {ui::ET_KEY_PRESSED, | 519 {ui::ET_KEY_PRESSED, |
| 791 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS, 0}, | 520 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS}, |
| 792 {ui::VKEY_LWIN, | 521 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_COMMAND_DOWN, |
| 793 ui::DomCode::OS_LEFT, | 522 ui::DomKey::OS}}, |
| 794 ui::EF_COMMAND_DOWN, | |
| 795 ui::DomKey::OS, | |
| 796 0}}, | |
| 797 | 523 |
| 798 // Press left Control. Confirm the event is not rewritten. | 524 // Press left Control. Confirm the event is not rewritten. |
| 799 {ui::ET_KEY_PRESSED, | 525 {ui::ET_KEY_PRESSED, |
| 800 {ui::VKEY_CONTROL, | 526 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
| 801 ui::DomCode::CONTROL_LEFT, | 527 ui::DomKey::CONTROL}, |
| 802 ui::EF_CONTROL_DOWN, | 528 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
| 803 ui::DomKey::CONTROL, | 529 ui::DomKey::CONTROL}}, |
| 804 0}, | |
| 805 {ui::VKEY_CONTROL, | |
| 806 ui::DomCode::CONTROL_LEFT, | |
| 807 ui::EF_CONTROL_DOWN, | |
| 808 ui::DomKey::CONTROL, | |
| 809 0}}, | |
| 810 | 530 |
| 811 // Press right Control. Confirm the event is not rewritten. | 531 // Press right Control. Confirm the event is not rewritten. |
| 812 {ui::ET_KEY_PRESSED, | 532 {ui::ET_KEY_PRESSED, |
| 813 {ui::VKEY_CONTROL, | 533 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
| 814 ui::DomCode::CONTROL_LEFT, | 534 ui::DomKey::CONTROL}, |
| 815 ui::EF_CONTROL_DOWN, | 535 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
| 816 ui::DomKey::CONTROL, | 536 ui::DomKey::CONTROL}}, |
| 817 0}, | |
| 818 {ui::VKEY_CONTROL, | |
| 819 ui::DomCode::CONTROL_LEFT, | |
| 820 ui::EF_CONTROL_DOWN, | |
| 821 ui::DomKey::CONTROL, | |
| 822 0}}, | |
| 823 | 537 |
| 824 // Press left Alt. Confirm the event is not rewritten. | 538 // Press left Alt. Confirm the event is not rewritten. |
| 825 {ui::ET_KEY_PRESSED, | 539 {ui::ET_KEY_PRESSED, |
| 826 {ui::VKEY_MENU, | 540 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, ui::DomKey::ALT}, |
| 827 ui::DomCode::ALT_LEFT, | 541 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, |
| 828 ui::EF_ALT_DOWN, | 542 ui::DomKey::ALT}}, |
| 829 ui::DomKey::ALT, | |
| 830 0}, | |
| 831 {ui::VKEY_MENU, | |
| 832 ui::DomCode::ALT_LEFT, | |
| 833 ui::EF_ALT_DOWN, | |
| 834 ui::DomKey::ALT, | |
| 835 0}}, | |
| 836 | 543 |
| 837 // Press right Alt. Confirm the event is not rewritten. | 544 // Press right Alt. Confirm the event is not rewritten. |
| 838 {ui::ET_KEY_PRESSED, | 545 {ui::ET_KEY_PRESSED, |
| 839 {ui::VKEY_MENU, | 546 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, ui::DomKey::ALT}, |
| 840 ui::DomCode::ALT_LEFT, | 547 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, |
| 841 ui::EF_ALT_DOWN, | 548 ui::DomKey::ALT}}, |
| 842 ui::DomKey::ALT, | |
| 843 0}, | |
| 844 {ui::VKEY_MENU, | |
| 845 ui::DomCode::ALT_LEFT, | |
| 846 ui::EF_ALT_DOWN, | |
| 847 ui::DomKey::ALT, | |
| 848 0}}, | |
| 849 | 549 |
| 850 // Test KeyRelease event, just in case. | 550 // Test KeyRelease event, just in case. |
| 851 // Release Search. Confirm the release event is not rewritten. | 551 // Release Search. Confirm the release event is not rewritten. |
| 852 {ui::ET_KEY_RELEASED, | 552 {ui::ET_KEY_RELEASED, |
| 853 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS, 0}, | 553 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS}, |
| 854 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS, 0}}, | 554 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS}}, |
| 855 }; | 555 }; |
| 856 | 556 |
| 857 for (const auto& test : tests) { | 557 for (const auto& test : tests) { |
| 858 CheckKeyTestCase(&rewriter, test); | 558 CheckKeyTestCase(&rewriter, test); |
| 859 } | 559 } |
| 860 } | 560 } |
| 861 | 561 |
| 862 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) { | 562 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) { |
| 863 TestingPrefServiceSyncable prefs; | 563 TestingPrefServiceSyncable prefs; |
| 864 EventRewriter rewriter(NULL); | 564 EventRewriter rewriter(NULL); |
| 865 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 565 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 866 rewriter.set_pref_service_for_testing(&prefs); | 566 rewriter.set_pref_service_for_testing(&prefs); |
| 867 | 567 |
| 868 KeyTestCase tests[] = { | 568 KeyTestCase tests[] = { |
| 869 // Press Alt with Shift. Confirm the event is not rewritten. | 569 // Press Alt with Shift. Confirm the event is not rewritten. |
| 870 {ui::ET_KEY_PRESSED, | 570 {ui::ET_KEY_PRESSED, |
| 871 {ui::VKEY_MENU, | 571 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, |
| 872 ui::DomCode::ALT_LEFT, | 572 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ALT}, |
| 873 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | 573 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, |
| 874 ui::DomKey::ALT, | 574 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ALT}}, |
| 875 0}, | |
| 876 {ui::VKEY_MENU, | |
| 877 ui::DomCode::ALT_LEFT, | |
| 878 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | |
| 879 ui::DomKey::ALT, | |
| 880 0}}, | |
| 881 | 575 |
| 882 // Press Search with Caps Lock mask. Confirm the event is not rewritten. | 576 // Press Search with Caps Lock mask. Confirm the event is not rewritten. |
| 883 {ui::ET_KEY_PRESSED, | 577 {ui::ET_KEY_PRESSED, |
| 884 {ui::VKEY_LWIN, | 578 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
| 885 ui::DomCode::OS_LEFT, | 579 ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}, |
| 886 ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN, | 580 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
| 887 ui::DomKey::OS, | 581 ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}}, |
| 888 0}, | |
| 889 {ui::VKEY_LWIN, | |
| 890 ui::DomCode::OS_LEFT, | |
| 891 ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN, | |
| 892 ui::DomKey::OS, | |
| 893 0}}, | |
| 894 | 582 |
| 895 // Release Search with Caps Lock mask. Confirm the event is not rewritten. | 583 // Release Search with Caps Lock mask. Confirm the event is not rewritten. |
| 896 {ui::ET_KEY_RELEASED, | 584 {ui::ET_KEY_RELEASED, |
| 897 {ui::VKEY_LWIN, | 585 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_CAPS_LOCK_DOWN, |
| 898 ui::DomCode::OS_LEFT, | 586 ui::DomKey::OS}, |
| 899 ui::EF_CAPS_LOCK_DOWN, | 587 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_CAPS_LOCK_DOWN, |
| 900 ui::DomKey::OS, | 588 ui::DomKey::OS}}, |
| 901 0}, | |
| 902 {ui::VKEY_LWIN, | |
| 903 ui::DomCode::OS_LEFT, | |
| 904 ui::EF_CAPS_LOCK_DOWN, | |
| 905 ui::DomKey::OS, | |
| 906 0}}, | |
| 907 | 589 |
| 908 // Press Shift+Ctrl+Alt+Search+A. Confirm the event is not rewritten. | 590 // Press Shift+Ctrl+Alt+Search+A. Confirm the event is not rewritten. |
| 909 {ui::ET_KEY_PRESSED, | 591 {ui::ET_KEY_PRESSED, |
| 910 {ui::VKEY_B, | 592 {ui::VKEY_B, ui::DomCode::KEY_B, |
| 911 ui::DomCode::KEY_B, | |
| 912 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 593 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
| 913 ui::EF_COMMAND_DOWN, | 594 ui::EF_COMMAND_DOWN, |
| 914 ui::DomKey::CHARACTER, | |
| 915 'B'}, | 595 'B'}, |
| 916 {ui::VKEY_B, | 596 {ui::VKEY_B, ui::DomCode::KEY_B, |
| 917 ui::DomCode::KEY_B, | |
| 918 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 597 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
| 919 ui::EF_COMMAND_DOWN, | 598 ui::EF_COMMAND_DOWN, |
| 920 ui::DomKey::CHARACTER, | |
| 921 'B'}}, | 599 'B'}}, |
| 922 }; | 600 }; |
| 923 | 601 |
| 924 for (const auto& test : tests) { | 602 for (const auto& test : tests) { |
| 925 CheckKeyTestCase(&rewriter, test); | 603 CheckKeyTestCase(&rewriter, test); |
| 926 } | 604 } |
| 927 } | 605 } |
| 928 | 606 |
| 929 TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) { | 607 TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) { |
| 930 // Disable Search and Control keys. | 608 // Disable Search and Control keys. |
| 931 TestingPrefServiceSyncable prefs; | 609 TestingPrefServiceSyncable prefs; |
| 932 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 610 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 933 IntegerPrefMember search; | 611 IntegerPrefMember search; |
| 934 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 612 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
| 935 search.SetValue(chromeos::input_method::kVoidKey); | 613 search.SetValue(chromeos::input_method::kVoidKey); |
| 936 IntegerPrefMember control; | 614 IntegerPrefMember control; |
| 937 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 615 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
| 938 control.SetValue(chromeos::input_method::kVoidKey); | 616 control.SetValue(chromeos::input_method::kVoidKey); |
| 939 | 617 |
| 940 EventRewriter rewriter(NULL); | 618 EventRewriter rewriter(NULL); |
| 941 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 619 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 942 rewriter.set_pref_service_for_testing(&prefs); | 620 rewriter.set_pref_service_for_testing(&prefs); |
| 943 | 621 |
| 944 KeyTestCase disabled_modifier_tests[] = { | 622 KeyTestCase disabled_modifier_tests[] = { |
| 945 // Press Alt with Shift. This key press shouldn't be affected by the | 623 // Press Alt with Shift. This key press shouldn't be affected by the |
| 946 // pref. Confirm the event is not rewritten. | 624 // pref. Confirm the event is not rewritten. |
| 947 {ui::ET_KEY_PRESSED, | 625 {ui::ET_KEY_PRESSED, |
| 948 {ui::VKEY_MENU, | 626 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, |
| 949 ui::DomCode::ALT_LEFT, | 627 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ALT}, |
| 950 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | 628 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, |
| 951 ui::DomKey::ALT, | 629 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ALT}}, |
| 952 0}, | |
| 953 {ui::VKEY_MENU, | |
| 954 ui::DomCode::ALT_LEFT, | |
| 955 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | |
| 956 ui::DomKey::ALT, | |
| 957 0}}, | |
| 958 | 630 |
| 959 // Press Search. Confirm the event is now VKEY_UNKNOWN. | 631 // Press Search. Confirm the event is now VKEY_UNKNOWN. |
| 960 {ui::ET_KEY_PRESSED, | 632 {ui::ET_KEY_PRESSED, |
| 961 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS, 0}, | 633 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS}, |
| 962 {ui::VKEY_UNKNOWN, | 634 {ui::VKEY_UNKNOWN, ui::DomCode::NONE, ui::EF_NONE, |
| 963 ui::DomCode::NONE, | 635 ui::DomKey::UNIDENTIFIED}}, |
| 964 ui::EF_NONE, | |
| 965 ui::DomKey::UNIDENTIFIED, | |
| 966 0}}, | |
| 967 | 636 |
| 968 // Press Control. Confirm the event is now VKEY_UNKNOWN. | 637 // Press Control. Confirm the event is now VKEY_UNKNOWN. |
| 969 {ui::ET_KEY_PRESSED, | 638 {ui::ET_KEY_PRESSED, |
| 970 {ui::VKEY_CONTROL, | 639 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
| 971 ui::DomCode::CONTROL_LEFT, | 640 ui::DomKey::CONTROL}, |
| 972 ui::EF_CONTROL_DOWN, | 641 {ui::VKEY_UNKNOWN, ui::DomCode::NONE, ui::EF_NONE, |
| 973 ui::DomKey::CONTROL, | 642 ui::DomKey::UNIDENTIFIED}}, |
| 974 0}, | |
| 975 {ui::VKEY_UNKNOWN, | |
| 976 ui::DomCode::NONE, | |
| 977 ui::EF_NONE, | |
| 978 ui::DomKey::UNIDENTIFIED, | |
| 979 0}}, | |
| 980 | 643 |
| 981 // Press Control+Search. Confirm the event is now VKEY_UNKNOWN | 644 // Press Control+Search. Confirm the event is now VKEY_UNKNOWN |
| 982 // without any modifiers. | 645 // without any modifiers. |
| 983 {ui::ET_KEY_PRESSED, | 646 {ui::ET_KEY_PRESSED, |
| 984 {ui::VKEY_LWIN, | 647 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_CONTROL_DOWN, |
| 985 ui::DomCode::OS_LEFT, | 648 ui::DomKey::OS}, |
| 986 ui::EF_CONTROL_DOWN, | 649 {ui::VKEY_UNKNOWN, ui::DomCode::NONE, ui::EF_NONE, |
| 987 ui::DomKey::OS, | 650 ui::DomKey::UNIDENTIFIED}}, |
| 988 0}, | |
| 989 {ui::VKEY_UNKNOWN, | |
| 990 ui::DomCode::NONE, | |
| 991 ui::EF_NONE, | |
| 992 ui::DomKey::UNIDENTIFIED, | |
| 993 0}}, | |
| 994 | 651 |
| 995 // Press Control+Search+a. Confirm the event is now VKEY_A without any | 652 // Press Control+Search+a. Confirm the event is now VKEY_A without any |
| 996 // modifiers. | 653 // modifiers. |
| 997 {ui::ET_KEY_PRESSED, | 654 {ui::ET_KEY_PRESSED, |
| 998 {ui::VKEY_A, | 655 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, 'a'}, |
| 999 ui::DomCode::KEY_A, | 656 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_NONE, 'a'}}, |
| 1000 ui::EF_CONTROL_DOWN, | |
| 1001 ui::DomKey::CHARACTER, | |
| 1002 'a'}, | |
| 1003 {ui::VKEY_A, | |
| 1004 ui::DomCode::KEY_A, | |
| 1005 ui::EF_NONE, | |
| 1006 ui::DomKey::CHARACTER, | |
| 1007 'a'}}, | |
| 1008 | 657 |
| 1009 // Press Control+Search+Alt+a. Confirm the event is now VKEY_A only with | 658 // Press Control+Search+Alt+a. Confirm the event is now VKEY_A only with |
| 1010 // the Alt modifier. | 659 // the Alt modifier. |
| 1011 {ui::ET_KEY_PRESSED, | 660 {ui::ET_KEY_PRESSED, |
| 1012 {ui::VKEY_A, | 661 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
| 1013 ui::DomCode::KEY_A, | |
| 1014 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | |
| 1015 ui::DomKey::CHARACTER, | |
| 1016 'a'}, | 662 'a'}, |
| 1017 {ui::VKEY_A, | 663 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN, 'a'}}, |
| 1018 ui::DomCode::KEY_A, | |
| 1019 ui::EF_ALT_DOWN, | |
| 1020 ui::DomKey::CHARACTER, | |
| 1021 'a'}}, | |
| 1022 }; | 664 }; |
| 1023 | 665 |
| 1024 for (const auto& test : disabled_modifier_tests) { | 666 for (const auto& test : disabled_modifier_tests) { |
| 1025 CheckKeyTestCase(&rewriter, test); | 667 CheckKeyTestCase(&rewriter, test); |
| 1026 } | 668 } |
| 1027 | 669 |
| 1028 // Remap Alt to Control. | 670 // Remap Alt to Control. |
| 1029 IntegerPrefMember alt; | 671 IntegerPrefMember alt; |
| 1030 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); | 672 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); |
| 1031 alt.SetValue(chromeos::input_method::kControlKey); | 673 alt.SetValue(chromeos::input_method::kControlKey); |
| 1032 | 674 |
| 1033 KeyTestCase tests[] = { | 675 KeyTestCase tests[] = { |
| 1034 // Press left Alt. Confirm the event is now VKEY_CONTROL | 676 // Press left Alt. Confirm the event is now VKEY_CONTROL |
| 1035 // even though the Control key itself is disabled. | 677 // even though the Control key itself is disabled. |
| 1036 {ui::ET_KEY_PRESSED, | 678 {ui::ET_KEY_PRESSED, |
| 1037 {ui::VKEY_MENU, | 679 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, ui::DomKey::ALT}, |
| 1038 ui::DomCode::ALT_LEFT, | 680 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
| 1039 ui::EF_ALT_DOWN, | 681 ui::DomKey::CONTROL}}, |
| 1040 ui::DomKey::ALT, | |
| 1041 0}, | |
| 1042 {ui::VKEY_CONTROL, | |
| 1043 ui::DomCode::CONTROL_LEFT, | |
| 1044 ui::EF_CONTROL_DOWN, | |
| 1045 ui::DomKey::CONTROL, | |
| 1046 0}}, | |
| 1047 | 682 |
| 1048 // Press Alt+a. Confirm the event is now Control+a even though the Control | 683 // Press Alt+a. Confirm the event is now Control+a even though the Control |
| 1049 // key itself is disabled. | 684 // key itself is disabled. |
| 1050 {ui::ET_KEY_PRESSED, | 685 {ui::ET_KEY_PRESSED, |
| 1051 {ui::VKEY_A, | 686 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN, 'a'}, |
| 1052 ui::DomCode::KEY_A, | 687 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, 0x01}}, |
| 1053 ui::EF_ALT_DOWN, | |
| 1054 ui::DomKey::CHARACTER, | |
| 1055 'a'}, | |
| 1056 {ui::VKEY_A, | |
| 1057 ui::DomCode::KEY_A, | |
| 1058 ui::EF_CONTROL_DOWN, | |
| 1059 ui::DomKey::CHARACTER, | |
| 1060 0x01}}, | |
| 1061 }; | 688 }; |
| 1062 | 689 |
| 1063 for (const auto& test : tests) { | 690 for (const auto& test : tests) { |
| 1064 CheckKeyTestCase(&rewriter, test); | 691 CheckKeyTestCase(&rewriter, test); |
| 1065 } | 692 } |
| 1066 } | 693 } |
| 1067 | 694 |
| 1068 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) { | 695 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) { |
| 1069 // Remap Search to Control. | 696 // Remap Search to Control. |
| 1070 TestingPrefServiceSyncable prefs; | 697 TestingPrefServiceSyncable prefs; |
| 1071 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 698 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 1072 IntegerPrefMember search; | 699 IntegerPrefMember search; |
| 1073 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 700 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
| 1074 search.SetValue(chromeos::input_method::kControlKey); | 701 search.SetValue(chromeos::input_method::kControlKey); |
| 1075 | 702 |
| 1076 EventRewriter rewriter(NULL); | 703 EventRewriter rewriter(NULL); |
| 1077 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 704 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1078 rewriter.set_pref_service_for_testing(&prefs); | 705 rewriter.set_pref_service_for_testing(&prefs); |
| 1079 | 706 |
| 1080 KeyTestCase s_tests[] = { | 707 KeyTestCase s_tests[] = { |
| 1081 // Press Search. Confirm the event is now VKEY_CONTROL. | 708 // Press Search. Confirm the event is now VKEY_CONTROL. |
| 1082 {ui::ET_KEY_PRESSED, | 709 {ui::ET_KEY_PRESSED, |
| 1083 {ui::VKEY_LWIN, | 710 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_COMMAND_DOWN, |
| 1084 ui::DomCode::OS_LEFT, | 711 ui::DomKey::OS}, |
| 1085 ui::EF_COMMAND_DOWN, | 712 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
| 1086 ui::DomKey::OS, | 713 ui::DomKey::CONTROL}}, |
| 1087 0}, | |
| 1088 {ui::VKEY_CONTROL, | |
| 1089 ui::DomCode::CONTROL_LEFT, | |
| 1090 ui::EF_CONTROL_DOWN, | |
| 1091 ui::DomKey::CONTROL, | |
| 1092 0}}, | |
| 1093 }; | 714 }; |
| 1094 | 715 |
| 1095 for (const auto& test : s_tests) { | 716 for (const auto& test : s_tests) { |
| 1096 CheckKeyTestCase(&rewriter, test); | 717 CheckKeyTestCase(&rewriter, test); |
| 1097 } | 718 } |
| 1098 | 719 |
| 1099 // Remap Alt to Control too. | 720 // Remap Alt to Control too. |
| 1100 IntegerPrefMember alt; | 721 IntegerPrefMember alt; |
| 1101 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); | 722 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); |
| 1102 alt.SetValue(chromeos::input_method::kControlKey); | 723 alt.SetValue(chromeos::input_method::kControlKey); |
| 1103 | 724 |
| 1104 KeyTestCase sa_tests[] = { | 725 KeyTestCase sa_tests[] = { |
| 1105 // Press Alt. Confirm the event is now VKEY_CONTROL. | 726 // Press Alt. Confirm the event is now VKEY_CONTROL. |
| 1106 {ui::ET_KEY_PRESSED, | 727 {ui::ET_KEY_PRESSED, |
| 1107 {ui::VKEY_MENU, | 728 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, ui::DomKey::ALT}, |
| 1108 ui::DomCode::ALT_LEFT, | 729 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
| 1109 ui::EF_ALT_DOWN, | 730 ui::DomKey::CONTROL}}, |
| 1110 ui::DomKey::ALT, | |
| 1111 0}, | |
| 1112 {ui::VKEY_CONTROL, | |
| 1113 ui::DomCode::CONTROL_LEFT, | |
| 1114 ui::EF_CONTROL_DOWN, | |
| 1115 ui::DomKey::CONTROL, | |
| 1116 0}}, | |
| 1117 | 731 |
| 1118 // Press Alt+Search. Confirm the event is now VKEY_CONTROL. | 732 // Press Alt+Search. Confirm the event is now VKEY_CONTROL. |
| 1119 {ui::ET_KEY_PRESSED, | 733 {ui::ET_KEY_PRESSED, |
| 1120 {ui::VKEY_LWIN, | 734 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
| 1121 ui::DomCode::OS_LEFT, | 735 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}, |
| 1122 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | 736 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
| 1123 ui::DomKey::OS, | 737 ui::DomKey::CONTROL}}, |
| 1124 0}, | |
| 1125 {ui::VKEY_CONTROL, | |
| 1126 ui::DomCode::CONTROL_LEFT, | |
| 1127 ui::EF_CONTROL_DOWN, | |
| 1128 ui::DomKey::CONTROL, | |
| 1129 0}}, | |
| 1130 | 738 |
| 1131 // Press Control+Alt+Search. Confirm the event is now VKEY_CONTROL. | 739 // Press Control+Alt+Search. Confirm the event is now VKEY_CONTROL. |
| 1132 {ui::ET_KEY_PRESSED, | 740 {ui::ET_KEY_PRESSED, |
| 1133 {ui::VKEY_LWIN, | 741 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
| 1134 ui::DomCode::OS_LEFT, | |
| 1135 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | 742 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 1136 ui::DomKey::OS, | 743 ui::DomKey::OS}, |
| 1137 0}, | 744 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
| 1138 {ui::VKEY_CONTROL, | 745 ui::DomKey::CONTROL}}, |
| 1139 ui::DomCode::CONTROL_LEFT, | |
| 1140 ui::EF_CONTROL_DOWN, | |
| 1141 ui::DomKey::CONTROL, | |
| 1142 0}}, | |
| 1143 | 746 |
| 1144 // Press Shift+Control+Alt+Search. Confirm the event is now Control with | 747 // Press Shift+Control+Alt+Search. Confirm the event is now Control with |
| 1145 // Shift and Control modifiers. | 748 // Shift and Control modifiers. |
| 1146 {ui::ET_KEY_PRESSED, | 749 {ui::ET_KEY_PRESSED, |
| 1147 {ui::VKEY_LWIN, | 750 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
| 1148 ui::DomCode::OS_LEFT, | |
| 1149 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 751 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
| 1150 ui::EF_COMMAND_DOWN, | 752 ui::EF_COMMAND_DOWN, |
| 1151 ui::DomKey::OS, | 753 ui::DomKey::OS}, |
| 1152 0}, | 754 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 1153 {ui::VKEY_CONTROL, | 755 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL}}, |
| 1154 ui::DomCode::CONTROL_LEFT, | |
| 1155 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | |
| 1156 ui::DomKey::CONTROL, | |
| 1157 0}}, | |
| 1158 | 756 |
| 1159 // Press Shift+Control+Alt+Search+B. Confirm the event is now B with Shift | 757 // Press Shift+Control+Alt+Search+B. Confirm the event is now B with Shift |
| 1160 // and Control modifiers. | 758 // and Control modifiers. |
| 1161 {ui::ET_KEY_PRESSED, | 759 {ui::ET_KEY_PRESSED, |
| 1162 {ui::VKEY_B, | 760 {ui::VKEY_B, ui::DomCode::KEY_B, |
| 1163 ui::DomCode::KEY_B, | |
| 1164 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 761 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
| 1165 ui::EF_COMMAND_DOWN, | 762 ui::EF_COMMAND_DOWN, |
| 1166 ui::DomKey::CHARACTER, | |
| 1167 'B'}, | 763 'B'}, |
| 1168 {ui::VKEY_B, | 764 {ui::VKEY_B, ui::DomCode::KEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
| 1169 ui::DomCode::KEY_B, | |
| 1170 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | |
| 1171 ui::DomKey::CHARACTER, | |
| 1172 0x02}}, | 765 0x02}}, |
| 1173 }; | 766 }; |
| 1174 | 767 |
| 1175 for (const auto& test : sa_tests) { | 768 for (const auto& test : sa_tests) { |
| 1176 CheckKeyTestCase(&rewriter, test); | 769 CheckKeyTestCase(&rewriter, test); |
| 1177 } | 770 } |
| 1178 } | 771 } |
| 1179 | 772 |
| 1180 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) { | 773 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) { |
| 1181 // Remap Search to ESC. | 774 // Remap Search to ESC. |
| 1182 TestingPrefServiceSyncable prefs; | 775 TestingPrefServiceSyncable prefs; |
| 1183 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 776 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 1184 IntegerPrefMember search; | 777 IntegerPrefMember search; |
| 1185 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 778 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
| 1186 search.SetValue(chromeos::input_method::kEscapeKey); | 779 search.SetValue(chromeos::input_method::kEscapeKey); |
| 1187 | 780 |
| 1188 EventRewriter rewriter(NULL); | 781 EventRewriter rewriter(NULL); |
| 1189 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 782 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1190 rewriter.set_pref_service_for_testing(&prefs); | 783 rewriter.set_pref_service_for_testing(&prefs); |
| 1191 | 784 |
| 1192 KeyTestCase tests[] = { | 785 KeyTestCase tests[] = { |
| 1193 // Press Search. Confirm the event is now VKEY_ESCAPE. | 786 // Press Search. Confirm the event is now VKEY_ESCAPE. |
| 1194 {ui::ET_KEY_PRESSED, | 787 {ui::ET_KEY_PRESSED, |
| 1195 {ui::VKEY_LWIN, | 788 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_COMMAND_DOWN, |
| 1196 ui::DomCode::OS_LEFT, | 789 ui::DomKey::OS}, |
| 1197 ui::EF_COMMAND_DOWN, | 790 {ui::VKEY_ESCAPE, ui::DomCode::ESCAPE, ui::EF_NONE, ui::DomKey::ESCAPE}}, |
| 1198 ui::DomKey::OS, | |
| 1199 0}, | |
| 1200 {ui::VKEY_ESCAPE, | |
| 1201 ui::DomCode::ESCAPE, | |
| 1202 ui::EF_NONE, | |
| 1203 ui::DomKey::ESCAPE, | |
| 1204 0x1B}}, | |
| 1205 }; | 791 }; |
| 1206 | 792 |
| 1207 for (const auto& test : tests) { | 793 for (const auto& test : tests) { |
| 1208 CheckKeyTestCase(&rewriter, test); | 794 CheckKeyTestCase(&rewriter, test); |
| 1209 } | 795 } |
| 1210 } | 796 } |
| 1211 | 797 |
| 1212 TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) { | 798 TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) { |
| 1213 // Remap Search to Alt. | 799 // Remap Search to Alt. |
| 1214 TestingPrefServiceSyncable prefs; | 800 TestingPrefServiceSyncable prefs; |
| 1215 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 801 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 1216 IntegerPrefMember search; | 802 IntegerPrefMember search; |
| 1217 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 803 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
| 1218 search.SetValue(chromeos::input_method::kAltKey); | 804 search.SetValue(chromeos::input_method::kAltKey); |
| 1219 | 805 |
| 1220 EventRewriter rewriter(NULL); | 806 EventRewriter rewriter(NULL); |
| 1221 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 807 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1222 rewriter.set_pref_service_for_testing(&prefs); | 808 rewriter.set_pref_service_for_testing(&prefs); |
| 1223 | 809 |
| 1224 KeyTestCase s2a_tests[] = { | 810 KeyTestCase s2a_tests[] = { |
| 1225 // Press Search. Confirm the event is now VKEY_MENU. | 811 // Press Search. Confirm the event is now VKEY_MENU. |
| 1226 {ui::ET_KEY_PRESSED, | 812 {ui::ET_KEY_PRESSED, |
| 1227 {ui::VKEY_LWIN, | 813 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_COMMAND_DOWN, |
| 1228 ui::DomCode::OS_LEFT, | 814 ui::DomKey::OS}, |
| 1229 ui::EF_COMMAND_DOWN, | 815 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, |
| 1230 ui::DomKey::OS, | 816 ui::DomKey::ALT}}, |
| 1231 0}, | |
| 1232 {ui::VKEY_MENU, | |
| 1233 ui::DomCode::ALT_LEFT, | |
| 1234 ui::EF_ALT_DOWN, | |
| 1235 ui::DomKey::ALT, | |
| 1236 0}}, | |
| 1237 }; | 817 }; |
| 1238 | 818 |
| 1239 for (const auto& test : s2a_tests) { | 819 for (const auto& test : s2a_tests) { |
| 1240 CheckKeyTestCase(&rewriter, test); | 820 CheckKeyTestCase(&rewriter, test); |
| 1241 } | 821 } |
| 1242 | 822 |
| 1243 // Remap Alt to Control. | 823 // Remap Alt to Control. |
| 1244 IntegerPrefMember alt; | 824 IntegerPrefMember alt; |
| 1245 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); | 825 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); |
| 1246 alt.SetValue(chromeos::input_method::kControlKey); | 826 alt.SetValue(chromeos::input_method::kControlKey); |
| 1247 | 827 |
| 1248 KeyTestCase a2c_tests[] = { | 828 KeyTestCase a2c_tests[] = { |
| 1249 // Press left Alt. Confirm the event is now VKEY_CONTROL. | 829 // Press left Alt. Confirm the event is now VKEY_CONTROL. |
| 1250 {ui::ET_KEY_PRESSED, | 830 {ui::ET_KEY_PRESSED, |
| 1251 {ui::VKEY_MENU, | 831 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, ui::DomKey::ALT}, |
| 1252 ui::DomCode::ALT_LEFT, | 832 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
| 1253 ui::EF_ALT_DOWN, | 833 ui::DomKey::CONTROL}}, |
| 1254 ui::DomKey::ALT, | |
| 1255 0}, | |
| 1256 {ui::VKEY_CONTROL, | |
| 1257 ui::DomCode::CONTROL_LEFT, | |
| 1258 ui::EF_CONTROL_DOWN, | |
| 1259 ui::DomKey::CONTROL, | |
| 1260 0}}, | |
| 1261 // Press Shift+comma. Verify that only the flags are changed. | 834 // Press Shift+comma. Verify that only the flags are changed. |
| 1262 // The X11 portion of the test addresses crbug.com/390263 by verifying | 835 // The X11 portion of the test addresses crbug.com/390263 by verifying |
| 1263 // that the X keycode remains that for ',<' and not for 105-key '<>'. | 836 // that the X keycode remains that for ',<' and not for 105-key '<>'. |
| 1264 {ui::ET_KEY_PRESSED, | 837 {ui::ET_KEY_PRESSED, |
| 1265 {ui::VKEY_OEM_COMMA, | 838 {ui::VKEY_OEM_COMMA, ui::DomCode::COMMA, |
| 1266 ui::DomCode::COMMA, | 839 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::UNIDENTIFIED}, |
| 1267 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | 840 {ui::VKEY_OEM_COMMA, ui::DomCode::COMMA, |
| 1268 ui::DomKey::UNIDENTIFIED, | 841 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::UNIDENTIFIED}}, |
| 1269 0}, | |
| 1270 {ui::VKEY_OEM_COMMA, | |
| 1271 ui::DomCode::COMMA, | |
| 1272 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | |
| 1273 ui::DomKey::UNIDENTIFIED, | |
| 1274 0}}, | |
| 1275 // Press Shift+9. Verify that only the flags are changed. | 842 // Press Shift+9. Verify that only the flags are changed. |
| 1276 {ui::ET_KEY_PRESSED, | 843 {ui::ET_KEY_PRESSED, |
| 1277 {ui::VKEY_9, | 844 {ui::VKEY_9, ui::DomCode::DIGIT9, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, |
| 1278 ui::DomCode::DIGIT9, | 845 ui::DomKey::UNIDENTIFIED}, |
| 1279 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | 846 {ui::VKEY_9, ui::DomCode::DIGIT9, |
| 1280 ui::DomKey::UNIDENTIFIED, | 847 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::UNIDENTIFIED}}, |
| 1281 0}, | |
| 1282 {ui::VKEY_9, | |
| 1283 ui::DomCode::DIGIT9, | |
| 1284 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | |
| 1285 ui::DomKey::UNIDENTIFIED, | |
| 1286 0}}, | |
| 1287 }; | 848 }; |
| 1288 | 849 |
| 1289 for (const auto& test : a2c_tests) { | 850 for (const auto& test : a2c_tests) { |
| 1290 CheckKeyTestCase(&rewriter, test); | 851 CheckKeyTestCase(&rewriter, test); |
| 1291 } | 852 } |
| 1292 | 853 |
| 1293 // Remap Control to Search. | 854 // Remap Control to Search. |
| 1294 IntegerPrefMember control; | 855 IntegerPrefMember control; |
| 1295 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 856 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
| 1296 control.SetValue(chromeos::input_method::kSearchKey); | 857 control.SetValue(chromeos::input_method::kSearchKey); |
| 1297 | 858 |
| 1298 KeyTestCase c2s_tests[] = { | 859 KeyTestCase c2s_tests[] = { |
| 1299 // Press left Control. Confirm the event is now VKEY_LWIN. | 860 // Press left Control. Confirm the event is now VKEY_LWIN. |
| 1300 {ui::ET_KEY_PRESSED, | 861 {ui::ET_KEY_PRESSED, |
| 1301 {ui::VKEY_CONTROL, | 862 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
| 1302 ui::DomCode::CONTROL_LEFT, | 863 ui::DomKey::CONTROL}, |
| 1303 ui::EF_CONTROL_DOWN, | 864 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_COMMAND_DOWN, |
| 1304 ui::DomKey::CONTROL, | 865 ui::DomKey::OS}}, |
| 1305 0}, | |
| 1306 {ui::VKEY_LWIN, | |
| 1307 ui::DomCode::OS_LEFT, | |
| 1308 ui::EF_COMMAND_DOWN, | |
| 1309 ui::DomKey::OS, | |
| 1310 0}}, | |
| 1311 | 866 |
| 1312 // Then, press all of the three, Control+Alt+Search. | 867 // Then, press all of the three, Control+Alt+Search. |
| 1313 {ui::ET_KEY_PRESSED, | 868 {ui::ET_KEY_PRESSED, |
| 1314 {ui::VKEY_LWIN, | 869 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
| 1315 ui::DomCode::OS_LEFT, | |
| 1316 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | 870 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 1317 ui::DomKey::OS, | 871 ui::DomKey::OS}, |
| 1318 0}, | 872 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, |
| 1319 {ui::VKEY_MENU, | |
| 1320 ui::DomCode::ALT_LEFT, | |
| 1321 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | 873 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 1322 ui::DomKey::ALT, | 874 ui::DomKey::ALT}}, |
| 1323 0}}, | |
| 1324 | 875 |
| 1325 // Press Shift+Control+Alt+Search. | 876 // Press Shift+Control+Alt+Search. |
| 1326 {ui::ET_KEY_PRESSED, | 877 {ui::ET_KEY_PRESSED, |
| 1327 {ui::VKEY_LWIN, | 878 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
| 1328 ui::DomCode::OS_LEFT, | |
| 1329 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 879 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
| 1330 ui::EF_COMMAND_DOWN, | 880 ui::EF_COMMAND_DOWN, |
| 1331 ui::DomKey::OS, | 881 ui::DomKey::OS}, |
| 1332 0}, | 882 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, |
| 1333 {ui::VKEY_MENU, | |
| 1334 ui::DomCode::ALT_LEFT, | |
| 1335 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 883 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
| 1336 ui::EF_COMMAND_DOWN, | 884 ui::EF_COMMAND_DOWN, |
| 1337 ui::DomKey::ALT, | 885 ui::DomKey::ALT}}, |
| 1338 0}}, | |
| 1339 | 886 |
| 1340 // Press Shift+Control+Alt+Search+B | 887 // Press Shift+Control+Alt+Search+B |
| 1341 {ui::ET_KEY_PRESSED, | 888 {ui::ET_KEY_PRESSED, |
| 1342 {ui::VKEY_B, | 889 {ui::VKEY_B, ui::DomCode::KEY_B, |
| 1343 ui::DomCode::KEY_B, | |
| 1344 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 890 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
| 1345 ui::EF_COMMAND_DOWN, | 891 ui::EF_COMMAND_DOWN, |
| 1346 ui::DomKey::CHARACTER, | |
| 1347 'B'}, | 892 'B'}, |
| 1348 {ui::VKEY_B, | 893 {ui::VKEY_B, ui::DomCode::KEY_B, |
| 1349 ui::DomCode::KEY_B, | |
| 1350 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 894 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
| 1351 ui::EF_COMMAND_DOWN, | 895 ui::EF_COMMAND_DOWN, |
| 1352 ui::DomKey::CHARACTER, | |
| 1353 'B'}}, | 896 'B'}}, |
| 1354 }; | 897 }; |
| 1355 | 898 |
| 1356 for (const auto& test : c2s_tests) { | 899 for (const auto& test : c2s_tests) { |
| 1357 CheckKeyTestCase(&rewriter, test); | 900 CheckKeyTestCase(&rewriter, test); |
| 1358 } | 901 } |
| 1359 } | 902 } |
| 1360 | 903 |
| 1361 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) { | 904 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) { |
| 1362 // Remap Search to Caps Lock. | 905 // Remap Search to Caps Lock. |
| 1363 TestingPrefServiceSyncable prefs; | 906 TestingPrefServiceSyncable prefs; |
| 1364 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 907 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 1365 IntegerPrefMember search; | 908 IntegerPrefMember search; |
| 1366 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 909 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
| 1367 search.SetValue(chromeos::input_method::kCapsLockKey); | 910 search.SetValue(chromeos::input_method::kCapsLockKey); |
| 1368 | 911 |
| 1369 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 912 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
| 1370 EventRewriter rewriter(NULL); | 913 EventRewriter rewriter(NULL); |
| 1371 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 914 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1372 rewriter.set_pref_service_for_testing(&prefs); | 915 rewriter.set_pref_service_for_testing(&prefs); |
| 1373 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 916 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
| 1374 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 917 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
| 1375 | 918 |
| 1376 // Press Search. | 919 // Press Search. |
| 1377 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, | 920 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, |
| 1378 ui::DomCode::CAPS_LOCK, ui::EF_MOD3_DOWN, | 921 ui::DomCode::CAPS_LOCK, ui::EF_MOD3_DOWN, |
| 1379 ui::DomKey::CAPS_LOCK, 0), | 922 ui::DomKey::CAPS_LOCK), |
| 1380 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 923 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
| 1381 ui::VKEY_LWIN, ui::DomCode::OS_LEFT, | 924 ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
| 1382 ui::EF_COMMAND_DOWN, ui::DomKey::OS, 0)); | 925 ui::EF_COMMAND_DOWN, ui::DomKey::OS)); |
| 1383 // Confirm that the Caps Lock status is changed. | 926 // Confirm that the Caps Lock status is changed. |
| 1384 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 927 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
| 1385 | 928 |
| 1386 // Release Search. | 929 // Release Search. |
| 1387 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, | 930 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, |
| 1388 ui::DomCode::CAPS_LOCK, ui::EF_NONE, | 931 ui::DomCode::CAPS_LOCK, ui::EF_NONE, |
| 1389 ui::DomKey::CAPS_LOCK, 0), | 932 ui::DomKey::CAPS_LOCK), |
| 1390 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 933 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
| 1391 ui::VKEY_LWIN, ui::DomCode::OS_LEFT, | 934 ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
| 1392 ui::EF_NONE, ui::DomKey::OS, 0)); | 935 ui::EF_NONE, ui::DomKey::OS)); |
| 1393 // Confirm that the Caps Lock status is not changed. | 936 // Confirm that the Caps Lock status is not changed. |
| 1394 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 937 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
| 1395 | 938 |
| 1396 // Press Search. | 939 // Press Search. |
| 1397 EXPECT_EQ( | 940 EXPECT_EQ( |
| 1398 GetExpectedResultAsString( | 941 GetExpectedResultAsString( |
| 1399 ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, | 942 ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, |
| 1400 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, ui::DomKey::CAPS_LOCK, 0), | 943 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, ui::DomKey::CAPS_LOCK), |
| 1401 GetRewrittenEventAsString( | 944 GetRewrittenEventAsString( |
| 1402 &rewriter, ui::ET_KEY_PRESSED, ui::VKEY_LWIN, ui::DomCode::OS_LEFT, | 945 &rewriter, ui::ET_KEY_PRESSED, ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
| 1403 ui::EF_COMMAND_DOWN | ui::EF_CAPS_LOCK_DOWN, ui::DomKey::OS, 0)); | 946 ui::EF_COMMAND_DOWN | ui::EF_CAPS_LOCK_DOWN, ui::DomKey::OS)); |
| 1404 // Confirm that the Caps Lock status is changed. | 947 // Confirm that the Caps Lock status is changed. |
| 1405 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 948 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
| 1406 | 949 |
| 1407 // Release Search. | 950 // Release Search. |
| 1408 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, | 951 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, |
| 1409 ui::DomCode::CAPS_LOCK, ui::EF_NONE, | 952 ui::DomCode::CAPS_LOCK, ui::EF_NONE, |
| 1410 ui::DomKey::CAPS_LOCK, 0), | 953 ui::DomKey::CAPS_LOCK), |
| 1411 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 954 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
| 1412 ui::VKEY_LWIN, ui::DomCode::OS_LEFT, | 955 ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
| 1413 ui::EF_NONE, ui::DomKey::OS, 0)); | 956 ui::EF_NONE, ui::DomKey::OS)); |
| 1414 // Confirm that the Caps Lock status is not changed. | 957 // Confirm that the Caps Lock status is not changed. |
| 1415 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 958 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
| 1416 | 959 |
| 1417 // Press Caps Lock (on an external keyboard). | 960 // Press Caps Lock (on an external keyboard). |
| 1418 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, | 961 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, |
| 1419 ui::DomCode::CAPS_LOCK, | 962 ui::DomCode::CAPS_LOCK, |
| 1420 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 963 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
| 1421 ui::DomKey::CAPS_LOCK, 0), | 964 ui::DomKey::CAPS_LOCK), |
| 1422 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 965 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
| 1423 ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, | 966 ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, |
| 1424 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 967 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
| 1425 ui::DomKey::CAPS_LOCK, 0)); | 968 ui::DomKey::CAPS_LOCK)); |
| 1426 | 969 |
| 1427 #if defined(USE_X11) | 970 #if defined(USE_X11) |
| 1428 // Confirm that calling RewriteForTesting() does not change the state of | 971 // Confirm that calling RewriteForTesting() does not change the state of |
| 1429 // |ime_keyboard|. In this case, X Window system itself should change the | 972 // |ime_keyboard|. In this case, X Window system itself should change the |
| 1430 // Caps Lock state, not ash::EventRewriter. | 973 // Caps Lock state, not ash::EventRewriter. |
| 1431 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 974 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
| 1432 #elif defined(USE_OZONE) | 975 #elif defined(USE_OZONE) |
| 1433 // Under Ozone the rewriter is responsible for changing the caps lock | 976 // Under Ozone the rewriter is responsible for changing the caps lock |
| 1434 // state when the final key is Caps Lock, regardless of whether the | 977 // state when the final key is Caps Lock, regardless of whether the |
| 1435 // initial key is Caps Lock. | 978 // initial key is Caps Lock. |
| 1436 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 979 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
| 1437 #endif | 980 #endif |
| 1438 | 981 |
| 1439 // Release Caps Lock (on an external keyboard). | 982 // Release Caps Lock (on an external keyboard). |
| 1440 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, | 983 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, |
| 1441 ui::DomCode::CAPS_LOCK, ui::EF_NONE, | 984 ui::DomCode::CAPS_LOCK, ui::EF_NONE, |
| 1442 ui::DomKey::CAPS_LOCK, 0), | 985 ui::DomKey::CAPS_LOCK), |
| 1443 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 986 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
| 1444 ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, | 987 ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, |
| 1445 ui::EF_NONE, ui::DomKey::CAPS_LOCK, 0)); | 988 ui::EF_NONE, ui::DomKey::CAPS_LOCK)); |
| 1446 #if defined(USE_X11) | 989 #if defined(USE_X11) |
| 1447 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 990 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
| 1448 #elif defined(USE_OZONE) | 991 #elif defined(USE_OZONE) |
| 1449 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 992 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
| 1450 #endif | 993 #endif |
| 1451 } | 994 } |
| 1452 | 995 |
| 1453 TEST_F(EventRewriterTest, TestRewriteCapsLock) { | 996 TEST_F(EventRewriterTest, TestRewriteCapsLock) { |
| 1454 TestingPrefServiceSyncable prefs; | 997 TestingPrefServiceSyncable prefs; |
| 1455 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 998 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 1456 | 999 |
| 1457 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 1000 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
| 1458 EventRewriter rewriter(NULL); | 1001 EventRewriter rewriter(NULL); |
| 1459 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1002 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1460 rewriter.set_pref_service_for_testing(&prefs); | 1003 rewriter.set_pref_service_for_testing(&prefs); |
| 1461 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 1004 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
| 1462 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 1005 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
| 1463 | 1006 |
| 1464 // On Chrome OS, CapsLock is mapped to F16 with Mod3Mask. | 1007 // On Chrome OS, CapsLock is mapped to F16 with Mod3Mask. |
| 1465 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, | 1008 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, |
| 1466 ui::DomCode::CAPS_LOCK, | 1009 ui::DomCode::CAPS_LOCK, |
| 1467 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1010 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
| 1468 ui::DomKey::CAPS_LOCK, 0), | 1011 ui::DomKey::CAPS_LOCK), |
| 1469 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1012 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
| 1470 ui::VKEY_F16, ui::DomCode::F16, | 1013 ui::VKEY_F16, ui::DomCode::F16, |
| 1471 ui::EF_MOD3_DOWN, ui::DomKey::F16, 0)); | 1014 ui::EF_MOD3_DOWN, ui::DomKey::F16)); |
| 1472 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 1015 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
| 1473 } | 1016 } |
| 1474 | 1017 |
| 1475 TEST_F(EventRewriterTest, TestRewriteDiamondKey) { | 1018 TEST_F(EventRewriterTest, TestRewriteDiamondKey) { |
| 1476 TestingPrefServiceSyncable prefs; | 1019 TestingPrefServiceSyncable prefs; |
| 1477 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1020 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 1478 | 1021 |
| 1479 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 1022 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
| 1480 EventRewriter rewriter(NULL); | 1023 EventRewriter rewriter(NULL); |
| 1481 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1024 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1482 rewriter.set_pref_service_for_testing(&prefs); | 1025 rewriter.set_pref_service_for_testing(&prefs); |
| 1483 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 1026 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
| 1484 | 1027 |
| 1485 KeyTestCase tests[] = { | 1028 KeyTestCase tests[] = { |
| 1486 // F15 should work as Ctrl when --has-chromeos-diamond-key is not | 1029 // F15 should work as Ctrl when --has-chromeos-diamond-key is not |
| 1487 // specified. | 1030 // specified. |
| 1488 {ui::ET_KEY_PRESSED, | 1031 {ui::ET_KEY_PRESSED, |
| 1489 {ui::VKEY_F15, ui::DomCode::F15, ui::EF_NONE, ui::DomKey::F15, 0}, | 1032 {ui::VKEY_F15, ui::DomCode::F15, ui::EF_NONE, ui::DomKey::F15}, |
| 1490 {ui::VKEY_CONTROL, | 1033 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
| 1491 ui::DomCode::CONTROL_LEFT, | 1034 ui::DomKey::CONTROL}}, |
| 1492 ui::EF_CONTROL_DOWN, | |
| 1493 ui::DomKey::CONTROL, | |
| 1494 0}}, | |
| 1495 | 1035 |
| 1496 {ui::ET_KEY_RELEASED, | 1036 {ui::ET_KEY_RELEASED, |
| 1497 {ui::VKEY_F15, ui::DomCode::F15, ui::EF_NONE, ui::DomKey::F15, 0}, | 1037 {ui::VKEY_F15, ui::DomCode::F15, ui::EF_NONE, ui::DomKey::F15}, |
| 1498 {ui::VKEY_CONTROL, | 1038 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_NONE, |
| 1499 ui::DomCode::CONTROL_LEFT, | 1039 ui::DomKey::CONTROL}}, |
| 1500 ui::EF_NONE, | |
| 1501 ui::DomKey::CONTROL, | |
| 1502 0}}, | |
| 1503 | 1040 |
| 1504 // However, Mod2Mask should not be rewritten to CtrlMask when | 1041 // However, Mod2Mask should not be rewritten to CtrlMask when |
| 1505 // --has-chromeos-diamond-key is not specified. | 1042 // --has-chromeos-diamond-key is not specified. |
| 1506 {ui::ET_KEY_PRESSED, | 1043 {ui::ET_KEY_PRESSED, |
| 1507 {ui::VKEY_A, | 1044 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_NONE, 'a'}, |
| 1508 ui::DomCode::KEY_A, | 1045 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_NONE, 'a'}}, |
| 1509 ui::EF_NONE, | |
| 1510 ui::DomKey::CHARACTER, | |
| 1511 'a'}, | |
| 1512 {ui::VKEY_A, | |
| 1513 ui::DomCode::KEY_A, | |
| 1514 ui::EF_NONE, | |
| 1515 ui::DomKey::CHARACTER, | |
| 1516 'a'}}, | |
| 1517 }; | 1046 }; |
| 1518 | 1047 |
| 1519 for (const auto& test : tests) { | 1048 for (const auto& test : tests) { |
| 1520 CheckKeyTestCase(&rewriter, test); | 1049 CheckKeyTestCase(&rewriter, test); |
| 1521 } | 1050 } |
| 1522 } | 1051 } |
| 1523 | 1052 |
| 1524 TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) { | 1053 TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) { |
| 1525 const base::CommandLine original_cl(*base::CommandLine::ForCurrentProcess()); | 1054 const base::CommandLine original_cl(*base::CommandLine::ForCurrentProcess()); |
| 1526 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 1055 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| 1527 chromeos::switches::kHasChromeOSDiamondKey, ""); | 1056 chromeos::switches::kHasChromeOSDiamondKey, ""); |
| 1528 | 1057 |
| 1529 TestingPrefServiceSyncable prefs; | 1058 TestingPrefServiceSyncable prefs; |
| 1530 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1059 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 1531 | 1060 |
| 1532 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 1061 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
| 1533 EventRewriter rewriter(NULL); | 1062 EventRewriter rewriter(NULL); |
| 1534 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1063 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1535 rewriter.set_pref_service_for_testing(&prefs); | 1064 rewriter.set_pref_service_for_testing(&prefs); |
| 1536 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 1065 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
| 1537 | 1066 |
| 1538 // By default, F15 should work as Control. | 1067 // By default, F15 should work as Control. |
| 1539 EXPECT_EQ(GetExpectedResultAsString( | 1068 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, |
| 1540 ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 1069 ui::DomCode::CONTROL_LEFT, |
| 1541 ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL, 0), | 1070 ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL), |
| 1542 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1071 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
| 1543 ui::VKEY_F15, ui::DomCode::F15, | 1072 ui::VKEY_F15, ui::DomCode::F15, |
| 1544 ui::EF_NONE, ui::DomKey::F15, 0)); | 1073 ui::EF_NONE, ui::DomKey::F15)); |
| 1545 // Check that Control is applied to a subsequent key press. | 1074 // Check that Control is applied to a subsequent key press. |
| 1546 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1075 EXPECT_EQ( |
| 1547 ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, | 1076 GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1548 ui::DomKey::CHARACTER, 0x01), | 1077 ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, 0x01), |
| 1549 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1078 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1550 ui::DomCode::KEY_A, ui::EF_NONE, | 1079 ui::DomCode::KEY_A, ui::EF_NONE, 'a')); |
| 1551 ui::DomKey::CHARACTER, 'a')); | |
| 1552 // Release F15 | 1080 // Release F15 |
| 1553 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, | 1081 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, |
| 1554 ui::DomCode::CONTROL_LEFT, ui::EF_NONE, | 1082 ui::DomCode::CONTROL_LEFT, ui::EF_NONE, |
| 1555 ui::DomKey::CONTROL, 0), | 1083 ui::DomKey::CONTROL), |
| 1556 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 1084 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
| 1557 ui::VKEY_F15, ui::DomCode::F15, | 1085 ui::VKEY_F15, ui::DomCode::F15, |
| 1558 ui::EF_NONE, ui::DomKey::F15, 0)); | 1086 ui::EF_NONE, ui::DomKey::F15)); |
| 1559 // Check that Control is no longer applied to a subsequent key press. | 1087 // Check that Control is no longer applied to a subsequent key press. |
| 1560 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1088 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1561 ui::DomCode::KEY_A, ui::EF_NONE, | 1089 ui::DomCode::KEY_A, ui::EF_NONE, 'a'), |
| 1562 ui::DomKey::CHARACTER, 'a'), | |
| 1563 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1090 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1564 ui::DomCode::KEY_A, ui::EF_NONE, | 1091 ui::DomCode::KEY_A, ui::EF_NONE, 'a')); |
| 1565 ui::DomKey::CHARACTER, 'a')); | |
| 1566 | 1092 |
| 1567 IntegerPrefMember diamond; | 1093 IntegerPrefMember diamond; |
| 1568 diamond.Init(prefs::kLanguageRemapDiamondKeyTo, &prefs); | 1094 diamond.Init(prefs::kLanguageRemapDiamondKeyTo, &prefs); |
| 1569 diamond.SetValue(chromeos::input_method::kVoidKey); | 1095 diamond.SetValue(chromeos::input_method::kVoidKey); |
| 1570 | 1096 |
| 1571 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_UNKNOWN, | 1097 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_UNKNOWN, |
| 1572 ui::DomCode::NONE, ui::EF_NONE, | 1098 ui::DomCode::NONE, ui::EF_NONE, |
| 1573 ui::DomKey::UNIDENTIFIED, 0), | 1099 ui::DomKey::UNIDENTIFIED), |
| 1574 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1100 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
| 1575 ui::VKEY_F15, ui::DomCode::F15, | 1101 ui::VKEY_F15, ui::DomCode::F15, |
| 1576 ui::EF_NONE, ui::DomKey::F15, 0)); | 1102 ui::EF_NONE, ui::DomKey::F15)); |
| 1577 // Check that no modifier is applied to another key. | 1103 // Check that no modifier is applied to another key. |
| 1578 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1104 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1579 ui::DomCode::KEY_A, ui::EF_NONE, | 1105 ui::DomCode::KEY_A, ui::EF_NONE, 'a'), |
| 1580 ui::DomKey::CHARACTER, 'a'), | |
| 1581 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1106 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1582 ui::DomCode::KEY_A, ui::EF_NONE, | 1107 ui::DomCode::KEY_A, ui::EF_NONE, 'a')); |
| 1583 ui::DomKey::CHARACTER, 'a')); | |
| 1584 | 1108 |
| 1585 diamond.SetValue(chromeos::input_method::kControlKey); | 1109 diamond.SetValue(chromeos::input_method::kControlKey); |
| 1586 | 1110 |
| 1587 EXPECT_EQ(GetExpectedResultAsString( | 1111 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, |
| 1588 ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 1112 ui::DomCode::CONTROL_LEFT, |
| 1589 ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL, 0), | 1113 ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL), |
| 1590 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1114 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
| 1591 ui::VKEY_F15, ui::DomCode::F15, | 1115 ui::VKEY_F15, ui::DomCode::F15, |
| 1592 ui::EF_NONE, ui::DomKey::F15, 0)); | 1116 ui::EF_NONE, ui::DomKey::F15)); |
| 1593 // Check that Control is applied to a subsequent key press. | 1117 // Check that Control is applied to a subsequent key press. |
| 1594 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1118 EXPECT_EQ( |
| 1595 ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, | 1119 GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1596 ui::DomKey::CHARACTER, 0x01), | 1120 ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, 0x01), |
| 1597 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1121 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1598 ui::DomCode::KEY_A, ui::EF_NONE, | 1122 ui::DomCode::KEY_A, ui::EF_NONE, 'a')); |
| 1599 ui::DomKey::CHARACTER, 'a')); | |
| 1600 // Release F15 | 1123 // Release F15 |
| 1601 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, | 1124 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, |
| 1602 ui::DomCode::CONTROL_LEFT, ui::EF_NONE, | 1125 ui::DomCode::CONTROL_LEFT, ui::EF_NONE, |
| 1603 ui::DomKey::CONTROL, 0), | 1126 ui::DomKey::CONTROL), |
| 1604 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 1127 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
| 1605 ui::VKEY_F15, ui::DomCode::F15, | 1128 ui::VKEY_F15, ui::DomCode::F15, |
| 1606 ui::EF_NONE, ui::DomKey::F15, 0)); | 1129 ui::EF_NONE, ui::DomKey::F15)); |
| 1607 // Check that Control is no longer applied to a subsequent key press. | 1130 // Check that Control is no longer applied to a subsequent key press. |
| 1608 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1131 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1609 ui::DomCode::KEY_A, ui::EF_NONE, | 1132 ui::DomCode::KEY_A, ui::EF_NONE, 'a'), |
| 1610 ui::DomKey::CHARACTER, 'a'), | |
| 1611 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1133 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1612 ui::DomCode::KEY_A, ui::EF_NONE, | 1134 ui::DomCode::KEY_A, ui::EF_NONE, 'a')); |
| 1613 ui::DomKey::CHARACTER, 'a')); | |
| 1614 | 1135 |
| 1615 diamond.SetValue(chromeos::input_method::kAltKey); | 1136 diamond.SetValue(chromeos::input_method::kAltKey); |
| 1616 | 1137 |
| 1617 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_MENU, | 1138 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_MENU, |
| 1618 ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, | 1139 ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, |
| 1619 ui::DomKey::ALT, 0), | 1140 ui::DomKey::ALT), |
| 1620 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1141 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
| 1621 ui::VKEY_F15, ui::DomCode::F15, | 1142 ui::VKEY_F15, ui::DomCode::F15, |
| 1622 ui::EF_NONE, ui::DomKey::F15, 0)); | 1143 ui::EF_NONE, ui::DomKey::F15)); |
| 1623 // Check that Alt is applied to a subsequent key press. | 1144 // Check that Alt is applied to a subsequent key press. |
| 1624 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1145 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1625 ui::DomCode::KEY_A, ui::EF_ALT_DOWN, | 1146 ui::DomCode::KEY_A, ui::EF_ALT_DOWN, 'a'), |
| 1626 ui::DomKey::CHARACTER, 'a'), | |
| 1627 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1147 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1628 ui::DomCode::KEY_A, ui::EF_NONE, | 1148 ui::DomCode::KEY_A, ui::EF_NONE, 'a')); |
| 1629 ui::DomKey::CHARACTER, 'a')); | |
| 1630 // Release F15 | 1149 // Release F15 |
| 1631 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_MENU, | 1150 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_MENU, |
| 1632 ui::DomCode::ALT_LEFT, ui::EF_NONE, | 1151 ui::DomCode::ALT_LEFT, ui::EF_NONE, |
| 1633 ui::DomKey::ALT, 0), | 1152 ui::DomKey::ALT), |
| 1634 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 1153 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
| 1635 ui::VKEY_F15, ui::DomCode::F15, | 1154 ui::VKEY_F15, ui::DomCode::F15, |
| 1636 ui::EF_NONE, ui::DomKey::F15, 0)); | 1155 ui::EF_NONE, ui::DomKey::F15)); |
| 1637 // Check that Alt is no longer applied to a subsequent key press. | 1156 // Check that Alt is no longer applied to a subsequent key press. |
| 1638 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1157 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1639 ui::DomCode::KEY_A, ui::EF_NONE, | 1158 ui::DomCode::KEY_A, ui::EF_NONE, 'a'), |
| 1640 ui::DomKey::CHARACTER, 'a'), | |
| 1641 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1159 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1642 ui::DomCode::KEY_A, ui::EF_NONE, | 1160 ui::DomCode::KEY_A, ui::EF_NONE, 'a')); |
| 1643 ui::DomKey::CHARACTER, 'a')); | |
| 1644 | 1161 |
| 1645 diamond.SetValue(chromeos::input_method::kCapsLockKey); | 1162 diamond.SetValue(chromeos::input_method::kCapsLockKey); |
| 1646 | 1163 |
| 1647 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, | 1164 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, |
| 1648 ui::DomCode::CAPS_LOCK, | 1165 ui::DomCode::CAPS_LOCK, |
| 1649 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1166 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
| 1650 ui::DomKey::CAPS_LOCK, 0), | 1167 ui::DomKey::CAPS_LOCK), |
| 1651 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1168 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
| 1652 ui::VKEY_F15, ui::DomCode::F15, | 1169 ui::VKEY_F15, ui::DomCode::F15, |
| 1653 ui::EF_NONE, ui::DomKey::F15, 0)); | 1170 ui::EF_NONE, ui::DomKey::F15)); |
| 1654 // Check that Caps is applied to a subsequent key press. | 1171 // Check that Caps is applied to a subsequent key press. |
| 1655 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1172 EXPECT_EQ(GetExpectedResultAsString( |
| 1656 ui::DomCode::KEY_A, | 1173 ui::ET_KEY_PRESSED, ui::VKEY_A, ui::DomCode::KEY_A, |
| 1657 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1174 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, 'A'), |
| 1658 ui::DomKey::CHARACTER, 'A'), | |
| 1659 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1175 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1660 ui::DomCode::KEY_A, ui::EF_NONE, | 1176 ui::DomCode::KEY_A, ui::EF_NONE, 'a')); |
| 1661 ui::DomKey::CHARACTER, 'a')); | |
| 1662 // Release F15 | 1177 // Release F15 |
| 1663 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, | 1178 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, |
| 1664 ui::DomCode::CAPS_LOCK, ui::EF_NONE, | 1179 ui::DomCode::CAPS_LOCK, ui::EF_NONE, |
| 1665 ui::DomKey::CAPS_LOCK, 0), | 1180 ui::DomKey::CAPS_LOCK), |
| 1666 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 1181 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
| 1667 ui::VKEY_F15, ui::DomCode::F15, | 1182 ui::VKEY_F15, ui::DomCode::F15, |
| 1668 ui::EF_NONE, ui::DomKey::F15, 0)); | 1183 ui::EF_NONE, ui::DomKey::F15)); |
| 1669 // Check that Control is no longer applied to a subsequent key press. | 1184 // Check that Control is no longer applied to a subsequent key press. |
| 1670 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1185 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1671 ui::DomCode::KEY_A, ui::EF_NONE, | 1186 ui::DomCode::KEY_A, ui::EF_NONE, 'a'), |
| 1672 ui::DomKey::CHARACTER, 'a'), | |
| 1673 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1187 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1674 ui::DomCode::KEY_A, ui::EF_NONE, | 1188 ui::DomCode::KEY_A, ui::EF_NONE, 'a')); |
| 1675 ui::DomKey::CHARACTER, 'a')); | |
| 1676 | 1189 |
| 1677 *base::CommandLine::ForCurrentProcess() = original_cl; | 1190 *base::CommandLine::ForCurrentProcess() = original_cl; |
| 1678 } | 1191 } |
| 1679 | 1192 |
| 1680 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) { | 1193 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) { |
| 1681 // Remap CapsLock to Control. | 1194 // Remap CapsLock to Control. |
| 1682 TestingPrefServiceSyncable prefs; | 1195 TestingPrefServiceSyncable prefs; |
| 1683 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1196 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 1684 IntegerPrefMember control; | 1197 IntegerPrefMember control; |
| 1685 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); | 1198 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); |
| 1686 control.SetValue(chromeos::input_method::kControlKey); | 1199 control.SetValue(chromeos::input_method::kControlKey); |
| 1687 | 1200 |
| 1688 EventRewriter rewriter(NULL); | 1201 EventRewriter rewriter(NULL); |
| 1689 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1202 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1690 rewriter.set_pref_service_for_testing(&prefs); | 1203 rewriter.set_pref_service_for_testing(&prefs); |
| 1691 | 1204 |
| 1692 KeyTestCase tests[] = { | 1205 KeyTestCase tests[] = { |
| 1693 // Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. | 1206 // Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. |
| 1694 // On Chrome OS, CapsLock works as a Mod3 modifier. | 1207 // On Chrome OS, CapsLock works as a Mod3 modifier. |
| 1695 {ui::ET_KEY_PRESSED, | 1208 {ui::ET_KEY_PRESSED, |
| 1696 {ui::VKEY_A, | 1209 {ui::VKEY_A, |
| 1697 ui::DomCode::KEY_A, | 1210 ui::DomCode::KEY_A, |
| 1698 ui::EF_MOD3_DOWN, | 1211 ui::EF_MOD3_DOWN, |
| 1699 ui::DomKey::CHARACTER, | |
| 1700 'a'}, | 1212 'a'}, |
| 1701 {ui::VKEY_A, | 1213 {ui::VKEY_A, |
| 1702 ui::DomCode::KEY_A, | 1214 ui::DomCode::KEY_A, |
| 1703 ui::EF_CONTROL_DOWN, | 1215 ui::EF_CONTROL_DOWN, |
| 1704 ui::DomKey::CHARACTER, | |
| 1705 0x01}}, | 1216 0x01}}, |
| 1706 | 1217 |
| 1707 // Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to | 1218 // Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to |
| 1708 // ControlMask | 1219 // ControlMask |
| 1709 {ui::ET_KEY_PRESSED, | 1220 {ui::ET_KEY_PRESSED, |
| 1710 {ui::VKEY_A, | 1221 {ui::VKEY_A, |
| 1711 ui::DomCode::KEY_A, | 1222 ui::DomCode::KEY_A, |
| 1712 ui::EF_CONTROL_DOWN | ui::EF_MOD3_DOWN, | 1223 ui::EF_CONTROL_DOWN | ui::EF_MOD3_DOWN, |
| 1713 ui::DomKey::CHARACTER, | |
| 1714 'a'}, | 1224 'a'}, |
| 1715 {ui::VKEY_A, | 1225 {ui::VKEY_A, |
| 1716 ui::DomCode::KEY_A, | 1226 ui::DomCode::KEY_A, |
| 1717 ui::EF_CONTROL_DOWN, | 1227 ui::EF_CONTROL_DOWN, |
| 1718 ui::DomKey::CHARACTER, | |
| 1719 0x01}}, | 1228 0x01}}, |
| 1720 | 1229 |
| 1721 // Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to | 1230 // Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to |
| 1722 // ControlMask. | 1231 // ControlMask. |
| 1723 {ui::ET_KEY_PRESSED, | 1232 {ui::ET_KEY_PRESSED, |
| 1724 {ui::VKEY_A, | 1233 {ui::VKEY_A, |
| 1725 ui::DomCode::KEY_A, | 1234 ui::DomCode::KEY_A, |
| 1726 ui::EF_ALT_DOWN | ui::EF_MOD3_DOWN, | 1235 ui::EF_ALT_DOWN | ui::EF_MOD3_DOWN, |
| 1727 ui::DomKey::CHARACTER, | |
| 1728 'a'}, | 1236 'a'}, |
| 1729 {ui::VKEY_A, | 1237 {ui::VKEY_A, |
| 1730 ui::DomCode::KEY_A, | 1238 ui::DomCode::KEY_A, |
| 1731 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | 1239 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
| 1732 ui::DomKey::CHARACTER, | |
| 1733 0x01}}, | 1240 0x01}}, |
| 1734 }; | 1241 }; |
| 1735 | 1242 |
| 1736 for (const auto& test : tests) { | 1243 for (const auto& test : tests) { |
| 1737 CheckKeyTestCase(&rewriter, test); | 1244 CheckKeyTestCase(&rewriter, test); |
| 1738 } | 1245 } |
| 1739 } | 1246 } |
| 1740 | 1247 |
| 1741 TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) { | 1248 TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) { |
| 1742 // Remap CapsLock to Control. | 1249 // Remap CapsLock to Control. |
| 1743 TestingPrefServiceSyncable prefs; | 1250 TestingPrefServiceSyncable prefs; |
| 1744 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1251 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 1745 IntegerPrefMember control; | 1252 IntegerPrefMember control; |
| 1746 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); | 1253 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); |
| 1747 control.SetValue(chromeos::input_method::kControlKey); | 1254 control.SetValue(chromeos::input_method::kControlKey); |
| 1748 | 1255 |
| 1749 EventRewriter rewriter(NULL); | 1256 EventRewriter rewriter(NULL); |
| 1750 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1257 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1751 rewriter.set_pref_service_for_testing(&prefs); | 1258 rewriter.set_pref_service_for_testing(&prefs); |
| 1752 input_method_manager_mock_->set_mod3_used(true); | 1259 input_method_manager_mock_->set_mod3_used(true); |
| 1753 | 1260 |
| 1754 // Press CapsLock+a. Confirm that Mod3Mask is NOT rewritten to ControlMask | 1261 // Press CapsLock+a. Confirm that Mod3Mask is NOT rewritten to ControlMask |
| 1755 // when Mod3Mask is already in use by the current XKB layout. | 1262 // when Mod3Mask is already in use by the current XKB layout. |
| 1756 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1263 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1757 ui::DomCode::KEY_A, ui::EF_NONE, | 1264 ui::DomCode::KEY_A, ui::EF_NONE, 'a'), |
| 1758 ui::DomKey::CHARACTER, 'a'), | |
| 1759 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1265 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1760 ui::DomCode::KEY_A, ui::EF_NONE, | 1266 ui::DomCode::KEY_A, ui::EF_NONE, 'a')); |
| 1761 ui::DomKey::CHARACTER, 'a')); | |
| 1762 | 1267 |
| 1763 input_method_manager_mock_->set_mod3_used(false); | 1268 input_method_manager_mock_->set_mod3_used(false); |
| 1764 } | 1269 } |
| 1765 | 1270 |
| 1766 TEST_F(EventRewriterTest, TestRewriteExtendedKeys) { | 1271 TEST_F(EventRewriterTest, TestRewriteExtendedKeys) { |
| 1767 TestingPrefServiceSyncable prefs; | 1272 TestingPrefServiceSyncable prefs; |
| 1768 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1273 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 1769 EventRewriter rewriter(NULL); | 1274 EventRewriter rewriter(NULL); |
| 1770 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1275 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1771 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 1276 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
| 1772 rewriter.set_pref_service_for_testing(&prefs); | 1277 rewriter.set_pref_service_for_testing(&prefs); |
| 1773 | 1278 |
| 1774 KeyTestCase tests[] = { | 1279 KeyTestCase tests[] = { |
| 1775 // Alt+Backspace -> Delete | 1280 // Alt+Backspace -> Delete |
| 1776 {ui::ET_KEY_PRESSED, | 1281 {ui::ET_KEY_PRESSED, |
| 1777 {ui::VKEY_BACK, | 1282 {ui::VKEY_BACK, ui::DomCode::BACKSPACE, ui::EF_ALT_DOWN, |
| 1778 ui::DomCode::BACKSPACE, | 1283 ui::DomKey::BACKSPACE}, |
| 1779 ui::EF_ALT_DOWN, | 1284 {ui::VKEY_DELETE, ui::DomCode::DEL, ui::EF_NONE, ui::DomKey::DEL}}, |
| 1780 ui::DomKey::BACKSPACE, | |
| 1781 '\b'}, | |
| 1782 {ui::VKEY_DELETE, ui::DomCode::DEL, ui::EF_NONE, ui::DomKey::DEL, 0x7F}}, | |
| 1783 // Control+Alt+Backspace -> Control+Delete | 1285 // Control+Alt+Backspace -> Control+Delete |
| 1784 {ui::ET_KEY_PRESSED, | 1286 {ui::ET_KEY_PRESSED, |
| 1785 {ui::VKEY_BACK, | 1287 {ui::VKEY_BACK, ui::DomCode::BACKSPACE, |
| 1786 ui::DomCode::BACKSPACE, | 1288 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::BACKSPACE}, |
| 1787 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | 1289 {ui::VKEY_DELETE, ui::DomCode::DEL, ui::EF_CONTROL_DOWN, |
| 1788 ui::DomKey::BACKSPACE, | 1290 ui::DomKey::DEL}}, |
| 1789 '\b'}, | |
| 1790 {ui::VKEY_DELETE, | |
| 1791 ui::DomCode::DEL, | |
| 1792 ui::EF_CONTROL_DOWN, | |
| 1793 ui::DomKey::DEL, | |
| 1794 0x7F}}, | |
| 1795 // Search+Alt+Backspace -> Alt+Backspace | 1291 // Search+Alt+Backspace -> Alt+Backspace |
| 1796 {ui::ET_KEY_PRESSED, | 1292 {ui::ET_KEY_PRESSED, |
| 1797 {ui::VKEY_BACK, | 1293 {ui::VKEY_BACK, ui::DomCode::BACKSPACE, |
| 1798 ui::DomCode::BACKSPACE, | 1294 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::BACKSPACE}, |
| 1799 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, | 1295 {ui::VKEY_BACK, ui::DomCode::BACKSPACE, ui::EF_ALT_DOWN, |
| 1800 ui::DomKey::BACKSPACE, | 1296 ui::DomKey::BACKSPACE}}, |
| 1801 '\b'}, | |
| 1802 {ui::VKEY_BACK, | |
| 1803 ui::DomCode::BACKSPACE, | |
| 1804 ui::EF_ALT_DOWN, | |
| 1805 ui::DomKey::BACKSPACE, | |
| 1806 '\b'}}, | |
| 1807 // Search+Control+Alt+Backspace -> Control+Alt+Backspace | 1297 // Search+Control+Alt+Backspace -> Control+Alt+Backspace |
| 1808 {ui::ET_KEY_PRESSED, | 1298 {ui::ET_KEY_PRESSED, |
| 1809 {ui::VKEY_BACK, | 1299 {ui::VKEY_BACK, ui::DomCode::BACKSPACE, |
| 1810 ui::DomCode::BACKSPACE, | |
| 1811 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | 1300 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
| 1812 ui::DomKey::BACKSPACE, | 1301 ui::DomKey::BACKSPACE}, |
| 1813 '\b'}, | 1302 {ui::VKEY_BACK, ui::DomCode::BACKSPACE, |
| 1814 {ui::VKEY_BACK, | 1303 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::BACKSPACE}}, |
| 1815 ui::DomCode::BACKSPACE, | |
| 1816 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | |
| 1817 ui::DomKey::BACKSPACE, | |
| 1818 '\b'}}, | |
| 1819 // Alt+Up -> Prior | 1304 // Alt+Up -> Prior |
| 1820 {ui::ET_KEY_PRESSED, | 1305 {ui::ET_KEY_PRESSED, |
| 1821 {ui::VKEY_UP, | 1306 {ui::VKEY_UP, ui::DomCode::ARROW_UP, ui::EF_ALT_DOWN, |
| 1822 ui::DomCode::ARROW_UP, | 1307 ui::DomKey::ARROW_UP}, |
| 1823 ui::EF_ALT_DOWN, | 1308 {ui::VKEY_PRIOR, ui::DomCode::PAGE_UP, ui::EF_NONE, |
| 1824 ui::DomKey::ARROW_UP, | 1309 ui::DomKey::PAGE_UP}}, |
| 1825 0}, | |
| 1826 {ui::VKEY_PRIOR, | |
| 1827 ui::DomCode::PAGE_UP, | |
| 1828 ui::EF_NONE, | |
| 1829 ui::DomKey::PAGE_UP, | |
| 1830 0}}, | |
| 1831 // Alt+Down -> Next | 1310 // Alt+Down -> Next |
| 1832 {ui::ET_KEY_PRESSED, | 1311 {ui::ET_KEY_PRESSED, |
| 1833 {ui::VKEY_DOWN, | 1312 {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN, ui::EF_ALT_DOWN, |
| 1834 ui::DomCode::ARROW_DOWN, | 1313 ui::DomKey::ARROW_DOWN}, |
| 1835 ui::EF_ALT_DOWN, | 1314 {ui::VKEY_NEXT, ui::DomCode::PAGE_DOWN, ui::EF_NONE, |
| 1836 ui::DomKey::ARROW_DOWN, | 1315 ui::DomKey::PAGE_DOWN}}, |
| 1837 0}, | |
| 1838 {ui::VKEY_NEXT, | |
| 1839 ui::DomCode::PAGE_DOWN, | |
| 1840 ui::EF_NONE, | |
| 1841 ui::DomKey::PAGE_DOWN, | |
| 1842 0}}, | |
| 1843 // Ctrl+Alt+Up -> Home | 1316 // Ctrl+Alt+Up -> Home |
| 1844 {ui::ET_KEY_PRESSED, | 1317 {ui::ET_KEY_PRESSED, |
| 1845 {ui::VKEY_UP, | 1318 {ui::VKEY_UP, ui::DomCode::ARROW_UP, |
| 1846 ui::DomCode::ARROW_UP, | 1319 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::ARROW_UP}, |
| 1847 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | 1320 {ui::VKEY_HOME, ui::DomCode::HOME, ui::EF_NONE, ui::DomKey::HOME}}, |
| 1848 ui::DomKey::ARROW_UP, | |
| 1849 0}, | |
| 1850 {ui::VKEY_HOME, ui::DomCode::HOME, ui::EF_NONE, ui::DomKey::HOME, 0}}, | |
| 1851 // Ctrl+Alt+Down -> End | 1321 // Ctrl+Alt+Down -> End |
| 1852 {ui::ET_KEY_PRESSED, | 1322 {ui::ET_KEY_PRESSED, |
| 1853 {ui::VKEY_DOWN, | 1323 {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN, |
| 1854 ui::DomCode::ARROW_DOWN, | 1324 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::ARROW_DOWN}, |
| 1855 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | 1325 {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END}}, |
| 1856 ui::DomKey::ARROW_DOWN, | |
| 1857 0}, | |
| 1858 {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END, 0}}, | |
| 1859 | 1326 |
| 1860 // Search+Alt+Up -> Alt+Up | 1327 // Search+Alt+Up -> Alt+Up |
| 1861 {ui::ET_KEY_PRESSED, | 1328 {ui::ET_KEY_PRESSED, |
| 1862 {ui::VKEY_UP, | 1329 {ui::VKEY_UP, ui::DomCode::ARROW_UP, |
| 1863 ui::DomCode::ARROW_UP, | 1330 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ARROW_UP}, |
| 1864 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, | 1331 {ui::VKEY_UP, ui::DomCode::ARROW_UP, ui::EF_ALT_DOWN, |
| 1865 ui::DomKey::ARROW_UP, | 1332 ui::DomKey::ARROW_UP}}, |
| 1866 0}, | |
| 1867 {ui::VKEY_UP, | |
| 1868 ui::DomCode::ARROW_UP, | |
| 1869 ui::EF_ALT_DOWN, | |
| 1870 ui::DomKey::ARROW_UP, | |
| 1871 0}}, | |
| 1872 // Search+Alt+Down -> Alt+Down | 1333 // Search+Alt+Down -> Alt+Down |
| 1873 {ui::ET_KEY_PRESSED, | 1334 {ui::ET_KEY_PRESSED, |
| 1874 {ui::VKEY_DOWN, | 1335 {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN, |
| 1875 ui::DomCode::ARROW_DOWN, | 1336 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ARROW_DOWN}, |
| 1876 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, | 1337 {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN, ui::EF_ALT_DOWN, |
| 1877 ui::DomKey::ARROW_DOWN, | 1338 ui::DomKey::ARROW_DOWN}}, |
| 1878 0}, | |
| 1879 {ui::VKEY_DOWN, | |
| 1880 ui::DomCode::ARROW_DOWN, | |
| 1881 ui::EF_ALT_DOWN, | |
| 1882 ui::DomKey::ARROW_DOWN, | |
| 1883 0}}, | |
| 1884 // Search+Ctrl+Alt+Up -> Search+Ctrl+Alt+Up | 1339 // Search+Ctrl+Alt+Up -> Search+Ctrl+Alt+Up |
| 1885 {ui::ET_KEY_PRESSED, | 1340 {ui::ET_KEY_PRESSED, |
| 1886 {ui::VKEY_UP, | 1341 {ui::VKEY_UP, ui::DomCode::ARROW_UP, |
| 1887 ui::DomCode::ARROW_UP, | |
| 1888 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | 1342 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
| 1889 ui::DomKey::ARROW_UP, | 1343 ui::DomKey::ARROW_UP}, |
| 1890 0}, | 1344 {ui::VKEY_UP, ui::DomCode::ARROW_UP, |
| 1891 {ui::VKEY_UP, | 1345 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::ARROW_UP}}, |
| 1892 ui::DomCode::ARROW_UP, | |
| 1893 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | |
| 1894 ui::DomKey::ARROW_UP, | |
| 1895 0}}, | |
| 1896 // Search+Ctrl+Alt+Down -> Ctrl+Alt+Down | 1346 // Search+Ctrl+Alt+Down -> Ctrl+Alt+Down |
| 1897 {ui::ET_KEY_PRESSED, | 1347 {ui::ET_KEY_PRESSED, |
| 1898 {ui::VKEY_DOWN, | 1348 {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN, |
| 1899 ui::DomCode::ARROW_DOWN, | |
| 1900 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | 1349 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
| 1901 ui::DomKey::ARROW_DOWN, | 1350 ui::DomKey::ARROW_DOWN}, |
| 1902 0}, | 1351 {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN, |
| 1903 {ui::VKEY_DOWN, | 1352 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::ARROW_DOWN}}, |
| 1904 ui::DomCode::ARROW_DOWN, | |
| 1905 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | |
| 1906 ui::DomKey::ARROW_DOWN, | |
| 1907 0}}, | |
| 1908 | 1353 |
| 1909 // Period -> Period | 1354 // Period -> Period |
| 1910 {ui::ET_KEY_PRESSED, | 1355 {ui::ET_KEY_PRESSED, |
| 1911 {ui::VKEY_OEM_PERIOD, | 1356 {ui::VKEY_OEM_PERIOD, ui::DomCode::PERIOD, ui::EF_NONE, '.'}, |
| 1912 ui::DomCode::PERIOD, | 1357 {ui::VKEY_OEM_PERIOD, ui::DomCode::PERIOD, ui::EF_NONE, '.'}}, |
| 1913 ui::EF_NONE, | |
| 1914 ui::DomKey::CHARACTER, | |
| 1915 '.'}, | |
| 1916 {ui::VKEY_OEM_PERIOD, | |
| 1917 ui::DomCode::PERIOD, | |
| 1918 ui::EF_NONE, | |
| 1919 ui::DomKey::CHARACTER, | |
| 1920 '.'}}, | |
| 1921 | 1358 |
| 1922 // Search+Backspace -> Delete | 1359 // Search+Backspace -> Delete |
| 1923 {ui::ET_KEY_PRESSED, | 1360 {ui::ET_KEY_PRESSED, |
| 1924 {ui::VKEY_BACK, | 1361 {ui::VKEY_BACK, ui::DomCode::BACKSPACE, ui::EF_COMMAND_DOWN, |
| 1925 ui::DomCode::BACKSPACE, | 1362 ui::DomKey::BACKSPACE}, |
| 1926 ui::EF_COMMAND_DOWN, | 1363 {ui::VKEY_DELETE, ui::DomCode::DEL, ui::EF_NONE, ui::DomKey::DEL}}, |
| 1927 ui::DomKey::BACKSPACE, | |
| 1928 '\b'}, | |
| 1929 {ui::VKEY_DELETE, ui::DomCode::DEL, ui::EF_NONE, ui::DomKey::DEL, 0x7F}}, | |
| 1930 // Search+Up -> Prior | 1364 // Search+Up -> Prior |
| 1931 {ui::ET_KEY_PRESSED, | 1365 {ui::ET_KEY_PRESSED, |
| 1932 {ui::VKEY_UP, | 1366 {ui::VKEY_UP, ui::DomCode::ARROW_UP, ui::EF_COMMAND_DOWN, |
| 1933 ui::DomCode::ARROW_UP, | 1367 ui::DomKey::ARROW_UP}, |
| 1934 ui::EF_COMMAND_DOWN, | 1368 {ui::VKEY_PRIOR, ui::DomCode::PAGE_UP, ui::EF_NONE, |
| 1935 ui::DomKey::ARROW_UP, | 1369 ui::DomKey::PAGE_UP}}, |
| 1936 0}, | |
| 1937 {ui::VKEY_PRIOR, | |
| 1938 ui::DomCode::PAGE_UP, | |
| 1939 ui::EF_NONE, | |
| 1940 ui::DomKey::PAGE_UP, | |
| 1941 0}}, | |
| 1942 // Search+Down -> Next | 1370 // Search+Down -> Next |
| 1943 {ui::ET_KEY_PRESSED, | 1371 {ui::ET_KEY_PRESSED, |
| 1944 {ui::VKEY_DOWN, | 1372 {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN, ui::EF_COMMAND_DOWN, |
| 1945 ui::DomCode::ARROW_DOWN, | 1373 ui::DomKey::ARROW_DOWN}, |
| 1946 ui::EF_COMMAND_DOWN, | 1374 {ui::VKEY_NEXT, ui::DomCode::PAGE_DOWN, ui::EF_NONE, |
| 1947 ui::DomKey::ARROW_DOWN, | 1375 ui::DomKey::PAGE_DOWN}}, |
| 1948 0}, | |
| 1949 {ui::VKEY_NEXT, | |
| 1950 ui::DomCode::PAGE_DOWN, | |
| 1951 ui::EF_NONE, | |
| 1952 ui::DomKey::PAGE_DOWN, | |
| 1953 0}}, | |
| 1954 // Search+Left -> Home | 1376 // Search+Left -> Home |
| 1955 {ui::ET_KEY_PRESSED, | 1377 {ui::ET_KEY_PRESSED, |
| 1956 {ui::VKEY_LEFT, | 1378 {ui::VKEY_LEFT, ui::DomCode::ARROW_LEFT, ui::EF_COMMAND_DOWN, |
| 1957 ui::DomCode::ARROW_LEFT, | 1379 ui::DomKey::ARROW_LEFT}, |
| 1958 ui::EF_COMMAND_DOWN, | 1380 {ui::VKEY_HOME, ui::DomCode::HOME, ui::EF_NONE, ui::DomKey::HOME}}, |
| 1959 ui::DomKey::ARROW_LEFT, | |
| 1960 0}, | |
| 1961 {ui::VKEY_HOME, ui::DomCode::HOME, ui::EF_NONE, ui::DomKey::HOME, 0}}, | |
| 1962 // Control+Search+Left -> Home | 1381 // Control+Search+Left -> Home |
| 1963 {ui::ET_KEY_PRESSED, | 1382 {ui::ET_KEY_PRESSED, |
| 1964 {ui::VKEY_LEFT, | 1383 {ui::VKEY_LEFT, ui::DomCode::ARROW_LEFT, |
| 1965 ui::DomCode::ARROW_LEFT, | 1384 ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::ARROW_LEFT}, |
| 1966 ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, | 1385 {ui::VKEY_HOME, ui::DomCode::HOME, ui::EF_CONTROL_DOWN, |
| 1967 ui::DomKey::ARROW_LEFT, | 1386 ui::DomKey::HOME}}, |
| 1968 0}, | |
| 1969 {ui::VKEY_HOME, | |
| 1970 ui::DomCode::HOME, | |
| 1971 ui::EF_CONTROL_DOWN, | |
| 1972 ui::DomKey::HOME, | |
| 1973 0}}, | |
| 1974 // Search+Right -> End | 1387 // Search+Right -> End |
| 1975 {ui::ET_KEY_PRESSED, | 1388 {ui::ET_KEY_PRESSED, |
| 1976 {ui::VKEY_RIGHT, | 1389 {ui::VKEY_RIGHT, ui::DomCode::ARROW_RIGHT, ui::EF_COMMAND_DOWN, |
| 1977 ui::DomCode::ARROW_RIGHT, | 1390 ui::DomKey::ARROW_RIGHT}, |
| 1978 ui::EF_COMMAND_DOWN, | 1391 {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END}}, |
| 1979 ui::DomKey::ARROW_RIGHT, | |
| 1980 0}, | |
| 1981 {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END, 0}}, | |
| 1982 // Control+Search+Right -> End | 1392 // Control+Search+Right -> End |
| 1983 {ui::ET_KEY_PRESSED, | 1393 {ui::ET_KEY_PRESSED, |
| 1984 {ui::VKEY_RIGHT, | 1394 {ui::VKEY_RIGHT, ui::DomCode::ARROW_RIGHT, |
| 1985 ui::DomCode::ARROW_RIGHT, | 1395 ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::ARROW_RIGHT}, |
| 1986 ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, | 1396 {ui::VKEY_END, ui::DomCode::END, ui::EF_CONTROL_DOWN, ui::DomKey::END}}, |
| 1987 ui::DomKey::ARROW_RIGHT, | |
| 1988 0}, | |
| 1989 {ui::VKEY_END, | |
| 1990 ui::DomCode::END, | |
| 1991 ui::EF_CONTROL_DOWN, | |
| 1992 ui::DomKey::END, | |
| 1993 0}}, | |
| 1994 // Search+Period -> Insert | 1397 // Search+Period -> Insert |
| 1995 {ui::ET_KEY_PRESSED, | 1398 {ui::ET_KEY_PRESSED, |
| 1996 {ui::VKEY_OEM_PERIOD, | 1399 {ui::VKEY_OEM_PERIOD, ui::DomCode::PERIOD, ui::EF_COMMAND_DOWN, '.'}, |
| 1997 ui::DomCode::PERIOD, | 1400 {ui::VKEY_INSERT, ui::DomCode::INSERT, ui::EF_NONE, ui::DomKey::INSERT}}, |
| 1998 ui::EF_COMMAND_DOWN, | |
| 1999 ui::DomKey::CHARACTER, | |
| 2000 '.'}, | |
| 2001 {ui::VKEY_INSERT, | |
| 2002 ui::DomCode::INSERT, | |
| 2003 ui::EF_NONE, | |
| 2004 ui::DomKey::INSERT, | |
| 2005 0}}, | |
| 2006 // Control+Search+Period -> Control+Insert | 1401 // Control+Search+Period -> Control+Insert |
| 2007 {ui::ET_KEY_PRESSED, | 1402 {ui::ET_KEY_PRESSED, |
| 2008 {ui::VKEY_OEM_PERIOD, | 1403 {ui::VKEY_OEM_PERIOD, ui::DomCode::PERIOD, |
| 2009 ui::DomCode::PERIOD, | 1404 ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, '.'}, |
| 2010 ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, | 1405 {ui::VKEY_INSERT, ui::DomCode::INSERT, ui::EF_CONTROL_DOWN, |
| 2011 ui::DomKey::CHARACTER, | 1406 ui::DomKey::INSERT}}}; |
| 2012 '.'}, | |
| 2013 {ui::VKEY_INSERT, | |
| 2014 ui::DomCode::INSERT, | |
| 2015 ui::EF_CONTROL_DOWN, | |
| 2016 ui::DomKey::INSERT, | |
| 2017 0}}}; | |
| 2018 | 1407 |
| 2019 for (const auto& test : tests) { | 1408 for (const auto& test : tests) { |
| 2020 CheckKeyTestCase(&rewriter, test); | 1409 CheckKeyTestCase(&rewriter, test); |
| 2021 } | 1410 } |
| 2022 } | 1411 } |
| 2023 | 1412 |
| 2024 TEST_F(EventRewriterTest, TestRewriteFunctionKeys) { | 1413 TEST_F(EventRewriterTest, TestRewriteFunctionKeys) { |
| 2025 TestingPrefServiceSyncable prefs; | 1414 TestingPrefServiceSyncable prefs; |
| 2026 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1415 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 2027 EventRewriter rewriter(NULL); | 1416 EventRewriter rewriter(NULL); |
| 2028 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1417 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 2029 rewriter.set_pref_service_for_testing(&prefs); | 1418 rewriter.set_pref_service_for_testing(&prefs); |
| 2030 | 1419 |
| 2031 KeyTestCase tests[] = { | 1420 KeyTestCase tests[] = { |
| 2032 // F1 -> Back | 1421 // F1 -> Back |
| 2033 {ui::ET_KEY_PRESSED, | 1422 {ui::ET_KEY_PRESSED, |
| 2034 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1, 0}, | 1423 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1}, |
| 2035 {ui::VKEY_BROWSER_BACK, | 1424 {ui::VKEY_BROWSER_BACK, ui::DomCode::BROWSER_BACK, ui::EF_NONE, |
| 2036 ui::DomCode::BROWSER_BACK, | 1425 ui::DomKey::BROWSER_BACK}}, |
| 2037 ui::EF_NONE, | 1426 {ui::ET_KEY_PRESSED, |
| 2038 ui::DomKey::BROWSER_BACK, | 1427 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_CONTROL_DOWN, ui::DomKey::F1}, |
| 2039 0}}, | 1428 {ui::VKEY_BROWSER_BACK, ui::DomCode::BROWSER_BACK, ui::EF_CONTROL_DOWN, |
| 2040 {ui::ET_KEY_PRESSED, | 1429 ui::DomKey::BROWSER_BACK}}, |
| 2041 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_CONTROL_DOWN, ui::DomKey::F1, 0}, | 1430 {ui::ET_KEY_PRESSED, |
| 2042 {ui::VKEY_BROWSER_BACK, | 1431 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_ALT_DOWN, ui::DomKey::F1}, |
| 2043 ui::DomCode::BROWSER_BACK, | 1432 {ui::VKEY_BROWSER_BACK, ui::DomCode::BROWSER_BACK, ui::EF_ALT_DOWN, |
| 2044 ui::EF_CONTROL_DOWN, | 1433 ui::DomKey::BROWSER_BACK}}, |
| 2045 ui::DomKey::BROWSER_BACK, | |
| 2046 0}}, | |
| 2047 {ui::ET_KEY_PRESSED, | |
| 2048 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_ALT_DOWN, ui::DomKey::F1, 0}, | |
| 2049 {ui::VKEY_BROWSER_BACK, | |
| 2050 ui::DomCode::BROWSER_BACK, | |
| 2051 ui::EF_ALT_DOWN, | |
| 2052 ui::DomKey::BROWSER_BACK, | |
| 2053 0}}, | |
| 2054 // F2 -> Forward | 1434 // F2 -> Forward |
| 2055 {ui::ET_KEY_PRESSED, | 1435 {ui::ET_KEY_PRESSED, |
| 2056 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2, 0}, | 1436 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2}, |
| 2057 {ui::VKEY_BROWSER_FORWARD, | 1437 {ui::VKEY_BROWSER_FORWARD, ui::DomCode::BROWSER_FORWARD, ui::EF_NONE, |
| 2058 ui::DomCode::BROWSER_FORWARD, | 1438 ui::DomKey::BROWSER_FORWARD}}, |
| 2059 ui::EF_NONE, | 1439 {ui::ET_KEY_PRESSED, |
| 2060 ui::DomKey::BROWSER_FORWARD, | 1440 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_CONTROL_DOWN, ui::DomKey::F2}, |
| 2061 0}}, | 1441 {ui::VKEY_BROWSER_FORWARD, ui::DomCode::BROWSER_FORWARD, |
| 2062 {ui::ET_KEY_PRESSED, | 1442 ui::EF_CONTROL_DOWN, ui::DomKey::BROWSER_FORWARD}}, |
| 2063 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_CONTROL_DOWN, ui::DomKey::F2, 0}, | 1443 {ui::ET_KEY_PRESSED, |
| 2064 {ui::VKEY_BROWSER_FORWARD, | 1444 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_ALT_DOWN, ui::DomKey::F2}, |
| 2065 ui::DomCode::BROWSER_FORWARD, | 1445 {ui::VKEY_BROWSER_FORWARD, ui::DomCode::BROWSER_FORWARD, ui::EF_ALT_DOWN, |
| 2066 ui::EF_CONTROL_DOWN, | 1446 ui::DomKey::BROWSER_FORWARD}}, |
| 2067 ui::DomKey::BROWSER_FORWARD, | |
| 2068 0}}, | |
| 2069 {ui::ET_KEY_PRESSED, | |
| 2070 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_ALT_DOWN, ui::DomKey::F2, 0}, | |
| 2071 {ui::VKEY_BROWSER_FORWARD, | |
| 2072 ui::DomCode::BROWSER_FORWARD, | |
| 2073 ui::EF_ALT_DOWN, | |
| 2074 ui::DomKey::BROWSER_FORWARD, | |
| 2075 0}}, | |
| 2076 // F3 -> Refresh | 1447 // F3 -> Refresh |
| 2077 {ui::ET_KEY_PRESSED, | 1448 {ui::ET_KEY_PRESSED, |
| 2078 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3, 0}, | 1449 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3}, |
| 2079 {ui::VKEY_BROWSER_REFRESH, | 1450 {ui::VKEY_BROWSER_REFRESH, ui::DomCode::BROWSER_REFRESH, ui::EF_NONE, |
| 2080 ui::DomCode::BROWSER_REFRESH, | 1451 ui::DomKey::BROWSER_REFRESH}}, |
| 2081 ui::EF_NONE, | 1452 {ui::ET_KEY_PRESSED, |
| 2082 ui::DomKey::BROWSER_REFRESH, | 1453 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_CONTROL_DOWN, ui::DomKey::F3}, |
| 2083 0}}, | 1454 {ui::VKEY_BROWSER_REFRESH, ui::DomCode::BROWSER_REFRESH, |
| 2084 {ui::ET_KEY_PRESSED, | 1455 ui::EF_CONTROL_DOWN, ui::DomKey::BROWSER_REFRESH}}, |
| 2085 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_CONTROL_DOWN, ui::DomKey::F3, 0}, | 1456 {ui::ET_KEY_PRESSED, |
| 2086 {ui::VKEY_BROWSER_REFRESH, | 1457 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_ALT_DOWN, ui::DomKey::F3}, |
| 2087 ui::DomCode::BROWSER_REFRESH, | 1458 {ui::VKEY_BROWSER_REFRESH, ui::DomCode::BROWSER_REFRESH, ui::EF_ALT_DOWN, |
| 2088 ui::EF_CONTROL_DOWN, | 1459 ui::DomKey::BROWSER_REFRESH}}, |
| 2089 ui::DomKey::BROWSER_REFRESH, | |
| 2090 0}}, | |
| 2091 {ui::ET_KEY_PRESSED, | |
| 2092 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_ALT_DOWN, ui::DomKey::F3, 0}, | |
| 2093 {ui::VKEY_BROWSER_REFRESH, | |
| 2094 ui::DomCode::BROWSER_REFRESH, | |
| 2095 ui::EF_ALT_DOWN, | |
| 2096 ui::DomKey::BROWSER_REFRESH, | |
| 2097 0}}, | |
| 2098 // F4 -> Launch App 2 | 1460 // F4 -> Launch App 2 |
| 2099 {ui::ET_KEY_PRESSED, | 1461 {ui::ET_KEY_PRESSED, |
| 2100 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4, 0}, | 1462 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4}, |
| 2101 {ui::VKEY_MEDIA_LAUNCH_APP2, | 1463 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::DomCode::ZOOM_TOGGLE, ui::EF_NONE, |
| 2102 ui::DomCode::ZOOM_TOGGLE, | 1464 ui::DomKey::ZOOM_TOGGLE}}, |
| 2103 ui::EF_NONE, | 1465 {ui::ET_KEY_PRESSED, |
| 2104 ui::DomKey::ZOOM_TOGGLE, | 1466 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_CONTROL_DOWN, ui::DomKey::F4}, |
| 2105 0}}, | 1467 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::DomCode::ZOOM_TOGGLE, |
| 2106 {ui::ET_KEY_PRESSED, | 1468 ui::EF_CONTROL_DOWN, ui::DomKey::ZOOM_TOGGLE}}, |
| 2107 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_CONTROL_DOWN, ui::DomKey::F4, 0}, | 1469 {ui::ET_KEY_PRESSED, |
| 2108 {ui::VKEY_MEDIA_LAUNCH_APP2, | 1470 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_ALT_DOWN, ui::DomKey::F4}, |
| 2109 ui::DomCode::ZOOM_TOGGLE, | 1471 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::DomCode::ZOOM_TOGGLE, ui::EF_ALT_DOWN, |
| 2110 ui::EF_CONTROL_DOWN, | 1472 ui::DomKey::ZOOM_TOGGLE}}, |
| 2111 ui::DomKey::ZOOM_TOGGLE, | |
| 2112 0}}, | |
| 2113 {ui::ET_KEY_PRESSED, | |
| 2114 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_ALT_DOWN, ui::DomKey::F4, 0}, | |
| 2115 {ui::VKEY_MEDIA_LAUNCH_APP2, | |
| 2116 ui::DomCode::ZOOM_TOGGLE, | |
| 2117 ui::EF_ALT_DOWN, | |
| 2118 ui::DomKey::ZOOM_TOGGLE, | |
| 2119 0}}, | |
| 2120 // F5 -> Launch App 1 | 1473 // F5 -> Launch App 1 |
| 2121 {ui::ET_KEY_PRESSED, | 1474 {ui::ET_KEY_PRESSED, |
| 2122 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5, 0}, | 1475 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5}, |
| 2123 {ui::VKEY_MEDIA_LAUNCH_APP1, | 1476 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::DomCode::SELECT_TASK, ui::EF_NONE, |
| 2124 ui::DomCode::SELECT_TASK, | 1477 ui::DomKey::LAUNCH_MY_COMPUTER}}, |
| 2125 ui::EF_NONE, | 1478 {ui::ET_KEY_PRESSED, |
| 2126 ui::DomKey::LAUNCH_MY_COMPUTER, | 1479 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_CONTROL_DOWN, ui::DomKey::F5}, |
| 2127 0}}, | 1480 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::DomCode::SELECT_TASK, |
| 2128 {ui::ET_KEY_PRESSED, | 1481 ui::EF_CONTROL_DOWN, ui::DomKey::LAUNCH_MY_COMPUTER}}, |
| 2129 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_CONTROL_DOWN, ui::DomKey::F5, 0}, | 1482 {ui::ET_KEY_PRESSED, |
| 2130 {ui::VKEY_MEDIA_LAUNCH_APP1, | 1483 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_ALT_DOWN, ui::DomKey::F5}, |
| 2131 ui::DomCode::SELECT_TASK, | 1484 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::DomCode::SELECT_TASK, ui::EF_ALT_DOWN, |
| 2132 ui::EF_CONTROL_DOWN, | 1485 ui::DomKey::LAUNCH_MY_COMPUTER}}, |
| 2133 ui::DomKey::LAUNCH_MY_COMPUTER, | |
| 2134 0}}, | |
| 2135 {ui::ET_KEY_PRESSED, | |
| 2136 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_ALT_DOWN, ui::DomKey::F5, 0}, | |
| 2137 {ui::VKEY_MEDIA_LAUNCH_APP1, | |
| 2138 ui::DomCode::SELECT_TASK, | |
| 2139 ui::EF_ALT_DOWN, | |
| 2140 ui::DomKey::LAUNCH_MY_COMPUTER, | |
| 2141 0}}, | |
| 2142 // F6 -> Brightness down | 1486 // F6 -> Brightness down |
| 2143 {ui::ET_KEY_PRESSED, | 1487 {ui::ET_KEY_PRESSED, |
| 2144 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6, 0}, | 1488 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6}, |
| 2145 {ui::VKEY_BRIGHTNESS_DOWN, | 1489 {ui::VKEY_BRIGHTNESS_DOWN, ui::DomCode::BRIGHTNESS_DOWN, ui::EF_NONE, |
| 2146 ui::DomCode::BRIGHTNESS_DOWN, | 1490 ui::DomKey::BRIGHTNESS_DOWN}}, |
| 2147 ui::EF_NONE, | 1491 {ui::ET_KEY_PRESSED, |
| 2148 ui::DomKey::BRIGHTNESS_DOWN, | 1492 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_CONTROL_DOWN, ui::DomKey::F6}, |
| 2149 0}}, | 1493 {ui::VKEY_BRIGHTNESS_DOWN, ui::DomCode::BRIGHTNESS_DOWN, |
| 2150 {ui::ET_KEY_PRESSED, | 1494 ui::EF_CONTROL_DOWN, ui::DomKey::BRIGHTNESS_DOWN}}, |
| 2151 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_CONTROL_DOWN, ui::DomKey::F6, 0}, | 1495 {ui::ET_KEY_PRESSED, |
| 2152 {ui::VKEY_BRIGHTNESS_DOWN, | 1496 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_ALT_DOWN, ui::DomKey::F6}, |
| 2153 ui::DomCode::BRIGHTNESS_DOWN, | 1497 {ui::VKEY_BRIGHTNESS_DOWN, ui::DomCode::BRIGHTNESS_DOWN, ui::EF_ALT_DOWN, |
| 2154 ui::EF_CONTROL_DOWN, | 1498 ui::DomKey::BRIGHTNESS_DOWN}}, |
| 2155 ui::DomKey::BRIGHTNESS_DOWN, | |
| 2156 0}}, | |
| 2157 {ui::ET_KEY_PRESSED, | |
| 2158 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_ALT_DOWN, ui::DomKey::F6, 0}, | |
| 2159 {ui::VKEY_BRIGHTNESS_DOWN, | |
| 2160 ui::DomCode::BRIGHTNESS_DOWN, | |
| 2161 ui::EF_ALT_DOWN, | |
| 2162 ui::DomKey::BRIGHTNESS_DOWN, | |
| 2163 0}}, | |
| 2164 // F7 -> Brightness up | 1499 // F7 -> Brightness up |
| 2165 {ui::ET_KEY_PRESSED, | 1500 {ui::ET_KEY_PRESSED, |
| 2166 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7, 0}, | 1501 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7}, |
| 2167 {ui::VKEY_BRIGHTNESS_UP, | 1502 {ui::VKEY_BRIGHTNESS_UP, ui::DomCode::BRIGHTNESS_UP, ui::EF_NONE, |
| 2168 ui::DomCode::BRIGHTNESS_UP, | 1503 ui::DomKey::BRIGHTNESS_UP}}, |
| 2169 ui::EF_NONE, | 1504 {ui::ET_KEY_PRESSED, |
| 2170 ui::DomKey::BRIGHTNESS_UP, | 1505 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_CONTROL_DOWN, ui::DomKey::F7}, |
| 2171 0}}, | 1506 {ui::VKEY_BRIGHTNESS_UP, ui::DomCode::BRIGHTNESS_UP, ui::EF_CONTROL_DOWN, |
| 2172 {ui::ET_KEY_PRESSED, | 1507 ui::DomKey::BRIGHTNESS_UP}}, |
| 2173 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_CONTROL_DOWN, ui::DomKey::F7, 0}, | 1508 {ui::ET_KEY_PRESSED, |
| 2174 {ui::VKEY_BRIGHTNESS_UP, | 1509 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_ALT_DOWN, ui::DomKey::F7}, |
| 2175 ui::DomCode::BRIGHTNESS_UP, | 1510 {ui::VKEY_BRIGHTNESS_UP, ui::DomCode::BRIGHTNESS_UP, ui::EF_ALT_DOWN, |
| 2176 ui::EF_CONTROL_DOWN, | 1511 ui::DomKey::BRIGHTNESS_UP}}, |
| 2177 ui::DomKey::BRIGHTNESS_UP, | |
| 2178 0}}, | |
| 2179 {ui::ET_KEY_PRESSED, | |
| 2180 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_ALT_DOWN, ui::DomKey::F7, 0}, | |
| 2181 {ui::VKEY_BRIGHTNESS_UP, | |
| 2182 ui::DomCode::BRIGHTNESS_UP, | |
| 2183 ui::EF_ALT_DOWN, | |
| 2184 ui::DomKey::BRIGHTNESS_UP, | |
| 2185 0}}, | |
| 2186 // F8 -> Volume Mute | 1512 // F8 -> Volume Mute |
| 2187 {ui::ET_KEY_PRESSED, | 1513 {ui::ET_KEY_PRESSED, |
| 2188 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8, 0}, | 1514 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8}, |
| 2189 {ui::VKEY_VOLUME_MUTE, | 1515 {ui::VKEY_VOLUME_MUTE, ui::DomCode::VOLUME_MUTE, ui::EF_NONE, |
| 2190 ui::DomCode::VOLUME_MUTE, | 1516 ui::DomKey::VOLUME_MUTE}}, |
| 2191 ui::EF_NONE, | 1517 {ui::ET_KEY_PRESSED, |
| 2192 ui::DomKey::VOLUME_MUTE, | 1518 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_CONTROL_DOWN, ui::DomKey::F8}, |
| 2193 0}}, | 1519 {ui::VKEY_VOLUME_MUTE, ui::DomCode::VOLUME_MUTE, ui::EF_CONTROL_DOWN, |
| 2194 {ui::ET_KEY_PRESSED, | 1520 ui::DomKey::VOLUME_MUTE}}, |
| 2195 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_CONTROL_DOWN, ui::DomKey::F8, 0}, | 1521 {ui::ET_KEY_PRESSED, |
| 2196 {ui::VKEY_VOLUME_MUTE, | 1522 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_ALT_DOWN, ui::DomKey::F8}, |
| 2197 ui::DomCode::VOLUME_MUTE, | 1523 {ui::VKEY_VOLUME_MUTE, ui::DomCode::VOLUME_MUTE, ui::EF_ALT_DOWN, |
| 2198 ui::EF_CONTROL_DOWN, | 1524 ui::DomKey::VOLUME_MUTE}}, |
| 2199 ui::DomKey::VOLUME_MUTE, | |
| 2200 0}}, | |
| 2201 {ui::ET_KEY_PRESSED, | |
| 2202 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_ALT_DOWN, ui::DomKey::F8, 0}, | |
| 2203 {ui::VKEY_VOLUME_MUTE, | |
| 2204 ui::DomCode::VOLUME_MUTE, | |
| 2205 ui::EF_ALT_DOWN, | |
| 2206 ui::DomKey::VOLUME_MUTE, | |
| 2207 0}}, | |
| 2208 // F9 -> Volume Down | 1525 // F9 -> Volume Down |
| 2209 {ui::ET_KEY_PRESSED, | 1526 {ui::ET_KEY_PRESSED, |
| 2210 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9, 0}, | 1527 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9}, |
| 2211 {ui::VKEY_VOLUME_DOWN, | 1528 {ui::VKEY_VOLUME_DOWN, ui::DomCode::VOLUME_DOWN, ui::EF_NONE, |
| 2212 ui::DomCode::VOLUME_DOWN, | 1529 ui::DomKey::VOLUME_DOWN}}, |
| 2213 ui::EF_NONE, | 1530 {ui::ET_KEY_PRESSED, |
| 2214 ui::DomKey::VOLUME_DOWN, | 1531 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_CONTROL_DOWN, ui::DomKey::F9}, |
| 2215 0}}, | 1532 {ui::VKEY_VOLUME_DOWN, ui::DomCode::VOLUME_DOWN, ui::EF_CONTROL_DOWN, |
| 2216 {ui::ET_KEY_PRESSED, | 1533 ui::DomKey::VOLUME_DOWN}}, |
| 2217 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_CONTROL_DOWN, ui::DomKey::F9, 0}, | 1534 {ui::ET_KEY_PRESSED, |
| 2218 {ui::VKEY_VOLUME_DOWN, | 1535 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_ALT_DOWN, ui::DomKey::F9}, |
| 2219 ui::DomCode::VOLUME_DOWN, | 1536 {ui::VKEY_VOLUME_DOWN, ui::DomCode::VOLUME_DOWN, ui::EF_ALT_DOWN, |
| 2220 ui::EF_CONTROL_DOWN, | 1537 ui::DomKey::VOLUME_DOWN}}, |
| 2221 ui::DomKey::VOLUME_DOWN, | |
| 2222 0}}, | |
| 2223 {ui::ET_KEY_PRESSED, | |
| 2224 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_ALT_DOWN, ui::DomKey::F9, 0}, | |
| 2225 {ui::VKEY_VOLUME_DOWN, | |
| 2226 ui::DomCode::VOLUME_DOWN, | |
| 2227 ui::EF_ALT_DOWN, | |
| 2228 ui::DomKey::VOLUME_DOWN, | |
| 2229 0}}, | |
| 2230 // F10 -> Volume Up | 1538 // F10 -> Volume Up |
| 2231 {ui::ET_KEY_PRESSED, | 1539 {ui::ET_KEY_PRESSED, |
| 2232 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10, 0}, | 1540 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10}, |
| 2233 {ui::VKEY_VOLUME_UP, | 1541 {ui::VKEY_VOLUME_UP, ui::DomCode::VOLUME_UP, ui::EF_NONE, |
| 2234 ui::DomCode::VOLUME_UP, | 1542 ui::DomKey::VOLUME_UP}}, |
| 2235 ui::EF_NONE, | 1543 {ui::ET_KEY_PRESSED, |
| 2236 ui::DomKey::VOLUME_UP, | 1544 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_CONTROL_DOWN, ui::DomKey::F10}, |
| 2237 0}}, | 1545 {ui::VKEY_VOLUME_UP, ui::DomCode::VOLUME_UP, ui::EF_CONTROL_DOWN, |
| 2238 {ui::ET_KEY_PRESSED, | 1546 ui::DomKey::VOLUME_UP}}, |
| 2239 {ui::VKEY_F10, | 1547 {ui::ET_KEY_PRESSED, |
| 2240 ui::DomCode::F10, | 1548 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_ALT_DOWN, ui::DomKey::F10}, |
| 2241 ui::EF_CONTROL_DOWN, | 1549 {ui::VKEY_VOLUME_UP, ui::DomCode::VOLUME_UP, ui::EF_ALT_DOWN, |
| 2242 ui::DomKey::F10, | 1550 ui::DomKey::VOLUME_UP}}, |
| 2243 0}, | |
| 2244 {ui::VKEY_VOLUME_UP, | |
| 2245 ui::DomCode::VOLUME_UP, | |
| 2246 ui::EF_CONTROL_DOWN, | |
| 2247 ui::DomKey::VOLUME_UP, | |
| 2248 0}}, | |
| 2249 {ui::ET_KEY_PRESSED, | |
| 2250 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_ALT_DOWN, ui::DomKey::F10, 0}, | |
| 2251 {ui::VKEY_VOLUME_UP, | |
| 2252 ui::DomCode::VOLUME_UP, | |
| 2253 ui::EF_ALT_DOWN, | |
| 2254 ui::DomKey::VOLUME_UP, | |
| 2255 0}}, | |
| 2256 // F11 -> F11 | 1551 // F11 -> F11 |
| 2257 {ui::ET_KEY_PRESSED, | 1552 {ui::ET_KEY_PRESSED, |
| 2258 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11, 0}, | 1553 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11}, |
| 2259 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11, 0}}, | 1554 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11}}, |
| 2260 {ui::ET_KEY_PRESSED, | 1555 {ui::ET_KEY_PRESSED, |
| 2261 {ui::VKEY_F11, | 1556 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_CONTROL_DOWN, ui::DomKey::F11}, |
| 2262 ui::DomCode::F11, | 1557 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_CONTROL_DOWN, ui::DomKey::F11}}, |
| 2263 ui::EF_CONTROL_DOWN, | 1558 {ui::ET_KEY_PRESSED, |
| 2264 ui::DomKey::F11, | 1559 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_ALT_DOWN, ui::DomKey::F11}, |
| 2265 0}, | 1560 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_ALT_DOWN, ui::DomKey::F11}}, |
| 2266 {ui::VKEY_F11, | |
| 2267 ui::DomCode::F11, | |
| 2268 ui::EF_CONTROL_DOWN, | |
| 2269 ui::DomKey::F11, | |
| 2270 0}}, | |
| 2271 {ui::ET_KEY_PRESSED, | |
| 2272 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_ALT_DOWN, ui::DomKey::F11, 0}, | |
| 2273 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_ALT_DOWN, ui::DomKey::F11, 0}}, | |
| 2274 // F12 -> F12 | 1561 // F12 -> F12 |
| 2275 {ui::ET_KEY_PRESSED, | 1562 {ui::ET_KEY_PRESSED, |
| 2276 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12, 0}, | 1563 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12}, |
| 2277 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12, 0}}, | 1564 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12}}, |
| 2278 {ui::ET_KEY_PRESSED, | 1565 {ui::ET_KEY_PRESSED, |
| 2279 {ui::VKEY_F12, | 1566 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_CONTROL_DOWN, ui::DomKey::F12}, |
| 2280 ui::DomCode::F12, | 1567 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_CONTROL_DOWN, ui::DomKey::F12}}, |
| 2281 ui::EF_CONTROL_DOWN, | 1568 {ui::ET_KEY_PRESSED, |
| 2282 ui::DomKey::F12, | 1569 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_ALT_DOWN, ui::DomKey::F12}, |
| 2283 0}, | 1570 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_ALT_DOWN, ui::DomKey::F12}}, |
| 2284 {ui::VKEY_F12, | |
| 2285 ui::DomCode::F12, | |
| 2286 ui::EF_CONTROL_DOWN, | |
| 2287 ui::DomKey::F12, | |
| 2288 0}}, | |
| 2289 {ui::ET_KEY_PRESSED, | |
| 2290 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_ALT_DOWN, ui::DomKey::F12, 0}, | |
| 2291 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_ALT_DOWN, ui::DomKey::F12, 0}}, | |
| 2292 | 1571 |
| 2293 // The number row should not be rewritten without Search key. | 1572 // The number row should not be rewritten without Search key. |
| 2294 {ui::ET_KEY_PRESSED, | 1573 {ui::ET_KEY_PRESSED, |
| 2295 {ui::VKEY_1, | 1574 {ui::VKEY_1, ui::DomCode::DIGIT1, ui::EF_NONE, '1'}, |
| 2296 ui::DomCode::DIGIT1, | 1575 {ui::VKEY_1, ui::DomCode::DIGIT1, ui::EF_NONE, '1'}}, |
| 2297 ui::EF_NONE, | 1576 {ui::ET_KEY_PRESSED, |
| 2298 ui::DomKey::CHARACTER, | 1577 {ui::VKEY_2, ui::DomCode::DIGIT2, ui::EF_NONE, '2'}, |
| 2299 '1'}, | 1578 {ui::VKEY_2, ui::DomCode::DIGIT2, ui::EF_NONE, '2'}}, |
| 2300 {ui::VKEY_1, | 1579 {ui::ET_KEY_PRESSED, |
| 2301 ui::DomCode::DIGIT1, | 1580 {ui::VKEY_3, ui::DomCode::DIGIT3, ui::EF_NONE, '3'}, |
| 2302 ui::EF_NONE, | 1581 {ui::VKEY_3, ui::DomCode::DIGIT3, ui::EF_NONE, '3'}}, |
| 2303 ui::DomKey::CHARACTER, | 1582 {ui::ET_KEY_PRESSED, |
| 2304 '1'}}, | 1583 {ui::VKEY_4, ui::DomCode::DIGIT4, ui::EF_NONE, '4'}, |
| 2305 {ui::ET_KEY_PRESSED, | 1584 {ui::VKEY_4, ui::DomCode::DIGIT4, ui::EF_NONE, '4'}}, |
| 2306 {ui::VKEY_2, | 1585 {ui::ET_KEY_PRESSED, |
| 2307 ui::DomCode::DIGIT2, | 1586 {ui::VKEY_5, ui::DomCode::DIGIT5, ui::EF_NONE, '5'}, |
| 2308 ui::EF_NONE, | 1587 {ui::VKEY_5, ui::DomCode::DIGIT5, ui::EF_NONE, '5'}}, |
| 2309 ui::DomKey::CHARACTER, | 1588 {ui::ET_KEY_PRESSED, |
| 2310 '2'}, | 1589 {ui::VKEY_6, ui::DomCode::DIGIT6, ui::EF_NONE, '6'}, |
| 2311 {ui::VKEY_2, | 1590 {ui::VKEY_6, ui::DomCode::DIGIT6, ui::EF_NONE, '6'}}, |
| 2312 ui::DomCode::DIGIT2, | 1591 {ui::ET_KEY_PRESSED, |
| 2313 ui::EF_NONE, | 1592 {ui::VKEY_7, ui::DomCode::DIGIT7, ui::EF_NONE, '7'}, |
| 2314 ui::DomKey::CHARACTER, | 1593 {ui::VKEY_7, ui::DomCode::DIGIT7, ui::EF_NONE, '7'}}, |
| 2315 '2'}}, | 1594 {ui::ET_KEY_PRESSED, |
| 2316 {ui::ET_KEY_PRESSED, | 1595 {ui::VKEY_8, ui::DomCode::DIGIT8, ui::EF_NONE, '8'}, |
| 2317 {ui::VKEY_3, | 1596 {ui::VKEY_8, ui::DomCode::DIGIT8, ui::EF_NONE, '8'}}, |
| 2318 ui::DomCode::DIGIT3, | 1597 {ui::ET_KEY_PRESSED, |
| 2319 ui::EF_NONE, | 1598 {ui::VKEY_9, ui::DomCode::DIGIT9, ui::EF_NONE, '9'}, |
| 2320 ui::DomKey::CHARACTER, | 1599 {ui::VKEY_9, ui::DomCode::DIGIT9, ui::EF_NONE, '9'}}, |
| 2321 '3'}, | 1600 {ui::ET_KEY_PRESSED, |
| 2322 {ui::VKEY_3, | 1601 {ui::VKEY_0, ui::DomCode::DIGIT0, ui::EF_NONE, '0'}, |
| 2323 ui::DomCode::DIGIT3, | 1602 {ui::VKEY_0, ui::DomCode::DIGIT0, ui::EF_NONE, '0'}}, |
| 2324 ui::EF_NONE, | 1603 {ui::ET_KEY_PRESSED, |
| 2325 ui::DomKey::CHARACTER, | 1604 {ui::VKEY_OEM_MINUS, ui::DomCode::MINUS, ui::EF_NONE, '-'}, |
| 2326 '3'}}, | 1605 {ui::VKEY_OEM_MINUS, ui::DomCode::MINUS, ui::EF_NONE, '-'}}, |
| 2327 {ui::ET_KEY_PRESSED, | 1606 {ui::ET_KEY_PRESSED, |
| 2328 {ui::VKEY_4, | 1607 {ui::VKEY_OEM_PLUS, ui::DomCode::EQUAL, ui::EF_NONE, '='}, |
| 2329 ui::DomCode::DIGIT4, | 1608 {ui::VKEY_OEM_PLUS, ui::DomCode::EQUAL, ui::EF_NONE, '='}}, |
| 2330 ui::EF_NONE, | |
| 2331 ui::DomKey::CHARACTER, | |
| 2332 '4'}, | |
| 2333 {ui::VKEY_4, | |
| 2334 ui::DomCode::DIGIT4, | |
| 2335 ui::EF_NONE, | |
| 2336 ui::DomKey::CHARACTER, | |
| 2337 '4'}}, | |
| 2338 {ui::ET_KEY_PRESSED, | |
| 2339 {ui::VKEY_5, | |
| 2340 ui::DomCode::DIGIT5, | |
| 2341 ui::EF_NONE, | |
| 2342 ui::DomKey::CHARACTER, | |
| 2343 '5'}, | |
| 2344 {ui::VKEY_5, | |
| 2345 ui::DomCode::DIGIT5, | |
| 2346 ui::EF_NONE, | |
| 2347 ui::DomKey::CHARACTER, | |
| 2348 '5'}}, | |
| 2349 {ui::ET_KEY_PRESSED, | |
| 2350 {ui::VKEY_6, | |
| 2351 ui::DomCode::DIGIT6, | |
| 2352 ui::EF_NONE, | |
| 2353 ui::DomKey::CHARACTER, | |
| 2354 '6'}, | |
| 2355 {ui::VKEY_6, | |
| 2356 ui::DomCode::DIGIT6, | |
| 2357 ui::EF_NONE, | |
| 2358 ui::DomKey::CHARACTER, | |
| 2359 '6'}}, | |
| 2360 {ui::ET_KEY_PRESSED, | |
| 2361 {ui::VKEY_7, | |
| 2362 ui::DomCode::DIGIT7, | |
| 2363 ui::EF_NONE, | |
| 2364 ui::DomKey::CHARACTER, | |
| 2365 '7'}, | |
| 2366 {ui::VKEY_7, | |
| 2367 ui::DomCode::DIGIT7, | |
| 2368 ui::EF_NONE, | |
| 2369 ui::DomKey::CHARACTER, | |
| 2370 '7'}}, | |
| 2371 {ui::ET_KEY_PRESSED, | |
| 2372 {ui::VKEY_8, | |
| 2373 ui::DomCode::DIGIT8, | |
| 2374 ui::EF_NONE, | |
| 2375 ui::DomKey::CHARACTER, | |
| 2376 '8'}, | |
| 2377 {ui::VKEY_8, | |
| 2378 ui::DomCode::DIGIT8, | |
| 2379 ui::EF_NONE, | |
| 2380 ui::DomKey::CHARACTER, | |
| 2381 '8'}}, | |
| 2382 {ui::ET_KEY_PRESSED, | |
| 2383 {ui::VKEY_9, | |
| 2384 ui::DomCode::DIGIT9, | |
| 2385 ui::EF_NONE, | |
| 2386 ui::DomKey::CHARACTER, | |
| 2387 '9'}, | |
| 2388 {ui::VKEY_9, | |
| 2389 ui::DomCode::DIGIT9, | |
| 2390 ui::EF_NONE, | |
| 2391 ui::DomKey::CHARACTER, | |
| 2392 '9'}}, | |
| 2393 {ui::ET_KEY_PRESSED, | |
| 2394 {ui::VKEY_0, | |
| 2395 ui::DomCode::DIGIT0, | |
| 2396 ui::EF_NONE, | |
| 2397 ui::DomKey::CHARACTER, | |
| 2398 '0'}, | |
| 2399 {ui::VKEY_0, | |
| 2400 ui::DomCode::DIGIT0, | |
| 2401 ui::EF_NONE, | |
| 2402 ui::DomKey::CHARACTER, | |
| 2403 '0'}}, | |
| 2404 {ui::ET_KEY_PRESSED, | |
| 2405 {ui::VKEY_OEM_MINUS, | |
| 2406 ui::DomCode::MINUS, | |
| 2407 ui::EF_NONE, | |
| 2408 ui::DomKey::CHARACTER, | |
| 2409 '-'}, | |
| 2410 {ui::VKEY_OEM_MINUS, | |
| 2411 ui::DomCode::MINUS, | |
| 2412 ui::EF_NONE, | |
| 2413 ui::DomKey::CHARACTER, | |
| 2414 '-'}}, | |
| 2415 {ui::ET_KEY_PRESSED, | |
| 2416 {ui::VKEY_OEM_PLUS, | |
| 2417 ui::DomCode::EQUAL, | |
| 2418 ui::EF_NONE, | |
| 2419 ui::DomKey::CHARACTER, | |
| 2420 '='}, | |
| 2421 {ui::VKEY_OEM_PLUS, | |
| 2422 ui::DomCode::EQUAL, | |
| 2423 ui::EF_NONE, | |
| 2424 ui::DomKey::CHARACTER, | |
| 2425 '='}}, | |
| 2426 | 1609 |
| 2427 // The number row should be rewritten as the F<number> row with Search | 1610 // The number row should be rewritten as the F<number> row with Search |
| 2428 // key. | 1611 // key. |
| 2429 {ui::ET_KEY_PRESSED, | 1612 {ui::ET_KEY_PRESSED, |
| 2430 {ui::VKEY_1, | 1613 {ui::VKEY_1, ui::DomCode::DIGIT1, ui::EF_COMMAND_DOWN, '1'}, |
| 2431 ui::DomCode::DIGIT1, | 1614 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1}}, |
| 2432 ui::EF_COMMAND_DOWN, | 1615 {ui::ET_KEY_PRESSED, |
| 2433 ui::DomKey::CHARACTER, | 1616 {ui::VKEY_2, ui::DomCode::DIGIT2, ui::EF_COMMAND_DOWN, '2'}, |
| 2434 '1'}, | 1617 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2}}, |
| 2435 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1, 0}}, | 1618 {ui::ET_KEY_PRESSED, |
| 2436 {ui::ET_KEY_PRESSED, | 1619 {ui::VKEY_3, ui::DomCode::DIGIT3, ui::EF_COMMAND_DOWN, '3'}, |
| 2437 {ui::VKEY_2, | 1620 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3}}, |
| 2438 ui::DomCode::DIGIT2, | 1621 {ui::ET_KEY_PRESSED, |
| 2439 ui::EF_COMMAND_DOWN, | 1622 {ui::VKEY_4, ui::DomCode::DIGIT4, ui::EF_COMMAND_DOWN, '4'}, |
| 2440 ui::DomKey::CHARACTER, | 1623 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4}}, |
| 2441 '2'}, | 1624 {ui::ET_KEY_PRESSED, |
| 2442 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2, 0}}, | 1625 {ui::VKEY_5, ui::DomCode::DIGIT5, ui::EF_COMMAND_DOWN, '5'}, |
| 2443 {ui::ET_KEY_PRESSED, | 1626 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5}}, |
| 2444 {ui::VKEY_3, | 1627 {ui::ET_KEY_PRESSED, |
| 2445 ui::DomCode::DIGIT3, | 1628 {ui::VKEY_6, ui::DomCode::DIGIT6, ui::EF_COMMAND_DOWN, '6'}, |
| 2446 ui::EF_COMMAND_DOWN, | 1629 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6}}, |
| 2447 ui::DomKey::CHARACTER, | 1630 {ui::ET_KEY_PRESSED, |
| 2448 '3'}, | 1631 {ui::VKEY_7, ui::DomCode::DIGIT7, ui::EF_COMMAND_DOWN, '7'}, |
| 2449 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3, 0}}, | 1632 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7}}, |
| 2450 {ui::ET_KEY_PRESSED, | 1633 {ui::ET_KEY_PRESSED, |
| 2451 {ui::VKEY_4, | 1634 {ui::VKEY_8, ui::DomCode::DIGIT8, ui::EF_COMMAND_DOWN, '8'}, |
| 2452 ui::DomCode::DIGIT4, | 1635 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8}}, |
| 2453 ui::EF_COMMAND_DOWN, | 1636 {ui::ET_KEY_PRESSED, |
| 2454 ui::DomKey::CHARACTER, | 1637 {ui::VKEY_9, ui::DomCode::DIGIT9, ui::EF_COMMAND_DOWN, '9'}, |
| 2455 '4'}, | 1638 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9}}, |
| 2456 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4, 0}}, | 1639 {ui::ET_KEY_PRESSED, |
| 2457 {ui::ET_KEY_PRESSED, | 1640 {ui::VKEY_0, ui::DomCode::DIGIT0, ui::EF_COMMAND_DOWN, '0'}, |
| 2458 {ui::VKEY_5, | 1641 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10}}, |
| 2459 ui::DomCode::DIGIT5, | 1642 {ui::ET_KEY_PRESSED, |
| 2460 ui::EF_COMMAND_DOWN, | 1643 {ui::VKEY_OEM_MINUS, ui::DomCode::MINUS, ui::EF_COMMAND_DOWN, '-'}, |
| 2461 ui::DomKey::CHARACTER, | 1644 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11}}, |
| 2462 '5'}, | 1645 {ui::ET_KEY_PRESSED, |
| 2463 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5, 0}}, | 1646 {ui::VKEY_OEM_PLUS, ui::DomCode::EQUAL, ui::EF_COMMAND_DOWN, '='}, |
| 2464 {ui::ET_KEY_PRESSED, | 1647 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12}}, |
| 2465 {ui::VKEY_6, | |
| 2466 ui::DomCode::DIGIT6, | |
| 2467 ui::EF_COMMAND_DOWN, | |
| 2468 ui::DomKey::CHARACTER, | |
| 2469 '6'}, | |
| 2470 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6, 0}}, | |
| 2471 {ui::ET_KEY_PRESSED, | |
| 2472 {ui::VKEY_7, | |
| 2473 ui::DomCode::DIGIT7, | |
| 2474 ui::EF_COMMAND_DOWN, | |
| 2475 ui::DomKey::CHARACTER, | |
| 2476 '7'}, | |
| 2477 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7, 0}}, | |
| 2478 {ui::ET_KEY_PRESSED, | |
| 2479 {ui::VKEY_8, | |
| 2480 ui::DomCode::DIGIT8, | |
| 2481 ui::EF_COMMAND_DOWN, | |
| 2482 ui::DomKey::CHARACTER, | |
| 2483 '8'}, | |
| 2484 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8, 0}}, | |
| 2485 {ui::ET_KEY_PRESSED, | |
| 2486 {ui::VKEY_9, | |
| 2487 ui::DomCode::DIGIT9, | |
| 2488 ui::EF_COMMAND_DOWN, | |
| 2489 ui::DomKey::CHARACTER, | |
| 2490 '9'}, | |
| 2491 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9, 0}}, | |
| 2492 {ui::ET_KEY_PRESSED, | |
| 2493 {ui::VKEY_0, | |
| 2494 ui::DomCode::DIGIT0, | |
| 2495 ui::EF_COMMAND_DOWN, | |
| 2496 ui::DomKey::CHARACTER, | |
| 2497 '0'}, | |
| 2498 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10, 0}}, | |
| 2499 {ui::ET_KEY_PRESSED, | |
| 2500 {ui::VKEY_OEM_MINUS, | |
| 2501 ui::DomCode::MINUS, | |
| 2502 ui::EF_COMMAND_DOWN, | |
| 2503 ui::DomKey::CHARACTER, | |
| 2504 '-'}, | |
| 2505 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11, 0}}, | |
| 2506 {ui::ET_KEY_PRESSED, | |
| 2507 {ui::VKEY_OEM_PLUS, | |
| 2508 ui::DomCode::EQUAL, | |
| 2509 ui::EF_COMMAND_DOWN, | |
| 2510 ui::DomKey::CHARACTER, | |
| 2511 '='}, | |
| 2512 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12, 0}}, | |
| 2513 | 1648 |
| 2514 // The function keys should not be rewritten with Search key pressed. | 1649 // The function keys should not be rewritten with Search key pressed. |
| 2515 {ui::ET_KEY_PRESSED, | 1650 {ui::ET_KEY_PRESSED, |
| 2516 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_COMMAND_DOWN, ui::DomKey::F1, 0}, | 1651 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_COMMAND_DOWN, ui::DomKey::F1}, |
| 2517 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1, 0}}, | 1652 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1}}, |
| 2518 {ui::ET_KEY_PRESSED, | 1653 {ui::ET_KEY_PRESSED, |
| 2519 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_COMMAND_DOWN, ui::DomKey::F2, 0}, | 1654 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_COMMAND_DOWN, ui::DomKey::F2}, |
| 2520 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2, 0}}, | 1655 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2}}, |
| 2521 {ui::ET_KEY_PRESSED, | 1656 {ui::ET_KEY_PRESSED, |
| 2522 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_COMMAND_DOWN, ui::DomKey::F3, 0}, | 1657 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_COMMAND_DOWN, ui::DomKey::F3}, |
| 2523 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3, 0}}, | 1658 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3}}, |
| 2524 {ui::ET_KEY_PRESSED, | 1659 {ui::ET_KEY_PRESSED, |
| 2525 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_COMMAND_DOWN, ui::DomKey::F4, 0}, | 1660 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_COMMAND_DOWN, ui::DomKey::F4}, |
| 2526 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4, 0}}, | 1661 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4}}, |
| 2527 {ui::ET_KEY_PRESSED, | 1662 {ui::ET_KEY_PRESSED, |
| 2528 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_COMMAND_DOWN, ui::DomKey::F5, 0}, | 1663 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_COMMAND_DOWN, ui::DomKey::F5}, |
| 2529 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5, 0}}, | 1664 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5}}, |
| 2530 {ui::ET_KEY_PRESSED, | 1665 {ui::ET_KEY_PRESSED, |
| 2531 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_COMMAND_DOWN, ui::DomKey::F6, 0}, | 1666 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_COMMAND_DOWN, ui::DomKey::F6}, |
| 2532 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6, 0}}, | 1667 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6}}, |
| 2533 {ui::ET_KEY_PRESSED, | 1668 {ui::ET_KEY_PRESSED, |
| 2534 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_COMMAND_DOWN, ui::DomKey::F7, 0}, | 1669 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_COMMAND_DOWN, ui::DomKey::F7}, |
| 2535 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7, 0}}, | 1670 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7}}, |
| 2536 {ui::ET_KEY_PRESSED, | 1671 {ui::ET_KEY_PRESSED, |
| 2537 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_COMMAND_DOWN, ui::DomKey::F8, 0}, | 1672 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_COMMAND_DOWN, ui::DomKey::F8}, |
| 2538 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8, 0}}, | 1673 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8}}, |
| 2539 {ui::ET_KEY_PRESSED, | 1674 {ui::ET_KEY_PRESSED, |
| 2540 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_COMMAND_DOWN, ui::DomKey::F9, 0}, | 1675 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_COMMAND_DOWN, ui::DomKey::F9}, |
| 2541 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9, 0}}, | 1676 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9}}, |
| 2542 {ui::ET_KEY_PRESSED, | 1677 {ui::ET_KEY_PRESSED, |
| 2543 {ui::VKEY_F10, | 1678 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_COMMAND_DOWN, ui::DomKey::F10}, |
| 2544 ui::DomCode::F10, | 1679 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10}}, |
| 2545 ui::EF_COMMAND_DOWN, | 1680 {ui::ET_KEY_PRESSED, |
| 2546 ui::DomKey::F10, | 1681 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_COMMAND_DOWN, ui::DomKey::F11}, |
| 2547 0}, | 1682 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11}}, |
| 2548 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10, 0}}, | 1683 {ui::ET_KEY_PRESSED, |
| 2549 {ui::ET_KEY_PRESSED, | 1684 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_COMMAND_DOWN, ui::DomKey::F12}, |
| 2550 {ui::VKEY_F11, | 1685 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12}}}; |
| 2551 ui::DomCode::F11, | |
| 2552 ui::EF_COMMAND_DOWN, | |
| 2553 ui::DomKey::F11, | |
| 2554 0}, | |
| 2555 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11, 0}}, | |
| 2556 {ui::ET_KEY_PRESSED, | |
| 2557 {ui::VKEY_F12, | |
| 2558 ui::DomCode::F12, | |
| 2559 ui::EF_COMMAND_DOWN, | |
| 2560 ui::DomKey::F12, | |
| 2561 0}, | |
| 2562 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12, 0}}}; | |
| 2563 | 1686 |
| 2564 for (const auto& test : tests) { | 1687 for (const auto& test : tests) { |
| 2565 CheckKeyTestCase(&rewriter, test); | 1688 CheckKeyTestCase(&rewriter, test); |
| 2566 } | 1689 } |
| 2567 } | 1690 } |
| 2568 | 1691 |
| 2569 TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) { | 1692 TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) { |
| 2570 // Remap Search to Control. | 1693 // Remap Search to Control. |
| 2571 TestingPrefServiceSyncable prefs; | 1694 TestingPrefServiceSyncable prefs; |
| 2572 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1695 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 2573 IntegerPrefMember search; | 1696 IntegerPrefMember search; |
| 2574 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 1697 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
| 2575 search.SetValue(chromeos::input_method::kControlKey); | 1698 search.SetValue(chromeos::input_method::kControlKey); |
| 2576 | 1699 |
| 2577 EventRewriter rewriter(NULL); | 1700 EventRewriter rewriter(NULL); |
| 2578 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1701 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 2579 rewriter.set_pref_service_for_testing(&prefs); | 1702 rewriter.set_pref_service_for_testing(&prefs); |
| 2580 | 1703 |
| 2581 KeyTestCase tests[] = { | 1704 KeyTestCase tests[] = { |
| 2582 // Alt+Search+Down -> End | 1705 // Alt+Search+Down -> End |
| 2583 {ui::ET_KEY_PRESSED, | 1706 {ui::ET_KEY_PRESSED, |
| 2584 {ui::VKEY_DOWN, | 1707 {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN, |
| 2585 ui::DomCode::ARROW_DOWN, | 1708 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::ARROW_DOWN}, |
| 2586 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | 1709 {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END}}, |
| 2587 ui::DomKey::ARROW_DOWN, | |
| 2588 0}, | |
| 2589 {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END, 0}}, | |
| 2590 | 1710 |
| 2591 // Shift+Alt+Search+Down -> Shift+End | 1711 // Shift+Alt+Search+Down -> Shift+End |
| 2592 {ui::ET_KEY_PRESSED, | 1712 {ui::ET_KEY_PRESSED, |
| 2593 {ui::VKEY_DOWN, | 1713 {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN, |
| 2594 ui::DomCode::ARROW_DOWN, | |
| 2595 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | 1714 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 2596 ui::DomKey::ARROW_DOWN, | 1715 ui::DomKey::ARROW_DOWN}, |
| 2597 0}, | 1716 {ui::VKEY_END, ui::DomCode::END, ui::EF_SHIFT_DOWN, ui::DomKey::END}}, |
| 2598 {ui::VKEY_END, ui::DomCode::END, ui::EF_SHIFT_DOWN, ui::DomKey::END, 0}}, | |
| 2599 }; | 1717 }; |
| 2600 | 1718 |
| 2601 for (const auto& test : tests) { | 1719 for (const auto& test : tests) { |
| 2602 CheckKeyTestCase(&rewriter, test); | 1720 CheckKeyTestCase(&rewriter, test); |
| 2603 } | 1721 } |
| 2604 } | 1722 } |
| 2605 | 1723 |
| 2606 TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) { | 1724 TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) { |
| 2607 // Remap Control to Alt. | 1725 // Remap Control to Alt. |
| 2608 TestingPrefServiceSyncable prefs; | 1726 TestingPrefServiceSyncable prefs; |
| 2609 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1727 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 2610 IntegerPrefMember control; | 1728 IntegerPrefMember control; |
| 2611 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 1729 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
| 2612 control.SetValue(chromeos::input_method::kAltKey); | 1730 control.SetValue(chromeos::input_method::kAltKey); |
| 2613 | 1731 |
| 2614 EventRewriter rewriter(NULL); | 1732 EventRewriter rewriter(NULL); |
| 2615 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1733 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 2616 rewriter.set_pref_service_for_testing(&prefs); | 1734 rewriter.set_pref_service_for_testing(&prefs); |
| 2617 | 1735 |
| 2618 // Send left control press. | 1736 // Send left control press. |
| 2619 { | 1737 { |
| 2620 ui::KeyEvent keyevent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, | 1738 ui::KeyEvent keyevent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, |
| 2621 ui::DomCode::CONTROL_LEFT, ui::EF_FINAL, | 1739 ui::DomCode::CONTROL_LEFT, ui::EF_FINAL, |
| 2622 ui::DomKey::CONTROL, 0, ui::EventTimeForNow()); | 1740 ui::DomKey::CONTROL, ui::EventTimeForNow()); |
| 2623 scoped_ptr<ui::Event> new_event; | 1741 scoped_ptr<ui::Event> new_event; |
| 2624 // Control should NOT be remapped to Alt if EF_FINAL is set. | 1742 // Control should NOT be remapped to Alt if EF_FINAL is set. |
| 2625 EXPECT_EQ(ui::EVENT_REWRITE_CONTINUE, | 1743 EXPECT_EQ(ui::EVENT_REWRITE_CONTINUE, |
| 2626 rewriter.RewriteEvent(keyevent, &new_event)); | 1744 rewriter.RewriteEvent(keyevent, &new_event)); |
| 2627 EXPECT_FALSE(new_event); | 1745 EXPECT_FALSE(new_event); |
| 2628 } | 1746 } |
| 2629 #if defined(USE_X11) | 1747 #if defined(USE_X11) |
| 2630 // Send left control press, using XI2 native events. | 1748 // Send left control press, using XI2 native events. |
| 2631 { | 1749 { |
| 2632 ui::ScopedXI2Event xev; | 1750 ui::ScopedXI2Event xev; |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2733 return rewriter_->RewriteEvent(event, rewritten_event); | 1851 return rewriter_->RewriteEvent(event, rewritten_event); |
| 2734 } | 1852 } |
| 2735 | 1853 |
| 2736 ui::EventDispatchDetails Send(ui::Event* event) { | 1854 ui::EventDispatchDetails Send(ui::Event* event) { |
| 2737 return source_.Send(event); | 1855 return source_.Send(event); |
| 2738 } | 1856 } |
| 2739 | 1857 |
| 2740 void SendKeyEvent(ui::EventType type, | 1858 void SendKeyEvent(ui::EventType type, |
| 2741 ui::KeyboardCode key_code, | 1859 ui::KeyboardCode key_code, |
| 2742 ui::DomCode code, | 1860 ui::DomCode code, |
| 2743 ui::DomKey key, | 1861 ui::DomKey key) { |
| 2744 base::char16 character) { | 1862 ui::KeyEvent press(type, key_code, code, ui::EF_NONE, key, |
| 2745 ui::KeyEvent press(type, key_code, code, ui::EF_NONE, key, character, | |
| 2746 ui::EventTimeForNow()); | 1863 ui::EventTimeForNow()); |
| 2747 ui::EventDispatchDetails details = Send(&press); | 1864 ui::EventDispatchDetails details = Send(&press); |
| 2748 CHECK(!details.dispatcher_destroyed); | 1865 CHECK(!details.dispatcher_destroyed); |
| 2749 } | 1866 } |
| 2750 | 1867 |
| 2751 void SendActivateStickyKeyPattern(ui::KeyboardCode key_code, | 1868 void SendActivateStickyKeyPattern(ui::KeyboardCode key_code, |
| 2752 ui::DomCode code, | 1869 ui::DomCode code, |
| 2753 ui::DomKey key, | 1870 ui::DomKey key) { |
| 2754 base::char16 character) { | 1871 SendKeyEvent(ui::ET_KEY_PRESSED, key_code, code, key); |
| 2755 SendKeyEvent(ui::ET_KEY_PRESSED, key_code, code, key, character); | 1872 SendKeyEvent(ui::ET_KEY_RELEASED, key_code, code, key); |
| 2756 SendKeyEvent(ui::ET_KEY_RELEASED, key_code, code, key, character); | |
| 2757 } | 1873 } |
| 2758 | 1874 |
| 2759 protected: | 1875 protected: |
| 2760 TestingPrefServiceSyncable* prefs() { return &prefs_; } | 1876 TestingPrefServiceSyncable* prefs() { return &prefs_; } |
| 2761 | 1877 |
| 2762 void PopEvents(ScopedVector<ui::Event>* events) { buffer_.PopEvents(events); } | 1878 void PopEvents(ScopedVector<ui::Event>* events) { buffer_.PopEvents(events); } |
| 2763 | 1879 |
| 2764 void SetUp() override { | 1880 void SetUp() override { |
| 2765 AshTestBase::SetUp(); | 1881 AshTestBase::SetUp(); |
| 2766 sticky_keys_controller_ = | 1882 sticky_keys_controller_ = |
| (...skipping 30 matching lines...) Expand all Loading... |
| 2797 }; | 1913 }; |
| 2798 | 1914 |
| 2799 TEST_F(EventRewriterAshTest, TopRowKeysAreFunctionKeys) { | 1915 TEST_F(EventRewriterAshTest, TopRowKeysAreFunctionKeys) { |
| 2800 scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(1)); | 1916 scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(1)); |
| 2801 ash::wm::WindowState* window_state = ash::wm::GetWindowState(window.get()); | 1917 ash::wm::WindowState* window_state = ash::wm::GetWindowState(window.get()); |
| 2802 window_state->Activate(); | 1918 window_state->Activate(); |
| 2803 ScopedVector<ui::Event> events; | 1919 ScopedVector<ui::Event> events; |
| 2804 | 1920 |
| 2805 // Create a simulated keypress of F1 targetted at the window. | 1921 // Create a simulated keypress of F1 targetted at the window. |
| 2806 ui::KeyEvent press_f1(ui::ET_KEY_PRESSED, ui::VKEY_F1, ui::DomCode::F1, | 1922 ui::KeyEvent press_f1(ui::ET_KEY_PRESSED, ui::VKEY_F1, ui::DomCode::F1, |
| 2807 ui::EF_NONE, ui::DomKey::F1, 0, ui::EventTimeForNow()); | 1923 ui::EF_NONE, ui::DomKey::F1, ui::EventTimeForNow()); |
| 2808 | 1924 |
| 2809 // Simulate an apps v2 window that has requested top row keys as function | 1925 // Simulate an apps v2 window that has requested top row keys as function |
| 2810 // keys. The event should not be rewritten. | 1926 // keys. The event should not be rewritten. |
| 2811 window_state->set_top_row_keys_are_function_keys(true); | 1927 window_state->set_top_row_keys_are_function_keys(true); |
| 2812 ui::EventDispatchDetails details = Send(&press_f1); | 1928 ui::EventDispatchDetails details = Send(&press_f1); |
| 2813 ASSERT_FALSE(details.dispatcher_destroyed); | 1929 ASSERT_FALSE(details.dispatcher_destroyed); |
| 2814 PopEvents(&events); | 1930 PopEvents(&events); |
| 2815 EXPECT_EQ(1u, events.size()); | 1931 EXPECT_EQ(1u, events.size()); |
| 2816 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_F1, | 1932 EXPECT_EQ( |
| 2817 ui::DomCode::F1, ui::EF_NONE, | 1933 GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_F1, |
| 2818 ui::DomKey::F1, 0), | 1934 ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1), |
| 2819 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); | 1935 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); |
| 2820 | 1936 |
| 2821 // The event should also not be rewritten if the send-function-keys pref is | 1937 // The event should also not be rewritten if the send-function-keys pref is |
| 2822 // additionally set, for both apps v2 and regular windows. | 1938 // additionally set, for both apps v2 and regular windows. |
| 2823 BooleanPrefMember send_function_keys_pref; | 1939 BooleanPrefMember send_function_keys_pref; |
| 2824 send_function_keys_pref.Init(prefs::kLanguageSendFunctionKeys, prefs()); | 1940 send_function_keys_pref.Init(prefs::kLanguageSendFunctionKeys, prefs()); |
| 2825 send_function_keys_pref.SetValue(true); | 1941 send_function_keys_pref.SetValue(true); |
| 2826 window_state->set_top_row_keys_are_function_keys(false); | 1942 window_state->set_top_row_keys_are_function_keys(false); |
| 2827 details = Send(&press_f1); | 1943 details = Send(&press_f1); |
| 2828 ASSERT_FALSE(details.dispatcher_destroyed); | 1944 ASSERT_FALSE(details.dispatcher_destroyed); |
| 2829 PopEvents(&events); | 1945 PopEvents(&events); |
| 2830 EXPECT_EQ(1u, events.size()); | 1946 EXPECT_EQ(1u, events.size()); |
| 2831 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_F1, | 1947 EXPECT_EQ( |
| 2832 ui::DomCode::F1, ui::EF_NONE, | 1948 GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_F1, |
| 2833 ui::DomKey::F1, 0), | 1949 ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1), |
| 2834 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); | 1950 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); |
| 2835 | 1951 |
| 2836 // If the pref isn't set when an event is sent to a regular window, F1 is | 1952 // If the pref isn't set when an event is sent to a regular window, F1 is |
| 2837 // rewritten to the back key. | 1953 // rewritten to the back key. |
| 2838 send_function_keys_pref.SetValue(false); | 1954 send_function_keys_pref.SetValue(false); |
| 2839 details = Send(&press_f1); | 1955 details = Send(&press_f1); |
| 2840 ASSERT_FALSE(details.dispatcher_destroyed); | 1956 ASSERT_FALSE(details.dispatcher_destroyed); |
| 2841 PopEvents(&events); | 1957 PopEvents(&events); |
| 2842 EXPECT_EQ(1u, events.size()); | 1958 EXPECT_EQ(1u, events.size()); |
| 2843 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_BROWSER_BACK, | 1959 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_BROWSER_BACK, |
| 2844 ui::DomCode::BROWSER_BACK, ui::EF_NONE, | 1960 ui::DomCode::BROWSER_BACK, ui::EF_NONE, |
| 2845 ui::DomKey::BROWSER_BACK, 0), | 1961 ui::DomKey::BROWSER_BACK), |
| 2846 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); | 1962 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); |
| 2847 } | 1963 } |
| 2848 | 1964 |
| 2849 TEST_F(EventRewriterTest, TestRewrittenModifierClick) { | 1965 TEST_F(EventRewriterTest, TestRewrittenModifierClick) { |
| 2850 #if defined(USE_X11) | 1966 #if defined(USE_X11) |
| 2851 std::vector<int> device_list; | 1967 std::vector<int> device_list; |
| 2852 device_list.push_back(10); | 1968 device_list.push_back(10); |
| 2853 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); | 1969 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); |
| 2854 | 1970 |
| 2855 // Remap Control to Alt. | 1971 // Remap Control to Alt. |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3086 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); | 2202 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); |
| 3087 } | 2203 } |
| 3088 #endif | 2204 #endif |
| 3089 } | 2205 } |
| 3090 | 2206 |
| 3091 TEST_F(EventRewriterAshTest, StickyKeyEventDispatchImpl) { | 2207 TEST_F(EventRewriterAshTest, StickyKeyEventDispatchImpl) { |
| 3092 // Test the actual key event dispatch implementation. | 2208 // Test the actual key event dispatch implementation. |
| 3093 ScopedVector<ui::Event> events; | 2209 ScopedVector<ui::Event> events; |
| 3094 | 2210 |
| 3095 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2211 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 3096 ui::DomKey::CONTROL, 0); | 2212 ui::DomKey::CONTROL); |
| 3097 PopEvents(&events); | 2213 PopEvents(&events); |
| 3098 EXPECT_EQ(1u, events.size()); | 2214 EXPECT_EQ(1u, events.size()); |
| 3099 EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type()); | 2215 EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type()); |
| 3100 EXPECT_EQ(ui::VKEY_CONTROL, | 2216 EXPECT_EQ(ui::VKEY_CONTROL, |
| 3101 static_cast<ui::KeyEvent*>(events[0])->key_code()); | 2217 static_cast<ui::KeyEvent*>(events[0])->key_code()); |
| 3102 | 2218 |
| 3103 // Test key press event is correctly modified and modifier release | 2219 // Test key press event is correctly modified and modifier release |
| 3104 // event is sent. | 2220 // event is sent. |
| 3105 ui::KeyEvent press(ui::ET_KEY_PRESSED, ui::VKEY_C, ui::DomCode::KEY_C, | 2221 ui::KeyEvent press(ui::ET_KEY_PRESSED, ui::VKEY_C, ui::DomCode::KEY_C, |
| 3106 ui::EF_NONE, ui::DomKey::CHARACTER, 'c', | 2222 ui::EF_NONE, 'c', ui::EventTimeForNow()); |
| 3107 ui::EventTimeForNow()); | |
| 3108 ui::EventDispatchDetails details = Send(&press); | 2223 ui::EventDispatchDetails details = Send(&press); |
| 3109 PopEvents(&events); | 2224 PopEvents(&events); |
| 3110 EXPECT_EQ(2u, events.size()); | 2225 EXPECT_EQ(2u, events.size()); |
| 3111 EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type()); | 2226 EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type()); |
| 3112 EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code()); | 2227 EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code()); |
| 3113 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); | 2228 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); |
| 3114 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); | 2229 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); |
| 3115 EXPECT_EQ(ui::VKEY_CONTROL, | 2230 EXPECT_EQ(ui::VKEY_CONTROL, |
| 3116 static_cast<ui::KeyEvent*>(events[1])->key_code()); | 2231 static_cast<ui::KeyEvent*>(events[1])->key_code()); |
| 3117 | 2232 |
| 3118 // Test key release event is not modified. | 2233 // Test key release event is not modified. |
| 3119 ui::KeyEvent release(ui::ET_KEY_RELEASED, ui::VKEY_C, ui::DomCode::KEY_C, | 2234 ui::KeyEvent release(ui::ET_KEY_RELEASED, ui::VKEY_C, ui::DomCode::KEY_C, |
| 3120 ui::EF_NONE, ui::DomKey::CHARACTER, 'c', | 2235 ui::EF_NONE, 'c', ui::EventTimeForNow()); |
| 3121 ui::EventTimeForNow()); | |
| 3122 details = Send(&release); | 2236 details = Send(&release); |
| 3123 ASSERT_FALSE(details.dispatcher_destroyed); | 2237 ASSERT_FALSE(details.dispatcher_destroyed); |
| 3124 PopEvents(&events); | 2238 PopEvents(&events); |
| 3125 EXPECT_EQ(1u, events.size()); | 2239 EXPECT_EQ(1u, events.size()); |
| 3126 EXPECT_EQ(ui::ET_KEY_RELEASED, events[0]->type()); | 2240 EXPECT_EQ(ui::ET_KEY_RELEASED, events[0]->type()); |
| 3127 EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code()); | 2241 EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code()); |
| 3128 EXPECT_FALSE(events[0]->flags() & ui::EF_CONTROL_DOWN); | 2242 EXPECT_FALSE(events[0]->flags() & ui::EF_CONTROL_DOWN); |
| 3129 } | 2243 } |
| 3130 | 2244 |
| 3131 TEST_F(EventRewriterAshTest, MouseEventDispatchImpl) { | 2245 TEST_F(EventRewriterAshTest, MouseEventDispatchImpl) { |
| 3132 ScopedVector<ui::Event> events; | 2246 ScopedVector<ui::Event> events; |
| 3133 | 2247 |
| 3134 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2248 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 3135 ui::DomKey::CONTROL, 0); | 2249 ui::DomKey::CONTROL); |
| 3136 PopEvents(&events); | 2250 PopEvents(&events); |
| 3137 | 2251 |
| 3138 // Test mouse press event is correctly modified. | 2252 // Test mouse press event is correctly modified. |
| 3139 gfx::Point location(0, 0); | 2253 gfx::Point location(0, 0); |
| 3140 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, location, location, | 2254 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, location, location, |
| 3141 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, | 2255 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, |
| 3142 ui::EF_LEFT_MOUSE_BUTTON); | 2256 ui::EF_LEFT_MOUSE_BUTTON); |
| 3143 ui::EventDispatchDetails details = Send(&press); | 2257 ui::EventDispatchDetails details = Send(&press); |
| 3144 ASSERT_FALSE(details.dispatcher_destroyed); | 2258 ASSERT_FALSE(details.dispatcher_destroyed); |
| 3145 PopEvents(&events); | 2259 PopEvents(&events); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 3162 EXPECT_EQ(ui::VKEY_CONTROL, | 2276 EXPECT_EQ(ui::VKEY_CONTROL, |
| 3163 static_cast<ui::KeyEvent*>(events[1])->key_code()); | 2277 static_cast<ui::KeyEvent*>(events[1])->key_code()); |
| 3164 } | 2278 } |
| 3165 | 2279 |
| 3166 TEST_F(EventRewriterAshTest, MouseWheelEventDispatchImpl) { | 2280 TEST_F(EventRewriterAshTest, MouseWheelEventDispatchImpl) { |
| 3167 ScopedVector<ui::Event> events; | 2281 ScopedVector<ui::Event> events; |
| 3168 | 2282 |
| 3169 // Test positive mouse wheel event is correctly modified and modifier release | 2283 // Test positive mouse wheel event is correctly modified and modifier release |
| 3170 // event is sent. | 2284 // event is sent. |
| 3171 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2285 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 3172 ui::DomKey::CONTROL, 0); | 2286 ui::DomKey::CONTROL); |
| 3173 PopEvents(&events); | 2287 PopEvents(&events); |
| 3174 gfx::Point location(0, 0); | 2288 gfx::Point location(0, 0); |
| 3175 ui::MouseEvent mev(ui::ET_MOUSEWHEEL, location, location, | 2289 ui::MouseEvent mev(ui::ET_MOUSEWHEEL, location, location, |
| 3176 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, | 2290 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, |
| 3177 ui::EF_LEFT_MOUSE_BUTTON); | 2291 ui::EF_LEFT_MOUSE_BUTTON); |
| 3178 ui::MouseWheelEvent positive(mev, 0, ui::MouseWheelEvent::kWheelDelta); | 2292 ui::MouseWheelEvent positive(mev, 0, ui::MouseWheelEvent::kWheelDelta); |
| 3179 ui::EventDispatchDetails details = Send(&positive); | 2293 ui::EventDispatchDetails details = Send(&positive); |
| 3180 ASSERT_FALSE(details.dispatcher_destroyed); | 2294 ASSERT_FALSE(details.dispatcher_destroyed); |
| 3181 PopEvents(&events); | 2295 PopEvents(&events); |
| 3182 EXPECT_EQ(2u, events.size()); | 2296 EXPECT_EQ(2u, events.size()); |
| 3183 EXPECT_TRUE(events[0]->IsMouseWheelEvent()); | 2297 EXPECT_TRUE(events[0]->IsMouseWheelEvent()); |
| 3184 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); | 2298 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); |
| 3185 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); | 2299 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); |
| 3186 EXPECT_EQ(ui::VKEY_CONTROL, | 2300 EXPECT_EQ(ui::VKEY_CONTROL, |
| 3187 static_cast<ui::KeyEvent*>(events[1])->key_code()); | 2301 static_cast<ui::KeyEvent*>(events[1])->key_code()); |
| 3188 | 2302 |
| 3189 // Test negative mouse wheel event is correctly modified and modifier release | 2303 // Test negative mouse wheel event is correctly modified and modifier release |
| 3190 // event is sent. | 2304 // event is sent. |
| 3191 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2305 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 3192 ui::DomKey::CONTROL, 0); | 2306 ui::DomKey::CONTROL); |
| 3193 PopEvents(&events); | 2307 PopEvents(&events); |
| 3194 ui::MouseWheelEvent negative(mev, 0, -ui::MouseWheelEvent::kWheelDelta); | 2308 ui::MouseWheelEvent negative(mev, 0, -ui::MouseWheelEvent::kWheelDelta); |
| 3195 details = Send(&negative); | 2309 details = Send(&negative); |
| 3196 ASSERT_FALSE(details.dispatcher_destroyed); | 2310 ASSERT_FALSE(details.dispatcher_destroyed); |
| 3197 PopEvents(&events); | 2311 PopEvents(&events); |
| 3198 EXPECT_EQ(2u, events.size()); | 2312 EXPECT_EQ(2u, events.size()); |
| 3199 EXPECT_TRUE(events[0]->IsMouseWheelEvent()); | 2313 EXPECT_TRUE(events[0]->IsMouseWheelEvent()); |
| 3200 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); | 2314 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); |
| 3201 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); | 2315 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); |
| 3202 EXPECT_EQ(ui::VKEY_CONTROL, | 2316 EXPECT_EQ(ui::VKEY_CONTROL, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 3218 ash::StickyKeysOverlay* overlay_; | 2332 ash::StickyKeysOverlay* overlay_; |
| 3219 }; | 2333 }; |
| 3220 | 2334 |
| 3221 TEST_F(StickyKeysOverlayTest, OneModifierEnabled) { | 2335 TEST_F(StickyKeysOverlayTest, OneModifierEnabled) { |
| 3222 EXPECT_FALSE(overlay_->is_visible()); | 2336 EXPECT_FALSE(overlay_->is_visible()); |
| 3223 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2337 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 3224 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2338 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 3225 | 2339 |
| 3226 // Pressing modifier key should show overlay. | 2340 // Pressing modifier key should show overlay. |
| 3227 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2341 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 3228 ui::DomKey::CONTROL, 0); | 2342 ui::DomKey::CONTROL); |
| 3229 EXPECT_TRUE(overlay_->is_visible()); | 2343 EXPECT_TRUE(overlay_->is_visible()); |
| 3230 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 2344 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
| 3231 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2345 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 3232 | 2346 |
| 3233 // Pressing a normal key should hide overlay. | 2347 // Pressing a normal key should hide overlay. |
| 3234 SendActivateStickyKeyPattern(ui::VKEY_T, ui::DomCode::KEY_T, | 2348 SendActivateStickyKeyPattern(ui::VKEY_T, ui::DomCode::KEY_T, 't'); |
| 3235 ui::DomKey::CHARACTER, 't'); | |
| 3236 EXPECT_FALSE(overlay_->is_visible()); | 2349 EXPECT_FALSE(overlay_->is_visible()); |
| 3237 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2350 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 3238 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2351 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 3239 } | 2352 } |
| 3240 | 2353 |
| 3241 TEST_F(StickyKeysOverlayTest, TwoModifiersEnabled) { | 2354 TEST_F(StickyKeysOverlayTest, TwoModifiersEnabled) { |
| 3242 EXPECT_FALSE(overlay_->is_visible()); | 2355 EXPECT_FALSE(overlay_->is_visible()); |
| 3243 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2356 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 3244 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2357 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 3245 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2358 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 3246 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2359 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
| 3247 | 2360 |
| 3248 // Pressing two modifiers should show overlay. | 2361 // Pressing two modifiers should show overlay. |
| 3249 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, | 2362 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, |
| 3250 ui::DomKey::SHIFT, 0); | 2363 ui::DomKey::SHIFT); |
| 3251 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2364 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 3252 ui::DomKey::CONTROL, 0); | 2365 ui::DomKey::CONTROL); |
| 3253 EXPECT_TRUE(overlay_->is_visible()); | 2366 EXPECT_TRUE(overlay_->is_visible()); |
| 3254 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 2367 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
| 3255 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2368 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
| 3256 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 2369 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
| 3257 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2370 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 3258 | 2371 |
| 3259 // Pressing a normal key should hide overlay. | 2372 // Pressing a normal key should hide overlay. |
| 3260 SendActivateStickyKeyPattern(ui::VKEY_N, ui::DomCode::KEY_N, | 2373 SendActivateStickyKeyPattern(ui::VKEY_N, ui::DomCode::KEY_N, 'n'); |
| 3261 ui::DomKey::CHARACTER, 'n'); | |
| 3262 EXPECT_FALSE(overlay_->is_visible()); | 2374 EXPECT_FALSE(overlay_->is_visible()); |
| 3263 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2375 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 3264 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2376 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 3265 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2377 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 3266 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2378 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
| 3267 } | 2379 } |
| 3268 | 2380 |
| 3269 TEST_F(StickyKeysOverlayTest, LockedModifier) { | 2381 TEST_F(StickyKeysOverlayTest, LockedModifier) { |
| 3270 EXPECT_FALSE(overlay_->is_visible()); | 2382 EXPECT_FALSE(overlay_->is_visible()); |
| 3271 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2383 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 3272 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 2384 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
| 3273 | 2385 |
| 3274 // Pressing a modifier key twice should lock modifier and show overlay. | 2386 // Pressing a modifier key twice should lock modifier and show overlay. |
| 3275 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, | 2387 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, |
| 3276 ui::DomKey::ALT, 0); | 2388 ui::DomKey::ALT); |
| 3277 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, | 2389 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, |
| 3278 ui::DomKey::ALT, 0); | 2390 ui::DomKey::ALT); |
| 3279 EXPECT_TRUE(overlay_->is_visible()); | 2391 EXPECT_TRUE(overlay_->is_visible()); |
| 3280 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 2392 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
| 3281 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 2393 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
| 3282 | 2394 |
| 3283 // Pressing a normal key should not hide overlay. | 2395 // Pressing a normal key should not hide overlay. |
| 3284 SendActivateStickyKeyPattern(ui::VKEY_D, ui::DomCode::KEY_D, | 2396 SendActivateStickyKeyPattern(ui::VKEY_D, ui::DomCode::KEY_D, 'd'); |
| 3285 ui::DomKey::CHARACTER, 'd'); | |
| 3286 EXPECT_TRUE(overlay_->is_visible()); | 2397 EXPECT_TRUE(overlay_->is_visible()); |
| 3287 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 2398 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
| 3288 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 2399 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
| 3289 } | 2400 } |
| 3290 | 2401 |
| 3291 TEST_F(StickyKeysOverlayTest, LockedAndNormalModifier) { | 2402 TEST_F(StickyKeysOverlayTest, LockedAndNormalModifier) { |
| 3292 EXPECT_FALSE(overlay_->is_visible()); | 2403 EXPECT_FALSE(overlay_->is_visible()); |
| 3293 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2404 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 3294 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2405 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 3295 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2406 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 3296 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2407 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
| 3297 | 2408 |
| 3298 // Pressing a modifier key twice should lock modifier and show overlay. | 2409 // Pressing a modifier key twice should lock modifier and show overlay. |
| 3299 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2410 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 3300 ui::DomKey::CONTROL, 0); | 2411 ui::DomKey::CONTROL); |
| 3301 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2412 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 3302 ui::DomKey::CONTROL, 0); | 2413 ui::DomKey::CONTROL); |
| 3303 EXPECT_TRUE(overlay_->is_visible()); | 2414 EXPECT_TRUE(overlay_->is_visible()); |
| 3304 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 2415 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
| 3305 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2416 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 3306 | 2417 |
| 3307 // Pressing another modifier key should still show overlay. | 2418 // Pressing another modifier key should still show overlay. |
| 3308 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, | 2419 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, |
| 3309 ui::DomKey::SHIFT, 0); | 2420 ui::DomKey::SHIFT); |
| 3310 EXPECT_TRUE(overlay_->is_visible()); | 2421 EXPECT_TRUE(overlay_->is_visible()); |
| 3311 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 2422 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
| 3312 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2423 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 3313 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 2424 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
| 3314 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2425 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
| 3315 | 2426 |
| 3316 // Pressing a normal key should not hide overlay but disable normal modifier. | 2427 // Pressing a normal key should not hide overlay but disable normal modifier. |
| 3317 SendActivateStickyKeyPattern(ui::VKEY_D, ui::DomCode::KEY_D, | 2428 SendActivateStickyKeyPattern(ui::VKEY_D, ui::DomCode::KEY_D, 'd'); |
| 3318 ui::DomKey::CHARACTER, 'd'); | |
| 3319 EXPECT_TRUE(overlay_->is_visible()); | 2429 EXPECT_TRUE(overlay_->is_visible()); |
| 3320 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 2430 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
| 3321 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2431 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 3322 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2432 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 3323 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2433 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
| 3324 } | 2434 } |
| 3325 | 2435 |
| 3326 TEST_F(StickyKeysOverlayTest, ModifiersDisabled) { | 2436 TEST_F(StickyKeysOverlayTest, ModifiersDisabled) { |
| 3327 EXPECT_FALSE(overlay_->is_visible()); | 2437 EXPECT_FALSE(overlay_->is_visible()); |
| 3328 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2438 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 3329 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2439 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 3330 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2440 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 3331 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2441 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
| 3332 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2442 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 3333 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 2443 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
| 3334 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2444 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 3335 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); | 2445 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); |
| 3336 | 2446 |
| 3337 // Enable modifiers. | 2447 // Enable modifiers. |
| 3338 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2448 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 3339 ui::DomKey::CONTROL, 0); | 2449 ui::DomKey::CONTROL); |
| 3340 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, | 2450 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, |
| 3341 ui::DomKey::SHIFT, 0); | 2451 ui::DomKey::SHIFT); |
| 3342 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, | 2452 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, |
| 3343 ui::DomKey::SHIFT, 0); | 2453 ui::DomKey::SHIFT); |
| 3344 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, | 2454 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, |
| 3345 ui::DomKey::ALT, 0); | 2455 ui::DomKey::ALT); |
| 3346 SendActivateStickyKeyPattern(ui::VKEY_COMMAND, ui::DomCode::OS_LEFT, | 2456 SendActivateStickyKeyPattern(ui::VKEY_COMMAND, ui::DomCode::OS_LEFT, |
| 3347 ui::DomKey::OS, 0); | 2457 ui::DomKey::OS); |
| 3348 SendActivateStickyKeyPattern(ui::VKEY_COMMAND, ui::DomCode::OS_LEFT, | 2458 SendActivateStickyKeyPattern(ui::VKEY_COMMAND, ui::DomCode::OS_LEFT, |
| 3349 ui::DomKey::OS, 0); | 2459 ui::DomKey::OS); |
| 3350 | 2460 |
| 3351 EXPECT_TRUE(overlay_->is_visible()); | 2461 EXPECT_TRUE(overlay_->is_visible()); |
| 3352 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 2462 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
| 3353 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2463 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 3354 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 2464 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
| 3355 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2465 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
| 3356 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 2466 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
| 3357 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 2467 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
| 3358 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 2468 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
| 3359 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); | 2469 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); |
| 3360 | 2470 |
| 3361 // Disable modifiers and overlay should be hidden. | 2471 // Disable modifiers and overlay should be hidden. |
| 3362 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2472 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 3363 ui::DomKey::CONTROL, 0); | 2473 ui::DomKey::CONTROL); |
| 3364 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2474 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 3365 ui::DomKey::CONTROL, 0); | 2475 ui::DomKey::CONTROL); |
| 3366 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, | 2476 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, |
| 3367 ui::DomKey::SHIFT, 0); | 2477 ui::DomKey::SHIFT); |
| 3368 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, | 2478 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, |
| 3369 ui::DomKey::ALT, 0); | 2479 ui::DomKey::ALT); |
| 3370 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, | 2480 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, |
| 3371 ui::DomKey::ALT, 0); | 2481 ui::DomKey::ALT); |
| 3372 SendActivateStickyKeyPattern(ui::VKEY_COMMAND, ui::DomCode::OS_LEFT, | 2482 SendActivateStickyKeyPattern(ui::VKEY_COMMAND, ui::DomCode::OS_LEFT, |
| 3373 ui::DomKey::OS, 0); | 2483 ui::DomKey::OS); |
| 3374 | 2484 |
| 3375 EXPECT_FALSE(overlay_->is_visible()); | 2485 EXPECT_FALSE(overlay_->is_visible()); |
| 3376 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2486 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 3377 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2487 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 3378 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2488 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 3379 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2489 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
| 3380 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2490 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 3381 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 2491 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
| 3382 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2492 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 3383 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); | 2493 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 3411 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); | 2521 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); |
| 3412 EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); | 2522 EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); |
| 3413 | 2523 |
| 3414 // Turn off AltGr and Mod3. | 2524 // Turn off AltGr and Mod3. |
| 3415 sticky_keys_controller_->SetModifiersEnabled(false, false); | 2525 sticky_keys_controller_->SetModifiersEnabled(false, false); |
| 3416 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); | 2526 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); |
| 3417 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); | 2527 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); |
| 3418 } | 2528 } |
| 3419 | 2529 |
| 3420 } // namespace chromeos | 2530 } // namespace chromeos |
| OLD | NEW |