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 594 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
605 // Press Alt with Shift. Confirm the event is not rewritten. | 605 // Press Alt with Shift. Confirm the event is not rewritten. |
606 {ui::ET_KEY_PRESSED, | 606 {ui::ET_KEY_PRESSED, |
607 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, | 607 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, |
608 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ALT}, | 608 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ALT}, |
609 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, | 609 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, |
610 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ALT}}, | 610 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ALT}}, |
611 | 611 |
612 // Press Search with Caps Lock mask. Confirm the event is not rewritten. | 612 // Press Search with Caps Lock mask. Confirm the event is not rewritten. |
613 {ui::ET_KEY_PRESSED, | 613 {ui::ET_KEY_PRESSED, |
614 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, | 614 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
615 ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}, | 615 ui::EF_CAPS_LOCK_ON | ui::EF_COMMAND_DOWN, ui::DomKey::OS}, |
616 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, | 616 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
617 ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}}, | 617 ui::EF_CAPS_LOCK_ON | ui::EF_COMMAND_DOWN, ui::DomKey::OS}}, |
618 | 618 |
619 // Release Search with Caps Lock mask. Confirm the event is not rewritten. | 619 // Release Search with Caps Lock mask. Confirm the event is not rewritten. |
620 {ui::ET_KEY_RELEASED, | 620 {ui::ET_KEY_RELEASED, |
621 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_CAPS_LOCK_DOWN, | 621 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_CAPS_LOCK_ON, |
622 ui::DomKey::OS}, | 622 ui::DomKey::OS}, |
623 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_CAPS_LOCK_DOWN, | 623 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_CAPS_LOCK_ON, |
624 ui::DomKey::OS}}, | 624 ui::DomKey::OS}}, |
625 | 625 |
626 // Press Shift+Ctrl+Alt+Search+A. Confirm the event is not rewritten. | 626 // Press Shift+Ctrl+Alt+Search+A. Confirm the event is not rewritten. |
627 {ui::ET_KEY_PRESSED, | 627 {ui::ET_KEY_PRESSED, |
628 {ui::VKEY_B, ui::DomCode::US_B, | 628 {ui::VKEY_B, ui::DomCode::US_B, |
629 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 629 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
630 ui::EF_COMMAND_DOWN, | 630 ui::EF_COMMAND_DOWN, |
631 ui::DomKey::Constant<'B'>::Character}, | 631 ui::DomKey::Constant<'B'>::Character}, |
632 {ui::VKEY_B, ui::DomCode::US_B, | 632 {ui::VKEY_B, ui::DomCode::US_B, |
633 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 633 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
951 search.SetValue(chromeos::input_method::kCapsLockKey); | 951 search.SetValue(chromeos::input_method::kCapsLockKey); |
952 | 952 |
953 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 953 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
954 EventRewriter rewriter(NULL); | 954 EventRewriter rewriter(NULL); |
955 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 955 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
956 rewriter.set_pref_service_for_testing(&prefs); | 956 rewriter.set_pref_service_for_testing(&prefs); |
957 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 957 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
958 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 958 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
959 | 959 |
960 // Press Search. | 960 // Press Search. |
961 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, | 961 EXPECT_EQ(GetExpectedResultAsString( |
962 ui::DomCode::CAPS_LOCK, | 962 ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, |
963 ui::EF_MOD3_DOWN | ui::EF_CAPS_LOCK_DOWN, | 963 ui::EF_MOD3_DOWN | ui::EF_CAPS_LOCK_ON, ui::DomKey::CAPS_LOCK), |
964 ui::DomKey::CAPS_LOCK), | |
965 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 964 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
966 ui::VKEY_LWIN, ui::DomCode::OS_LEFT, | 965 ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
967 ui::EF_COMMAND_DOWN, ui::DomKey::OS)); | 966 ui::EF_COMMAND_DOWN, ui::DomKey::OS)); |
968 // Confirm that the Caps Lock status is changed. | 967 // Confirm that the Caps Lock status is changed. |
969 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 968 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
970 | 969 |
971 // Release Search. | 970 // Release Search. |
972 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, | 971 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, |
973 ui::DomCode::CAPS_LOCK, ui::EF_NONE, | 972 ui::DomCode::CAPS_LOCK, ui::EF_NONE, |
974 ui::DomKey::CAPS_LOCK), | 973 ui::DomKey::CAPS_LOCK), |
975 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 974 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
976 ui::VKEY_LWIN, ui::DomCode::OS_LEFT, | 975 ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
977 ui::EF_NONE, ui::DomKey::OS)); | 976 ui::EF_NONE, ui::DomKey::OS)); |
978 // Confirm that the Caps Lock status is not changed. | 977 // Confirm that the Caps Lock status is not changed. |
979 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 978 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
980 | 979 |
981 // Press Search. | 980 // Press Search. |
982 EXPECT_EQ( | 981 EXPECT_EQ(GetExpectedResultAsString( |
983 GetExpectedResultAsString( | 982 ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, |
984 ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, | 983 ui::EF_CAPS_LOCK_ON | ui::EF_MOD3_DOWN, ui::DomKey::CAPS_LOCK), |
985 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, ui::DomKey::CAPS_LOCK), | 984 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
986 GetRewrittenEventAsString( | 985 ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
987 &rewriter, ui::ET_KEY_PRESSED, ui::VKEY_LWIN, ui::DomCode::OS_LEFT, | 986 ui::EF_COMMAND_DOWN | ui::EF_CAPS_LOCK_ON, |
988 ui::EF_COMMAND_DOWN | ui::EF_CAPS_LOCK_DOWN, ui::DomKey::OS)); | 987 ui::DomKey::OS)); |
989 // Confirm that the Caps Lock status is changed. | 988 // Confirm that the Caps Lock status is changed. |
990 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 989 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
991 | 990 |
992 // Release Search. | 991 // Release Search. |
993 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, | 992 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, |
994 ui::DomCode::CAPS_LOCK, ui::EF_NONE, | 993 ui::DomCode::CAPS_LOCK, ui::EF_NONE, |
995 ui::DomKey::CAPS_LOCK), | 994 ui::DomKey::CAPS_LOCK), |
996 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 995 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
997 ui::VKEY_LWIN, ui::DomCode::OS_LEFT, | 996 ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
998 ui::EF_NONE, ui::DomKey::OS)); | 997 ui::EF_NONE, ui::DomKey::OS)); |
999 // Confirm that the Caps Lock status is not changed. | 998 // Confirm that the Caps Lock status is not changed. |
1000 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 999 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
1001 | 1000 |
1002 // Press Caps Lock (on an external keyboard). | 1001 // Press Caps Lock (on an external keyboard). |
1003 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, | 1002 EXPECT_EQ(GetExpectedResultAsString( |
1004 ui::DomCode::CAPS_LOCK, | 1003 ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, |
1005 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1004 ui::EF_CAPS_LOCK_ON | ui::EF_MOD3_DOWN, ui::DomKey::CAPS_LOCK), |
1006 ui::DomKey::CAPS_LOCK), | |
1007 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1005 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
1008 ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, | 1006 ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, |
1009 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1007 ui::EF_CAPS_LOCK_ON | ui::EF_MOD3_DOWN, |
1010 ui::DomKey::CAPS_LOCK)); | 1008 ui::DomKey::CAPS_LOCK)); |
1011 | 1009 |
1012 #if defined(USE_X11) | 1010 #if defined(USE_X11) |
1013 // Confirm that calling RewriteForTesting() does not change the state of | 1011 // Confirm that calling RewriteForTesting() does not change the state of |
1014 // |ime_keyboard|. In this case, X Window system itself should change the | 1012 // |ime_keyboard|. In this case, X Window system itself should change the |
1015 // Caps Lock state, not ash::EventRewriter. | 1013 // Caps Lock state, not ash::EventRewriter. |
1016 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 1014 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
1017 #elif defined(USE_OZONE) | 1015 #elif defined(USE_OZONE) |
1018 // Under Ozone the rewriter is responsible for changing the caps lock | 1016 // Under Ozone the rewriter is responsible for changing the caps lock |
1019 // state when the final key is Caps Lock, regardless of whether the | 1017 // state when the final key is Caps Lock, regardless of whether the |
(...skipping 20 matching lines...) Expand all Loading... |
1040 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1038 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1041 | 1039 |
1042 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 1040 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
1043 EventRewriter rewriter(NULL); | 1041 EventRewriter rewriter(NULL); |
1044 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1042 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1045 rewriter.set_pref_service_for_testing(&prefs); | 1043 rewriter.set_pref_service_for_testing(&prefs); |
1046 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 1044 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
1047 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 1045 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
1048 | 1046 |
1049 // On Chrome OS, CapsLock is mapped to F16 with Mod3Mask. | 1047 // On Chrome OS, CapsLock is mapped to F16 with Mod3Mask. |
1050 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, | 1048 EXPECT_EQ(GetExpectedResultAsString( |
1051 ui::DomCode::CAPS_LOCK, | 1049 ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, |
1052 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1050 ui::EF_CAPS_LOCK_ON | ui::EF_MOD3_DOWN, ui::DomKey::CAPS_LOCK), |
1053 ui::DomKey::CAPS_LOCK), | |
1054 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1051 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
1055 ui::VKEY_F16, ui::DomCode::F16, | 1052 ui::VKEY_F16, ui::DomCode::F16, |
1056 ui::EF_MOD3_DOWN, ui::DomKey::F16)); | 1053 ui::EF_MOD3_DOWN, ui::DomKey::F16)); |
1057 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 1054 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
1058 } | 1055 } |
1059 | 1056 |
1060 TEST_F(EventRewriterTest, TestRewriteDiamondKey) { | 1057 TEST_F(EventRewriterTest, TestRewriteDiamondKey) { |
1061 syncable_prefs::TestingPrefServiceSyncable prefs; | 1058 syncable_prefs::TestingPrefServiceSyncable prefs; |
1062 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1059 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1063 | 1060 |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1210 // Check that Alt is no longer applied to a subsequent key press. | 1207 // Check that Alt is no longer applied to a subsequent key press. |
1211 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1208 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
1212 ui::DomCode::US_A, ui::EF_NONE, | 1209 ui::DomCode::US_A, ui::EF_NONE, |
1213 ui::DomKey::Constant<'a'>::Character), | 1210 ui::DomKey::Constant<'a'>::Character), |
1214 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1211 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
1215 ui::DomCode::US_A, ui::EF_NONE, | 1212 ui::DomCode::US_A, ui::EF_NONE, |
1216 ui::DomKey::Constant<'a'>::Character)); | 1213 ui::DomKey::Constant<'a'>::Character)); |
1217 | 1214 |
1218 diamond.SetValue(chromeos::input_method::kCapsLockKey); | 1215 diamond.SetValue(chromeos::input_method::kCapsLockKey); |
1219 | 1216 |
1220 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, | 1217 EXPECT_EQ(GetExpectedResultAsString( |
1221 ui::DomCode::CAPS_LOCK, | 1218 ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, |
1222 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1219 ui::EF_CAPS_LOCK_ON | ui::EF_MOD3_DOWN, ui::DomKey::CAPS_LOCK), |
1223 ui::DomKey::CAPS_LOCK), | |
1224 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1220 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
1225 ui::VKEY_F15, ui::DomCode::F15, | 1221 ui::VKEY_F15, ui::DomCode::F15, |
1226 ui::EF_NONE, ui::DomKey::F15)); | 1222 ui::EF_NONE, ui::DomKey::F15)); |
1227 // Check that Caps is applied to a subsequent key press. | 1223 // Check that Caps is applied to a subsequent key press. |
1228 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1224 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
1229 ui::DomCode::US_A, | 1225 ui::DomCode::US_A, |
1230 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1226 ui::EF_CAPS_LOCK_ON | ui::EF_MOD3_DOWN, |
1231 ui::DomKey::Constant<'A'>::Character), | 1227 ui::DomKey::Constant<'A'>::Character), |
1232 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1228 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
1233 ui::DomCode::US_A, ui::EF_NONE, | 1229 ui::DomCode::US_A, ui::EF_NONE, |
1234 ui::DomKey::Constant<'a'>::Character)); | 1230 ui::DomKey::Constant<'a'>::Character)); |
1235 // Release F15 | 1231 // Release F15 |
1236 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, | 1232 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, |
1237 ui::DomCode::CAPS_LOCK, ui::EF_NONE, | 1233 ui::DomCode::CAPS_LOCK, ui::EF_NONE, |
1238 ui::DomKey::CAPS_LOCK), | 1234 ui::DomKey::CAPS_LOCK), |
1239 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 1235 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
1240 ui::VKEY_F15, ui::DomCode::F15, | 1236 ui::VKEY_F15, ui::DomCode::F15, |
(...skipping 1376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2617 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); | 2613 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); |
2618 EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); | 2614 EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); |
2619 | 2615 |
2620 // Turn off AltGr and Mod3. | 2616 // Turn off AltGr and Mod3. |
2621 sticky_keys_controller_->SetModifiersEnabled(false, false); | 2617 sticky_keys_controller_->SetModifiersEnabled(false, false); |
2622 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); | 2618 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); |
2623 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); | 2619 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); |
2624 } | 2620 } |
2625 | 2621 |
2626 } // namespace chromeos | 2622 } // namespace chromeos |
OLD | NEW |