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 <X11/keysym.h> | 7 #include <X11/keysym.h> |
8 #include <X11/XF86keysym.h> | 8 #include <X11/XF86keysym.h> |
9 #include <X11/Xlib.h> | 9 #include <X11/Xlib.h> |
10 #undef Bool | 10 #undef Bool |
(...skipping 853 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
864 search.SetValue(chromeos::input_method::kCapsLockKey); | 864 search.SetValue(chromeos::input_method::kCapsLockKey); |
865 | 865 |
866 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 866 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
867 EventRewriter rewriter; | 867 EventRewriter rewriter; |
868 rewriter.set_pref_service_for_testing(&prefs); | 868 rewriter.set_pref_service_for_testing(&prefs); |
869 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 869 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
870 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 870 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
871 | 871 |
872 // Press Search. | 872 // Press Search. |
873 EXPECT_EQ( | 873 EXPECT_EQ( |
874 GetExpectedResultAsString( | 874 GetExpectedResultAsString(ui::VKEY_CAPITAL, |
875 ui::VKEY_CAPITAL, ui::EF_CAPS_LOCK_DOWN, ui::ET_KEY_PRESSED), | 875 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
| 876 ui::ET_KEY_PRESSED), |
876 GetRewrittenEventAsString( | 877 GetRewrittenEventAsString( |
877 &rewriter, ui::VKEY_LWIN, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED)); | 878 &rewriter, ui::VKEY_LWIN, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED)); |
878 // Confirm that the Caps Lock status is changed. | 879 // Confirm that the Caps Lock status is changed. |
879 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 880 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
880 | 881 |
881 // Release Search. | 882 // Release Search. |
882 EXPECT_EQ(GetExpectedResultAsString( | 883 EXPECT_EQ(GetExpectedResultAsString( |
883 ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED), | 884 ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED), |
884 GetRewrittenEventAsString( | 885 GetRewrittenEventAsString( |
885 &rewriter, ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_RELEASED)); | 886 &rewriter, ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_RELEASED)); |
886 // Confirm that the Caps Lock status is not changed. | 887 // Confirm that the Caps Lock status is not changed. |
887 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 888 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
888 | 889 |
889 // Press Search. | 890 // Press Search. |
890 EXPECT_EQ( | 891 EXPECT_EQ( |
891 GetExpectedResultAsString( | 892 GetExpectedResultAsString(ui::VKEY_CAPITAL, |
892 ui::VKEY_CAPITAL, ui::EF_CAPS_LOCK_DOWN, ui::ET_KEY_PRESSED), | 893 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
| 894 ui::ET_KEY_PRESSED), |
893 GetRewrittenEventAsString(&rewriter, | 895 GetRewrittenEventAsString(&rewriter, |
894 ui::VKEY_LWIN, | 896 ui::VKEY_LWIN, |
895 ui::EF_COMMAND_DOWN | ui::EF_CAPS_LOCK_DOWN, | 897 ui::EF_COMMAND_DOWN | ui::EF_CAPS_LOCK_DOWN, |
896 ui::ET_KEY_PRESSED)); | 898 ui::ET_KEY_PRESSED)); |
897 // Confirm that the Caps Lock status is changed. | 899 // Confirm that the Caps Lock status is changed. |
898 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 900 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
899 | 901 |
900 // Release Search. | 902 // Release Search. |
901 EXPECT_EQ(GetExpectedResultAsString( | 903 EXPECT_EQ(GetExpectedResultAsString( |
902 ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED), | 904 ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED), |
903 GetRewrittenEventAsString( | 905 GetRewrittenEventAsString( |
904 &rewriter, ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_RELEASED)); | 906 &rewriter, ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_RELEASED)); |
905 // Confirm that the Caps Lock status is not changed. | 907 // Confirm that the Caps Lock status is not changed. |
906 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 908 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
907 | 909 |
908 // Press Caps Lock (on an external keyboard). | 910 // Press Caps Lock (on an external keyboard). |
909 EXPECT_EQ(GetExpectedResultAsString( | 911 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, |
910 ui::VKEY_CAPITAL, ui::EF_CAPS_LOCK_DOWN, ui::ET_KEY_PRESSED), | 912 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
| 913 ui::ET_KEY_PRESSED), |
911 GetRewrittenEventAsString(&rewriter, | 914 GetRewrittenEventAsString(&rewriter, |
912 ui::VKEY_CAPITAL, | 915 ui::VKEY_CAPITAL, |
913 ui::EF_CAPS_LOCK_DOWN, | 916 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
914 ui::ET_KEY_PRESSED)); | 917 ui::ET_KEY_PRESSED)); |
915 | 918 |
916 // Confirm that calling RewriteForTesting() does not change the state of | 919 // Confirm that calling RewriteForTesting() does not change the state of |
917 // |ime_keyboard|. In this case, X Window system itself should change the | 920 // |ime_keyboard|. In this case, X Window system itself should change the |
918 // Caps Lock state, not ash::EventRewriter. | 921 // Caps Lock state, not ash::EventRewriter. |
919 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 922 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
920 | 923 |
921 // Release Caps Lock (on an external keyboard). | 924 // Release Caps Lock (on an external keyboard). |
922 EXPECT_EQ(GetExpectedResultAsString( | 925 EXPECT_EQ(GetExpectedResultAsString( |
923 ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED), | 926 ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED), |
924 GetRewrittenEventAsString( | 927 GetRewrittenEventAsString( |
925 &rewriter, ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED)); | 928 &rewriter, ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED)); |
926 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 929 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
927 } | 930 } |
928 | 931 |
929 TEST_F(EventRewriterTest, TestRewriteCapsLock) { | 932 TEST_F(EventRewriterTest, TestRewriteCapsLock) { |
930 TestingPrefServiceSyncable prefs; | 933 TestingPrefServiceSyncable prefs; |
931 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 934 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
932 | 935 |
933 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 936 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
934 EventRewriter rewriter; | 937 EventRewriter rewriter; |
935 rewriter.set_pref_service_for_testing(&prefs); | 938 rewriter.set_pref_service_for_testing(&prefs); |
936 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 939 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
937 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 940 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
938 | 941 |
939 // On Chrome OS, CapsLock is mapped to F16 with Mod3Mask. | 942 // On Chrome OS, CapsLock is mapped to F16 with Mod3Mask. |
940 EXPECT_EQ(GetExpectedResultAsString( | 943 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, |
941 ui::VKEY_CAPITAL, ui::EF_CAPS_LOCK_DOWN, ui::ET_KEY_PRESSED), | 944 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
| 945 ui::ET_KEY_PRESSED), |
942 GetRewrittenEventAsString( | 946 GetRewrittenEventAsString( |
943 &rewriter, ui::VKEY_F16, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 947 &rewriter, ui::VKEY_F16, ui::EF_MOD3_DOWN, ui::ET_KEY_PRESSED)); |
944 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 948 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
945 } | 949 } |
946 | 950 |
947 TEST_F(EventRewriterTest, TestRewriteDiamondKey) { | 951 TEST_F(EventRewriterTest, TestRewriteDiamondKey) { |
948 TestingPrefServiceSyncable prefs; | 952 TestingPrefServiceSyncable prefs; |
949 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 953 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
950 | 954 |
951 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 955 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
952 EventRewriter rewriter; | 956 EventRewriter rewriter; |
953 rewriter.set_pref_service_for_testing(&prefs); | 957 rewriter.set_pref_service_for_testing(&prefs); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1004 | 1008 |
1005 diamond.SetValue(chromeos::input_method::kAltKey); | 1009 diamond.SetValue(chromeos::input_method::kAltKey); |
1006 | 1010 |
1007 EXPECT_EQ(GetExpectedResultAsString( | 1011 EXPECT_EQ(GetExpectedResultAsString( |
1008 ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), | 1012 ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), |
1009 GetRewrittenEventAsString( | 1013 GetRewrittenEventAsString( |
1010 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1014 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1011 | 1015 |
1012 diamond.SetValue(chromeos::input_method::kCapsLockKey); | 1016 diamond.SetValue(chromeos::input_method::kCapsLockKey); |
1013 | 1017 |
1014 EXPECT_EQ(GetExpectedResultAsString( | 1018 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, |
1015 ui::VKEY_CAPITAL, ui::EF_CAPS_LOCK_DOWN, ui::ET_KEY_PRESSED), | 1019 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
| 1020 ui::ET_KEY_PRESSED), |
1016 GetRewrittenEventAsString( | 1021 GetRewrittenEventAsString( |
1017 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1022 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1018 | 1023 |
1019 *CommandLine::ForCurrentProcess() = original_cl; | 1024 *CommandLine::ForCurrentProcess() = original_cl; |
1020 } | 1025 } |
1021 | 1026 |
1022 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) { | 1027 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) { |
1023 // Remap CapsLock to Control. | 1028 // Remap CapsLock to Control. |
1024 TestingPrefServiceSyncable prefs; | 1029 TestingPrefServiceSyncable prefs; |
1025 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1030 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1026 IntegerPrefMember control; | 1031 IntegerPrefMember control; |
1027 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); | 1032 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); |
1028 control.SetValue(chromeos::input_method::kControlKey); | 1033 control.SetValue(chromeos::input_method::kControlKey); |
1029 | 1034 |
1030 EventRewriter rewriter; | 1035 EventRewriter rewriter; |
1031 rewriter.set_pref_service_for_testing(&prefs); | 1036 rewriter.set_pref_service_for_testing(&prefs); |
1032 | 1037 |
1033 // Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. | 1038 // Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. |
1034 // On Chrome OS, CapsLock works as a Mod3 modifier. | 1039 // On Chrome OS, CapsLock works as a Mod3 modifier. |
1035 EXPECT_EQ( | 1040 EXPECT_EQ( |
1036 GetExpectedResultAsString( | 1041 GetExpectedResultAsString( |
1037 ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), | 1042 ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
1038 GetRewrittenEventAsString( | 1043 GetRewrittenEventAsString( |
1039 &rewriter, ui::VKEY_A, ui::EF_CAPS_LOCK_DOWN, ui::ET_KEY_PRESSED)); | 1044 &rewriter, ui::VKEY_A, ui::EF_MOD3_DOWN, ui::ET_KEY_PRESSED)); |
1040 | 1045 |
1041 // Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask | 1046 // Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask |
1042 EXPECT_EQ( | 1047 EXPECT_EQ( |
1043 GetExpectedResultAsString( | 1048 GetExpectedResultAsString( |
1044 ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), | 1049 ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
1045 GetRewrittenEventAsString( | 1050 GetRewrittenEventAsString( |
1046 &rewriter, ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED)); | 1051 &rewriter, ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED)); |
1047 | 1052 |
1048 // Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. | 1053 // Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. |
1049 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, | 1054 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, |
1050 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | 1055 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
1051 ui::ET_KEY_PRESSED), | 1056 ui::ET_KEY_PRESSED), |
1052 GetRewrittenEventAsString(&rewriter, | 1057 GetRewrittenEventAsString(&rewriter, |
1053 ui::VKEY_A, | 1058 ui::VKEY_A, |
1054 ui::EF_ALT_DOWN | ui::EF_CAPS_LOCK_DOWN, | 1059 ui::EF_ALT_DOWN | ui::EF_MOD3_DOWN, |
1055 ui::ET_KEY_PRESSED)); | 1060 ui::ET_KEY_PRESSED)); |
1056 } | 1061 } |
1057 | 1062 |
1058 TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) { | 1063 TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) { |
1059 // Remap CapsLock to Control. | 1064 // Remap CapsLock to Control. |
1060 TestingPrefServiceSyncable prefs; | 1065 TestingPrefServiceSyncable prefs; |
1061 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1066 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1062 IntegerPrefMember control; | 1067 IntegerPrefMember control; |
1063 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); | 1068 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); |
1064 control.SetValue(chromeos::input_method::kControlKey); | 1069 control.SetValue(chromeos::input_method::kControlKey); |
(...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1535 ui::ScopedXI2Event xev; | 1540 ui::ScopedXI2Event xev; |
1536 xev.InitGenericButtonEvent( | 1541 xev.InitGenericButtonEvent( |
1537 11, ui::ET_MOUSE_RELEASED, gfx::Point(), kLeftAndAltFlag); | 1542 11, ui::ET_MOUSE_RELEASED, gfx::Point(), kLeftAndAltFlag); |
1538 ui::MouseEvent release(xev); | 1543 ui::MouseEvent release(xev); |
1539 int flags = RewriteMouseEvent(&rewriter, release); | 1544 int flags = RewriteMouseEvent(&rewriter, release); |
1540 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & flags); | 1545 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & flags); |
1541 } | 1546 } |
1542 } | 1547 } |
1543 | 1548 |
1544 } // namespace chromeos | 1549 } // namespace chromeos |
OLD | NEW |