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 999 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1010 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 1010 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
1011 | 1011 |
1012 KeyTestCase tests[] = { | 1012 KeyTestCase tests[] = { |
1013 // F15 should work as Ctrl when --has-chromeos-diamond-key is not | 1013 // F15 should work as Ctrl when --has-chromeos-diamond-key is not |
1014 // specified. | 1014 // specified. |
1015 {KeyTestCase::TEST_VKEY, | 1015 {KeyTestCase::TEST_VKEY, |
1016 ui::ET_KEY_PRESSED, | 1016 ui::ET_KEY_PRESSED, |
1017 {ui::VKEY_F15, ui::EF_NONE}, | 1017 {ui::VKEY_F15, ui::EF_NONE}, |
1018 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, | 1018 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, |
1019 | 1019 |
| 1020 {KeyTestCase::TEST_VKEY, |
| 1021 ui::ET_KEY_RELEASED, |
| 1022 {ui::VKEY_F15, ui::EF_NONE}, |
| 1023 {ui::VKEY_CONTROL, ui::EF_NONE}}, |
| 1024 |
1020 // However, Mod2Mask should not be rewritten to CtrlMask when | 1025 // However, Mod2Mask should not be rewritten to CtrlMask when |
1021 // --has-chromeos-diamond-key is not specified. | 1026 // --has-chromeos-diamond-key is not specified. |
1022 {KeyTestCase::TEST_VKEY, | 1027 {KeyTestCase::TEST_VKEY, |
1023 ui::ET_KEY_PRESSED, | 1028 ui::ET_KEY_PRESSED, |
1024 {ui::VKEY_A, ui::EF_NONE}, | 1029 {ui::VKEY_A, ui::EF_NONE}, |
1025 {ui::VKEY_A, ui::EF_NONE}}, | 1030 {ui::VKEY_A, ui::EF_NONE}}, |
1026 }; | 1031 }; |
1027 | 1032 |
1028 for (size_t i = 0; i < arraysize(tests); ++i) { | 1033 for (size_t i = 0; i < arraysize(tests); ++i) { |
1029 SCOPED_TRACE(i); | 1034 SCOPED_TRACE(i); |
(...skipping 13 matching lines...) Expand all Loading... |
1043 EventRewriter rewriter(NULL); | 1048 EventRewriter rewriter(NULL); |
1044 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1049 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1045 rewriter.set_pref_service_for_testing(&prefs); | 1050 rewriter.set_pref_service_for_testing(&prefs); |
1046 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 1051 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
1047 | 1052 |
1048 // By default, F15 should work as Control. | 1053 // By default, F15 should work as Control. |
1049 EXPECT_EQ(GetExpectedResultAsString( | 1054 EXPECT_EQ(GetExpectedResultAsString( |
1050 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), | 1055 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
1051 GetRewrittenEventAsString( | 1056 GetRewrittenEventAsString( |
1052 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1057 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
| 1058 // Check that Control is applied to a subsequent key press. |
| 1059 EXPECT_EQ(GetExpectedResultAsString( |
| 1060 ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
| 1061 GetRewrittenEventAsString( |
| 1062 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
| 1063 // Release F15 |
| 1064 EXPECT_EQ(GetExpectedResultAsString( |
| 1065 ui::VKEY_CONTROL, ui::EF_NONE, ui::ET_KEY_RELEASED), |
| 1066 GetRewrittenEventAsString( |
| 1067 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_RELEASED)); |
| 1068 // Check that Control is no longer applied to a subsequent key press. |
| 1069 EXPECT_EQ( |
| 1070 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), |
| 1071 GetRewrittenEventAsString( |
| 1072 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1053 | 1073 |
1054 IntegerPrefMember diamond; | 1074 IntegerPrefMember diamond; |
1055 diamond.Init(prefs::kLanguageRemapDiamondKeyTo, &prefs); | 1075 diamond.Init(prefs::kLanguageRemapDiamondKeyTo, &prefs); |
1056 diamond.SetValue(chromeos::input_method::kVoidKey); | 1076 diamond.SetValue(chromeos::input_method::kVoidKey); |
1057 | 1077 |
1058 EXPECT_EQ(GetExpectedResultAsString( | 1078 EXPECT_EQ(GetExpectedResultAsString( |
1059 ui::VKEY_UNKNOWN, ui::EF_NONE, ui::ET_KEY_PRESSED), | 1079 ui::VKEY_UNKNOWN, ui::EF_NONE, ui::ET_KEY_PRESSED), |
1060 GetRewrittenEventAsString( | 1080 GetRewrittenEventAsString( |
1061 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1081 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
| 1082 // Check that no modifier is applied to another key. |
| 1083 EXPECT_EQ( |
| 1084 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), |
| 1085 GetRewrittenEventAsString( |
| 1086 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1062 | 1087 |
1063 diamond.SetValue(chromeos::input_method::kControlKey); | 1088 diamond.SetValue(chromeos::input_method::kControlKey); |
1064 | 1089 |
1065 EXPECT_EQ(GetExpectedResultAsString( | 1090 EXPECT_EQ(GetExpectedResultAsString( |
1066 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), | 1091 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
1067 GetRewrittenEventAsString( | 1092 GetRewrittenEventAsString( |
1068 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1093 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
| 1094 // Check that Control is applied to a subsequent key press. |
| 1095 EXPECT_EQ(GetExpectedResultAsString( |
| 1096 ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
| 1097 GetRewrittenEventAsString( |
| 1098 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
| 1099 // Release F15 |
| 1100 EXPECT_EQ(GetExpectedResultAsString( |
| 1101 ui::VKEY_CONTROL, ui::EF_NONE, ui::ET_KEY_RELEASED), |
| 1102 GetRewrittenEventAsString( |
| 1103 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_RELEASED)); |
| 1104 // Check that Control is no longer applied to a subsequent key press. |
| 1105 EXPECT_EQ( |
| 1106 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), |
| 1107 GetRewrittenEventAsString( |
| 1108 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1069 | 1109 |
1070 diamond.SetValue(chromeos::input_method::kAltKey); | 1110 diamond.SetValue(chromeos::input_method::kAltKey); |
1071 | 1111 |
1072 EXPECT_EQ(GetExpectedResultAsString( | 1112 EXPECT_EQ(GetExpectedResultAsString( |
1073 ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), | 1113 ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), |
1074 GetRewrittenEventAsString( | 1114 GetRewrittenEventAsString( |
1075 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1115 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
| 1116 // Check that Alt is applied to a subsequent key press. |
| 1117 EXPECT_EQ(GetExpectedResultAsString( |
| 1118 ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), |
| 1119 GetRewrittenEventAsString( |
| 1120 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
| 1121 // Release F15 |
| 1122 EXPECT_EQ(GetExpectedResultAsString( |
| 1123 ui::VKEY_MENU, ui::EF_NONE, ui::ET_KEY_RELEASED), |
| 1124 GetRewrittenEventAsString( |
| 1125 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_RELEASED)); |
| 1126 // Check that Alt is no longer applied to a subsequent key press. |
| 1127 EXPECT_EQ( |
| 1128 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), |
| 1129 GetRewrittenEventAsString( |
| 1130 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1076 | 1131 |
1077 diamond.SetValue(chromeos::input_method::kCapsLockKey); | 1132 diamond.SetValue(chromeos::input_method::kCapsLockKey); |
1078 | 1133 |
1079 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, | 1134 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, |
1080 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1135 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
1081 ui::ET_KEY_PRESSED), | 1136 ui::ET_KEY_PRESSED), |
1082 GetRewrittenEventAsString( | 1137 GetRewrittenEventAsString( |
1083 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1138 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
| 1139 // Check that Caps is applied to a subsequent key press. |
| 1140 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, |
| 1141 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
| 1142 ui::ET_KEY_PRESSED), |
| 1143 GetRewrittenEventAsString( |
| 1144 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
| 1145 // Release F15 |
| 1146 EXPECT_EQ(GetExpectedResultAsString( |
| 1147 ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED), |
| 1148 GetRewrittenEventAsString( |
| 1149 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_RELEASED)); |
| 1150 // Check that Control is no longer applied to a subsequent key press. |
| 1151 EXPECT_EQ( |
| 1152 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), |
| 1153 GetRewrittenEventAsString( |
| 1154 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1084 | 1155 |
1085 *CommandLine::ForCurrentProcess() = original_cl; | 1156 *CommandLine::ForCurrentProcess() = original_cl; |
1086 } | 1157 } |
1087 | 1158 |
1088 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) { | 1159 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) { |
1089 // Remap CapsLock to Control. | 1160 // Remap CapsLock to Control. |
1090 TestingPrefServiceSyncable prefs; | 1161 TestingPrefServiceSyncable prefs; |
1091 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1162 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1092 IntegerPrefMember control; | 1163 IntegerPrefMember control; |
1093 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); | 1164 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); |
(...skipping 1287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2381 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); | 2452 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); |
2382 EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); | 2453 EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); |
2383 | 2454 |
2384 // Turn off AltGr and Mod3. | 2455 // Turn off AltGr and Mod3. |
2385 sticky_keys_controller_->SetModifiersEnabled(false, false); | 2456 sticky_keys_controller_->SetModifiersEnabled(false, false); |
2386 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); | 2457 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); |
2387 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); | 2458 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); |
2388 } | 2459 } |
2389 | 2460 |
2390 } // namespace chromeos | 2461 } // namespace chromeos |
OLD | NEW |