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 <X11/keysym.h> | 7 #include <X11/keysym.h> |
8 #include <X11/XF86keysym.h> | 8 #include <X11/XF86keysym.h> |
9 #include <X11/Xlib.h> | 9 #include <X11/Xlib.h> |
10 #undef Bool | 10 #undef Bool |
11 #undef None | 11 #undef None |
12 #undef RootWindow | 12 #undef RootWindow |
13 | 13 |
14 #include "ash/test/ash_test_base.h" | 14 #include "ash/test/ash_test_base.h" |
15 #include "ash/wm/window_state.h" | 15 #include "ash/wm/window_state.h" |
16 #include "base/basictypes.h" | 16 #include "base/basictypes.h" |
17 #include "base/command_line.h" | 17 #include "base/command_line.h" |
18 #include "base/prefs/pref_member.h" | 18 #include "base/prefs/pref_member.h" |
19 #include "base/strings/stringprintf.h" | 19 #include "base/strings/stringprintf.h" |
20 #include "chrome/browser/chromeos/input_method/input_method_configuration.h" | 20 #include "chrome/browser/chromeos/input_method/input_method_configuration.h" |
21 #include "chrome/browser/chromeos/input_method/mock_input_method_manager.h" | 21 #include "chrome/browser/chromeos/input_method/mock_input_method_manager.h" |
22 #include "chrome/browser/chromeos/login/mock_user_manager.h" | 22 #include "chrome/browser/chromeos/login/mock_user_manager.h" |
23 #include "chrome/browser/chromeos/login/user_manager.h" | 23 #include "chrome/browser/chromeos/login/user_manager.h" |
24 #include "chrome/browser/chromeos/preferences.h" | 24 #include "chrome/browser/chromeos/preferences.h" |
25 #include "chrome/common/pref_names.h" | 25 #include "chrome/common/pref_names.h" |
26 #include "chrome/test/base/testing_pref_service_syncable.h" | 26 #include "chrome/test/base/testing_pref_service_syncable.h" |
27 #include "chromeos/chromeos_switches.h" | 27 #include "chromeos/chromeos_switches.h" |
28 #include "chromeos/ime/fake_xkeyboard.h" | 28 #include "chromeos/ime/fake_ime_keyboard.h" |
29 #include "testing/gtest/include/gtest/gtest.h" | 29 #include "testing/gtest/include/gtest/gtest.h" |
30 #include "ui/aura/window.h" | 30 #include "ui/aura/window.h" |
31 #include "ui/events/event.h" | 31 #include "ui/events/event.h" |
32 #include "ui/events/test/events_test_utils_x11.h" | 32 #include "ui/events/test/events_test_utils_x11.h" |
33 #include "ui/events/x/touch_factory_x11.h" | 33 #include "ui/events/x/touch_factory_x11.h" |
34 #include "ui/gfx/x/x11_types.h" | 34 #include "ui/gfx/x/x11_types.h" |
35 | 35 |
36 namespace { | 36 namespace { |
37 | 37 |
38 std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter, | 38 std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter, |
(...skipping 1480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1519 } | 1519 } |
1520 | 1520 |
1521 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) { | 1521 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) { |
1522 // Remap Search to Caps Lock. | 1522 // Remap Search to Caps Lock. |
1523 TestingPrefServiceSyncable prefs; | 1523 TestingPrefServiceSyncable prefs; |
1524 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1524 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1525 IntegerPrefMember search; | 1525 IntegerPrefMember search; |
1526 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 1526 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
1527 search.SetValue(chromeos::input_method::kCapsLockKey); | 1527 search.SetValue(chromeos::input_method::kCapsLockKey); |
1528 | 1528 |
1529 chromeos::input_method::FakeXKeyboard xkeyboard; | 1529 chromeos::input_method::FakeImeKeyboard keyboard; |
1530 EventRewriter rewriter; | 1530 EventRewriter rewriter; |
1531 rewriter.set_pref_service_for_testing(&prefs); | 1531 rewriter.set_pref_service_for_testing(&prefs); |
1532 rewriter.set_xkeyboard_for_testing(&xkeyboard); | 1532 rewriter.set_keyboard_for_testing(&keyboard); |
1533 EXPECT_FALSE(xkeyboard.caps_lock_is_enabled_); | 1533 EXPECT_FALSE(keyboard.caps_lock_is_enabled_); |
1534 | 1534 |
1535 // Press Search. | 1535 // Press Search. |
1536 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, | 1536 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, |
1537 ui::EF_CAPS_LOCK_DOWN, | 1537 ui::EF_CAPS_LOCK_DOWN, |
1538 ui::ET_KEY_PRESSED, | 1538 ui::ET_KEY_PRESSED, |
1539 keycode_caps_lock_, | 1539 keycode_caps_lock_, |
1540 0U, | 1540 0U, |
1541 KeyPress), | 1541 KeyPress), |
1542 GetRewrittenEventAsString(&rewriter, | 1542 GetRewrittenEventAsString(&rewriter, |
1543 ui::VKEY_LWIN, | 1543 ui::VKEY_LWIN, |
1544 0, | 1544 0, |
1545 ui::ET_KEY_PRESSED, | 1545 ui::ET_KEY_PRESSED, |
1546 keycode_super_l_, | 1546 keycode_super_l_, |
1547 0U)); | 1547 0U)); |
1548 // Confirm that the Caps Lock status is changed. | 1548 // Confirm that the Caps Lock status is changed. |
1549 EXPECT_TRUE(xkeyboard.caps_lock_is_enabled_); | 1549 EXPECT_TRUE(keyboard.caps_lock_is_enabled_); |
1550 | 1550 |
1551 // Release Search. | 1551 // Release Search. |
1552 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, | 1552 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, |
1553 ui::EF_NONE, | 1553 ui::EF_NONE, |
1554 ui::ET_KEY_RELEASED, | 1554 ui::ET_KEY_RELEASED, |
1555 keycode_caps_lock_, | 1555 keycode_caps_lock_, |
1556 LockMask, | 1556 LockMask, |
1557 KeyRelease), | 1557 KeyRelease), |
1558 GetRewrittenEventAsString(&rewriter, | 1558 GetRewrittenEventAsString(&rewriter, |
1559 ui::VKEY_LWIN, | 1559 ui::VKEY_LWIN, |
1560 ui::EF_CAPS_LOCK_DOWN, | 1560 ui::EF_CAPS_LOCK_DOWN, |
1561 ui::ET_KEY_RELEASED, | 1561 ui::ET_KEY_RELEASED, |
1562 keycode_super_l_, | 1562 keycode_super_l_, |
1563 Mod4Mask | LockMask)); | 1563 Mod4Mask | LockMask)); |
1564 // Confirm that the Caps Lock status is not changed. | 1564 // Confirm that the Caps Lock status is not changed. |
1565 EXPECT_TRUE(xkeyboard.caps_lock_is_enabled_); | 1565 EXPECT_TRUE(keyboard.caps_lock_is_enabled_); |
1566 | 1566 |
1567 // Press Search. | 1567 // Press Search. |
1568 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, | 1568 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, |
1569 ui::EF_CAPS_LOCK_DOWN, | 1569 ui::EF_CAPS_LOCK_DOWN, |
1570 ui::ET_KEY_PRESSED, | 1570 ui::ET_KEY_PRESSED, |
1571 keycode_caps_lock_, | 1571 keycode_caps_lock_, |
1572 LockMask, | 1572 LockMask, |
1573 KeyPress), | 1573 KeyPress), |
1574 GetRewrittenEventAsString(&rewriter, | 1574 GetRewrittenEventAsString(&rewriter, |
1575 ui::VKEY_LWIN, | 1575 ui::VKEY_LWIN, |
1576 ui::EF_CAPS_LOCK_DOWN, | 1576 ui::EF_CAPS_LOCK_DOWN, |
1577 ui::ET_KEY_PRESSED, | 1577 ui::ET_KEY_PRESSED, |
1578 keycode_super_l_, | 1578 keycode_super_l_, |
1579 LockMask)); | 1579 LockMask)); |
1580 // Confirm that the Caps Lock status is changed. | 1580 // Confirm that the Caps Lock status is changed. |
1581 EXPECT_FALSE(xkeyboard.caps_lock_is_enabled_); | 1581 EXPECT_FALSE(keyboard.caps_lock_is_enabled_); |
1582 | 1582 |
1583 // Release Search. | 1583 // Release Search. |
1584 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, | 1584 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, |
1585 ui::EF_NONE, | 1585 ui::EF_NONE, |
1586 ui::ET_KEY_RELEASED, | 1586 ui::ET_KEY_RELEASED, |
1587 keycode_caps_lock_, | 1587 keycode_caps_lock_, |
1588 LockMask, | 1588 LockMask, |
1589 KeyRelease), | 1589 KeyRelease), |
1590 GetRewrittenEventAsString(&rewriter, | 1590 GetRewrittenEventAsString(&rewriter, |
1591 ui::VKEY_LWIN, | 1591 ui::VKEY_LWIN, |
1592 ui::EF_CAPS_LOCK_DOWN, | 1592 ui::EF_CAPS_LOCK_DOWN, |
1593 ui::ET_KEY_RELEASED, | 1593 ui::ET_KEY_RELEASED, |
1594 keycode_super_l_, | 1594 keycode_super_l_, |
1595 Mod4Mask | LockMask)); | 1595 Mod4Mask | LockMask)); |
1596 // Confirm that the Caps Lock status is not changed. | 1596 // Confirm that the Caps Lock status is not changed. |
1597 EXPECT_FALSE(xkeyboard.caps_lock_is_enabled_); | 1597 EXPECT_FALSE(keyboard.caps_lock_is_enabled_); |
1598 | 1598 |
1599 // Press Caps Lock (on an external keyboard). | 1599 // Press Caps Lock (on an external keyboard). |
1600 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, | 1600 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, |
1601 ui::EF_CAPS_LOCK_DOWN, | 1601 ui::EF_CAPS_LOCK_DOWN, |
1602 ui::ET_KEY_PRESSED, | 1602 ui::ET_KEY_PRESSED, |
1603 keycode_caps_lock_, | 1603 keycode_caps_lock_, |
1604 0U, | 1604 0U, |
1605 KeyPress), | 1605 KeyPress), |
1606 GetRewrittenEventAsString(&rewriter, | 1606 GetRewrittenEventAsString(&rewriter, |
1607 ui::VKEY_CAPITAL, | 1607 ui::VKEY_CAPITAL, |
1608 ui::EF_NONE, | 1608 ui::EF_NONE, |
1609 ui::ET_KEY_PRESSED, | 1609 ui::ET_KEY_PRESSED, |
1610 keycode_caps_lock_, | 1610 keycode_caps_lock_, |
1611 0U)); | 1611 0U)); |
1612 | 1612 |
1613 // Confirm that calling RewriteForTesting() does not change the state of | 1613 // Confirm that calling RewriteForTesting() does not change the state of |
1614 // |xkeyboard|. In this case, X Window system itself should change the | 1614 // |keyboard|. In this case, X Window system itself should change the |
1615 // Caps Lock state, not ash::EventRewriter. | 1615 // Caps Lock state, not ash::EventRewriter. |
1616 EXPECT_FALSE(xkeyboard.caps_lock_is_enabled_); | 1616 EXPECT_FALSE(keyboard.caps_lock_is_enabled_); |
1617 | 1617 |
1618 // Release Caps Lock (on an external keyboard). | 1618 // Release Caps Lock (on an external keyboard). |
1619 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, | 1619 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, |
1620 ui::EF_NONE, | 1620 ui::EF_NONE, |
1621 ui::ET_KEY_RELEASED, | 1621 ui::ET_KEY_RELEASED, |
1622 keycode_caps_lock_, | 1622 keycode_caps_lock_, |
1623 LockMask, | 1623 LockMask, |
1624 KeyRelease), | 1624 KeyRelease), |
1625 GetRewrittenEventAsString(&rewriter, | 1625 GetRewrittenEventAsString(&rewriter, |
1626 ui::VKEY_CAPITAL, | 1626 ui::VKEY_CAPITAL, |
1627 ui::EF_CAPS_LOCK_DOWN, | 1627 ui::EF_CAPS_LOCK_DOWN, |
1628 ui::ET_KEY_RELEASED, | 1628 ui::ET_KEY_RELEASED, |
1629 keycode_caps_lock_, | 1629 keycode_caps_lock_, |
1630 LockMask)); | 1630 LockMask)); |
1631 EXPECT_FALSE(xkeyboard.caps_lock_is_enabled_); | 1631 EXPECT_FALSE(keyboard.caps_lock_is_enabled_); |
1632 } | 1632 } |
1633 | 1633 |
1634 TEST_F(EventRewriterTest, DISABLED_TestRewriteCapsLock) { | 1634 TEST_F(EventRewriterTest, DISABLED_TestRewriteCapsLock) { |
1635 // It seems that the X server running on build servers is too old and does not | 1635 // It seems that the X server running on build servers is too old and does not |
1636 // support F16 (i.e. 'XKeysymToKeycode(display_, XF86XK_Launch7)' call). | 1636 // support F16 (i.e. 'XKeysymToKeycode(display_, XF86XK_Launch7)' call). |
1637 // TODO(yusukes): Reenable the test once build servers are upgraded. | 1637 // TODO(yusukes): Reenable the test once build servers are upgraded. |
1638 | 1638 |
1639 TestingPrefServiceSyncable prefs; | 1639 TestingPrefServiceSyncable prefs; |
1640 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1640 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1641 | 1641 |
1642 chromeos::input_method::FakeXKeyboard xkeyboard; | 1642 chromeos::input_method::FakeImeKeyboard keyboard; |
1643 EventRewriter rewriter; | 1643 EventRewriter rewriter; |
1644 rewriter.set_pref_service_for_testing(&prefs); | 1644 rewriter.set_pref_service_for_testing(&prefs); |
1645 rewriter.set_xkeyboard_for_testing(&xkeyboard); | 1645 rewriter.set_keyboard_for_testing(&keyboard); |
1646 EXPECT_FALSE(xkeyboard.caps_lock_is_enabled_); | 1646 EXPECT_FALSE(keyboard.caps_lock_is_enabled_); |
1647 | 1647 |
1648 // On Chrome OS, CapsLock is mapped to F16 with Mod3Mask. | 1648 // On Chrome OS, CapsLock is mapped to F16 with Mod3Mask. |
1649 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, | 1649 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, |
1650 ui::EF_CAPS_LOCK_DOWN, | 1650 ui::EF_CAPS_LOCK_DOWN, |
1651 ui::ET_KEY_PRESSED, | 1651 ui::ET_KEY_PRESSED, |
1652 keycode_caps_lock_, | 1652 keycode_caps_lock_, |
1653 0U, | 1653 0U, |
1654 KeyPress), | 1654 KeyPress), |
1655 GetRewrittenEventAsString(&rewriter, | 1655 GetRewrittenEventAsString(&rewriter, |
1656 ui::VKEY_F16, | 1656 ui::VKEY_F16, |
1657 0, | 1657 0, |
1658 ui::ET_KEY_PRESSED, | 1658 ui::ET_KEY_PRESSED, |
1659 keycode_launch7_, | 1659 keycode_launch7_, |
1660 0U)); | 1660 0U)); |
1661 EXPECT_TRUE(xkeyboard.caps_lock_is_enabled_); | 1661 EXPECT_TRUE(keyboard.caps_lock_is_enabled_); |
1662 } | 1662 } |
1663 | 1663 |
1664 TEST_F(EventRewriterTest, DISABLED_TestRewriteDiamondKey) { | 1664 TEST_F(EventRewriterTest, DISABLED_TestRewriteDiamondKey) { |
1665 // TODO(yusukes): Reenable the test once build servers are upgraded. | 1665 // TODO(yusukes): Reenable the test once build servers are upgraded. |
1666 | 1666 |
1667 TestingPrefServiceSyncable prefs; | 1667 TestingPrefServiceSyncable prefs; |
1668 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1668 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1669 | 1669 |
1670 chromeos::input_method::FakeXKeyboard xkeyboard; | 1670 chromeos::input_method::FakeImeKeyboard keyboard; |
1671 EventRewriter rewriter; | 1671 EventRewriter rewriter; |
1672 rewriter.set_pref_service_for_testing(&prefs); | 1672 rewriter.set_pref_service_for_testing(&prefs); |
1673 rewriter.set_xkeyboard_for_testing(&xkeyboard); | 1673 rewriter.set_keyboard_for_testing(&keyboard); |
1674 | 1674 |
1675 // F15 should work as Ctrl when --has-chromeos-diamond-key is not specified. | 1675 // F15 should work as Ctrl when --has-chromeos-diamond-key is not specified. |
1676 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, | 1676 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, |
1677 ui::EF_CONTROL_DOWN, | 1677 ui::EF_CONTROL_DOWN, |
1678 ui::ET_KEY_PRESSED, | 1678 ui::ET_KEY_PRESSED, |
1679 keycode_control_l_, | 1679 keycode_control_l_, |
1680 0U, | 1680 0U, |
1681 KeyPress), | 1681 KeyPress), |
1682 GetRewrittenEventAsString(&rewriter, | 1682 GetRewrittenEventAsString(&rewriter, |
1683 ui::VKEY_F15, | 1683 ui::VKEY_F15, |
(...skipping 21 matching lines...) Expand all Loading... |
1705 TEST_F(EventRewriterTest, DISABLED_TestRewriteDiamondKeyWithFlag) { | 1705 TEST_F(EventRewriterTest, DISABLED_TestRewriteDiamondKeyWithFlag) { |
1706 // TODO(yusukes): Reenable the test once build servers are upgraded. | 1706 // TODO(yusukes): Reenable the test once build servers are upgraded. |
1707 | 1707 |
1708 const CommandLine original_cl(*CommandLine::ForCurrentProcess()); | 1708 const CommandLine original_cl(*CommandLine::ForCurrentProcess()); |
1709 CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 1709 CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
1710 chromeos::switches::kHasChromeOSDiamondKey, ""); | 1710 chromeos::switches::kHasChromeOSDiamondKey, ""); |
1711 | 1711 |
1712 TestingPrefServiceSyncable prefs; | 1712 TestingPrefServiceSyncable prefs; |
1713 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1713 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1714 | 1714 |
1715 chromeos::input_method::FakeXKeyboard xkeyboard; | 1715 chromeos::input_method::FakeImeKeyboard keyboard; |
1716 EventRewriter rewriter; | 1716 EventRewriter rewriter; |
1717 rewriter.set_pref_service_for_testing(&prefs); | 1717 rewriter.set_pref_service_for_testing(&prefs); |
1718 rewriter.set_xkeyboard_for_testing(&xkeyboard); | 1718 rewriter.set_keyboard_for_testing(&keyboard); |
1719 | 1719 |
1720 // By default, F15 should work as Control. | 1720 // By default, F15 should work as Control. |
1721 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, | 1721 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, |
1722 ui::EF_CONTROL_DOWN, | 1722 ui::EF_CONTROL_DOWN, |
1723 ui::ET_KEY_PRESSED, | 1723 ui::ET_KEY_PRESSED, |
1724 keycode_control_l_, | 1724 keycode_control_l_, |
1725 0U, | 1725 0U, |
1726 KeyPress), | 1726 KeyPress), |
1727 GetRewrittenEventAsString(&rewriter, | 1727 GetRewrittenEventAsString(&rewriter, |
1728 ui::VKEY_F15, | 1728 ui::VKEY_F15, |
(...skipping 743 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2472 ui::ScopedXI2Event xev; | 2472 ui::ScopedXI2Event xev; |
2473 xev.InitGenericButtonEvent( | 2473 xev.InitGenericButtonEvent( |
2474 11, ui::ET_MOUSE_RELEASED, gfx::Point(), kLeftAndAltFlag); | 2474 11, ui::ET_MOUSE_RELEASED, gfx::Point(), kLeftAndAltFlag); |
2475 ui::MouseEvent release(xev); | 2475 ui::MouseEvent release(xev); |
2476 RewriteMouseEvent(&rewriter, &release); | 2476 RewriteMouseEvent(&rewriter, &release); |
2477 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & release.flags()); | 2477 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & release.flags()); |
2478 } | 2478 } |
2479 } | 2479 } |
2480 | 2480 |
2481 } // namespace chromeos | 2481 } // namespace chromeos |
OLD | NEW |