| 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 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 // First, test with a PC keyboard. | 162 // First, test with a PC keyboard. |
| 163 syncable_prefs::TestingPrefServiceSyncable prefs; | 163 syncable_prefs::TestingPrefServiceSyncable prefs; |
| 164 EventRewriter rewriter(NULL); | 164 EventRewriter rewriter(NULL); |
| 165 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 165 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 166 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 166 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
| 167 rewriter.set_pref_service_for_testing(&prefs); | 167 rewriter.set_pref_service_for_testing(&prefs); |
| 168 | 168 |
| 169 KeyTestCase pc_keyboard_tests[] = { | 169 KeyTestCase pc_keyboard_tests[] = { |
| 170 // VKEY_A, Alt modifier. | 170 // VKEY_A, Alt modifier. |
| 171 {ui::ET_KEY_PRESSED, | 171 {ui::ET_KEY_PRESSED, |
| 172 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN, | 172 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN, |
| 173 ui::DomKey::UNIDENTIFIED}, | 173 ui::DomKey::UNIDENTIFIED}, |
| 174 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN, | 174 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN, |
| 175 ui::DomKey::UNIDENTIFIED}}, | 175 ui::DomKey::UNIDENTIFIED}}, |
| 176 | 176 |
| 177 // VKEY_A, Win modifier. | 177 // VKEY_A, Win modifier. |
| 178 {ui::ET_KEY_PRESSED, | 178 {ui::ET_KEY_PRESSED, |
| 179 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_COMMAND_DOWN, | 179 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_COMMAND_DOWN, |
| 180 ui::DomKey::UNIDENTIFIED}, | 180 ui::DomKey::UNIDENTIFIED}, |
| 181 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_COMMAND_DOWN, | 181 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_COMMAND_DOWN, |
| 182 ui::DomKey::UNIDENTIFIED}}, | 182 ui::DomKey::UNIDENTIFIED}}, |
| 183 | 183 |
| 184 // VKEY_A, Alt+Win modifier. | 184 // VKEY_A, Alt+Win modifier. |
| 185 {ui::ET_KEY_PRESSED, | 185 {ui::ET_KEY_PRESSED, |
| 186 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | 186 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 187 ui::DomKey::UNIDENTIFIED}, | 187 ui::DomKey::UNIDENTIFIED}, |
| 188 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | 188 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 189 ui::DomKey::UNIDENTIFIED}}, | 189 ui::DomKey::UNIDENTIFIED}}, |
| 190 | 190 |
| 191 // VKEY_LWIN (left Windows key), Alt modifier. | 191 // VKEY_LWIN (left Windows key), Alt modifier. |
| 192 {ui::ET_KEY_PRESSED, | 192 {ui::ET_KEY_PRESSED, |
| 193 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, | 193 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
| 194 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}, | 194 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}, |
| 195 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, | 195 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
| 196 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}}, | 196 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}}, |
| 197 | 197 |
| 198 // VKEY_RWIN (right Windows key), Alt modifier. | 198 // VKEY_RWIN (right Windows key), Alt modifier. |
| 199 {ui::ET_KEY_PRESSED, | 199 {ui::ET_KEY_PRESSED, |
| 200 {ui::VKEY_RWIN, ui::DomCode::OS_RIGHT, | 200 {ui::VKEY_RWIN, ui::DomCode::OS_RIGHT, |
| 201 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}, | 201 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}, |
| 202 {ui::VKEY_RWIN, ui::DomCode::OS_RIGHT, | 202 {ui::VKEY_RWIN, ui::DomCode::OS_RIGHT, |
| 203 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}}, | 203 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}}, |
| 204 }; | 204 }; |
| 205 | 205 |
| 206 for (const auto& test : pc_keyboard_tests) { | 206 for (const auto& test : pc_keyboard_tests) { |
| 207 CheckKeyTestCase(&rewriter, test); | 207 CheckKeyTestCase(&rewriter, test); |
| 208 } | 208 } |
| 209 | 209 |
| 210 // An Apple keyboard reusing the ID, zero. | 210 // An Apple keyboard reusing the ID, zero. |
| 211 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); | 211 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); |
| 212 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 212 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
| 213 | 213 |
| 214 KeyTestCase apple_keyboard_tests[] = { | 214 KeyTestCase apple_keyboard_tests[] = { |
| 215 // VKEY_A, Alt modifier. | 215 // VKEY_A, Alt modifier. |
| 216 {ui::ET_KEY_PRESSED, | 216 {ui::ET_KEY_PRESSED, |
| 217 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN, | 217 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN, |
| 218 ui::DomKey::UNIDENTIFIED}, | 218 ui::DomKey::UNIDENTIFIED}, |
| 219 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN, | 219 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN, |
| 220 ui::DomKey::UNIDENTIFIED}}, | 220 ui::DomKey::UNIDENTIFIED}}, |
| 221 | 221 |
| 222 // VKEY_A, Win modifier. | 222 // VKEY_A, Win modifier. |
| 223 {ui::ET_KEY_PRESSED, | 223 {ui::ET_KEY_PRESSED, |
| 224 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_COMMAND_DOWN, | 224 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_COMMAND_DOWN, |
| 225 ui::DomKey::UNIDENTIFIED}, | 225 ui::DomKey::UNIDENTIFIED}, |
| 226 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, | 226 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_CONTROL_DOWN, |
| 227 ui::DomKey::Constant<'a'>::Character}}, | 227 ui::DomKey::Constant<'a'>::Character}}, |
| 228 | 228 |
| 229 // VKEY_A, Alt+Win modifier. | 229 // VKEY_A, Alt+Win modifier. |
| 230 {ui::ET_KEY_PRESSED, | 230 {ui::ET_KEY_PRESSED, |
| 231 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | 231 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 232 ui::DomKey::UNIDENTIFIED}, | 232 ui::DomKey::UNIDENTIFIED}, |
| 233 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | 233 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
| 234 ui::DomKey::Constant<'a'>::Character}}, | 234 ui::DomKey::Constant<'a'>::Character}}, |
| 235 | 235 |
| 236 // VKEY_LWIN (left Windows key), Alt modifier. | 236 // VKEY_LWIN (left Windows key), Alt modifier. |
| 237 {ui::ET_KEY_PRESSED, | 237 {ui::ET_KEY_PRESSED, |
| 238 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, | 238 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
| 239 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::OS}, | 239 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::OS}, |
| 240 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 240 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 241 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ui::DomKey::CONTROL}}, | 241 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ui::DomKey::CONTROL}}, |
| 242 | 242 |
| 243 // VKEY_RWIN (right Windows key), Alt modifier. | 243 // VKEY_RWIN (right Windows key), Alt modifier. |
| (...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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_DOWN, |
| 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_DOWN, |
| 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::KEY_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::KEY_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 | |
| 634 ui::EF_COMMAND_DOWN, | 634 ui::EF_COMMAND_DOWN, |
| 635 ui::DomKey::Constant<'B'>::Character}}, | 635 ui::DomKey::Constant<'B'>::Character}}, |
| 636 }; | 636 }; |
| 637 | 637 |
| 638 for (const auto& test : tests) { | 638 for (const auto& test : tests) { |
| 639 CheckKeyTestCase(&rewriter, test); | 639 CheckKeyTestCase(&rewriter, test); |
| 640 } | 640 } |
| 641 } | 641 } |
| 642 | 642 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 681 // without any modifiers. | 681 // without any modifiers. |
| 682 {ui::ET_KEY_PRESSED, | 682 {ui::ET_KEY_PRESSED, |
| 683 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_CONTROL_DOWN, | 683 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_CONTROL_DOWN, |
| 684 ui::DomKey::OS}, | 684 ui::DomKey::OS}, |
| 685 {ui::VKEY_UNKNOWN, ui::DomCode::NONE, ui::EF_NONE, | 685 {ui::VKEY_UNKNOWN, ui::DomCode::NONE, ui::EF_NONE, |
| 686 ui::DomKey::UNIDENTIFIED}}, | 686 ui::DomKey::UNIDENTIFIED}}, |
| 687 | 687 |
| 688 // Press Control+Search+a. Confirm the event is now VKEY_A without any | 688 // Press Control+Search+a. Confirm the event is now VKEY_A without any |
| 689 // modifiers. | 689 // modifiers. |
| 690 {ui::ET_KEY_PRESSED, | 690 {ui::ET_KEY_PRESSED, |
| 691 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, | 691 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_CONTROL_DOWN, |
| 692 ui::DomKey::Constant<'a'>::Character}, | 692 ui::DomKey::Constant<'a'>::Character}, |
| 693 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_NONE, | 693 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_NONE, |
| 694 ui::DomKey::Constant<'a'>::Character}}, | 694 ui::DomKey::Constant<'a'>::Character}}, |
| 695 | 695 |
| 696 // Press Control+Search+Alt+a. Confirm the event is now VKEY_A only with | 696 // Press Control+Search+Alt+a. Confirm the event is now VKEY_A only with |
| 697 // the Alt modifier. | 697 // the Alt modifier. |
| 698 {ui::ET_KEY_PRESSED, | 698 {ui::ET_KEY_PRESSED, |
| 699 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | 699 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
| 700 ui::DomKey::Constant<'a'>::Character}, | 700 ui::DomKey::Constant<'a'>::Character}, |
| 701 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN, | 701 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN, |
| 702 ui::DomKey::Constant<'a'>::Character}}, | 702 ui::DomKey::Constant<'a'>::Character}}, |
| 703 }; | 703 }; |
| 704 | 704 |
| 705 for (const auto& test : disabled_modifier_tests) { | 705 for (const auto& test : disabled_modifier_tests) { |
| 706 CheckKeyTestCase(&rewriter, test); | 706 CheckKeyTestCase(&rewriter, test); |
| 707 } | 707 } |
| 708 | 708 |
| 709 // Remap Alt to Control. | 709 // Remap Alt to Control. |
| 710 IntegerPrefMember alt; | 710 IntegerPrefMember alt; |
| 711 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); | 711 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); |
| 712 alt.SetValue(chromeos::input_method::kControlKey); | 712 alt.SetValue(chromeos::input_method::kControlKey); |
| 713 | 713 |
| 714 KeyTestCase tests[] = { | 714 KeyTestCase tests[] = { |
| 715 // Press left Alt. Confirm the event is now VKEY_CONTROL | 715 // Press left Alt. Confirm the event is now VKEY_CONTROL |
| 716 // even though the Control key itself is disabled. | 716 // even though the Control key itself is disabled. |
| 717 {ui::ET_KEY_PRESSED, | 717 {ui::ET_KEY_PRESSED, |
| 718 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, ui::DomKey::ALT}, | 718 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, ui::DomKey::ALT}, |
| 719 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, | 719 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN, |
| 720 ui::DomKey::CONTROL}}, | 720 ui::DomKey::CONTROL}}, |
| 721 | 721 |
| 722 // Press Alt+a. Confirm the event is now Control+a even though the Control | 722 // Press Alt+a. Confirm the event is now Control+a even though the Control |
| 723 // key itself is disabled. | 723 // key itself is disabled. |
| 724 {ui::ET_KEY_PRESSED, | 724 {ui::ET_KEY_PRESSED, |
| 725 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN, | 725 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN, |
| 726 ui::DomKey::Constant<'a'>::Character}, | 726 ui::DomKey::Constant<'a'>::Character}, |
| 727 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, | 727 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_CONTROL_DOWN, |
| 728 ui::DomKey::Constant<'a'>::Character}}, | 728 ui::DomKey::Constant<'a'>::Character}}, |
| 729 }; | 729 }; |
| 730 | 730 |
| 731 for (const auto& test : tests) { | 731 for (const auto& test : tests) { |
| 732 CheckKeyTestCase(&rewriter, test); | 732 CheckKeyTestCase(&rewriter, test); |
| 733 } | 733 } |
| 734 } | 734 } |
| 735 | 735 |
| 736 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) { | 736 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) { |
| 737 // Remap Search to Control. | 737 // Remap Search to Control. |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 791 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, | 791 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, |
| 792 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 792 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
| 793 ui::EF_COMMAND_DOWN, | 793 ui::EF_COMMAND_DOWN, |
| 794 ui::DomKey::OS}, | 794 ui::DomKey::OS}, |
| 795 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 795 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 796 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL}}, | 796 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL}}, |
| 797 | 797 |
| 798 // Press Shift+Control+Alt+Search+B. Confirm the event is now B with Shift | 798 // Press Shift+Control+Alt+Search+B. Confirm the event is now B with Shift |
| 799 // and Control modifiers. | 799 // and Control modifiers. |
| 800 {ui::ET_KEY_PRESSED, | 800 {ui::ET_KEY_PRESSED, |
| 801 {ui::VKEY_B, ui::DomCode::KEY_B, | 801 {ui::VKEY_B, ui::DomCode::US_B, |
| 802 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 802 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
| 803 ui::EF_COMMAND_DOWN, | 803 ui::EF_COMMAND_DOWN, |
| 804 ui::DomKey::Constant<'B'>::Character}, | 804 ui::DomKey::Constant<'B'>::Character}, |
| 805 {ui::VKEY_B, ui::DomCode::KEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | 805 {ui::VKEY_B, ui::DomCode::US_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
| 806 ui::DomKey::Constant<'B'>::Character}}, | 806 ui::DomKey::Constant<'B'>::Character}}, |
| 807 }; | 807 }; |
| 808 | 808 |
| 809 for (const auto& test : sa_tests) { | 809 for (const auto& test : sa_tests) { |
| 810 CheckKeyTestCase(&rewriter, test); | 810 CheckKeyTestCase(&rewriter, test); |
| 811 } | 811 } |
| 812 } | 812 } |
| 813 | 813 |
| 814 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) { | 814 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) { |
| 815 // Remap Search to ESC. | 815 // Remap Search to ESC. |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 920 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 920 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
| 921 ui::EF_COMMAND_DOWN, | 921 ui::EF_COMMAND_DOWN, |
| 922 ui::DomKey::OS}, | 922 ui::DomKey::OS}, |
| 923 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, | 923 {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, |
| 924 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 924 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
| 925 ui::EF_COMMAND_DOWN, | 925 ui::EF_COMMAND_DOWN, |
| 926 ui::DomKey::ALT}}, | 926 ui::DomKey::ALT}}, |
| 927 | 927 |
| 928 // Press Shift+Control+Alt+Search+B | 928 // Press Shift+Control+Alt+Search+B |
| 929 {ui::ET_KEY_PRESSED, | 929 {ui::ET_KEY_PRESSED, |
| 930 {ui::VKEY_B, ui::DomCode::KEY_B, | 930 {ui::VKEY_B, ui::DomCode::US_B, |
| 931 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 931 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
| 932 ui::EF_COMMAND_DOWN, | 932 ui::EF_COMMAND_DOWN, |
| 933 ui::DomKey::Constant<'B'>::Character}, | 933 ui::DomKey::Constant<'B'>::Character}, |
| 934 {ui::VKEY_B, ui::DomCode::KEY_B, | 934 {ui::VKEY_B, ui::DomCode::US_B, |
| 935 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 935 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
| 936 ui::EF_COMMAND_DOWN, | 936 ui::EF_COMMAND_DOWN, |
| 937 ui::DomKey::Constant<'B'>::Character}}, | 937 ui::DomKey::Constant<'B'>::Character}}, |
| 938 }; | 938 }; |
| 939 | 939 |
| 940 for (const auto& test : c2s_tests) { | 940 for (const auto& test : c2s_tests) { |
| 941 CheckKeyTestCase(&rewriter, test); | 941 CheckKeyTestCase(&rewriter, test); |
| 942 } | 942 } |
| 943 } | 943 } |
| 944 | 944 |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1076 ui::DomKey::CONTROL}}, | 1076 ui::DomKey::CONTROL}}, |
| 1077 | 1077 |
| 1078 {ui::ET_KEY_RELEASED, | 1078 {ui::ET_KEY_RELEASED, |
| 1079 {ui::VKEY_F15, ui::DomCode::F15, ui::EF_NONE, ui::DomKey::F15}, | 1079 {ui::VKEY_F15, ui::DomCode::F15, ui::EF_NONE, ui::DomKey::F15}, |
| 1080 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_NONE, | 1080 {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_NONE, |
| 1081 ui::DomKey::CONTROL}}, | 1081 ui::DomKey::CONTROL}}, |
| 1082 | 1082 |
| 1083 // However, Mod2Mask should not be rewritten to CtrlMask when | 1083 // However, Mod2Mask should not be rewritten to CtrlMask when |
| 1084 // --has-chromeos-diamond-key is not specified. | 1084 // --has-chromeos-diamond-key is not specified. |
| 1085 {ui::ET_KEY_PRESSED, | 1085 {ui::ET_KEY_PRESSED, |
| 1086 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_NONE, | 1086 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_NONE, |
| 1087 ui::DomKey::Constant<'a'>::Character}, | 1087 ui::DomKey::Constant<'a'>::Character}, |
| 1088 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_NONE, | 1088 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_NONE, |
| 1089 ui::DomKey::Constant<'a'>::Character}}, | 1089 ui::DomKey::Constant<'a'>::Character}}, |
| 1090 }; | 1090 }; |
| 1091 | 1091 |
| 1092 for (const auto& test : tests) { | 1092 for (const auto& test : tests) { |
| 1093 CheckKeyTestCase(&rewriter, test); | 1093 CheckKeyTestCase(&rewriter, test); |
| 1094 } | 1094 } |
| 1095 } | 1095 } |
| 1096 | 1096 |
| 1097 TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) { | 1097 TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) { |
| 1098 const base::CommandLine original_cl(*base::CommandLine::ForCurrentProcess()); | 1098 const base::CommandLine original_cl(*base::CommandLine::ForCurrentProcess()); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1110 | 1110 |
| 1111 // By default, F15 should work as Control. | 1111 // By default, F15 should work as Control. |
| 1112 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, | 1112 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, |
| 1113 ui::DomCode::CONTROL_LEFT, | 1113 ui::DomCode::CONTROL_LEFT, |
| 1114 ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL), | 1114 ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL), |
| 1115 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1115 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
| 1116 ui::VKEY_F15, ui::DomCode::F15, | 1116 ui::VKEY_F15, ui::DomCode::F15, |
| 1117 ui::EF_NONE, ui::DomKey::F15)); | 1117 ui::EF_NONE, ui::DomKey::F15)); |
| 1118 // Check that Control is applied to a subsequent key press. | 1118 // Check that Control is applied to a subsequent key press. |
| 1119 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1119 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1120 ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, | 1120 ui::DomCode::US_A, ui::EF_CONTROL_DOWN, |
| 1121 ui::DomKey::Constant<'a'>::Character), | 1121 ui::DomKey::Constant<'a'>::Character), |
| 1122 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1122 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1123 ui::DomCode::KEY_A, ui::EF_NONE, | 1123 ui::DomCode::US_A, ui::EF_NONE, |
| 1124 ui::DomKey::Constant<'a'>::Character)); | 1124 ui::DomKey::Constant<'a'>::Character)); |
| 1125 // Release F15 | 1125 // Release F15 |
| 1126 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, | 1126 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, |
| 1127 ui::DomCode::CONTROL_LEFT, ui::EF_NONE, | 1127 ui::DomCode::CONTROL_LEFT, ui::EF_NONE, |
| 1128 ui::DomKey::CONTROL), | 1128 ui::DomKey::CONTROL), |
| 1129 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 1129 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
| 1130 ui::VKEY_F15, ui::DomCode::F15, | 1130 ui::VKEY_F15, ui::DomCode::F15, |
| 1131 ui::EF_NONE, ui::DomKey::F15)); | 1131 ui::EF_NONE, ui::DomKey::F15)); |
| 1132 // Check that Control is no longer applied to a subsequent key press. | 1132 // Check that Control is no longer applied to a subsequent key press. |
| 1133 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1133 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1134 ui::DomCode::KEY_A, ui::EF_NONE, | 1134 ui::DomCode::US_A, ui::EF_NONE, |
| 1135 ui::DomKey::Constant<'a'>::Character), | 1135 ui::DomKey::Constant<'a'>::Character), |
| 1136 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1136 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1137 ui::DomCode::KEY_A, ui::EF_NONE, | 1137 ui::DomCode::US_A, ui::EF_NONE, |
| 1138 ui::DomKey::Constant<'a'>::Character)); | 1138 ui::DomKey::Constant<'a'>::Character)); |
| 1139 | 1139 |
| 1140 IntegerPrefMember diamond; | 1140 IntegerPrefMember diamond; |
| 1141 diamond.Init(prefs::kLanguageRemapDiamondKeyTo, &prefs); | 1141 diamond.Init(prefs::kLanguageRemapDiamondKeyTo, &prefs); |
| 1142 diamond.SetValue(chromeos::input_method::kVoidKey); | 1142 diamond.SetValue(chromeos::input_method::kVoidKey); |
| 1143 | 1143 |
| 1144 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_UNKNOWN, | 1144 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_UNKNOWN, |
| 1145 ui::DomCode::NONE, ui::EF_NONE, | 1145 ui::DomCode::NONE, ui::EF_NONE, |
| 1146 ui::DomKey::UNIDENTIFIED), | 1146 ui::DomKey::UNIDENTIFIED), |
| 1147 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1147 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
| 1148 ui::VKEY_F15, ui::DomCode::F15, | 1148 ui::VKEY_F15, ui::DomCode::F15, |
| 1149 ui::EF_NONE, ui::DomKey::F15)); | 1149 ui::EF_NONE, ui::DomKey::F15)); |
| 1150 // Check that no modifier is applied to another key. | 1150 // Check that no modifier is applied to another key. |
| 1151 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1151 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1152 ui::DomCode::KEY_A, ui::EF_NONE, | 1152 ui::DomCode::US_A, ui::EF_NONE, |
| 1153 ui::DomKey::Constant<'a'>::Character), | 1153 ui::DomKey::Constant<'a'>::Character), |
| 1154 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1154 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1155 ui::DomCode::KEY_A, ui::EF_NONE, | 1155 ui::DomCode::US_A, ui::EF_NONE, |
| 1156 ui::DomKey::Constant<'a'>::Character)); | 1156 ui::DomKey::Constant<'a'>::Character)); |
| 1157 | 1157 |
| 1158 diamond.SetValue(chromeos::input_method::kControlKey); | 1158 diamond.SetValue(chromeos::input_method::kControlKey); |
| 1159 | 1159 |
| 1160 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, | 1160 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, |
| 1161 ui::DomCode::CONTROL_LEFT, | 1161 ui::DomCode::CONTROL_LEFT, |
| 1162 ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL), | 1162 ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL), |
| 1163 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1163 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
| 1164 ui::VKEY_F15, ui::DomCode::F15, | 1164 ui::VKEY_F15, ui::DomCode::F15, |
| 1165 ui::EF_NONE, ui::DomKey::F15)); | 1165 ui::EF_NONE, ui::DomKey::F15)); |
| 1166 // Check that Control is applied to a subsequent key press. | 1166 // Check that Control is applied to a subsequent key press. |
| 1167 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1167 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1168 ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, | 1168 ui::DomCode::US_A, ui::EF_CONTROL_DOWN, |
| 1169 ui::DomKey::Constant<'a'>::Character), | 1169 ui::DomKey::Constant<'a'>::Character), |
| 1170 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1170 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1171 ui::DomCode::KEY_A, ui::EF_NONE, | 1171 ui::DomCode::US_A, ui::EF_NONE, |
| 1172 ui::DomKey::Constant<'a'>::Character)); | 1172 ui::DomKey::Constant<'a'>::Character)); |
| 1173 // Release F15 | 1173 // Release F15 |
| 1174 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, | 1174 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, |
| 1175 ui::DomCode::CONTROL_LEFT, ui::EF_NONE, | 1175 ui::DomCode::CONTROL_LEFT, ui::EF_NONE, |
| 1176 ui::DomKey::CONTROL), | 1176 ui::DomKey::CONTROL), |
| 1177 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 1177 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
| 1178 ui::VKEY_F15, ui::DomCode::F15, | 1178 ui::VKEY_F15, ui::DomCode::F15, |
| 1179 ui::EF_NONE, ui::DomKey::F15)); | 1179 ui::EF_NONE, ui::DomKey::F15)); |
| 1180 // Check that Control is no longer applied to a subsequent key press. | 1180 // Check that Control is no longer applied to a subsequent key press. |
| 1181 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1181 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1182 ui::DomCode::KEY_A, ui::EF_NONE, | 1182 ui::DomCode::US_A, ui::EF_NONE, |
| 1183 ui::DomKey::Constant<'a'>::Character), | 1183 ui::DomKey::Constant<'a'>::Character), |
| 1184 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1184 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1185 ui::DomCode::KEY_A, ui::EF_NONE, | 1185 ui::DomCode::US_A, ui::EF_NONE, |
| 1186 ui::DomKey::Constant<'a'>::Character)); | 1186 ui::DomKey::Constant<'a'>::Character)); |
| 1187 | 1187 |
| 1188 diamond.SetValue(chromeos::input_method::kAltKey); | 1188 diamond.SetValue(chromeos::input_method::kAltKey); |
| 1189 | 1189 |
| 1190 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_MENU, | 1190 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_MENU, |
| 1191 ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, | 1191 ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, |
| 1192 ui::DomKey::ALT), | 1192 ui::DomKey::ALT), |
| 1193 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1193 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
| 1194 ui::VKEY_F15, ui::DomCode::F15, | 1194 ui::VKEY_F15, ui::DomCode::F15, |
| 1195 ui::EF_NONE, ui::DomKey::F15)); | 1195 ui::EF_NONE, ui::DomKey::F15)); |
| 1196 // Check that Alt is applied to a subsequent key press. | 1196 // Check that Alt is applied to a subsequent key press. |
| 1197 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1197 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1198 ui::DomCode::KEY_A, ui::EF_ALT_DOWN, | 1198 ui::DomCode::US_A, ui::EF_ALT_DOWN, |
| 1199 ui::DomKey::Constant<'a'>::Character), | 1199 ui::DomKey::Constant<'a'>::Character), |
| 1200 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1200 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1201 ui::DomCode::KEY_A, ui::EF_NONE, | 1201 ui::DomCode::US_A, ui::EF_NONE, |
| 1202 ui::DomKey::Constant<'a'>::Character)); | 1202 ui::DomKey::Constant<'a'>::Character)); |
| 1203 // Release F15 | 1203 // Release F15 |
| 1204 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_MENU, | 1204 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_MENU, |
| 1205 ui::DomCode::ALT_LEFT, ui::EF_NONE, | 1205 ui::DomCode::ALT_LEFT, ui::EF_NONE, |
| 1206 ui::DomKey::ALT), | 1206 ui::DomKey::ALT), |
| 1207 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 1207 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
| 1208 ui::VKEY_F15, ui::DomCode::F15, | 1208 ui::VKEY_F15, ui::DomCode::F15, |
| 1209 ui::EF_NONE, ui::DomKey::F15)); | 1209 ui::EF_NONE, ui::DomKey::F15)); |
| 1210 // Check that Alt is no longer applied to a subsequent key press. | 1210 // Check that Alt is no longer applied to a subsequent key press. |
| 1211 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1211 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1212 ui::DomCode::KEY_A, ui::EF_NONE, | 1212 ui::DomCode::US_A, ui::EF_NONE, |
| 1213 ui::DomKey::Constant<'a'>::Character), | 1213 ui::DomKey::Constant<'a'>::Character), |
| 1214 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1214 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1215 ui::DomCode::KEY_A, ui::EF_NONE, | 1215 ui::DomCode::US_A, ui::EF_NONE, |
| 1216 ui::DomKey::Constant<'a'>::Character)); | 1216 ui::DomKey::Constant<'a'>::Character)); |
| 1217 | 1217 |
| 1218 diamond.SetValue(chromeos::input_method::kCapsLockKey); | 1218 diamond.SetValue(chromeos::input_method::kCapsLockKey); |
| 1219 | 1219 |
| 1220 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, | 1220 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, |
| 1221 ui::DomCode::CAPS_LOCK, | 1221 ui::DomCode::CAPS_LOCK, |
| 1222 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1222 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
| 1223 ui::DomKey::CAPS_LOCK), | 1223 ui::DomKey::CAPS_LOCK), |
| 1224 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1224 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, |
| 1225 ui::VKEY_F15, ui::DomCode::F15, | 1225 ui::VKEY_F15, ui::DomCode::F15, |
| 1226 ui::EF_NONE, ui::DomKey::F15)); | 1226 ui::EF_NONE, ui::DomKey::F15)); |
| 1227 // Check that Caps is applied to a subsequent key press. | 1227 // Check that Caps is applied to a subsequent key press. |
| 1228 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1228 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1229 ui::DomCode::KEY_A, | 1229 ui::DomCode::US_A, |
| 1230 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1230 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
| 1231 ui::DomKey::Constant<'A'>::Character), | 1231 ui::DomKey::Constant<'A'>::Character), |
| 1232 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1232 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1233 ui::DomCode::KEY_A, ui::EF_NONE, | 1233 ui::DomCode::US_A, ui::EF_NONE, |
| 1234 ui::DomKey::Constant<'a'>::Character)); | 1234 ui::DomKey::Constant<'a'>::Character)); |
| 1235 // Release F15 | 1235 // Release F15 |
| 1236 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, | 1236 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, |
| 1237 ui::DomCode::CAPS_LOCK, ui::EF_NONE, | 1237 ui::DomCode::CAPS_LOCK, ui::EF_NONE, |
| 1238 ui::DomKey::CAPS_LOCK), | 1238 ui::DomKey::CAPS_LOCK), |
| 1239 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 1239 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, |
| 1240 ui::VKEY_F15, ui::DomCode::F15, | 1240 ui::VKEY_F15, ui::DomCode::F15, |
| 1241 ui::EF_NONE, ui::DomKey::F15)); | 1241 ui::EF_NONE, ui::DomKey::F15)); |
| 1242 // Check that Control is no longer applied to a subsequent key press. | 1242 // Check that Control is no longer applied to a subsequent key press. |
| 1243 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1243 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1244 ui::DomCode::KEY_A, ui::EF_NONE, | 1244 ui::DomCode::US_A, ui::EF_NONE, |
| 1245 ui::DomKey::Constant<'a'>::Character), | 1245 ui::DomKey::Constant<'a'>::Character), |
| 1246 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1246 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1247 ui::DomCode::KEY_A, ui::EF_NONE, | 1247 ui::DomCode::US_A, ui::EF_NONE, |
| 1248 ui::DomKey::Constant<'a'>::Character)); | 1248 ui::DomKey::Constant<'a'>::Character)); |
| 1249 | 1249 |
| 1250 *base::CommandLine::ForCurrentProcess() = original_cl; | 1250 *base::CommandLine::ForCurrentProcess() = original_cl; |
| 1251 } | 1251 } |
| 1252 | 1252 |
| 1253 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) { | 1253 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) { |
| 1254 // Remap CapsLock to Control. | 1254 // Remap CapsLock to Control. |
| 1255 syncable_prefs::TestingPrefServiceSyncable prefs; | 1255 syncable_prefs::TestingPrefServiceSyncable prefs; |
| 1256 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1256 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 1257 IntegerPrefMember control; | 1257 IntegerPrefMember control; |
| 1258 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); | 1258 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); |
| 1259 control.SetValue(chromeos::input_method::kControlKey); | 1259 control.SetValue(chromeos::input_method::kControlKey); |
| 1260 | 1260 |
| 1261 EventRewriter rewriter(NULL); | 1261 EventRewriter rewriter(NULL); |
| 1262 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1262 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1263 rewriter.set_pref_service_for_testing(&prefs); | 1263 rewriter.set_pref_service_for_testing(&prefs); |
| 1264 | 1264 |
| 1265 KeyTestCase tests[] = { | 1265 KeyTestCase tests[] = { |
| 1266 // Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. | 1266 // Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. |
| 1267 // On Chrome OS, CapsLock works as a Mod3 modifier. | 1267 // On Chrome OS, CapsLock works as a Mod3 modifier. |
| 1268 {ui::ET_KEY_PRESSED, | 1268 {ui::ET_KEY_PRESSED, |
| 1269 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_MOD3_DOWN, | 1269 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_MOD3_DOWN, |
| 1270 ui::DomKey::Constant<'a'>::Character}, | 1270 ui::DomKey::Constant<'a'>::Character}, |
| 1271 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, | 1271 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_CONTROL_DOWN, |
| 1272 ui::DomKey::Constant<'a'>::Character}}, | 1272 ui::DomKey::Constant<'a'>::Character}}, |
| 1273 | 1273 |
| 1274 // Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to | 1274 // Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to |
| 1275 // ControlMask | 1275 // ControlMask |
| 1276 {ui::ET_KEY_PRESSED, | 1276 {ui::ET_KEY_PRESSED, |
| 1277 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN | ui::EF_MOD3_DOWN, | 1277 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_CONTROL_DOWN | ui::EF_MOD3_DOWN, |
| 1278 ui::DomKey::Constant<'a'>::Character}, | 1278 ui::DomKey::Constant<'a'>::Character}, |
| 1279 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, | 1279 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_CONTROL_DOWN, |
| 1280 ui::DomKey::Constant<'a'>::Character}}, | 1280 ui::DomKey::Constant<'a'>::Character}}, |
| 1281 | 1281 |
| 1282 // Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to | 1282 // Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to |
| 1283 // ControlMask. | 1283 // ControlMask. |
| 1284 {ui::ET_KEY_PRESSED, | 1284 {ui::ET_KEY_PRESSED, |
| 1285 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN | ui::EF_MOD3_DOWN, | 1285 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN | ui::EF_MOD3_DOWN, |
| 1286 ui::DomKey::Constant<'a'>::Character}, | 1286 ui::DomKey::Constant<'a'>::Character}, |
| 1287 {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | 1287 {ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
| 1288 ui::DomKey::Constant<'a'>::Character}}, | 1288 ui::DomKey::Constant<'a'>::Character}}, |
| 1289 }; | 1289 }; |
| 1290 | 1290 |
| 1291 for (const auto& test : tests) { | 1291 for (const auto& test : tests) { |
| 1292 CheckKeyTestCase(&rewriter, test); | 1292 CheckKeyTestCase(&rewriter, test); |
| 1293 } | 1293 } |
| 1294 } | 1294 } |
| 1295 | 1295 |
| 1296 TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) { | 1296 TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) { |
| 1297 // Remap CapsLock to Control. | 1297 // Remap CapsLock to Control. |
| 1298 syncable_prefs::TestingPrefServiceSyncable prefs; | 1298 syncable_prefs::TestingPrefServiceSyncable prefs; |
| 1299 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1299 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 1300 IntegerPrefMember control; | 1300 IntegerPrefMember control; |
| 1301 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); | 1301 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); |
| 1302 control.SetValue(chromeos::input_method::kControlKey); | 1302 control.SetValue(chromeos::input_method::kControlKey); |
| 1303 | 1303 |
| 1304 EventRewriter rewriter(NULL); | 1304 EventRewriter rewriter(NULL); |
| 1305 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1305 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1306 rewriter.set_pref_service_for_testing(&prefs); | 1306 rewriter.set_pref_service_for_testing(&prefs); |
| 1307 input_method_manager_mock_->set_mod3_used(true); | 1307 input_method_manager_mock_->set_mod3_used(true); |
| 1308 | 1308 |
| 1309 // Press CapsLock+a. Confirm that Mod3Mask is NOT rewritten to ControlMask | 1309 // Press CapsLock+a. Confirm that Mod3Mask is NOT rewritten to ControlMask |
| 1310 // when Mod3Mask is already in use by the current XKB layout. | 1310 // when Mod3Mask is already in use by the current XKB layout. |
| 1311 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1311 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1312 ui::DomCode::KEY_A, ui::EF_NONE, | 1312 ui::DomCode::US_A, ui::EF_NONE, |
| 1313 ui::DomKey::Constant<'a'>::Character), | 1313 ui::DomKey::Constant<'a'>::Character), |
| 1314 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1314 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, |
| 1315 ui::DomCode::KEY_A, ui::EF_NONE, | 1315 ui::DomCode::US_A, ui::EF_NONE, |
| 1316 ui::DomKey::Constant<'a'>::Character)); | 1316 ui::DomKey::Constant<'a'>::Character)); |
| 1317 | 1317 |
| 1318 input_method_manager_mock_->set_mod3_used(false); | 1318 input_method_manager_mock_->set_mod3_used(false); |
| 1319 } | 1319 } |
| 1320 | 1320 |
| 1321 TEST_F(EventRewriterTest, TestRewriteExtendedKeys) { | 1321 TEST_F(EventRewriterTest, TestRewriteExtendedKeys) { |
| 1322 syncable_prefs::TestingPrefServiceSyncable prefs; | 1322 syncable_prefs::TestingPrefServiceSyncable prefs; |
| 1323 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1323 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
| 1324 EventRewriter rewriter(NULL); | 1324 EventRewriter rewriter(NULL); |
| 1325 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1325 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| (...skipping 975 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2301 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2301 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 2302 ui::DomKey::CONTROL); | 2302 ui::DomKey::CONTROL); |
| 2303 PopEvents(&events); | 2303 PopEvents(&events); |
| 2304 EXPECT_EQ(1u, events.size()); | 2304 EXPECT_EQ(1u, events.size()); |
| 2305 EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type()); | 2305 EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type()); |
| 2306 EXPECT_EQ(ui::VKEY_CONTROL, | 2306 EXPECT_EQ(ui::VKEY_CONTROL, |
| 2307 static_cast<ui::KeyEvent*>(events[0])->key_code()); | 2307 static_cast<ui::KeyEvent*>(events[0])->key_code()); |
| 2308 | 2308 |
| 2309 // Test key press event is correctly modified and modifier release | 2309 // Test key press event is correctly modified and modifier release |
| 2310 // event is sent. | 2310 // event is sent. |
| 2311 ui::KeyEvent press(ui::ET_KEY_PRESSED, ui::VKEY_C, ui::DomCode::KEY_C, | 2311 ui::KeyEvent press(ui::ET_KEY_PRESSED, ui::VKEY_C, ui::DomCode::US_C, |
| 2312 ui::EF_NONE, ui::DomKey::Constant<'c'>::Character, | 2312 ui::EF_NONE, ui::DomKey::Constant<'c'>::Character, |
| 2313 ui::EventTimeForNow()); | 2313 ui::EventTimeForNow()); |
| 2314 ui::EventDispatchDetails details = Send(&press); | 2314 ui::EventDispatchDetails details = Send(&press); |
| 2315 PopEvents(&events); | 2315 PopEvents(&events); |
| 2316 EXPECT_EQ(2u, events.size()); | 2316 EXPECT_EQ(2u, events.size()); |
| 2317 EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type()); | 2317 EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type()); |
| 2318 EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code()); | 2318 EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code()); |
| 2319 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); | 2319 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); |
| 2320 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); | 2320 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); |
| 2321 EXPECT_EQ(ui::VKEY_CONTROL, | 2321 EXPECT_EQ(ui::VKEY_CONTROL, |
| 2322 static_cast<ui::KeyEvent*>(events[1])->key_code()); | 2322 static_cast<ui::KeyEvent*>(events[1])->key_code()); |
| 2323 | 2323 |
| 2324 // Test key release event is not modified. | 2324 // Test key release event is not modified. |
| 2325 ui::KeyEvent release(ui::ET_KEY_RELEASED, ui::VKEY_C, ui::DomCode::KEY_C, | 2325 ui::KeyEvent release(ui::ET_KEY_RELEASED, ui::VKEY_C, ui::DomCode::US_C, |
| 2326 ui::EF_NONE, ui::DomKey::Constant<'c'>::Character, | 2326 ui::EF_NONE, ui::DomKey::Constant<'c'>::Character, |
| 2327 ui::EventTimeForNow()); | 2327 ui::EventTimeForNow()); |
| 2328 details = Send(&release); | 2328 details = Send(&release); |
| 2329 ASSERT_FALSE(details.dispatcher_destroyed); | 2329 ASSERT_FALSE(details.dispatcher_destroyed); |
| 2330 PopEvents(&events); | 2330 PopEvents(&events); |
| 2331 EXPECT_EQ(1u, events.size()); | 2331 EXPECT_EQ(1u, events.size()); |
| 2332 EXPECT_EQ(ui::ET_KEY_RELEASED, events[0]->type()); | 2332 EXPECT_EQ(ui::ET_KEY_RELEASED, events[0]->type()); |
| 2333 EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code()); | 2333 EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code()); |
| 2334 EXPECT_FALSE(events[0]->flags() & ui::EF_CONTROL_DOWN); | 2334 EXPECT_FALSE(events[0]->flags() & ui::EF_CONTROL_DOWN); |
| 2335 } | 2335 } |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2430 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2430 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 2431 | 2431 |
| 2432 // Pressing modifier key should show overlay. | 2432 // Pressing modifier key should show overlay. |
| 2433 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2433 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 2434 ui::DomKey::CONTROL); | 2434 ui::DomKey::CONTROL); |
| 2435 EXPECT_TRUE(overlay_->is_visible()); | 2435 EXPECT_TRUE(overlay_->is_visible()); |
| 2436 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 2436 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
| 2437 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2437 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 2438 | 2438 |
| 2439 // Pressing a normal key should hide overlay. | 2439 // Pressing a normal key should hide overlay. |
| 2440 SendActivateStickyKeyPattern(ui::VKEY_T, ui::DomCode::KEY_T, | 2440 SendActivateStickyKeyPattern(ui::VKEY_T, ui::DomCode::US_T, |
| 2441 ui::DomKey::Constant<'t'>::Character); | 2441 ui::DomKey::Constant<'t'>::Character); |
| 2442 EXPECT_FALSE(overlay_->is_visible()); | 2442 EXPECT_FALSE(overlay_->is_visible()); |
| 2443 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2443 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 2444 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2444 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 2445 } | 2445 } |
| 2446 | 2446 |
| 2447 TEST_F(StickyKeysOverlayTest, TwoModifiersEnabled) { | 2447 TEST_F(StickyKeysOverlayTest, TwoModifiersEnabled) { |
| 2448 EXPECT_FALSE(overlay_->is_visible()); | 2448 EXPECT_FALSE(overlay_->is_visible()); |
| 2449 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2449 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 2450 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2450 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 2451 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2451 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 2452 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2452 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
| 2453 | 2453 |
| 2454 // Pressing two modifiers should show overlay. | 2454 // Pressing two modifiers should show overlay. |
| 2455 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, | 2455 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, |
| 2456 ui::DomKey::SHIFT); | 2456 ui::DomKey::SHIFT); |
| 2457 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2457 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, |
| 2458 ui::DomKey::CONTROL); | 2458 ui::DomKey::CONTROL); |
| 2459 EXPECT_TRUE(overlay_->is_visible()); | 2459 EXPECT_TRUE(overlay_->is_visible()); |
| 2460 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 2460 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
| 2461 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2461 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
| 2462 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 2462 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
| 2463 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2463 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 2464 | 2464 |
| 2465 // Pressing a normal key should hide overlay. | 2465 // Pressing a normal key should hide overlay. |
| 2466 SendActivateStickyKeyPattern(ui::VKEY_N, ui::DomCode::KEY_N, | 2466 SendActivateStickyKeyPattern(ui::VKEY_N, ui::DomCode::US_N, |
| 2467 ui::DomKey::Constant<'n'>::Character); | 2467 ui::DomKey::Constant<'n'>::Character); |
| 2468 EXPECT_FALSE(overlay_->is_visible()); | 2468 EXPECT_FALSE(overlay_->is_visible()); |
| 2469 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2469 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 2470 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2470 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 2471 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2471 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 2472 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2472 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
| 2473 } | 2473 } |
| 2474 | 2474 |
| 2475 TEST_F(StickyKeysOverlayTest, LockedModifier) { | 2475 TEST_F(StickyKeysOverlayTest, LockedModifier) { |
| 2476 EXPECT_FALSE(overlay_->is_visible()); | 2476 EXPECT_FALSE(overlay_->is_visible()); |
| 2477 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2477 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 2478 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 2478 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
| 2479 | 2479 |
| 2480 // Pressing a modifier key twice should lock modifier and show overlay. | 2480 // Pressing a modifier key twice should lock modifier and show overlay. |
| 2481 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, | 2481 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, |
| 2482 ui::DomKey::ALT); | 2482 ui::DomKey::ALT); |
| 2483 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, | 2483 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, |
| 2484 ui::DomKey::ALT); | 2484 ui::DomKey::ALT); |
| 2485 EXPECT_TRUE(overlay_->is_visible()); | 2485 EXPECT_TRUE(overlay_->is_visible()); |
| 2486 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 2486 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
| 2487 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 2487 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
| 2488 | 2488 |
| 2489 // Pressing a normal key should not hide overlay. | 2489 // Pressing a normal key should not hide overlay. |
| 2490 SendActivateStickyKeyPattern(ui::VKEY_D, ui::DomCode::KEY_D, | 2490 SendActivateStickyKeyPattern(ui::VKEY_D, ui::DomCode::US_D, |
| 2491 ui::DomKey::Constant<'d'>::Character); | 2491 ui::DomKey::Constant<'d'>::Character); |
| 2492 EXPECT_TRUE(overlay_->is_visible()); | 2492 EXPECT_TRUE(overlay_->is_visible()); |
| 2493 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 2493 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
| 2494 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 2494 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
| 2495 } | 2495 } |
| 2496 | 2496 |
| 2497 TEST_F(StickyKeysOverlayTest, LockedAndNormalModifier) { | 2497 TEST_F(StickyKeysOverlayTest, LockedAndNormalModifier) { |
| 2498 EXPECT_FALSE(overlay_->is_visible()); | 2498 EXPECT_FALSE(overlay_->is_visible()); |
| 2499 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2499 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 2500 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2500 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 2513 // Pressing another modifier key should still show overlay. | 2513 // Pressing another modifier key should still show overlay. |
| 2514 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, | 2514 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, |
| 2515 ui::DomKey::SHIFT); | 2515 ui::DomKey::SHIFT); |
| 2516 EXPECT_TRUE(overlay_->is_visible()); | 2516 EXPECT_TRUE(overlay_->is_visible()); |
| 2517 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 2517 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
| 2518 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2518 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 2519 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 2519 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
| 2520 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2520 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
| 2521 | 2521 |
| 2522 // Pressing a normal key should not hide overlay but disable normal modifier. | 2522 // Pressing a normal key should not hide overlay but disable normal modifier. |
| 2523 SendActivateStickyKeyPattern(ui::VKEY_D, ui::DomCode::KEY_D, | 2523 SendActivateStickyKeyPattern(ui::VKEY_D, ui::DomCode::US_D, |
| 2524 ui::DomKey::Constant<'d'>::Character); | 2524 ui::DomKey::Constant<'d'>::Character); |
| 2525 EXPECT_TRUE(overlay_->is_visible()); | 2525 EXPECT_TRUE(overlay_->is_visible()); |
| 2526 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 2526 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
| 2527 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2527 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
| 2528 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2528 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
| 2529 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2529 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
| 2530 } | 2530 } |
| 2531 | 2531 |
| 2532 TEST_F(StickyKeysOverlayTest, ModifiersDisabled) { | 2532 TEST_F(StickyKeysOverlayTest, ModifiersDisabled) { |
| 2533 EXPECT_FALSE(overlay_->is_visible()); | 2533 EXPECT_FALSE(overlay_->is_visible()); |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2617 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); | 2617 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); |
| 2618 EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); | 2618 EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); |
| 2619 | 2619 |
| 2620 // Turn off AltGr and Mod3. | 2620 // Turn off AltGr and Mod3. |
| 2621 sticky_keys_controller_->SetModifiersEnabled(false, false); | 2621 sticky_keys_controller_->SetModifiersEnabled(false, false); |
| 2622 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); | 2622 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); |
| 2623 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); | 2623 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); |
| 2624 } | 2624 } |
| 2625 | 2625 |
| 2626 } // namespace chromeos | 2626 } // namespace chromeos |
| OLD | NEW |