| 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 1009 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1020 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 1020 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
| 1021 | 1021 |
| 1022 KeyTestCase tests[] = { | 1022 KeyTestCase tests[] = { |
| 1023 // F15 should work as Ctrl when --has-chromeos-diamond-key is not | 1023 // F15 should work as Ctrl when --has-chromeos-diamond-key is not |
| 1024 // specified. | 1024 // specified. |
| 1025 {KeyTestCase::TEST_VKEY, | 1025 {KeyTestCase::TEST_VKEY, |
| 1026 ui::ET_KEY_PRESSED, | 1026 ui::ET_KEY_PRESSED, |
| 1027 {ui::VKEY_F15, ui::EF_NONE}, | 1027 {ui::VKEY_F15, ui::EF_NONE}, |
| 1028 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, | 1028 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, |
| 1029 | 1029 |
| 1030 {KeyTestCase::TEST_VKEY, |
| 1031 ui::ET_KEY_RELEASED, |
| 1032 {ui::VKEY_F15, ui::EF_NONE}, |
| 1033 {ui::VKEY_CONTROL, ui::EF_NONE}}, |
| 1034 |
| 1030 // However, Mod2Mask should not be rewritten to CtrlMask when | 1035 // However, Mod2Mask should not be rewritten to CtrlMask when |
| 1031 // --has-chromeos-diamond-key is not specified. | 1036 // --has-chromeos-diamond-key is not specified. |
| 1032 {KeyTestCase::TEST_VKEY, | 1037 {KeyTestCase::TEST_VKEY, |
| 1033 ui::ET_KEY_PRESSED, | 1038 ui::ET_KEY_PRESSED, |
| 1034 {ui::VKEY_A, ui::EF_NONE}, | 1039 {ui::VKEY_A, ui::EF_NONE}, |
| 1035 {ui::VKEY_A, ui::EF_NONE}}, | 1040 {ui::VKEY_A, ui::EF_NONE}}, |
| 1036 }; | 1041 }; |
| 1037 | 1042 |
| 1038 for (size_t i = 0; i < arraysize(tests); ++i) { | 1043 for (size_t i = 0; i < arraysize(tests); ++i) { |
| 1039 SCOPED_TRACE(i); | 1044 SCOPED_TRACE(i); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1053 EventRewriter rewriter(NULL); | 1058 EventRewriter rewriter(NULL); |
| 1054 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1059 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1055 rewriter.set_pref_service_for_testing(&prefs); | 1060 rewriter.set_pref_service_for_testing(&prefs); |
| 1056 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 1061 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
| 1057 | 1062 |
| 1058 // By default, F15 should work as Control. | 1063 // By default, F15 should work as Control. |
| 1059 EXPECT_EQ(GetExpectedResultAsString( | 1064 EXPECT_EQ(GetExpectedResultAsString( |
| 1060 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), | 1065 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
| 1061 GetRewrittenEventAsString( | 1066 GetRewrittenEventAsString( |
| 1062 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1067 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
| 1068 // Check that Control is applied to a subsequent key press. |
| 1069 EXPECT_EQ(GetExpectedResultAsString( |
| 1070 ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
| 1071 GetRewrittenEventAsString( |
| 1072 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
| 1073 // Release F15 |
| 1074 EXPECT_EQ(GetExpectedResultAsString( |
| 1075 ui::VKEY_CONTROL, ui::EF_NONE, ui::ET_KEY_RELEASED), |
| 1076 GetRewrittenEventAsString( |
| 1077 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_RELEASED)); |
| 1078 // Check that Control is no longer applied to a subsequent key press. |
| 1079 EXPECT_EQ( |
| 1080 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), |
| 1081 GetRewrittenEventAsString( |
| 1082 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
| 1063 | 1083 |
| 1064 IntegerPrefMember diamond; | 1084 IntegerPrefMember diamond; |
| 1065 diamond.Init(prefs::kLanguageRemapDiamondKeyTo, &prefs); | 1085 diamond.Init(prefs::kLanguageRemapDiamondKeyTo, &prefs); |
| 1066 diamond.SetValue(chromeos::input_method::kVoidKey); | 1086 diamond.SetValue(chromeos::input_method::kVoidKey); |
| 1067 | 1087 |
| 1068 EXPECT_EQ(GetExpectedResultAsString( | 1088 EXPECT_EQ(GetExpectedResultAsString( |
| 1069 ui::VKEY_UNKNOWN, ui::EF_NONE, ui::ET_KEY_PRESSED), | 1089 ui::VKEY_UNKNOWN, ui::EF_NONE, ui::ET_KEY_PRESSED), |
| 1070 GetRewrittenEventAsString( | 1090 GetRewrittenEventAsString( |
| 1071 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1091 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
| 1092 // Check that no modifier is applied to another key. |
| 1093 EXPECT_EQ( |
| 1094 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), |
| 1095 GetRewrittenEventAsString( |
| 1096 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
| 1072 | 1097 |
| 1073 diamond.SetValue(chromeos::input_method::kControlKey); | 1098 diamond.SetValue(chromeos::input_method::kControlKey); |
| 1074 | 1099 |
| 1075 EXPECT_EQ(GetExpectedResultAsString( | 1100 EXPECT_EQ(GetExpectedResultAsString( |
| 1076 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), | 1101 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
| 1077 GetRewrittenEventAsString( | 1102 GetRewrittenEventAsString( |
| 1078 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1103 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
| 1104 // Check that Control is applied to a subsequent key press. |
| 1105 EXPECT_EQ(GetExpectedResultAsString( |
| 1106 ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
| 1107 GetRewrittenEventAsString( |
| 1108 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
| 1109 // Release F15 |
| 1110 EXPECT_EQ(GetExpectedResultAsString( |
| 1111 ui::VKEY_CONTROL, ui::EF_NONE, ui::ET_KEY_RELEASED), |
| 1112 GetRewrittenEventAsString( |
| 1113 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_RELEASED)); |
| 1114 // Check that Control is no longer applied to a subsequent key press. |
| 1115 EXPECT_EQ( |
| 1116 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), |
| 1117 GetRewrittenEventAsString( |
| 1118 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
| 1079 | 1119 |
| 1080 diamond.SetValue(chromeos::input_method::kAltKey); | 1120 diamond.SetValue(chromeos::input_method::kAltKey); |
| 1081 | 1121 |
| 1082 EXPECT_EQ(GetExpectedResultAsString( | 1122 EXPECT_EQ(GetExpectedResultAsString( |
| 1083 ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), | 1123 ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), |
| 1084 GetRewrittenEventAsString( | 1124 GetRewrittenEventAsString( |
| 1085 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1125 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
| 1126 // Check that Alt is applied to a subsequent key press. |
| 1127 EXPECT_EQ(GetExpectedResultAsString( |
| 1128 ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), |
| 1129 GetRewrittenEventAsString( |
| 1130 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
| 1131 // Release F15 |
| 1132 EXPECT_EQ(GetExpectedResultAsString( |
| 1133 ui::VKEY_MENU, ui::EF_NONE, ui::ET_KEY_RELEASED), |
| 1134 GetRewrittenEventAsString( |
| 1135 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_RELEASED)); |
| 1136 // Check that Alt is no longer applied to a subsequent key press. |
| 1137 EXPECT_EQ( |
| 1138 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), |
| 1139 GetRewrittenEventAsString( |
| 1140 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
| 1086 | 1141 |
| 1087 diamond.SetValue(chromeos::input_method::kCapsLockKey); | 1142 diamond.SetValue(chromeos::input_method::kCapsLockKey); |
| 1088 | 1143 |
| 1089 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, | 1144 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, |
| 1090 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1145 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
| 1091 ui::ET_KEY_PRESSED), | 1146 ui::ET_KEY_PRESSED), |
| 1092 GetRewrittenEventAsString( | 1147 GetRewrittenEventAsString( |
| 1093 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); | 1148 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
| 1149 // Check that Caps is applied to a subsequent key press. |
| 1150 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, |
| 1151 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
| 1152 ui::ET_KEY_PRESSED), |
| 1153 GetRewrittenEventAsString( |
| 1154 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
| 1155 // Release F15 |
| 1156 EXPECT_EQ(GetExpectedResultAsString( |
| 1157 ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED), |
| 1158 GetRewrittenEventAsString( |
| 1159 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_RELEASED)); |
| 1160 // Check that Control is no longer applied to a subsequent key press. |
| 1161 EXPECT_EQ( |
| 1162 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), |
| 1163 GetRewrittenEventAsString( |
| 1164 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
| 1094 | 1165 |
| 1095 *CommandLine::ForCurrentProcess() = original_cl; | 1166 *CommandLine::ForCurrentProcess() = original_cl; |
| 1096 } | 1167 } |
| 1097 | 1168 |
| 1098 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) { | 1169 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) { |
| 1099 // Remap CapsLock to Control. | 1170 // Remap CapsLock to Control. |
| 1100 TestingPrefServiceSyncable prefs; | 1171 TestingPrefServiceSyncable prefs; |
| 1101 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1172 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 1102 IntegerPrefMember control; | 1173 IntegerPrefMember control; |
| 1103 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); | 1174 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); |
| (...skipping 1287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2391 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); | 2462 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); |
| 2392 EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); | 2463 EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); |
| 2393 | 2464 |
| 2394 // Turn off AltGr and Mod3. | 2465 // Turn off AltGr and Mod3. |
| 2395 sticky_keys_controller_->SetModifiersEnabled(false, false); | 2466 sticky_keys_controller_->SetModifiersEnabled(false, false); |
| 2396 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); | 2467 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); |
| 2397 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); | 2468 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); |
| 2398 } | 2469 } |
| 2399 | 2470 |
| 2400 } // namespace chromeos | 2471 } // namespace chromeos |
| OLD | NEW |