Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(966)

Side by Side Diff: chrome/browser/chromeos/events/event_rewriter_unittest.cc

Issue 255033003: Convert sticky keys to a chromeos::EventRewriter phase. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@x354034-er
Patch Set: address review comments from sadrul Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 <X11/keysym.h>
8 #include <X11/XF86keysym.h>
9 #include <X11/Xlib.h>
10 #undef Bool
11 #undef None
12 #undef RootWindow
13
14 #include <vector> 7 #include <vector>
15 8
9 #include "ash/shell.h"
10 #include "ash/sticky_keys/sticky_keys_controller.h"
16 #include "ash/test/ash_test_base.h" 11 #include "ash/test/ash_test_base.h"
17 #include "ash/wm/window_state.h" 12 #include "ash/wm/window_state.h"
18 #include "base/basictypes.h" 13 #include "base/basictypes.h"
19 #include "base/command_line.h" 14 #include "base/command_line.h"
20 #include "base/prefs/pref_member.h" 15 #include "base/prefs/pref_member.h"
21 #include "base/strings/stringprintf.h" 16 #include "base/strings/stringprintf.h"
22 #include "chrome/browser/chromeos/input_method/input_method_configuration.h" 17 #include "chrome/browser/chromeos/input_method/input_method_configuration.h"
23 #include "chrome/browser/chromeos/input_method/mock_input_method_manager.h" 18 #include "chrome/browser/chromeos/input_method/mock_input_method_manager.h"
24 #include "chrome/browser/chromeos/login/users/mock_user_manager.h" 19 #include "chrome/browser/chromeos/login/users/mock_user_manager.h"
25 #include "chrome/browser/chromeos/login/users/user_manager.h" 20 #include "chrome/browser/chromeos/login/users/user_manager.h"
26 #include "chrome/browser/chromeos/preferences.h" 21 #include "chrome/browser/chromeos/preferences.h"
27 #include "chrome/common/pref_names.h" 22 #include "chrome/common/pref_names.h"
28 #include "chrome/test/base/testing_pref_service_syncable.h" 23 #include "chrome/test/base/testing_pref_service_syncable.h"
29 #include "chromeos/chromeos_switches.h" 24 #include "chromeos/chromeos_switches.h"
30 #include "chromeos/ime/fake_ime_keyboard.h" 25 #include "chromeos/ime/fake_ime_keyboard.h"
31 #include "testing/gtest/include/gtest/gtest.h" 26 #include "testing/gtest/include/gtest/gtest.h"
32 #include "ui/aura/window.h" 27 #include "ui/aura/window.h"
33 #include "ui/events/event.h" 28 #include "ui/events/event.h"
34 #include "ui/events/event_rewriter.h" 29 #include "ui/events/event_rewriter.h"
30 #include "ui/events/test/test_event_processor.h"
31
32 #if defined(USE_X11)
33 #include <X11/keysym.h>
34
35 #include "ui/events/test/events_test_utils_x11.h" 35 #include "ui/events/test/events_test_utils_x11.h"
36 #include "ui/events/x/touch_factory_x11.h" 36 #include "ui/events/x/touch_factory_x11.h"
37 #include "ui/gfx/x/x11_types.h" 37 #include "ui/gfx/x/x11_types.h"
38 #endif
38 39
39 namespace { 40 namespace {
40 41
42 // The device id of the test touchpad device.
43 const unsigned int kTouchPadDeviceId = 1;
44
41 std::string GetExpectedResultAsString(ui::KeyboardCode ui_keycode, 45 std::string GetExpectedResultAsString(ui::KeyboardCode ui_keycode,
42 int ui_flags, 46 int ui_flags,
43 ui::EventType ui_type) { 47 ui::EventType ui_type) {
44 return base::StringPrintf("ui_keycode=0x%X ui_flags=0x%X ui_type=%d", 48 return base::StringPrintf("ui_keycode=0x%X ui_flags=0x%X ui_type=%d",
45 ui_keycode, 49 ui_keycode,
46 ui_flags & ~ui::EF_IS_REPEAT, 50 ui_flags & ~ui::EF_IS_REPEAT,
47 ui_type); 51 ui_type);
48 } 52 }
49 53
50 std::string GetKeyEventAsString(const ui::KeyEvent& keyevent) { 54 std::string GetKeyEventAsString(const ui::KeyEvent& keyevent) {
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 #endif 189 #endif
186 } 190 }
187 191
188 } // namespace 192 } // namespace
189 193
190 namespace chromeos { 194 namespace chromeos {
191 195
192 class EventRewriterTest : public ash::test::AshTestBase { 196 class EventRewriterTest : public ash::test::AshTestBase {
193 public: 197 public:
194 EventRewriterTest() 198 EventRewriterTest()
195 : display_(gfx::GetXDisplay()), 199 : mock_user_manager_(new chromeos::MockUserManager),
196 mock_user_manager_(new chromeos::MockUserManager),
197 user_manager_enabler_(mock_user_manager_), 200 user_manager_enabler_(mock_user_manager_),
198 input_method_manager_mock_(NULL) {} 201 input_method_manager_mock_(NULL) {}
199 virtual ~EventRewriterTest() {} 202 virtual ~EventRewriterTest() {}
200 203
201 virtual void SetUp() { 204 virtual void SetUp() {
202 // Mocking user manager because the real one needs to be called on UI thread 205 // Mocking user manager because the real one needs to be called on UI thread
203 EXPECT_CALL(*mock_user_manager_, IsLoggedInAsGuest()) 206 EXPECT_CALL(*mock_user_manager_, IsLoggedInAsGuest())
204 .WillRepeatedly(testing::Return(false)); 207 .WillRepeatedly(testing::Return(false));
205 input_method_manager_mock_ = 208 input_method_manager_mock_ =
206 new chromeos::input_method::MockInputMethodManager; 209 new chromeos::input_method::MockInputMethodManager;
(...skipping 13 matching lines...) Expand all
220 void TestRewriteNumPadKeys(); 223 void TestRewriteNumPadKeys();
221 void TestRewriteNumPadKeysOnAppleKeyboard(); 224 void TestRewriteNumPadKeysOnAppleKeyboard();
222 225
223 int RewriteMouseEvent(chromeos::EventRewriter* rewriter, 226 int RewriteMouseEvent(chromeos::EventRewriter* rewriter,
224 const ui::MouseEvent& event) { 227 const ui::MouseEvent& event) {
225 int flags = event.flags(); 228 int flags = event.flags();
226 rewriter->RewriteLocatedEventForTesting(event, &flags); 229 rewriter->RewriteLocatedEventForTesting(event, &flags);
227 return flags; 230 return flags;
228 } 231 }
229 232
230 Display* display_;
231 chromeos::MockUserManager* mock_user_manager_; // Not owned. 233 chromeos::MockUserManager* mock_user_manager_; // Not owned.
232 chromeos::ScopedUserManagerEnabler user_manager_enabler_; 234 chromeos::ScopedUserManagerEnabler user_manager_enabler_;
233 chromeos::input_method::MockInputMethodManager* input_method_manager_mock_; 235 chromeos::input_method::MockInputMethodManager* input_method_manager_mock_;
234 }; 236 };
235 237
236 TEST_F(EventRewriterTest, TestRewriteCommandToControl) { 238 TEST_F(EventRewriterTest, TestRewriteCommandToControl) {
237 // First, test with a PC keyboard. 239 // First, test with a PC keyboard.
238 TestingPrefServiceSyncable prefs; 240 TestingPrefServiceSyncable prefs;
239 EventRewriter rewriter; 241 EventRewriter rewriter(NULL);
240 rewriter.DeviceAddedForTesting(0, "PC Keyboard"); 242 rewriter.DeviceAddedForTesting(0, "PC Keyboard");
241 rewriter.set_last_device_id_for_testing(0); 243 rewriter.set_last_device_id_for_testing(0);
242 rewriter.set_pref_service_for_testing(&prefs); 244 rewriter.set_pref_service_for_testing(&prefs);
243 245
244 KeyTestCase pc_keyboard_tests[] = { 246 KeyTestCase pc_keyboard_tests[] = {
245 // VKEY_A, Alt modifier. 247 // VKEY_A, Alt modifier.
246 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 248 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
247 {ui::VKEY_A, ui::EF_ALT_DOWN}, 249 {ui::VKEY_A, ui::EF_ALT_DOWN},
248 {ui::VKEY_A, ui::EF_ALT_DOWN}}, 250 {ui::VKEY_A, ui::EF_ALT_DOWN}},
249 251
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 312
311 // For crbug.com/133896. 313 // For crbug.com/133896.
312 TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) { 314 TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) {
313 // Remap Control to Alt. 315 // Remap Control to Alt.
314 TestingPrefServiceSyncable prefs; 316 TestingPrefServiceSyncable prefs;
315 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 317 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
316 IntegerPrefMember control; 318 IntegerPrefMember control;
317 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); 319 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
318 control.SetValue(chromeos::input_method::kAltKey); 320 control.SetValue(chromeos::input_method::kAltKey);
319 321
320 EventRewriter rewriter; 322 EventRewriter rewriter(NULL);
321 rewriter.set_pref_service_for_testing(&prefs); 323 rewriter.set_pref_service_for_testing(&prefs);
322 rewriter.DeviceAddedForTesting(0, "PC Keyboard"); 324 rewriter.DeviceAddedForTesting(0, "PC Keyboard");
323 rewriter.set_last_device_id_for_testing(0); 325 rewriter.set_last_device_id_for_testing(0);
324 326
325 KeyTestCase pc_keyboard_tests[] = {// Control should be remapped to Alt. 327 KeyTestCase pc_keyboard_tests[] = {// Control should be remapped to Alt.
326 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 328 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
327 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}, 329 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN},
328 {ui::VKEY_MENU, ui::EF_ALT_DOWN}}, 330 {ui::VKEY_MENU, ui::EF_ALT_DOWN}},
329 }; 331 };
330 332
(...skipping 19 matching lines...) Expand all
350 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}}, 352 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}},
351 }; 353 };
352 354
353 for (size_t i = 0; i < arraysize(apple_keyboard_tests); ++i) { 355 for (size_t i = 0; i < arraysize(apple_keyboard_tests); ++i) {
354 CheckKeyTestCase(2000 + i, &rewriter, apple_keyboard_tests[i]); 356 CheckKeyTestCase(2000 + i, &rewriter, apple_keyboard_tests[i]);
355 } 357 }
356 } 358 }
357 359
358 void EventRewriterTest::TestRewriteNumPadKeys() { 360 void EventRewriterTest::TestRewriteNumPadKeys() {
359 TestingPrefServiceSyncable prefs; 361 TestingPrefServiceSyncable prefs;
360 EventRewriter rewriter; 362 EventRewriter rewriter(NULL);
361 rewriter.set_pref_service_for_testing(&prefs); 363 rewriter.set_pref_service_for_testing(&prefs);
362 364
363 KeyTestCase tests[] = { 365 KeyTestCase tests[] = {
364 // XK_KP_Insert (= NumPad 0 without Num Lock), no modifier. 366 // XK_KP_Insert (= NumPad 0 without Num Lock), no modifier.
365 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 367 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
366 {ui::VKEY_INSERT, ui::EF_NUMPAD_KEY}, 368 {ui::VKEY_INSERT, ui::EF_NUMPAD_KEY},
367 {ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY}}, 369 {ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY}},
368 370
369 // XK_KP_Insert (= NumPad 0 without Num Lock), Alt modifier. 371 // XK_KP_Insert (= NumPad 0 without Num Lock), Alt modifier.
370 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 372 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 CommandLine::ForCurrentProcess()->AppendSwitchASCII( 494 CommandLine::ForCurrentProcess()->AppendSwitchASCII(
493 chromeos::switches::kHasChromeOSDiamondKey, ""); 495 chromeos::switches::kHasChromeOSDiamondKey, "");
494 496
495 TestRewriteNumPadKeys(); 497 TestRewriteNumPadKeys();
496 *CommandLine::ForCurrentProcess() = original_cl; 498 *CommandLine::ForCurrentProcess() = original_cl;
497 } 499 }
498 500
499 // Tests if the rewriter can handle a Command + Num Pad event. 501 // Tests if the rewriter can handle a Command + Num Pad event.
500 void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() { 502 void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() {
501 TestingPrefServiceSyncable prefs; 503 TestingPrefServiceSyncable prefs;
502 EventRewriter rewriter; 504 EventRewriter rewriter(NULL);
503 rewriter.DeviceAddedForTesting(0, "Apple Keyboard"); 505 rewriter.DeviceAddedForTesting(0, "Apple Keyboard");
504 rewriter.set_last_device_id_for_testing(0); 506 rewriter.set_last_device_id_for_testing(0);
505 rewriter.set_pref_service_for_testing(&prefs); 507 rewriter.set_pref_service_for_testing(&prefs);
506 508
507 KeyTestCase tests[] = { 509 KeyTestCase tests[] = {
508 // XK_KP_End (= NumPad 1 without Num Lock), Win modifier. 510 // XK_KP_End (= NumPad 1 without Num Lock), Win modifier.
509 // The result should be "Num Pad 1 with Control + Num Lock modifiers". 511 // The result should be "Num Pad 1 with Control + Num Lock modifiers".
510 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, 512 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
511 {ui::VKEY_END, ui::EF_COMMAND_DOWN | ui::EF_NUMPAD_KEY}, 513 {ui::VKEY_END, ui::EF_COMMAND_DOWN | ui::EF_NUMPAD_KEY},
512 {ui::VKEY_NUMPAD1, ui::EF_CONTROL_DOWN | ui::EF_NUMPAD_KEY}}, 514 {ui::VKEY_NUMPAD1, ui::EF_CONTROL_DOWN | ui::EF_NUMPAD_KEY}},
(...skipping 21 matching lines...) Expand all
534 const CommandLine original_cl(*CommandLine::ForCurrentProcess()); 536 const CommandLine original_cl(*CommandLine::ForCurrentProcess());
535 CommandLine::ForCurrentProcess()->AppendSwitchASCII( 537 CommandLine::ForCurrentProcess()->AppendSwitchASCII(
536 chromeos::switches::kHasChromeOSDiamondKey, ""); 538 chromeos::switches::kHasChromeOSDiamondKey, "");
537 539
538 TestRewriteNumPadKeysOnAppleKeyboard(); 540 TestRewriteNumPadKeysOnAppleKeyboard();
539 *CommandLine::ForCurrentProcess() = original_cl; 541 *CommandLine::ForCurrentProcess() = original_cl;
540 } 542 }
541 543
542 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) { 544 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) {
543 TestingPrefServiceSyncable prefs; 545 TestingPrefServiceSyncable prefs;
544 EventRewriter rewriter; 546 EventRewriter rewriter(NULL);
545 rewriter.set_pref_service_for_testing(&prefs); 547 rewriter.set_pref_service_for_testing(&prefs);
546 548
547 KeyTestCase tests[] = { 549 KeyTestCase tests[] = {
548 // Press Search. Confirm the event is not rewritten. 550 // Press Search. Confirm the event is not rewritten.
549 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 551 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
550 {ui::VKEY_LWIN, ui::EF_NONE}, 552 {ui::VKEY_LWIN, ui::EF_NONE},
551 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}}, 553 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}},
552 554
553 // Press left Control. Confirm the event is not rewritten. 555 // Press left Control. Confirm the event is not rewritten.
554 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 556 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
(...skipping 22 matching lines...) Expand all
577 {ui::VKEY_LWIN, ui::EF_NONE}}, 579 {ui::VKEY_LWIN, ui::EF_NONE}},
578 }; 580 };
579 581
580 for (size_t i = 0; i < arraysize(tests); ++i) { 582 for (size_t i = 0; i < arraysize(tests); ++i) {
581 CheckKeyTestCase(1000 + i, &rewriter, tests[i]); 583 CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
582 } 584 }
583 } 585 }
584 586
585 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) { 587 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) {
586 TestingPrefServiceSyncable prefs; 588 TestingPrefServiceSyncable prefs;
587 EventRewriter rewriter; 589 EventRewriter rewriter(NULL);
588 rewriter.set_pref_service_for_testing(&prefs); 590 rewriter.set_pref_service_for_testing(&prefs);
589 591
590 KeyTestCase tests[] = { 592 KeyTestCase tests[] = {
591 // Press Alt with Shift. Confirm the event is not rewritten. 593 // Press Alt with Shift. Confirm the event is not rewritten.
592 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 594 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
593 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}, 595 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN},
594 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}}, 596 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}},
595 597
596 // Press Search with Caps Lock mask. Confirm the event is not rewritten. 598 // Press Search with Caps Lock mask. Confirm the event is not rewritten.
597 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 599 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
(...skipping 22 matching lines...) Expand all
620 // Disable Search and Control keys. 622 // Disable Search and Control keys.
621 TestingPrefServiceSyncable prefs; 623 TestingPrefServiceSyncable prefs;
622 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 624 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
623 IntegerPrefMember search; 625 IntegerPrefMember search;
624 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); 626 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs);
625 search.SetValue(chromeos::input_method::kVoidKey); 627 search.SetValue(chromeos::input_method::kVoidKey);
626 IntegerPrefMember control; 628 IntegerPrefMember control;
627 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); 629 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
628 control.SetValue(chromeos::input_method::kVoidKey); 630 control.SetValue(chromeos::input_method::kVoidKey);
629 631
630 EventRewriter rewriter; 632 EventRewriter rewriter(NULL);
631 rewriter.set_pref_service_for_testing(&prefs); 633 rewriter.set_pref_service_for_testing(&prefs);
632 634
633 KeyTestCase disabled_modifier_tests[] = { 635 KeyTestCase disabled_modifier_tests[] = {
634 // Press Alt with Shift. This key press shouldn't be affected by the 636 // Press Alt with Shift. This key press shouldn't be affected by the
635 // pref. Confirm the event is not rewritten. 637 // pref. Confirm the event is not rewritten.
636 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 638 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
637 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}, 639 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN},
638 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}}, 640 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}},
639 641
640 // Press Search. Confirm the event is now VKEY_UNKNOWN. 642 // Press Search. Confirm the event is now VKEY_UNKNOWN.
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 } 697 }
696 698
697 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) { 699 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) {
698 // Remap Search to Control. 700 // Remap Search to Control.
699 TestingPrefServiceSyncable prefs; 701 TestingPrefServiceSyncable prefs;
700 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 702 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
701 IntegerPrefMember search; 703 IntegerPrefMember search;
702 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); 704 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs);
703 search.SetValue(chromeos::input_method::kControlKey); 705 search.SetValue(chromeos::input_method::kControlKey);
704 706
705 EventRewriter rewriter; 707 EventRewriter rewriter(NULL);
706 rewriter.set_pref_service_for_testing(&prefs); 708 rewriter.set_pref_service_for_testing(&prefs);
707 709
708 KeyTestCase s_tests[] = { 710 KeyTestCase s_tests[] = {
709 // Press Search. Confirm the event is now VKEY_CONTROL. 711 // Press Search. Confirm the event is now VKEY_CONTROL.
710 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 712 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
711 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}, 713 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN},
712 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, 714 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}},
713 }; 715 };
714 716
715 for (size_t i = 0; i < arraysize(s_tests); ++i) { 717 for (size_t i = 0; i < arraysize(s_tests); ++i) {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
759 } 761 }
760 762
761 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) { 763 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) {
762 // Remap Search to ESC. 764 // Remap Search to ESC.
763 TestingPrefServiceSyncable prefs; 765 TestingPrefServiceSyncable prefs;
764 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 766 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
765 IntegerPrefMember search; 767 IntegerPrefMember search;
766 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); 768 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs);
767 search.SetValue(chromeos::input_method::kEscapeKey); 769 search.SetValue(chromeos::input_method::kEscapeKey);
768 770
769 EventRewriter rewriter; 771 EventRewriter rewriter(NULL);
770 rewriter.set_pref_service_for_testing(&prefs); 772 rewriter.set_pref_service_for_testing(&prefs);
771 773
772 KeyTestCase tests[] = {// Press Search. Confirm the event is now VKEY_ESCAPE. 774 KeyTestCase tests[] = {// Press Search. Confirm the event is now VKEY_ESCAPE.
773 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 775 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
774 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}, 776 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN},
775 {ui::VKEY_ESCAPE, ui::EF_NONE}}, 777 {ui::VKEY_ESCAPE, ui::EF_NONE}},
776 }; 778 };
777 779
778 for (size_t i = 0; i < arraysize(tests); ++i) { 780 for (size_t i = 0; i < arraysize(tests); ++i) {
779 CheckKeyTestCase(1000 + i, &rewriter, tests[i]); 781 CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
780 } 782 }
781 } 783 }
782 784
783 TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) { 785 TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) {
784 // Remap Search to Alt. 786 // Remap Search to Alt.
785 TestingPrefServiceSyncable prefs; 787 TestingPrefServiceSyncable prefs;
786 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 788 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
787 IntegerPrefMember search; 789 IntegerPrefMember search;
788 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); 790 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs);
789 search.SetValue(chromeos::input_method::kAltKey); 791 search.SetValue(chromeos::input_method::kAltKey);
790 792
791 EventRewriter rewriter; 793 EventRewriter rewriter(NULL);
792 rewriter.set_pref_service_for_testing(&prefs); 794 rewriter.set_pref_service_for_testing(&prefs);
793 795
794 KeyTestCase s2a_tests[] = { 796 KeyTestCase s2a_tests[] = {
795 // Press Search. Confirm the event is now VKEY_MENU. 797 // Press Search. Confirm the event is now VKEY_MENU.
796 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 798 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
797 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}, 799 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN},
798 {ui::VKEY_MENU, ui::EF_ALT_DOWN}}, 800 {ui::VKEY_MENU, ui::EF_ALT_DOWN}},
799 }; 801 };
800 802
801 for (size_t i = 0; i < arraysize(s2a_tests); ++i) { 803 for (size_t i = 0; i < arraysize(s2a_tests); ++i) {
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
858 860
859 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) { 861 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) {
860 // Remap Search to Caps Lock. 862 // Remap Search to Caps Lock.
861 TestingPrefServiceSyncable prefs; 863 TestingPrefServiceSyncable prefs;
862 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 864 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
863 IntegerPrefMember search; 865 IntegerPrefMember search;
864 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); 866 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs);
865 search.SetValue(chromeos::input_method::kCapsLockKey); 867 search.SetValue(chromeos::input_method::kCapsLockKey);
866 868
867 chromeos::input_method::FakeImeKeyboard ime_keyboard; 869 chromeos::input_method::FakeImeKeyboard ime_keyboard;
868 EventRewriter rewriter; 870 EventRewriter rewriter(NULL);
869 rewriter.set_pref_service_for_testing(&prefs); 871 rewriter.set_pref_service_for_testing(&prefs);
870 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); 872 rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
871 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); 873 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_);
872 874
873 // Press Search. 875 // Press Search.
874 EXPECT_EQ( 876 EXPECT_EQ(
875 GetExpectedResultAsString(ui::VKEY_CAPITAL, 877 GetExpectedResultAsString(ui::VKEY_CAPITAL,
876 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, 878 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN,
877 ui::ET_KEY_PRESSED), 879 ui::ET_KEY_PRESSED),
878 GetRewrittenEventAsString( 880 GetRewrittenEventAsString(
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
928 GetRewrittenEventAsString( 930 GetRewrittenEventAsString(
929 &rewriter, ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED)); 931 &rewriter, ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED));
930 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); 932 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_);
931 } 933 }
932 934
933 TEST_F(EventRewriterTest, TestRewriteCapsLock) { 935 TEST_F(EventRewriterTest, TestRewriteCapsLock) {
934 TestingPrefServiceSyncable prefs; 936 TestingPrefServiceSyncable prefs;
935 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 937 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
936 938
937 chromeos::input_method::FakeImeKeyboard ime_keyboard; 939 chromeos::input_method::FakeImeKeyboard ime_keyboard;
938 EventRewriter rewriter; 940 EventRewriter rewriter(NULL);
939 rewriter.set_pref_service_for_testing(&prefs); 941 rewriter.set_pref_service_for_testing(&prefs);
940 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); 942 rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
941 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); 943 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_);
942 944
943 // On Chrome OS, CapsLock is mapped to F16 with Mod3Mask. 945 // On Chrome OS, CapsLock is mapped to F16 with Mod3Mask.
944 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, 946 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL,
945 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, 947 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN,
946 ui::ET_KEY_PRESSED), 948 ui::ET_KEY_PRESSED),
947 GetRewrittenEventAsString( 949 GetRewrittenEventAsString(
948 &rewriter, ui::VKEY_F16, ui::EF_MOD3_DOWN, ui::ET_KEY_PRESSED)); 950 &rewriter, ui::VKEY_F16, ui::EF_MOD3_DOWN, ui::ET_KEY_PRESSED));
949 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); 951 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_);
950 } 952 }
951 953
952 TEST_F(EventRewriterTest, TestRewriteDiamondKey) { 954 TEST_F(EventRewriterTest, TestRewriteDiamondKey) {
953 TestingPrefServiceSyncable prefs; 955 TestingPrefServiceSyncable prefs;
954 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 956 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
955 957
956 chromeos::input_method::FakeImeKeyboard ime_keyboard; 958 chromeos::input_method::FakeImeKeyboard ime_keyboard;
957 EventRewriter rewriter; 959 EventRewriter rewriter(NULL);
958 rewriter.set_pref_service_for_testing(&prefs); 960 rewriter.set_pref_service_for_testing(&prefs);
959 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); 961 rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
960 962
961 KeyTestCase tests[] = { 963 KeyTestCase tests[] = {
962 // F15 should work as Ctrl when --has-chromeos-diamond-key is not 964 // F15 should work as Ctrl when --has-chromeos-diamond-key is not
963 // specified. 965 // specified.
964 {KeyTestCase::TEST_VKEY, 966 {KeyTestCase::TEST_VKEY,
965 ui::ET_KEY_PRESSED, 967 ui::ET_KEY_PRESSED,
966 {ui::VKEY_F15, ui::EF_NONE}, 968 {ui::VKEY_F15, ui::EF_NONE},
967 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, 969 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}},
(...skipping 12 matching lines...) Expand all
980 } 982 }
981 TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) { 983 TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) {
982 const CommandLine original_cl(*CommandLine::ForCurrentProcess()); 984 const CommandLine original_cl(*CommandLine::ForCurrentProcess());
983 CommandLine::ForCurrentProcess()->AppendSwitchASCII( 985 CommandLine::ForCurrentProcess()->AppendSwitchASCII(
984 chromeos::switches::kHasChromeOSDiamondKey, ""); 986 chromeos::switches::kHasChromeOSDiamondKey, "");
985 987
986 TestingPrefServiceSyncable prefs; 988 TestingPrefServiceSyncable prefs;
987 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 989 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
988 990
989 chromeos::input_method::FakeImeKeyboard ime_keyboard; 991 chromeos::input_method::FakeImeKeyboard ime_keyboard;
990 EventRewriter rewriter; 992 EventRewriter rewriter(NULL);
991 rewriter.set_pref_service_for_testing(&prefs); 993 rewriter.set_pref_service_for_testing(&prefs);
992 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); 994 rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
993 995
994 // By default, F15 should work as Control. 996 // By default, F15 should work as Control.
995 EXPECT_EQ(GetExpectedResultAsString( 997 EXPECT_EQ(GetExpectedResultAsString(
996 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), 998 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED),
997 GetRewrittenEventAsString( 999 GetRewrittenEventAsString(
998 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); 1000 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED));
999 1001
1000 IntegerPrefMember diamond; 1002 IntegerPrefMember diamond;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1032 } 1034 }
1033 1035
1034 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) { 1036 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) {
1035 // Remap CapsLock to Control. 1037 // Remap CapsLock to Control.
1036 TestingPrefServiceSyncable prefs; 1038 TestingPrefServiceSyncable prefs;
1037 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 1039 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
1038 IntegerPrefMember control; 1040 IntegerPrefMember control;
1039 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); 1041 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs);
1040 control.SetValue(chromeos::input_method::kControlKey); 1042 control.SetValue(chromeos::input_method::kControlKey);
1041 1043
1042 EventRewriter rewriter; 1044 EventRewriter rewriter(NULL);
1043 rewriter.set_pref_service_for_testing(&prefs); 1045 rewriter.set_pref_service_for_testing(&prefs);
1044 1046
1045 KeyTestCase tests[] = { 1047 KeyTestCase tests[] = {
1046 // Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. 1048 // Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask.
1047 // On Chrome OS, CapsLock works as a Mod3 modifier. 1049 // On Chrome OS, CapsLock works as a Mod3 modifier.
1048 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1050 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
1049 {ui::VKEY_A, ui::EF_MOD3_DOWN}, 1051 {ui::VKEY_A, ui::EF_MOD3_DOWN},
1050 {ui::VKEY_A, ui::EF_CONTROL_DOWN}}, 1052 {ui::VKEY_A, ui::EF_CONTROL_DOWN}},
1051 1053
1052 // Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to 1054 // Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to
(...skipping 15 matching lines...) Expand all
1068 } 1070 }
1069 1071
1070 TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) { 1072 TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) {
1071 // Remap CapsLock to Control. 1073 // Remap CapsLock to Control.
1072 TestingPrefServiceSyncable prefs; 1074 TestingPrefServiceSyncable prefs;
1073 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 1075 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
1074 IntegerPrefMember control; 1076 IntegerPrefMember control;
1075 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); 1077 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs);
1076 control.SetValue(chromeos::input_method::kControlKey); 1078 control.SetValue(chromeos::input_method::kControlKey);
1077 1079
1078 EventRewriter rewriter; 1080 EventRewriter rewriter(NULL);
1079 rewriter.set_pref_service_for_testing(&prefs); 1081 rewriter.set_pref_service_for_testing(&prefs);
1080 input_method_manager_mock_->set_mod3_used(true); 1082 input_method_manager_mock_->set_mod3_used(true);
1081 1083
1082 // Press CapsLock+a. Confirm that Mod3Mask is NOT rewritten to ControlMask 1084 // Press CapsLock+a. Confirm that Mod3Mask is NOT rewritten to ControlMask
1083 // when Mod3Mask is already in use by the current XKB layout. 1085 // when Mod3Mask is already in use by the current XKB layout.
1084 EXPECT_EQ( 1086 EXPECT_EQ(
1085 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), 1087 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED),
1086 GetRewrittenEventAsString( 1088 GetRewrittenEventAsString(
1087 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); 1089 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED));
1088 1090
1089 input_method_manager_mock_->set_mod3_used(false); 1091 input_method_manager_mock_->set_mod3_used(false);
1090 } 1092 }
1091 1093
1092 TEST_F(EventRewriterTest, TestRewriteExtendedKeys) { 1094 TEST_F(EventRewriterTest, TestRewriteExtendedKeys) {
1093 TestingPrefServiceSyncable prefs; 1095 TestingPrefServiceSyncable prefs;
1094 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 1096 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
1095 EventRewriter rewriter; 1097 EventRewriter rewriter(NULL);
1096 rewriter.DeviceAddedForTesting(0, "PC Keyboard"); 1098 rewriter.DeviceAddedForTesting(0, "PC Keyboard");
1097 rewriter.set_last_device_id_for_testing(0); 1099 rewriter.set_last_device_id_for_testing(0);
1098 rewriter.set_pref_service_for_testing(&prefs); 1100 rewriter.set_pref_service_for_testing(&prefs);
1099 1101
1100 KeyTestCase tests[] = { 1102 KeyTestCase tests[] = {
1101 // Alt+Backspace -> Delete 1103 // Alt+Backspace -> Delete
1102 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1104 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
1103 {ui::VKEY_BACK, ui::EF_ALT_DOWN}, 1105 {ui::VKEY_BACK, ui::EF_ALT_DOWN},
1104 {ui::VKEY_DELETE, ui::EF_NONE}}, 1106 {ui::VKEY_DELETE, ui::EF_NONE}},
1105 // Control+Alt+Backspace -> Control+Delete 1107 // Control+Alt+Backspace -> Control+Delete
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
1194 {ui::VKEY_INSERT, ui::EF_CONTROL_DOWN}}}; 1196 {ui::VKEY_INSERT, ui::EF_CONTROL_DOWN}}};
1195 1197
1196 for (size_t i = 0; i < arraysize(tests); ++i) { 1198 for (size_t i = 0; i < arraysize(tests); ++i) {
1197 CheckKeyTestCase(1000 + i, &rewriter, tests[i]); 1199 CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
1198 } 1200 }
1199 } 1201 }
1200 1202
1201 TEST_F(EventRewriterTest, TestRewriteFunctionKeys) { 1203 TEST_F(EventRewriterTest, TestRewriteFunctionKeys) {
1202 TestingPrefServiceSyncable prefs; 1204 TestingPrefServiceSyncable prefs;
1203 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 1205 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
1204 EventRewriter rewriter; 1206 EventRewriter rewriter(NULL);
1205 rewriter.set_pref_service_for_testing(&prefs); 1207 rewriter.set_pref_service_for_testing(&prefs);
1206 1208
1207 FunctionKeyTestCase tests[] = { 1209 FunctionKeyTestCase tests[] = {
1208 // F1 -> Back 1210 // F1 -> Back
1209 {ui::ET_KEY_PRESSED, 1211 {ui::ET_KEY_PRESSED,
1210 {ui::VKEY_F1, ui::EF_NONE}, 1212 {ui::VKEY_F1, ui::EF_NONE},
1211 {ui::VKEY_BROWSER_BACK, ui::EF_NONE}, 1213 {ui::VKEY_BROWSER_BACK, ui::EF_NONE},
1212 {ui::VKEY_BROWSER_BACK, ui::EF_FUNCTION_KEY}}, 1214 {ui::VKEY_BROWSER_BACK, ui::EF_FUNCTION_KEY}},
1213 {ui::ET_KEY_PRESSED, 1215 {ui::ET_KEY_PRESSED,
1214 {ui::VKEY_F1, ui::EF_CONTROL_DOWN}, 1216 {ui::VKEY_F1, ui::EF_CONTROL_DOWN},
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
1522 TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) { 1524 TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) {
1523 const CommandLine original_cl(*CommandLine::ForCurrentProcess()); 1525 const CommandLine original_cl(*CommandLine::ForCurrentProcess());
1524 1526
1525 // Remap Search to Control. 1527 // Remap Search to Control.
1526 TestingPrefServiceSyncable prefs; 1528 TestingPrefServiceSyncable prefs;
1527 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 1529 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
1528 IntegerPrefMember search; 1530 IntegerPrefMember search;
1529 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); 1531 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs);
1530 search.SetValue(chromeos::input_method::kControlKey); 1532 search.SetValue(chromeos::input_method::kControlKey);
1531 1533
1532 EventRewriter rewriter; 1534 EventRewriter rewriter(NULL);
1533 rewriter.set_pref_service_for_testing(&prefs); 1535 rewriter.set_pref_service_for_testing(&prefs);
1534 1536
1535 CommandLine::ForCurrentProcess()->AppendSwitchASCII( 1537 CommandLine::ForCurrentProcess()->AppendSwitchASCII(
1536 chromeos::switches::kHasChromeOSKeyboard, ""); 1538 chromeos::switches::kHasChromeOSKeyboard, "");
1537 1539
1538 KeyTestCase tests[] = { 1540 KeyTestCase tests[] = {
1539 // Alt+Search+Down -> End 1541 // Alt+Search+Down -> End
1540 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1542 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
1541 {ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, 1543 {ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN},
1542 {ui::VKEY_END, ui::EF_NONE}}, 1544 {ui::VKEY_END, ui::EF_NONE}},
1543 1545
1544 // Shift+Alt+Search+Down -> Shift+End 1546 // Shift+Alt+Search+Down -> Shift+End
1545 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, 1547 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
1546 {ui::VKEY_DOWN, 1548 {ui::VKEY_DOWN,
1547 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, 1549 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN},
1548 {ui::VKEY_END, ui::EF_SHIFT_DOWN}}, 1550 {ui::VKEY_END, ui::EF_SHIFT_DOWN}},
1549 }; 1551 };
1550 1552
1551 for (size_t i = 0; i < arraysize(tests); ++i) { 1553 for (size_t i = 0; i < arraysize(tests); ++i) {
1552 CheckKeyTestCase(1000 + i, &rewriter, tests[i]); 1554 CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
1553 } 1555 }
1554 1556
1555 *CommandLine::ForCurrentProcess() = original_cl; 1557 *CommandLine::ForCurrentProcess() = original_cl;
1556 } 1558 }
1557 1559
1558 TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) { 1560 TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) {
1561 #if defined(USE_X11)
1562 // TODO(kpschoedel): pending alternative to xevent.xany.send_event
1559 // Remap Control to Alt. 1563 // Remap Control to Alt.
1560 TestingPrefServiceSyncable prefs; 1564 TestingPrefServiceSyncable prefs;
1561 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 1565 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
1562 IntegerPrefMember control; 1566 IntegerPrefMember control;
1563 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); 1567 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
1564 control.SetValue(chromeos::input_method::kAltKey); 1568 control.SetValue(chromeos::input_method::kAltKey);
1565 1569
1566 EventRewriter rewriter; 1570 EventRewriter rewriter(NULL);
1567 rewriter.set_pref_service_for_testing(&prefs); 1571 rewriter.set_pref_service_for_testing(&prefs);
1568 1572
1569 // Send left control press. 1573 // Send left control press.
1570 std::string rewritten_event; 1574 std::string rewritten_event;
1571 { 1575 {
1572 ui::ScopedXI2Event xev; 1576 ui::ScopedXI2Event xev;
1573 xev.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, 0); 1577 xev.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, 0);
1574 XEvent* xevent = xev; 1578 XEvent* xevent = xev;
1575 xevent->xkey.keycode = XKeysymToKeycode(gfx::GetXDisplay(), XK_Control_L); 1579 xevent->xkey.keycode = XKeysymToKeycode(gfx::GetXDisplay(), XK_Control_L);
1576 xevent->xkey.send_event = True; // XSendEvent() always does this. 1580 xevent->xkey.send_event = True; // XSendEvent() always does this.
1577 ui::KeyEvent keyevent(xev, false /* is_char */); 1581 ui::KeyEvent keyevent(xev, false /* is_char */);
1578 scoped_ptr<ui::Event> new_event; 1582 scoped_ptr<ui::Event> new_event;
1579 // Control should NOT be remapped to Alt if send_event 1583 // Control should NOT be remapped to Alt if send_event
1580 // flag in the event is True. 1584 // flag in the event is True.
1581 EXPECT_EQ(ui::EVENT_REWRITE_CONTINUE, 1585 EXPECT_EQ(ui::EVENT_REWRITE_CONTINUE,
1582 rewriter.RewriteEvent(keyevent, &new_event)); 1586 rewriter.RewriteEvent(keyevent, &new_event));
1583 EXPECT_FALSE(new_event); 1587 EXPECT_FALSE(new_event);
1584 } 1588 }
1589 #endif
1585 } 1590 }
1586 1591
1587 TEST_F(EventRewriterTest, TestRewriteNonNativeEvent) { 1592 TEST_F(EventRewriterTest, TestRewriteNonNativeEvent) {
1588 // Remap Control to Alt. 1593 // Remap Control to Alt.
1589 TestingPrefServiceSyncable prefs; 1594 TestingPrefServiceSyncable prefs;
1590 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 1595 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
1591 IntegerPrefMember control; 1596 IntegerPrefMember control;
1592 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); 1597 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
1593 control.SetValue(chromeos::input_method::kAltKey); 1598 control.SetValue(chromeos::input_method::kAltKey);
1594 1599
1595 EventRewriter rewriter; 1600 EventRewriter rewriter(NULL);
1596 rewriter.set_pref_service_for_testing(&prefs); 1601 rewriter.set_pref_service_for_testing(&prefs);
1597 1602
1598 const int kTouchId = 2; 1603 const int kTouchId = 2;
1599 gfx::Point location(0, 0); 1604 gfx::Point location(0, 0);
1600 ui::TouchEvent press( 1605 ui::TouchEvent press(
1601 ui::ET_TOUCH_PRESSED, location, kTouchId, base::TimeDelta()); 1606 ui::ET_TOUCH_PRESSED, location, kTouchId, base::TimeDelta());
1602 press.set_flags(ui::EF_CONTROL_DOWN); 1607 press.set_flags(ui::EF_CONTROL_DOWN);
1603 1608
1604 scoped_ptr<ui::Event> new_event; 1609 scoped_ptr<ui::Event> new_event;
1605 rewriter.RewriteEvent(press, &new_event); 1610 rewriter.RewriteEvent(press, &new_event);
1606 EXPECT_TRUE(new_event); 1611 EXPECT_TRUE(new_event);
1607 // Control should be remapped to Alt. 1612 // Control should be remapped to Alt.
1608 EXPECT_EQ(ui::EF_ALT_DOWN, 1613 EXPECT_EQ(ui::EF_ALT_DOWN,
1609 new_event->flags() & (ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN)); 1614 new_event->flags() & (ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN));
1610 } 1615 }
1611 1616
1617 // Keeps a buffer of handled events.
1618 class EventBuffer : public ui::test::TestEventProcessor {
1619 public:
1620 EventBuffer() {}
1621 virtual ~EventBuffer() {}
1622
1623 void PopEvents(ScopedVector<ui::Event>* events) {
1624 events->clear();
1625 events->swap(events_);
1626 }
1627
1628 private:
1629 // ui::EventProcessor overrides:
1630 virtual ui::EventDispatchDetails OnEventFromSource(
1631 ui::Event* event) OVERRIDE {
1632 if (event->IsKeyEvent()) {
1633 events_.push_back(new ui::KeyEvent(*static_cast<ui::KeyEvent*>(event)));
1634 } else if (event->IsMouseWheelEvent()) {
1635 events_.push_back(
1636 new ui::MouseWheelEvent(*static_cast<ui::MouseWheelEvent*>(event)));
1637 } else if (event->IsMouseEvent()) {
1638 events_.push_back(
1639 new ui::MouseEvent(*static_cast<ui::MouseEvent*>(event)));
1640 }
1641 return ui::EventDispatchDetails();
1642 }
1643
1644 ScopedVector<ui::Event> events_;
1645
1646 DISALLOW_COPY_AND_ASSIGN(EventBuffer);
1647 };
1648
1649 // Trivial EventSource that does nothing but send events.
1650 class TestEventSource : public ui::EventSource {
1651 public:
1652 explicit TestEventSource(ui::EventProcessor* processor)
1653 : processor_(processor) {}
1654 virtual ui::EventProcessor* GetEventProcessor() OVERRIDE {
1655 return processor_;
1656 }
1657 ui::EventDispatchDetails Send(ui::Event* event) {
1658 return SendEventToProcessor(event);
1659 }
1660
1661 void SendActivateStickyKeyPattern(ui::KeyboardCode key_code) {
1662 ui::KeyEvent press(ui::ET_KEY_PRESSED, key_code, ui::EF_NONE, false);
1663 ui::EventDispatchDetails details = Send(&press);
1664 CHECK(!details.dispatcher_destroyed);
1665 ui::KeyEvent release(ui::ET_KEY_RELEASED, key_code, ui::EF_NONE, false);
1666 details = Send(&release);
1667 CHECK(!details.dispatcher_destroyed);
1668 }
1669
1670 private:
1671 ui::EventProcessor* processor_;
1672 };
1673
1612 // Tests of event rewriting that depend on the Ash window manager. 1674 // Tests of event rewriting that depend on the Ash window manager.
1613 class EventRewriterAshTest : public ash::test::AshTestBase { 1675 class EventRewriterAshTest : public ash::test::AshTestBase {
1614 public: 1676 public:
1615 EventRewriterAshTest() 1677 EventRewriterAshTest()
1616 : mock_user_manager_(new chromeos::MockUserManager), 1678 : mock_user_manager_(new chromeos::MockUserManager),
1617 user_manager_enabler_(mock_user_manager_) {} 1679 user_manager_enabler_(mock_user_manager_) {}
1618 virtual ~EventRewriterAshTest() {} 1680 virtual ~EventRewriterAshTest() {}
1619 1681
1620 bool RewriteFunctionKeys(const ui::Event& event, 1682 bool RewriteFunctionKeys(const ui::Event& event,
1621 scoped_ptr<ui::Event>* rewritten_event) { 1683 scoped_ptr<ui::Event>* rewritten_event) {
1622 return rewriter_->RewriteEvent(event, rewritten_event); 1684 return rewriter_->RewriteEvent(event, rewritten_event);
1623 } 1685 }
1624 1686
1687 EventRewriter* rewriter() const { return rewriter_.get(); }
1688
1689 ash::StickyKeysController* sticky_keys_controller() const {
1690 return sticky_keys_controller_;
1691 }
1692
1625 protected: 1693 protected:
1626 virtual void SetUp() OVERRIDE { 1694 virtual void SetUp() OVERRIDE {
1627 AshTestBase::SetUp(); 1695 AshTestBase::SetUp();
1628 rewriter_.reset(new EventRewriter()); 1696 sticky_keys_controller_ =
1697 ash::Shell::GetInstance()->sticky_keys_controller();
1698 rewriter_.reset(new EventRewriter(sticky_keys_controller_));
1629 chromeos::Preferences::RegisterProfilePrefs(prefs_.registry()); 1699 chromeos::Preferences::RegisterProfilePrefs(prefs_.registry());
1630 rewriter_->set_pref_service_for_testing(&prefs_); 1700 rewriter_->set_pref_service_for_testing(&prefs_);
1701 #if defined(USE_X11)
1702 ui::SetUpTouchPadForTest(kTouchPadDeviceId);
1703 #endif
1631 } 1704 }
1632 1705
1633 virtual void TearDown() OVERRIDE { 1706 virtual void TearDown() OVERRIDE {
1634 rewriter_.reset(); 1707 rewriter_.reset();
1635 AshTestBase::TearDown(); 1708 AshTestBase::TearDown();
1636 } 1709 }
1637 1710
1638 TestingPrefServiceSyncable prefs_; 1711 TestingPrefServiceSyncable prefs_;
1639 1712
1640 private: 1713 private:
1641 scoped_ptr<EventRewriter> rewriter_; 1714 scoped_ptr<EventRewriter> rewriter_;
1642 1715
1643 chromeos::MockUserManager* mock_user_manager_; // Not owned. 1716 chromeos::MockUserManager* mock_user_manager_; // Not owned.
1644 chromeos::ScopedUserManagerEnabler user_manager_enabler_; 1717 chromeos::ScopedUserManagerEnabler user_manager_enabler_;
1718 ash::StickyKeysController* sticky_keys_controller_;
1645 1719
1646 DISALLOW_COPY_AND_ASSIGN(EventRewriterAshTest); 1720 DISALLOW_COPY_AND_ASSIGN(EventRewriterAshTest);
1647 }; 1721 };
1648 1722
1649 TEST_F(EventRewriterAshTest, TopRowKeysAreFunctionKeys) { 1723 TEST_F(EventRewriterAshTest, TopRowKeysAreFunctionKeys) {
1650 scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(1)); 1724 scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(1));
1651 ash::wm::WindowState* window_state = ash::wm::GetWindowState(window.get()); 1725 ash::wm::WindowState* window_state = ash::wm::GetWindowState(window.get());
1652 window_state->Activate(); 1726 window_state->Activate();
1653 1727
1654 // Create a simulated keypress of F1 targetted at the window. 1728 // Create a simulated keypress of F1 targetted at the window.
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1692 device_list.push_back(10); 1766 device_list.push_back(10);
1693 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); 1767 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list);
1694 1768
1695 // Remap Control to Alt. 1769 // Remap Control to Alt.
1696 TestingPrefServiceSyncable prefs; 1770 TestingPrefServiceSyncable prefs;
1697 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); 1771 chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
1698 IntegerPrefMember control; 1772 IntegerPrefMember control;
1699 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); 1773 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
1700 control.SetValue(chromeos::input_method::kAltKey); 1774 control.SetValue(chromeos::input_method::kAltKey);
1701 1775
1702 EventRewriter rewriter; 1776 EventRewriter rewriter(NULL);
1703 rewriter.set_pref_service_for_testing(&prefs); 1777 rewriter.set_pref_service_for_testing(&prefs);
1704 1778
1705 // Check that Control + Left Button is converted (via Alt + Left Button) 1779 // Check that Control + Left Button is converted (via Alt + Left Button)
1706 // to Right Button. 1780 // to Right Button.
1707 ui::ScopedXI2Event xev; 1781 ui::ScopedXI2Event xev;
1708 xev.InitGenericButtonEvent(10, 1782 xev.InitGenericButtonEvent(10,
1709 ui::ET_MOUSE_PRESSED, 1783 ui::ET_MOUSE_PRESSED,
1710 gfx::Point(), 1784 gfx::Point(),
1711 ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN); 1785 ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN);
1712 ui::MouseEvent press(xev); 1786 ui::MouseEvent press(xev);
1713 // Sanity check. 1787 // Sanity check.
1714 EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type()); 1788 EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type());
1715 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN, press.flags()); 1789 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN, press.flags());
1716 int flags = RewriteMouseEvent(&rewriter, press); 1790 int flags = RewriteMouseEvent(&rewriter, press);
1717 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & flags); 1791 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & flags);
1718 EXPECT_FALSE(ui::EF_CONTROL_DOWN & flags); 1792 EXPECT_FALSE(ui::EF_CONTROL_DOWN & flags);
1719 EXPECT_FALSE(ui::EF_ALT_DOWN & flags); 1793 EXPECT_FALSE(ui::EF_ALT_DOWN & flags);
1720 } 1794 }
1721 1795
1722 1796
1723 TEST_F(EventRewriterTest, DontRewriteIfNotRewritten) { 1797 TEST_F(EventRewriterTest, DontRewriteIfNotRewritten) {
1798 #if defined(USE_X11)
1799 // TODO(kpschoedel): pending changes for crbug.com/360377
1800 // to |chromeos::EventRewriter::RewriteLocatedEvent()
1724 std::vector<unsigned int> device_list; 1801 std::vector<unsigned int> device_list;
1725 device_list.push_back(10); 1802 device_list.push_back(10);
1726 device_list.push_back(11); 1803 device_list.push_back(11);
1727 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); 1804 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list);
1728 TestingPrefServiceSyncable prefs; 1805 TestingPrefServiceSyncable prefs;
1729 EventRewriter rewriter; 1806 EventRewriter rewriter(NULL);
1730 rewriter.set_pref_service_for_testing(&prefs); 1807 rewriter.set_pref_service_for_testing(&prefs);
1731 const int kLeftAndAltFlag = ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN; 1808 const int kLeftAndAltFlag = ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN;
1732 { 1809 {
1733 ui::ScopedXI2Event xev; 1810 ui::ScopedXI2Event xev;
1734 xev.InitGenericButtonEvent( 1811 xev.InitGenericButtonEvent(
1735 10, ui::ET_MOUSE_PRESSED, gfx::Point(), kLeftAndAltFlag); 1812 10, ui::ET_MOUSE_PRESSED, gfx::Point(), kLeftAndAltFlag);
1736 ui::MouseEvent press(xev); 1813 ui::MouseEvent press(xev);
1737 // Sanity check. 1814 // Sanity check.
1738 EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type()); 1815 EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type());
1739 EXPECT_EQ(kLeftAndAltFlag, press.flags()); 1816 EXPECT_EQ(kLeftAndAltFlag, press.flags());
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1785 EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & flags); 1862 EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & flags);
1786 } 1863 }
1787 { 1864 {
1788 ui::ScopedXI2Event xev; 1865 ui::ScopedXI2Event xev;
1789 xev.InitGenericButtonEvent( 1866 xev.InitGenericButtonEvent(
1790 11, ui::ET_MOUSE_RELEASED, gfx::Point(), kLeftAndAltFlag); 1867 11, ui::ET_MOUSE_RELEASED, gfx::Point(), kLeftAndAltFlag);
1791 ui::MouseEvent release(xev); 1868 ui::MouseEvent release(xev);
1792 int flags = RewriteMouseEvent(&rewriter, release); 1869 int flags = RewriteMouseEvent(&rewriter, release);
1793 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & flags); 1870 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & flags);
1794 } 1871 }
1872 #endif
1873 }
1874
1875 TEST_F(EventRewriterAshTest, StickyKeyEventDispatchImpl) {
1876 // Test the actual key event dispatch implementation.
1877 EventBuffer buffer;
1878 TestEventSource source(&buffer);
1879 source.AddEventRewriter(rewriter());
1880 sticky_keys_controller()->Enable(true);
1881 ScopedVector<ui::Event> events;
1882
1883 source.SendActivateStickyKeyPattern(ui::VKEY_CONTROL);
1884 buffer.PopEvents(&events);
1885 EXPECT_EQ(1u, events.size());
1886 EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type());
1887 EXPECT_EQ(ui::VKEY_CONTROL,
1888 static_cast<ui::KeyEvent*>(events[0])->key_code());
1889
1890 // Test key press event is correctly modified and modifier release
1891 // event is sent.
1892 ui::KeyEvent press(ui::ET_KEY_PRESSED, ui::VKEY_C, ui::EF_NONE, false);
1893 ui::EventDispatchDetails details = source.Send(&press);
1894 buffer.PopEvents(&events);
1895 EXPECT_EQ(2u, events.size());
1896 EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type());
1897 EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code());
1898 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN);
1899 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type());
1900 EXPECT_EQ(ui::VKEY_CONTROL,
1901 static_cast<ui::KeyEvent*>(events[1])->key_code());
1902
1903 // Test key release event is not modified.
1904 ui::KeyEvent release(ui::ET_KEY_RELEASED, ui::VKEY_C, ui::EF_NONE, false);
1905 details = source.Send(&release);
1906 ASSERT_FALSE(details.dispatcher_destroyed);
1907 buffer.PopEvents(&events);
1908 EXPECT_EQ(1u, events.size());
1909 EXPECT_EQ(ui::ET_KEY_RELEASED, events[0]->type());
1910 EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code());
1911 EXPECT_FALSE(events[0]->flags() & ui::EF_CONTROL_DOWN);
1912 }
1913
1914 TEST_F(EventRewriterAshTest, MouseEventDispatchImpl) {
1915 EventBuffer buffer;
1916 TestEventSource source(&buffer);
1917 source.AddEventRewriter(rewriter());
1918 sticky_keys_controller()->Enable(true);
1919 ScopedVector<ui::Event> events;
1920
1921 source.SendActivateStickyKeyPattern(ui::VKEY_CONTROL);
1922 buffer.PopEvents(&events);
1923
1924 // Test mouse press event is correctly modified.
1925 gfx::Point location(0, 0);
1926 ui::MouseEvent press(ui::ET_MOUSE_PRESSED,
1927 location,
1928 location,
1929 ui::EF_LEFT_MOUSE_BUTTON,
1930 ui::EF_LEFT_MOUSE_BUTTON);
1931 ui::EventDispatchDetails details = source.Send(&press);
1932 ASSERT_FALSE(details.dispatcher_destroyed);
1933 buffer.PopEvents(&events);
1934 EXPECT_EQ(1u, events.size());
1935 EXPECT_EQ(ui::ET_MOUSE_PRESSED, events[0]->type());
1936 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN);
1937
1938 // Test mouse release event is correctly modified and modifier release
1939 // event is sent. The mouse event should have the correct DIP location.
1940 ui::MouseEvent release(ui::ET_MOUSE_RELEASED,
1941 location,
1942 location,
1943 ui::EF_LEFT_MOUSE_BUTTON,
1944 ui::EF_LEFT_MOUSE_BUTTON);
1945 details = source.Send(&release);
1946 ASSERT_FALSE(details.dispatcher_destroyed);
1947 buffer.PopEvents(&events);
1948 EXPECT_EQ(2u, events.size());
1949 EXPECT_EQ(ui::ET_MOUSE_RELEASED, events[0]->type());
1950 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN);
1951 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type());
1952 EXPECT_EQ(ui::VKEY_CONTROL,
1953 static_cast<ui::KeyEvent*>(events[1])->key_code());
1954 }
1955
1956 TEST_F(EventRewriterAshTest, MouseWheelEventDispatchImpl) {
1957 EventBuffer buffer;
1958 TestEventSource source(&buffer);
1959 source.AddEventRewriter(rewriter());
1960 sticky_keys_controller()->Enable(true);
1961 ScopedVector<ui::Event> events;
1962
1963 // Test positive mouse wheel event is correctly modified and modifier release
1964 // event is sent.
1965 source.SendActivateStickyKeyPattern(ui::VKEY_CONTROL);
1966 buffer.PopEvents(&events);
1967 gfx::Point location(0, 0);
1968 ui::MouseEvent mev(ui::ET_MOUSEWHEEL,
1969 location,
1970 location,
1971 ui::EF_LEFT_MOUSE_BUTTON,
1972 ui::EF_LEFT_MOUSE_BUTTON);
1973 ui::MouseWheelEvent positive(mev, 0, ui::MouseWheelEvent::kWheelDelta);
1974 ui::EventDispatchDetails details = source.Send(&positive);
1975 ASSERT_FALSE(details.dispatcher_destroyed);
1976 buffer.PopEvents(&events);
1977 EXPECT_EQ(2u, events.size());
1978 EXPECT_TRUE(events[0]->IsMouseWheelEvent());
1979 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN);
1980 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type());
1981 EXPECT_EQ(ui::VKEY_CONTROL,
1982 static_cast<ui::KeyEvent*>(events[1])->key_code());
1983
1984 // Test negative mouse wheel event is correctly modified and modifier release
1985 // event is sent.
1986 source.SendActivateStickyKeyPattern(ui::VKEY_CONTROL);
1987 buffer.PopEvents(&events);
1988 ui::MouseWheelEvent negative(mev, 0, -ui::MouseWheelEvent::kWheelDelta);
1989 details = source.Send(&negative);
1990 ASSERT_FALSE(details.dispatcher_destroyed);
1991 buffer.PopEvents(&events);
1992 EXPECT_EQ(2u, events.size());
1993 EXPECT_TRUE(events[0]->IsMouseWheelEvent());
1994 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN);
1995 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type());
1996 EXPECT_EQ(ui::VKEY_CONTROL,
1997 static_cast<ui::KeyEvent*>(events[1])->key_code());
1795 } 1998 }
1796 1999
1797 } // namespace chromeos 2000 } // namespace chromeos
OLDNEW
« ash/sticky_keys/sticky_keys_controller.cc ('K') | « chrome/browser/chromeos/events/event_rewriter.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698