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/common/wm/window_state.h" | 9 #include "ash/common/wm/window_state.h" |
10 #include "ash/shell.h" | 10 #include "ash/shell.h" |
11 #include "ash/sticky_keys/sticky_keys_controller.h" | 11 #include "ash/sticky_keys/sticky_keys_controller.h" |
12 #include "ash/sticky_keys/sticky_keys_overlay.h" | 12 #include "ash/sticky_keys/sticky_keys_overlay.h" |
13 #include "ash/test/ash_test_base.h" | 13 #include "ash/test/ash_test_base.h" |
14 #include "ash/wm/window_state_aura.h" | 14 #include "ash/wm/window_state_aura.h" |
15 #include "base/command_line.h" | 15 #include "base/command_line.h" |
16 #include "base/macros.h" | 16 #include "base/macros.h" |
17 #include "base/strings/stringprintf.h" | 17 #include "base/strings/stringprintf.h" |
18 #include "chrome/browser/chromeos/input_method/input_method_configuration.h" | 18 #include "chrome/browser/chromeos/input_method/input_method_configuration.h" |
19 #include "chrome/browser/chromeos/input_method/mock_input_method_manager.h" | 19 #include "chrome/browser/chromeos/input_method/mock_input_method_manager.h" |
20 #include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h" | 20 #include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h" |
21 #include "chrome/browser/chromeos/preferences.h" | 21 #include "chrome/browser/chromeos/preferences.h" |
22 #include "chrome/common/pref_names.h" | 22 #include "chrome/common/pref_names.h" |
23 #include "chromeos/chromeos_switches.h" | 23 #include "chromeos/chromeos_switches.h" |
24 #include "components/prefs/pref_member.h" | 24 #include "components/prefs/pref_member.h" |
25 #include "components/syncable_prefs/testing_pref_service_syncable.h" | 25 #include "components/sync_preferences/testing_pref_service_syncable.h" |
26 #include "components/user_manager/fake_user_manager.h" | 26 #include "components/user_manager/fake_user_manager.h" |
27 #include "testing/gtest/include/gtest/gtest.h" | 27 #include "testing/gtest/include/gtest/gtest.h" |
28 #include "ui/aura/window.h" | 28 #include "ui/aura/window.h" |
29 #include "ui/aura/window_tree_host.h" | 29 #include "ui/aura/window_tree_host.h" |
30 #include "ui/base/ime/chromeos/fake_ime_keyboard.h" | 30 #include "ui/base/ime/chromeos/fake_ime_keyboard.h" |
31 #include "ui/events/event.h" | 31 #include "ui/events/event.h" |
32 #include "ui/events/event_rewriter.h" | 32 #include "ui/events/event_rewriter.h" |
33 #include "ui/events/event_utils.h" | 33 #include "ui/events/event_utils.h" |
34 #include "ui/events/keycodes/dom/dom_code.h" | 34 #include "ui/events/keycodes/dom/dom_code.h" |
35 #include "ui/events/keycodes/dom/dom_key.h" | 35 #include "ui/events/keycodes/dom/dom_key.h" |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
152 return *new_event ? new_event->get()->AsMouseEvent() : &event; | 152 return *new_event ? new_event->get()->AsMouseEvent() : &event; |
153 } | 153 } |
154 | 154 |
155 user_manager::FakeUserManager* fake_user_manager_; // Not owned. | 155 user_manager::FakeUserManager* fake_user_manager_; // Not owned. |
156 chromeos::ScopedUserManagerEnabler user_manager_enabler_; | 156 chromeos::ScopedUserManagerEnabler user_manager_enabler_; |
157 chromeos::input_method::MockInputMethodManager* input_method_manager_mock_; | 157 chromeos::input_method::MockInputMethodManager* input_method_manager_mock_; |
158 }; | 158 }; |
159 | 159 |
160 TEST_F(EventRewriterTest, TestRewriteCommandToControl) { | 160 TEST_F(EventRewriterTest, TestRewriteCommandToControl) { |
161 // First, test with a PC keyboard. | 161 // First, test with a PC keyboard. |
162 syncable_prefs::TestingPrefServiceSyncable prefs; | 162 sync_preferences::TestingPrefServiceSyncable prefs; |
163 EventRewriter rewriter(NULL); | 163 EventRewriter rewriter(NULL); |
164 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 164 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
165 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 165 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
166 rewriter.set_pref_service_for_testing(&prefs); | 166 rewriter.set_pref_service_for_testing(&prefs); |
167 | 167 |
168 KeyTestCase pc_keyboard_tests[] = { | 168 KeyTestCase pc_keyboard_tests[] = { |
169 // VKEY_A, Alt modifier. | 169 // VKEY_A, Alt modifier. |
170 {ui::ET_KEY_PRESSED, | 170 {ui::ET_KEY_PRESSED, |
171 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN, | 171 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN, |
172 ui::DomKey::UNIDENTIFIED}, | 172 ui::DomKey::UNIDENTIFIED}, |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
248 }; | 248 }; |
249 | 249 |
250 for (const auto& test : apple_keyboard_tests) { | 250 for (const auto& test : apple_keyboard_tests) { |
251 CheckKeyTestCase(&rewriter, test); | 251 CheckKeyTestCase(&rewriter, test); |
252 } | 252 } |
253 } | 253 } |
254 | 254 |
255 // For crbug.com/133896. | 255 // For crbug.com/133896. |
256 TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) { | 256 TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) { |
257 // Remap Control to Alt. | 257 // Remap Control to Alt. |
258 syncable_prefs::TestingPrefServiceSyncable prefs; | 258 sync_preferences::TestingPrefServiceSyncable prefs; |
259 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 259 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
260 IntegerPrefMember control; | 260 IntegerPrefMember control; |
261 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 261 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
262 control.SetValue(chromeos::input_method::kAltKey); | 262 control.SetValue(chromeos::input_method::kAltKey); |
263 | 263 |
264 EventRewriter rewriter(NULL); | 264 EventRewriter rewriter(NULL); |
265 rewriter.set_pref_service_for_testing(&prefs); | 265 rewriter.set_pref_service_for_testing(&prefs); |
266 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 266 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
267 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 267 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
268 | 268 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
300 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_RIGHT, | 300 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_RIGHT, |
301 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ui::DomKey::CONTROL}}, | 301 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ui::DomKey::CONTROL}}, |
302 }; | 302 }; |
303 | 303 |
304 for (const auto& test : apple_keyboard_tests) { | 304 for (const auto& test : apple_keyboard_tests) { |
305 CheckKeyTestCase(&rewriter, test); | 305 CheckKeyTestCase(&rewriter, test); |
306 } | 306 } |
307 } | 307 } |
308 | 308 |
309 void EventRewriterTest::TestRewriteNumPadKeys() { | 309 void EventRewriterTest::TestRewriteNumPadKeys() { |
310 syncable_prefs::TestingPrefServiceSyncable prefs; | 310 sync_preferences::TestingPrefServiceSyncable prefs; |
311 EventRewriter rewriter(NULL); | 311 EventRewriter rewriter(NULL); |
312 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 312 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
313 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 313 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
314 rewriter.set_pref_service_for_testing(&prefs); | 314 rewriter.set_pref_service_for_testing(&prefs); |
315 | 315 |
316 KeyTestCase tests[] = { | 316 KeyTestCase tests[] = { |
317 // XK_KP_Insert (= NumPad 0 without Num Lock), no modifier. | 317 // XK_KP_Insert (= NumPad 0 without Num Lock), no modifier. |
318 {ui::ET_KEY_PRESSED, | 318 {ui::ET_KEY_PRESSED, |
319 {ui::VKEY_INSERT, ui::DomCode::NUMPAD0, ui::EF_NONE, ui::DomKey::INSERT}, | 319 {ui::VKEY_INSERT, ui::DomCode::NUMPAD0, ui::EF_NONE, ui::DomKey::INSERT}, |
320 {ui::VKEY_NUMPAD0, ui::DomCode::NUMPAD0, ui::EF_NONE, | 320 {ui::VKEY_NUMPAD0, ui::DomCode::NUMPAD0, ui::EF_NONE, |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
489 | 489 |
490 TEST_F(EventRewriterTest, TestRewriteNumPadKeysWithDiamondKeyFlag) { | 490 TEST_F(EventRewriterTest, TestRewriteNumPadKeysWithDiamondKeyFlag) { |
491 // Make sure the num lock works correctly even when Diamond key exists. | 491 // Make sure the num lock works correctly even when Diamond key exists. |
492 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 492 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
493 chromeos::switches::kHasChromeOSDiamondKey, ""); | 493 chromeos::switches::kHasChromeOSDiamondKey, ""); |
494 TestRewriteNumPadKeys(); | 494 TestRewriteNumPadKeys(); |
495 } | 495 } |
496 | 496 |
497 // Tests if the rewriter can handle a Command + Num Pad event. | 497 // Tests if the rewriter can handle a Command + Num Pad event. |
498 void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() { | 498 void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() { |
499 syncable_prefs::TestingPrefServiceSyncable prefs; | 499 sync_preferences::TestingPrefServiceSyncable prefs; |
500 EventRewriter rewriter(NULL); | 500 EventRewriter rewriter(NULL); |
501 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); | 501 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); |
502 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 502 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
503 rewriter.set_pref_service_for_testing(&prefs); | 503 rewriter.set_pref_service_for_testing(&prefs); |
504 | 504 |
505 KeyTestCase tests[] = { | 505 KeyTestCase tests[] = { |
506 // XK_KP_End (= NumPad 1 without Num Lock), Win modifier. | 506 // XK_KP_End (= NumPad 1 without Num Lock), Win modifier. |
507 // The result should be "Num Pad 1 with Control + Num Lock modifiers". | 507 // The result should be "Num Pad 1 with Control + Num Lock modifiers". |
508 {ui::ET_KEY_PRESSED, | 508 {ui::ET_KEY_PRESSED, |
509 {ui::VKEY_END, ui::DomCode::NUMPAD1, ui::EF_COMMAND_DOWN, | 509 {ui::VKEY_END, ui::DomCode::NUMPAD1, ui::EF_COMMAND_DOWN, |
(...skipping 24 matching lines...) Expand all Loading... |
534 // Makes sure the num lock works correctly even when Diamond key exists. | 534 // Makes sure the num lock works correctly even when Diamond key exists. |
535 const base::CommandLine original_cl(*base::CommandLine::ForCurrentProcess()); | 535 const base::CommandLine original_cl(*base::CommandLine::ForCurrentProcess()); |
536 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 536 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
537 chromeos::switches::kHasChromeOSDiamondKey, ""); | 537 chromeos::switches::kHasChromeOSDiamondKey, ""); |
538 | 538 |
539 TestRewriteNumPadKeysOnAppleKeyboard(); | 539 TestRewriteNumPadKeysOnAppleKeyboard(); |
540 *base::CommandLine::ForCurrentProcess() = original_cl; | 540 *base::CommandLine::ForCurrentProcess() = original_cl; |
541 } | 541 } |
542 | 542 |
543 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) { | 543 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) { |
544 syncable_prefs::TestingPrefServiceSyncable prefs; | 544 sync_preferences::TestingPrefServiceSyncable prefs; |
545 EventRewriter rewriter(NULL); | 545 EventRewriter rewriter(NULL); |
546 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 546 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
547 rewriter.set_pref_service_for_testing(&prefs); | 547 rewriter.set_pref_service_for_testing(&prefs); |
548 | 548 |
549 KeyTestCase tests[] = { | 549 KeyTestCase tests[] = { |
550 // Press Search. Confirm the event is not rewritten. | 550 // Press Search. Confirm the event is not rewritten. |
551 {ui::ET_KEY_PRESSED, | 551 {ui::ET_KEY_PRESSED, |
552 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_NONE, ui::DomKey::META}, | 552 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_NONE, ui::DomKey::META}, |
553 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_COMMAND_DOWN, | 553 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_COMMAND_DOWN, |
554 ui::DomKey::META}}, | 554 ui::DomKey::META}}, |
(...skipping 30 matching lines...) Expand all Loading... |
585 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_NONE, ui::DomKey::META}, | 585 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_NONE, ui::DomKey::META}, |
586 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_NONE, ui::DomKey::META}}, | 586 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_NONE, ui::DomKey::META}}, |
587 }; | 587 }; |
588 | 588 |
589 for (const auto& test : tests) { | 589 for (const auto& test : tests) { |
590 CheckKeyTestCase(&rewriter, test); | 590 CheckKeyTestCase(&rewriter, test); |
591 } | 591 } |
592 } | 592 } |
593 | 593 |
594 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) { | 594 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) { |
595 syncable_prefs::TestingPrefServiceSyncable prefs; | 595 sync_preferences::TestingPrefServiceSyncable prefs; |
596 EventRewriter rewriter(NULL); | 596 EventRewriter rewriter(NULL); |
597 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 597 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
598 rewriter.set_pref_service_for_testing(&prefs); | 598 rewriter.set_pref_service_for_testing(&prefs); |
599 | 599 |
600 KeyTestCase tests[] = { | 600 KeyTestCase tests[] = { |
601 // Press Alt with Shift. Confirm the event is not rewritten. | 601 // Press Alt with Shift. Confirm the event is not rewritten. |
602 {ui::ET_KEY_PRESSED, | 602 {ui::ET_KEY_PRESSED, |
603 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, | 603 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, |
604 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ALT}, | 604 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ALT}, |
605 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, | 605 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
649 ui::DomKey::Constant<'B'>::Character}}, | 649 ui::DomKey::Constant<'B'>::Character}}, |
650 }; | 650 }; |
651 | 651 |
652 for (const auto& test : tests) { | 652 for (const auto& test : tests) { |
653 CheckKeyTestCase(&rewriter, test); | 653 CheckKeyTestCase(&rewriter, test); |
654 } | 654 } |
655 } | 655 } |
656 | 656 |
657 TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) { | 657 TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) { |
658 // Disable Search, Control and Escape keys. | 658 // Disable Search, Control and Escape keys. |
659 syncable_prefs::TestingPrefServiceSyncable prefs; | 659 sync_preferences::TestingPrefServiceSyncable prefs; |
660 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 660 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
661 IntegerPrefMember search; | 661 IntegerPrefMember search; |
662 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 662 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
663 search.SetValue(chromeos::input_method::kVoidKey); | 663 search.SetValue(chromeos::input_method::kVoidKey); |
664 IntegerPrefMember control; | 664 IntegerPrefMember control; |
665 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 665 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
666 control.SetValue(chromeos::input_method::kVoidKey); | 666 control.SetValue(chromeos::input_method::kVoidKey); |
667 IntegerPrefMember escape; | 667 IntegerPrefMember escape; |
668 escape.Init(prefs::kLanguageRemapEscapeKeyTo, &prefs); | 668 escape.Init(prefs::kLanguageRemapEscapeKeyTo, &prefs); |
669 escape.SetValue(chromeos::input_method::kVoidKey); | 669 escape.SetValue(chromeos::input_method::kVoidKey); |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
751 ui::DomKey::Constant<'a'>::Character}}, | 751 ui::DomKey::Constant<'a'>::Character}}, |
752 }; | 752 }; |
753 | 753 |
754 for (const auto& test : tests) { | 754 for (const auto& test : tests) { |
755 CheckKeyTestCase(&rewriter, test); | 755 CheckKeyTestCase(&rewriter, test); |
756 } | 756 } |
757 } | 757 } |
758 | 758 |
759 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) { | 759 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) { |
760 // Remap Search to Control. | 760 // Remap Search to Control. |
761 syncable_prefs::TestingPrefServiceSyncable prefs; | 761 sync_preferences::TestingPrefServiceSyncable prefs; |
762 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 762 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
763 IntegerPrefMember search; | 763 IntegerPrefMember search; |
764 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 764 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
765 search.SetValue(chromeos::input_method::kControlKey); | 765 search.SetValue(chromeos::input_method::kControlKey); |
766 | 766 |
767 EventRewriter rewriter(NULL); | 767 EventRewriter rewriter(NULL); |
768 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 768 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
769 rewriter.set_pref_service_for_testing(&prefs); | 769 rewriter.set_pref_service_for_testing(&prefs); |
770 | 770 |
771 KeyTestCase s_tests[] = { | 771 KeyTestCase s_tests[] = { |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
829 ui::DomKey::Constant<'B'>::Character}}, | 829 ui::DomKey::Constant<'B'>::Character}}, |
830 }; | 830 }; |
831 | 831 |
832 for (const auto& test : sa_tests) { | 832 for (const auto& test : sa_tests) { |
833 CheckKeyTestCase(&rewriter, test); | 833 CheckKeyTestCase(&rewriter, test); |
834 } | 834 } |
835 } | 835 } |
836 | 836 |
837 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) { | 837 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) { |
838 // Remap Search to Escape. | 838 // Remap Search to Escape. |
839 syncable_prefs::TestingPrefServiceSyncable prefs; | 839 sync_preferences::TestingPrefServiceSyncable prefs; |
840 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 840 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
841 IntegerPrefMember search; | 841 IntegerPrefMember search; |
842 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 842 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
843 search.SetValue(chromeos::input_method::kEscapeKey); | 843 search.SetValue(chromeos::input_method::kEscapeKey); |
844 | 844 |
845 EventRewriter rewriter(NULL); | 845 EventRewriter rewriter(NULL); |
846 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 846 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
847 rewriter.set_pref_service_for_testing(&prefs); | 847 rewriter.set_pref_service_for_testing(&prefs); |
848 | 848 |
849 KeyTestCase tests[] = { | 849 KeyTestCase tests[] = { |
850 // Press Search. Confirm the event is now VKEY_ESCAPE. | 850 // Press Search. Confirm the event is now VKEY_ESCAPE. |
851 {ui::ET_KEY_PRESSED, | 851 {ui::ET_KEY_PRESSED, |
852 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_COMMAND_DOWN, | 852 {ui::VKEY_LWIN, ui::DomCode::META_LEFT, ui::EF_COMMAND_DOWN, |
853 ui::DomKey::META}, | 853 ui::DomKey::META}, |
854 {ui::VKEY_ESCAPE, ui::DomCode::ESCAPE, ui::EF_NONE, ui::DomKey::ESCAPE}}, | 854 {ui::VKEY_ESCAPE, ui::DomCode::ESCAPE, ui::EF_NONE, ui::DomKey::ESCAPE}}, |
855 }; | 855 }; |
856 | 856 |
857 for (const auto& test : tests) { | 857 for (const auto& test : tests) { |
858 CheckKeyTestCase(&rewriter, test); | 858 CheckKeyTestCase(&rewriter, test); |
859 } | 859 } |
860 } | 860 } |
861 | 861 |
862 TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) { | 862 TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) { |
863 // Remap Escape to Alt. | 863 // Remap Escape to Alt. |
864 syncable_prefs::TestingPrefServiceSyncable prefs; | 864 sync_preferences::TestingPrefServiceSyncable prefs; |
865 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 865 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
866 IntegerPrefMember escape; | 866 IntegerPrefMember escape; |
867 escape.Init(prefs::kLanguageRemapEscapeKeyTo, &prefs); | 867 escape.Init(prefs::kLanguageRemapEscapeKeyTo, &prefs); |
868 escape.SetValue(chromeos::input_method::kAltKey); | 868 escape.SetValue(chromeos::input_method::kAltKey); |
869 | 869 |
870 EventRewriter rewriter(NULL); | 870 EventRewriter rewriter(NULL); |
871 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 871 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
872 rewriter.set_pref_service_for_testing(&prefs); | 872 rewriter.set_pref_service_for_testing(&prefs); |
873 | 873 |
874 KeyTestCase e2a_tests[] = { | 874 KeyTestCase e2a_tests[] = { |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1005 {ui::VKEY_ESCAPE, ui::DomCode::ESCAPE, ui::EF_NONE, ui::DomKey::ESCAPE}}, | 1005 {ui::VKEY_ESCAPE, ui::DomCode::ESCAPE, ui::EF_NONE, ui::DomKey::ESCAPE}}, |
1006 }; | 1006 }; |
1007 | 1007 |
1008 for (const auto& test : b2e_tests) { | 1008 for (const auto& test : b2e_tests) { |
1009 CheckKeyTestCase(&rewriter, test); | 1009 CheckKeyTestCase(&rewriter, test); |
1010 } | 1010 } |
1011 } | 1011 } |
1012 | 1012 |
1013 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) { | 1013 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) { |
1014 // Remap Search to Caps Lock. | 1014 // Remap Search to Caps Lock. |
1015 syncable_prefs::TestingPrefServiceSyncable prefs; | 1015 sync_preferences::TestingPrefServiceSyncable prefs; |
1016 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1016 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1017 IntegerPrefMember search; | 1017 IntegerPrefMember search; |
1018 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 1018 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
1019 search.SetValue(chromeos::input_method::kCapsLockKey); | 1019 search.SetValue(chromeos::input_method::kCapsLockKey); |
1020 | 1020 |
1021 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 1021 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
1022 EventRewriter rewriter(NULL); | 1022 EventRewriter rewriter(NULL); |
1023 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1023 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1024 rewriter.set_pref_service_for_testing(&prefs); | 1024 rewriter.set_pref_service_for_testing(&prefs); |
1025 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 1025 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1095 ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, | 1095 ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, |
1096 ui::EF_NONE, ui::DomKey::CAPS_LOCK)); | 1096 ui::EF_NONE, ui::DomKey::CAPS_LOCK)); |
1097 #if defined(USE_X11) | 1097 #if defined(USE_X11) |
1098 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 1098 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
1099 #elif defined(USE_OZONE) | 1099 #elif defined(USE_OZONE) |
1100 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 1100 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
1101 #endif | 1101 #endif |
1102 } | 1102 } |
1103 | 1103 |
1104 TEST_F(EventRewriterTest, TestRewriteCapsLock) { | 1104 TEST_F(EventRewriterTest, TestRewriteCapsLock) { |
1105 syncable_prefs::TestingPrefServiceSyncable prefs; | 1105 sync_preferences::TestingPrefServiceSyncable prefs; |
1106 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1106 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1107 | 1107 |
1108 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 1108 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
1109 EventRewriter rewriter(NULL); | 1109 EventRewriter rewriter(NULL); |
1110 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1110 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1111 rewriter.set_pref_service_for_testing(&prefs); | 1111 rewriter.set_pref_service_for_testing(&prefs); |
1112 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 1112 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
1113 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 1113 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
1114 | 1114 |
1115 // On Chrome OS, CapsLock is mapped to F16 with Mod3Mask. | 1115 // On Chrome OS, CapsLock is mapped to F16 with Mod3Mask. |
1116 EXPECT_EQ(GetExpectedResultAsString( | 1116 EXPECT_EQ(GetExpectedResultAsString( |
1117 ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, | 1117 ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, |
1118 ui::EF_CAPS_LOCK_ON | ui::EF_MOD3_DOWN, ui::DomKey::CAPS_LOCK), | 1118 ui::EF_CAPS_LOCK_ON | ui::EF_MOD3_DOWN, ui::DomKey::CAPS_LOCK), |
1119 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1119 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
1120 ui::VKEY_F16, ui::DomCode::F16, | 1120 ui::VKEY_F16, ui::DomCode::F16, |
1121 ui::EF_MOD3_DOWN, ui::DomKey::F16)); | 1121 ui::EF_MOD3_DOWN, ui::DomKey::F16)); |
1122 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 1122 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
1123 } | 1123 } |
1124 | 1124 |
1125 TEST_F(EventRewriterTest, TestRewriteDiamondKey) { | 1125 TEST_F(EventRewriterTest, TestRewriteDiamondKey) { |
1126 syncable_prefs::TestingPrefServiceSyncable prefs; | 1126 sync_preferences::TestingPrefServiceSyncable prefs; |
1127 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1127 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1128 | 1128 |
1129 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 1129 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
1130 EventRewriter rewriter(NULL); | 1130 EventRewriter rewriter(NULL); |
1131 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1131 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1132 rewriter.set_pref_service_for_testing(&prefs); | 1132 rewriter.set_pref_service_for_testing(&prefs); |
1133 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 1133 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
1134 | 1134 |
1135 KeyTestCase tests[] = { | 1135 KeyTestCase tests[] = { |
1136 // F15 should work as Ctrl when --has-chromeos-diamond-key is not | 1136 // F15 should work as Ctrl when --has-chromeos-diamond-key is not |
(...skipping 20 matching lines...) Expand all Loading... |
1157 for (const auto& test : tests) { | 1157 for (const auto& test : tests) { |
1158 CheckKeyTestCase(&rewriter, test); | 1158 CheckKeyTestCase(&rewriter, test); |
1159 } | 1159 } |
1160 } | 1160 } |
1161 | 1161 |
1162 TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) { | 1162 TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) { |
1163 const base::CommandLine original_cl(*base::CommandLine::ForCurrentProcess()); | 1163 const base::CommandLine original_cl(*base::CommandLine::ForCurrentProcess()); |
1164 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 1164 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
1165 chromeos::switches::kHasChromeOSDiamondKey, ""); | 1165 chromeos::switches::kHasChromeOSDiamondKey, ""); |
1166 | 1166 |
1167 syncable_prefs::TestingPrefServiceSyncable prefs; | 1167 sync_preferences::TestingPrefServiceSyncable prefs; |
1168 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1168 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1169 | 1169 |
1170 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 1170 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
1171 EventRewriter rewriter(NULL); | 1171 EventRewriter rewriter(NULL); |
1172 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1172 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1173 rewriter.set_pref_service_for_testing(&prefs); | 1173 rewriter.set_pref_service_for_testing(&prefs); |
1174 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 1174 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
1175 | 1175 |
1176 // By default, F15 should work as Control. | 1176 // By default, F15 should work as Control. |
1177 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, | 1177 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1309 ui::DomKey::Constant<'a'>::Character), | 1309 ui::DomKey::Constant<'a'>::Character), |
1310 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1310 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
1311 ui::DomCode::US_A, ui::EF_NONE, | 1311 ui::DomCode::US_A, ui::EF_NONE, |
1312 ui::DomKey::Constant<'a'>::Character)); | 1312 ui::DomKey::Constant<'a'>::Character)); |
1313 | 1313 |
1314 *base::CommandLine::ForCurrentProcess() = original_cl; | 1314 *base::CommandLine::ForCurrentProcess() = original_cl; |
1315 } | 1315 } |
1316 | 1316 |
1317 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) { | 1317 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) { |
1318 // Remap CapsLock to Control. | 1318 // Remap CapsLock to Control. |
1319 syncable_prefs::TestingPrefServiceSyncable prefs; | 1319 sync_preferences::TestingPrefServiceSyncable prefs; |
1320 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1320 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1321 IntegerPrefMember control; | 1321 IntegerPrefMember control; |
1322 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); | 1322 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); |
1323 control.SetValue(chromeos::input_method::kControlKey); | 1323 control.SetValue(chromeos::input_method::kControlKey); |
1324 | 1324 |
1325 EventRewriter rewriter(NULL); | 1325 EventRewriter rewriter(NULL); |
1326 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1326 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1327 rewriter.set_pref_service_for_testing(&prefs); | 1327 rewriter.set_pref_service_for_testing(&prefs); |
1328 | 1328 |
1329 KeyTestCase tests[] = { | 1329 KeyTestCase tests[] = { |
(...skipping 22 matching lines...) Expand all Loading... |
1352 ui::DomKey::Constant<'a'>::Character}}, | 1352 ui::DomKey::Constant<'a'>::Character}}, |
1353 }; | 1353 }; |
1354 | 1354 |
1355 for (const auto& test : tests) { | 1355 for (const auto& test : tests) { |
1356 CheckKeyTestCase(&rewriter, test); | 1356 CheckKeyTestCase(&rewriter, test); |
1357 } | 1357 } |
1358 } | 1358 } |
1359 | 1359 |
1360 TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) { | 1360 TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) { |
1361 // Remap CapsLock to Control. | 1361 // Remap CapsLock to Control. |
1362 syncable_prefs::TestingPrefServiceSyncable prefs; | 1362 sync_preferences::TestingPrefServiceSyncable prefs; |
1363 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1363 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1364 IntegerPrefMember control; | 1364 IntegerPrefMember control; |
1365 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); | 1365 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); |
1366 control.SetValue(chromeos::input_method::kControlKey); | 1366 control.SetValue(chromeos::input_method::kControlKey); |
1367 | 1367 |
1368 EventRewriter rewriter(NULL); | 1368 EventRewriter rewriter(NULL); |
1369 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1369 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1370 rewriter.set_pref_service_for_testing(&prefs); | 1370 rewriter.set_pref_service_for_testing(&prefs); |
1371 input_method_manager_mock_->set_mod3_used(true); | 1371 input_method_manager_mock_->set_mod3_used(true); |
1372 | 1372 |
1373 // Press CapsLock+a. Confirm that Mod3Mask is NOT rewritten to ControlMask | 1373 // Press CapsLock+a. Confirm that Mod3Mask is NOT rewritten to ControlMask |
1374 // when Mod3Mask is already in use by the current XKB layout. | 1374 // when Mod3Mask is already in use by the current XKB layout. |
1375 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1375 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
1376 ui::DomCode::US_A, ui::EF_NONE, | 1376 ui::DomCode::US_A, ui::EF_NONE, |
1377 ui::DomKey::Constant<'a'>::Character), | 1377 ui::DomKey::Constant<'a'>::Character), |
1378 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1378 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
1379 ui::DomCode::US_A, ui::EF_NONE, | 1379 ui::DomCode::US_A, ui::EF_NONE, |
1380 ui::DomKey::Constant<'a'>::Character)); | 1380 ui::DomKey::Constant<'a'>::Character)); |
1381 | 1381 |
1382 input_method_manager_mock_->set_mod3_used(false); | 1382 input_method_manager_mock_->set_mod3_used(false); |
1383 } | 1383 } |
1384 | 1384 |
1385 TEST_F(EventRewriterTest, TestRewriteExtendedKeys) { | 1385 TEST_F(EventRewriterTest, TestRewriteExtendedKeys) { |
1386 syncable_prefs::TestingPrefServiceSyncable prefs; | 1386 sync_preferences::TestingPrefServiceSyncable prefs; |
1387 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1387 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1388 EventRewriter rewriter(NULL); | 1388 EventRewriter rewriter(NULL); |
1389 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1389 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1390 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 1390 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
1391 rewriter.set_pref_service_for_testing(&prefs); | 1391 rewriter.set_pref_service_for_testing(&prefs); |
1392 | 1392 |
1393 KeyTestCase tests[] = { | 1393 KeyTestCase tests[] = { |
1394 // Alt+Backspace -> Delete | 1394 // Alt+Backspace -> Delete |
1395 {ui::ET_KEY_PRESSED, | 1395 {ui::ET_KEY_PRESSED, |
1396 {ui::VKEY_BACK, ui::DomCode::BACKSPACE, ui::EF_ALT_DOWN, | 1396 {ui::VKEY_BACK, ui::DomCode::BACKSPACE, ui::EF_ALT_DOWN, |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1522 ui::DomKey::Constant<'.'>::Character}, | 1522 ui::DomKey::Constant<'.'>::Character}, |
1523 {ui::VKEY_INSERT, ui::DomCode::INSERT, ui::EF_CONTROL_DOWN, | 1523 {ui::VKEY_INSERT, ui::DomCode::INSERT, ui::EF_CONTROL_DOWN, |
1524 ui::DomKey::INSERT}}}; | 1524 ui::DomKey::INSERT}}}; |
1525 | 1525 |
1526 for (const auto& test : tests) { | 1526 for (const auto& test : tests) { |
1527 CheckKeyTestCase(&rewriter, test); | 1527 CheckKeyTestCase(&rewriter, test); |
1528 } | 1528 } |
1529 } | 1529 } |
1530 | 1530 |
1531 TEST_F(EventRewriterTest, TestRewriteFunctionKeys) { | 1531 TEST_F(EventRewriterTest, TestRewriteFunctionKeys) { |
1532 syncable_prefs::TestingPrefServiceSyncable prefs; | 1532 sync_preferences::TestingPrefServiceSyncable prefs; |
1533 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1533 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1534 EventRewriter rewriter(NULL); | 1534 EventRewriter rewriter(NULL); |
1535 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1535 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1536 rewriter.set_pref_service_for_testing(&prefs); | 1536 rewriter.set_pref_service_for_testing(&prefs); |
1537 | 1537 |
1538 KeyTestCase tests[] = { | 1538 KeyTestCase tests[] = { |
1539 // F1 -> Back | 1539 // F1 -> Back |
1540 {ui::ET_KEY_PRESSED, | 1540 {ui::ET_KEY_PRESSED, |
1541 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1}, | 1541 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1}, |
1542 {ui::VKEY_BROWSER_BACK, ui::DomCode::BROWSER_BACK, ui::EF_NONE, | 1542 {ui::VKEY_BROWSER_BACK, ui::DomCode::BROWSER_BACK, ui::EF_NONE, |
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1838 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_COMMAND_DOWN, ui::DomKey::F12}, | 1838 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_COMMAND_DOWN, ui::DomKey::F12}, |
1839 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12}}}; | 1839 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12}}}; |
1840 | 1840 |
1841 for (const auto& test : tests) { | 1841 for (const auto& test : tests) { |
1842 CheckKeyTestCase(&rewriter, test); | 1842 CheckKeyTestCase(&rewriter, test); |
1843 } | 1843 } |
1844 } | 1844 } |
1845 | 1845 |
1846 TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) { | 1846 TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) { |
1847 // Remap Search to Control. | 1847 // Remap Search to Control. |
1848 syncable_prefs::TestingPrefServiceSyncable prefs; | 1848 sync_preferences::TestingPrefServiceSyncable prefs; |
1849 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1849 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1850 IntegerPrefMember search; | 1850 IntegerPrefMember search; |
1851 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 1851 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
1852 search.SetValue(chromeos::input_method::kControlKey); | 1852 search.SetValue(chromeos::input_method::kControlKey); |
1853 | 1853 |
1854 EventRewriter rewriter(NULL); | 1854 EventRewriter rewriter(NULL); |
1855 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1855 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1856 rewriter.set_pref_service_for_testing(&prefs); | 1856 rewriter.set_pref_service_for_testing(&prefs); |
1857 | 1857 |
1858 KeyTestCase tests[] = { | 1858 KeyTestCase tests[] = { |
(...skipping 11 matching lines...) Expand all Loading... |
1870 {ui::VKEY_END, ui::DomCode::END, ui::EF_SHIFT_DOWN, ui::DomKey::END}}, | 1870 {ui::VKEY_END, ui::DomCode::END, ui::EF_SHIFT_DOWN, ui::DomKey::END}}, |
1871 }; | 1871 }; |
1872 | 1872 |
1873 for (const auto& test : tests) { | 1873 for (const auto& test : tests) { |
1874 CheckKeyTestCase(&rewriter, test); | 1874 CheckKeyTestCase(&rewriter, test); |
1875 } | 1875 } |
1876 } | 1876 } |
1877 | 1877 |
1878 TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) { | 1878 TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) { |
1879 // Remap Control to Alt. | 1879 // Remap Control to Alt. |
1880 syncable_prefs::TestingPrefServiceSyncable prefs; | 1880 sync_preferences::TestingPrefServiceSyncable prefs; |
1881 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1881 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1882 IntegerPrefMember control; | 1882 IntegerPrefMember control; |
1883 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 1883 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
1884 control.SetValue(chromeos::input_method::kAltKey); | 1884 control.SetValue(chromeos::input_method::kAltKey); |
1885 | 1885 |
1886 EventRewriter rewriter(NULL); | 1886 EventRewriter rewriter(NULL); |
1887 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1887 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1888 rewriter.set_pref_service_for_testing(&prefs); | 1888 rewriter.set_pref_service_for_testing(&prefs); |
1889 | 1889 |
1890 // Send left control press. | 1890 // Send left control press. |
(...skipping 21 matching lines...) Expand all Loading... |
1912 // flag in the event is True. | 1912 // flag in the event is True. |
1913 EXPECT_EQ(ui::EVENT_REWRITE_CONTINUE, | 1913 EXPECT_EQ(ui::EVENT_REWRITE_CONTINUE, |
1914 rewriter.RewriteEvent(keyevent, &new_event)); | 1914 rewriter.RewriteEvent(keyevent, &new_event)); |
1915 EXPECT_FALSE(new_event); | 1915 EXPECT_FALSE(new_event); |
1916 } | 1916 } |
1917 #endif | 1917 #endif |
1918 } | 1918 } |
1919 | 1919 |
1920 TEST_F(EventRewriterTest, TestRewriteNonNativeEvent) { | 1920 TEST_F(EventRewriterTest, TestRewriteNonNativeEvent) { |
1921 // Remap Control to Alt. | 1921 // Remap Control to Alt. |
1922 syncable_prefs::TestingPrefServiceSyncable prefs; | 1922 sync_preferences::TestingPrefServiceSyncable prefs; |
1923 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1923 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1924 IntegerPrefMember control; | 1924 IntegerPrefMember control; |
1925 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 1925 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
1926 control.SetValue(chromeos::input_method::kAltKey); | 1926 control.SetValue(chromeos::input_method::kAltKey); |
1927 | 1927 |
1928 EventRewriter rewriter(NULL); | 1928 EventRewriter rewriter(NULL); |
1929 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1929 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1930 rewriter.set_pref_service_for_testing(&prefs); | 1930 rewriter.set_pref_service_for_testing(&prefs); |
1931 | 1931 |
1932 const int kTouchId = 2; | 1932 const int kTouchId = 2; |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2012 } | 2012 } |
2013 | 2013 |
2014 void SendActivateStickyKeyPattern(ui::KeyboardCode key_code, | 2014 void SendActivateStickyKeyPattern(ui::KeyboardCode key_code, |
2015 ui::DomCode code, | 2015 ui::DomCode code, |
2016 ui::DomKey key) { | 2016 ui::DomKey key) { |
2017 SendKeyEvent(ui::ET_KEY_PRESSED, key_code, code, key); | 2017 SendKeyEvent(ui::ET_KEY_PRESSED, key_code, code, key); |
2018 SendKeyEvent(ui::ET_KEY_RELEASED, key_code, code, key); | 2018 SendKeyEvent(ui::ET_KEY_RELEASED, key_code, code, key); |
2019 } | 2019 } |
2020 | 2020 |
2021 protected: | 2021 protected: |
2022 syncable_prefs::TestingPrefServiceSyncable* prefs() { return &prefs_; } | 2022 sync_preferences::TestingPrefServiceSyncable* prefs() { return &prefs_; } |
2023 | 2023 |
2024 void PopEvents(ScopedVector<ui::Event>* events) { buffer_.PopEvents(events); } | 2024 void PopEvents(ScopedVector<ui::Event>* events) { buffer_.PopEvents(events); } |
2025 | 2025 |
2026 void SetUp() override { | 2026 void SetUp() override { |
2027 AshTestBase::SetUp(); | 2027 AshTestBase::SetUp(); |
2028 sticky_keys_controller_ = | 2028 sticky_keys_controller_ = |
2029 ash::Shell::GetInstance()->sticky_keys_controller(); | 2029 ash::Shell::GetInstance()->sticky_keys_controller(); |
2030 rewriter_.reset(new EventRewriter(sticky_keys_controller_)); | 2030 rewriter_.reset(new EventRewriter(sticky_keys_controller_)); |
2031 chromeos::Preferences::RegisterProfilePrefs(prefs_.registry()); | 2031 chromeos::Preferences::RegisterProfilePrefs(prefs_.registry()); |
2032 rewriter_->set_pref_service_for_testing(&prefs_); | 2032 rewriter_->set_pref_service_for_testing(&prefs_); |
(...skipping 13 matching lines...) Expand all Loading... |
2046 ash::StickyKeysController* sticky_keys_controller_; | 2046 ash::StickyKeysController* sticky_keys_controller_; |
2047 | 2047 |
2048 private: | 2048 private: |
2049 std::unique_ptr<EventRewriter> rewriter_; | 2049 std::unique_ptr<EventRewriter> rewriter_; |
2050 | 2050 |
2051 EventBuffer buffer_; | 2051 EventBuffer buffer_; |
2052 TestEventSource source_; | 2052 TestEventSource source_; |
2053 | 2053 |
2054 user_manager::FakeUserManager* fake_user_manager_; // Not owned. | 2054 user_manager::FakeUserManager* fake_user_manager_; // Not owned. |
2055 chromeos::ScopedUserManagerEnabler user_manager_enabler_; | 2055 chromeos::ScopedUserManagerEnabler user_manager_enabler_; |
2056 syncable_prefs::TestingPrefServiceSyncable prefs_; | 2056 sync_preferences::TestingPrefServiceSyncable prefs_; |
2057 | 2057 |
2058 DISALLOW_COPY_AND_ASSIGN(EventRewriterAshTest); | 2058 DISALLOW_COPY_AND_ASSIGN(EventRewriterAshTest); |
2059 }; | 2059 }; |
2060 | 2060 |
2061 TEST_F(EventRewriterAshTest, TopRowKeysAreFunctionKeys) { | 2061 TEST_F(EventRewriterAshTest, TopRowKeysAreFunctionKeys) { |
2062 std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithId(1)); | 2062 std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithId(1)); |
2063 ash::wm::WindowState* window_state = ash::wm::GetWindowState(window.get()); | 2063 ash::wm::WindowState* window_state = ash::wm::GetWindowState(window.get()); |
2064 window_state->Activate(); | 2064 window_state->Activate(); |
2065 ScopedVector<ui::Event> events; | 2065 ScopedVector<ui::Event> events; |
2066 | 2066 |
(...skipping 28 matching lines...) Expand all Loading... |
2095 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); | 2095 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); |
2096 } | 2096 } |
2097 | 2097 |
2098 TEST_F(EventRewriterTest, TestRewrittenModifierClick) { | 2098 TEST_F(EventRewriterTest, TestRewrittenModifierClick) { |
2099 #if defined(USE_X11) | 2099 #if defined(USE_X11) |
2100 std::vector<int> device_list; | 2100 std::vector<int> device_list; |
2101 device_list.push_back(10); | 2101 device_list.push_back(10); |
2102 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); | 2102 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); |
2103 | 2103 |
2104 // Remap Control to Alt. | 2104 // Remap Control to Alt. |
2105 syncable_prefs::TestingPrefServiceSyncable prefs; | 2105 sync_preferences::TestingPrefServiceSyncable prefs; |
2106 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 2106 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
2107 IntegerPrefMember control; | 2107 IntegerPrefMember control; |
2108 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 2108 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
2109 control.SetValue(chromeos::input_method::kAltKey); | 2109 control.SetValue(chromeos::input_method::kAltKey); |
2110 | 2110 |
2111 EventRewriter rewriter(NULL); | 2111 EventRewriter rewriter(NULL); |
2112 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 2112 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
2113 rewriter.set_pref_service_for_testing(&prefs); | 2113 rewriter.set_pref_service_for_testing(&prefs); |
2114 | 2114 |
2115 // Check that Control + Left Button is converted (via Alt + Left Button) | 2115 // Check that Control + Left Button is converted (via Alt + Left Button) |
(...skipping 18 matching lines...) Expand all Loading... |
2134 | 2134 |
2135 TEST_F(EventRewriterTest, DontRewriteIfNotRewritten) { | 2135 TEST_F(EventRewriterTest, DontRewriteIfNotRewritten) { |
2136 // TODO(kpschoedel): pending changes for crbug.com/360377 | 2136 // TODO(kpschoedel): pending changes for crbug.com/360377 |
2137 // to |chromeos::EventRewriter::RewriteLocatedEvent() | 2137 // to |chromeos::EventRewriter::RewriteLocatedEvent() |
2138 #if defined(USE_X11) | 2138 #if defined(USE_X11) |
2139 std::vector<int> device_list; | 2139 std::vector<int> device_list; |
2140 device_list.push_back(10); | 2140 device_list.push_back(10); |
2141 device_list.push_back(11); | 2141 device_list.push_back(11); |
2142 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); | 2142 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); |
2143 #endif | 2143 #endif |
2144 syncable_prefs::TestingPrefServiceSyncable prefs; | 2144 sync_preferences::TestingPrefServiceSyncable prefs; |
2145 EventRewriter rewriter(NULL); | 2145 EventRewriter rewriter(NULL); |
2146 rewriter.set_pref_service_for_testing(&prefs); | 2146 rewriter.set_pref_service_for_testing(&prefs); |
2147 const int kLeftAndAltFlag = ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN; | 2147 const int kLeftAndAltFlag = ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN; |
2148 | 2148 |
2149 // Test Alt + Left click. | 2149 // Test Alt + Left click. |
2150 { | 2150 { |
2151 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), | 2151 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), |
2152 ui::EventTimeForNow(), kLeftAndAltFlag, | 2152 ui::EventTimeForNow(), kLeftAndAltFlag, |
2153 ui::EF_LEFT_MOUSE_BUTTON); | 2153 ui::EF_LEFT_MOUSE_BUTTON); |
2154 ui::EventTestApi test_press(&press); | 2154 ui::EventTestApi test_press(&press); |
(...skipping 533 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2688 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); | 2688 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); |
2689 EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); | 2689 EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); |
2690 | 2690 |
2691 // Turn off AltGr and Mod3. | 2691 // Turn off AltGr and Mod3. |
2692 sticky_keys_controller_->SetModifiersEnabled(false, false); | 2692 sticky_keys_controller_->SetModifiersEnabled(false, false); |
2693 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); | 2693 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); |
2694 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); | 2694 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); |
2695 } | 2695 } |
2696 | 2696 |
2697 } // namespace chromeos | 2697 } // namespace chromeos |
OLD | NEW |