| 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 |