| 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 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 } | 71 } |
| 72 | 72 |
| 73 std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter, | 73 std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter, |
| 74 ui::EventType ui_type, | 74 ui::EventType ui_type, |
| 75 ui::KeyboardCode ui_keycode, | 75 ui::KeyboardCode ui_keycode, |
| 76 ui::DomCode code, | 76 ui::DomCode code, |
| 77 int ui_flags, // ui::EventFlags | 77 int ui_flags, // ui::EventFlags |
| 78 ui::DomKey key) { | 78 ui::DomKey key) { |
| 79 const ui::KeyEvent event(ui_type, ui_keycode, code, ui_flags, key, | 79 const ui::KeyEvent event(ui_type, ui_keycode, code, ui_flags, key, |
| 80 ui::EventTimeForNow()); | 80 ui::EventTimeForNow()); |
| 81 scoped_ptr<ui::Event> new_event; | 81 std::unique_ptr<ui::Event> new_event; |
| 82 rewriter->RewriteEvent(event, &new_event); | 82 rewriter->RewriteEvent(event, &new_event); |
| 83 if (new_event) | 83 if (new_event) |
| 84 return GetKeyEventAsString(*new_event->AsKeyEvent()); | 84 return GetKeyEventAsString(*new_event->AsKeyEvent()); |
| 85 return GetKeyEventAsString(event); | 85 return GetKeyEventAsString(event); |
| 86 } | 86 } |
| 87 | 87 |
| 88 // Table entry for simple single key event rewriting tests. | 88 // Table entry for simple single key event rewriting tests. |
| 89 struct KeyTestCase { | 89 struct KeyTestCase { |
| 90 ui::EventType type; | 90 ui::EventType type; |
| 91 struct Event { | 91 struct Event { |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 chromeos::input_method::Shutdown(); | 139 chromeos::input_method::Shutdown(); |
| 140 } | 140 } |
| 141 | 141 |
| 142 protected: | 142 protected: |
| 143 void TestRewriteNumPadKeys(); | 143 void TestRewriteNumPadKeys(); |
| 144 void TestRewriteNumPadKeysOnAppleKeyboard(); | 144 void TestRewriteNumPadKeysOnAppleKeyboard(); |
| 145 | 145 |
| 146 const ui::MouseEvent* RewriteMouseButtonEvent( | 146 const ui::MouseEvent* RewriteMouseButtonEvent( |
| 147 chromeos::EventRewriter* rewriter, | 147 chromeos::EventRewriter* rewriter, |
| 148 const ui::MouseEvent& event, | 148 const ui::MouseEvent& event, |
| 149 scoped_ptr<ui::Event>* new_event) { | 149 std::unique_ptr<ui::Event>* new_event) { |
| 150 rewriter->RewriteMouseButtonEventForTesting(event, new_event); | 150 rewriter->RewriteMouseButtonEventForTesting(event, new_event); |
| 151 return *new_event ? new_event->get()->AsMouseEvent() : &event; | 151 return *new_event ? new_event->get()->AsMouseEvent() : &event; |
| 152 } | 152 } |
| 153 | 153 |
| 154 user_manager::FakeUserManager* fake_user_manager_; // Not owned. | 154 user_manager::FakeUserManager* fake_user_manager_; // Not owned. |
| 155 chromeos::ScopedUserManagerEnabler user_manager_enabler_; | 155 chromeos::ScopedUserManagerEnabler user_manager_enabler_; |
| 156 chromeos::input_method::MockInputMethodManager* input_method_manager_mock_; | 156 chromeos::input_method::MockInputMethodManager* input_method_manager_mock_; |
| 157 }; | 157 }; |
| 158 | 158 |
| 159 TEST_F(EventRewriterTest, TestRewriteCommandToControl) { | 159 TEST_F(EventRewriterTest, TestRewriteCommandToControl) { |
| (...skipping 1655 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1815 | 1815 |
| 1816 EventRewriter rewriter(NULL); | 1816 EventRewriter rewriter(NULL); |
| 1817 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1817 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
| 1818 rewriter.set_pref_service_for_testing(&prefs); | 1818 rewriter.set_pref_service_for_testing(&prefs); |
| 1819 | 1819 |
| 1820 // Send left control press. | 1820 // Send left control press. |
| 1821 { | 1821 { |
| 1822 ui::KeyEvent keyevent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, | 1822 ui::KeyEvent keyevent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, |
| 1823 ui::DomCode::CONTROL_LEFT, ui::EF_FINAL, | 1823 ui::DomCode::CONTROL_LEFT, ui::EF_FINAL, |
| 1824 ui::DomKey::CONTROL, ui::EventTimeForNow()); | 1824 ui::DomKey::CONTROL, ui::EventTimeForNow()); |
| 1825 scoped_ptr<ui::Event> new_event; | 1825 std::unique_ptr<ui::Event> new_event; |
| 1826 // Control should NOT be remapped to Alt if EF_FINAL is set. | 1826 // Control should NOT be remapped to Alt if EF_FINAL is set. |
| 1827 EXPECT_EQ(ui::EVENT_REWRITE_CONTINUE, | 1827 EXPECT_EQ(ui::EVENT_REWRITE_CONTINUE, |
| 1828 rewriter.RewriteEvent(keyevent, &new_event)); | 1828 rewriter.RewriteEvent(keyevent, &new_event)); |
| 1829 EXPECT_FALSE(new_event); | 1829 EXPECT_FALSE(new_event); |
| 1830 } | 1830 } |
| 1831 #if defined(USE_X11) | 1831 #if defined(USE_X11) |
| 1832 // Send left control press, using XI2 native events. | 1832 // Send left control press, using XI2 native events. |
| 1833 { | 1833 { |
| 1834 ui::ScopedXI2Event xev; | 1834 ui::ScopedXI2Event xev; |
| 1835 xev.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, 0); | 1835 xev.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, 0); |
| 1836 XEvent* xevent = xev; | 1836 XEvent* xevent = xev; |
| 1837 xevent->xkey.keycode = XKeysymToKeycode(gfx::GetXDisplay(), XK_Control_L); | 1837 xevent->xkey.keycode = XKeysymToKeycode(gfx::GetXDisplay(), XK_Control_L); |
| 1838 xevent->xkey.send_event = True; // XSendEvent() always does this. | 1838 xevent->xkey.send_event = True; // XSendEvent() always does this. |
| 1839 ui::KeyEvent keyevent(xev); | 1839 ui::KeyEvent keyevent(xev); |
| 1840 scoped_ptr<ui::Event> new_event; | 1840 std::unique_ptr<ui::Event> new_event; |
| 1841 // Control should NOT be remapped to Alt if send_event | 1841 // Control should NOT be remapped to Alt if send_event |
| 1842 // flag in the event is True. | 1842 // flag in the event is True. |
| 1843 EXPECT_EQ(ui::EVENT_REWRITE_CONTINUE, | 1843 EXPECT_EQ(ui::EVENT_REWRITE_CONTINUE, |
| 1844 rewriter.RewriteEvent(keyevent, &new_event)); | 1844 rewriter.RewriteEvent(keyevent, &new_event)); |
| 1845 EXPECT_FALSE(new_event); | 1845 EXPECT_FALSE(new_event); |
| 1846 } | 1846 } |
| 1847 #endif | 1847 #endif |
| 1848 } | 1848 } |
| 1849 | 1849 |
| 1850 TEST_F(EventRewriterTest, TestRewriteNonNativeEvent) { | 1850 TEST_F(EventRewriterTest, TestRewriteNonNativeEvent) { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1861 | 1861 |
| 1862 const int kTouchId = 2; | 1862 const int kTouchId = 2; |
| 1863 gfx::Point location(0, 0); | 1863 gfx::Point location(0, 0); |
| 1864 ui::TouchEvent press(ui::ET_TOUCH_PRESSED, location, kTouchId, | 1864 ui::TouchEvent press(ui::ET_TOUCH_PRESSED, location, kTouchId, |
| 1865 base::TimeDelta()); | 1865 base::TimeDelta()); |
| 1866 press.set_flags(ui::EF_CONTROL_DOWN); | 1866 press.set_flags(ui::EF_CONTROL_DOWN); |
| 1867 #if defined(USE_X11) | 1867 #if defined(USE_X11) |
| 1868 ui::UpdateX11EventForFlags(&press); | 1868 ui::UpdateX11EventForFlags(&press); |
| 1869 #endif | 1869 #endif |
| 1870 | 1870 |
| 1871 scoped_ptr<ui::Event> new_event; | 1871 std::unique_ptr<ui::Event> new_event; |
| 1872 rewriter.RewriteEvent(press, &new_event); | 1872 rewriter.RewriteEvent(press, &new_event); |
| 1873 EXPECT_TRUE(new_event); | 1873 EXPECT_TRUE(new_event); |
| 1874 // Control should be remapped to Alt. | 1874 // Control should be remapped to Alt. |
| 1875 EXPECT_EQ(ui::EF_ALT_DOWN, | 1875 EXPECT_EQ(ui::EF_ALT_DOWN, |
| 1876 new_event->flags() & (ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN)); | 1876 new_event->flags() & (ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN)); |
| 1877 } | 1877 } |
| 1878 | 1878 |
| 1879 // Keeps a buffer of handled events. | 1879 // Keeps a buffer of handled events. |
| 1880 class EventBuffer : public ui::test::TestEventProcessor { | 1880 class EventBuffer : public ui::test::TestEventProcessor { |
| 1881 public: | 1881 public: |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1916 // Tests of event rewriting that depend on the Ash window manager. | 1916 // Tests of event rewriting that depend on the Ash window manager. |
| 1917 class EventRewriterAshTest : public ash::test::AshTestBase { | 1917 class EventRewriterAshTest : public ash::test::AshTestBase { |
| 1918 public: | 1918 public: |
| 1919 EventRewriterAshTest() | 1919 EventRewriterAshTest() |
| 1920 : source_(&buffer_), | 1920 : source_(&buffer_), |
| 1921 fake_user_manager_(new user_manager::FakeUserManager), | 1921 fake_user_manager_(new user_manager::FakeUserManager), |
| 1922 user_manager_enabler_(fake_user_manager_) {} | 1922 user_manager_enabler_(fake_user_manager_) {} |
| 1923 ~EventRewriterAshTest() override {} | 1923 ~EventRewriterAshTest() override {} |
| 1924 | 1924 |
| 1925 bool RewriteFunctionKeys(const ui::Event& event, | 1925 bool RewriteFunctionKeys(const ui::Event& event, |
| 1926 scoped_ptr<ui::Event>* rewritten_event) { | 1926 std::unique_ptr<ui::Event>* rewritten_event) { |
| 1927 return rewriter_->RewriteEvent(event, rewritten_event); | 1927 return rewriter_->RewriteEvent(event, rewritten_event); |
| 1928 } | 1928 } |
| 1929 | 1929 |
| 1930 ui::EventDispatchDetails Send(ui::Event* event) { | 1930 ui::EventDispatchDetails Send(ui::Event* event) { |
| 1931 return source_.Send(event); | 1931 return source_.Send(event); |
| 1932 } | 1932 } |
| 1933 | 1933 |
| 1934 void SendKeyEvent(ui::EventType type, | 1934 void SendKeyEvent(ui::EventType type, |
| 1935 ui::KeyboardCode key_code, | 1935 ui::KeyboardCode key_code, |
| 1936 ui::DomCode code, | 1936 ui::DomCode code, |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1969 | 1969 |
| 1970 void TearDown() override { | 1970 void TearDown() override { |
| 1971 rewriter_.reset(); | 1971 rewriter_.reset(); |
| 1972 AshTestBase::TearDown(); | 1972 AshTestBase::TearDown(); |
| 1973 } | 1973 } |
| 1974 | 1974 |
| 1975 protected: | 1975 protected: |
| 1976 ash::StickyKeysController* sticky_keys_controller_; | 1976 ash::StickyKeysController* sticky_keys_controller_; |
| 1977 | 1977 |
| 1978 private: | 1978 private: |
| 1979 scoped_ptr<EventRewriter> rewriter_; | 1979 std::unique_ptr<EventRewriter> rewriter_; |
| 1980 | 1980 |
| 1981 EventBuffer buffer_; | 1981 EventBuffer buffer_; |
| 1982 TestEventSource source_; | 1982 TestEventSource source_; |
| 1983 | 1983 |
| 1984 user_manager::FakeUserManager* fake_user_manager_; // Not owned. | 1984 user_manager::FakeUserManager* fake_user_manager_; // Not owned. |
| 1985 chromeos::ScopedUserManagerEnabler user_manager_enabler_; | 1985 chromeos::ScopedUserManagerEnabler user_manager_enabler_; |
| 1986 syncable_prefs::TestingPrefServiceSyncable prefs_; | 1986 syncable_prefs::TestingPrefServiceSyncable prefs_; |
| 1987 | 1987 |
| 1988 DISALLOW_COPY_AND_ASSIGN(EventRewriterAshTest); | 1988 DISALLOW_COPY_AND_ASSIGN(EventRewriterAshTest); |
| 1989 }; | 1989 }; |
| 1990 | 1990 |
| 1991 TEST_F(EventRewriterAshTest, TopRowKeysAreFunctionKeys) { | 1991 TEST_F(EventRewriterAshTest, TopRowKeysAreFunctionKeys) { |
| 1992 scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(1)); | 1992 std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithId(1)); |
| 1993 ash::wm::WindowState* window_state = ash::wm::GetWindowState(window.get()); | 1993 ash::wm::WindowState* window_state = ash::wm::GetWindowState(window.get()); |
| 1994 window_state->Activate(); | 1994 window_state->Activate(); |
| 1995 ScopedVector<ui::Event> events; | 1995 ScopedVector<ui::Event> events; |
| 1996 | 1996 |
| 1997 // Create a simulated keypress of F1 targetted at the window. | 1997 // Create a simulated keypress of F1 targetted at the window. |
| 1998 ui::KeyEvent press_f1(ui::ET_KEY_PRESSED, ui::VKEY_F1, ui::DomCode::F1, | 1998 ui::KeyEvent press_f1(ui::ET_KEY_PRESSED, ui::VKEY_F1, ui::DomCode::F1, |
| 1999 ui::EF_NONE, ui::DomKey::F1, ui::EventTimeForNow()); | 1999 ui::EF_NONE, ui::DomKey::F1, ui::EventTimeForNow()); |
| 2000 | 2000 |
| 2001 // Simulate an apps v2 window that has requested top row keys as function | 2001 // Simulate an apps v2 window that has requested top row keys as function |
| 2002 // keys. The event should not be rewritten. | 2002 // keys. The event should not be rewritten. |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2057 | 2057 |
| 2058 // Check that Control + Left Button is converted (via Alt + Left Button) | 2058 // Check that Control + Left Button is converted (via Alt + Left Button) |
| 2059 // to Right Button. | 2059 // to Right Button. |
| 2060 ui::ScopedXI2Event xev; | 2060 ui::ScopedXI2Event xev; |
| 2061 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_PRESSED, gfx::Point(), | 2061 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_PRESSED, gfx::Point(), |
| 2062 ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN); | 2062 ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN); |
| 2063 ui::MouseEvent press(xev); | 2063 ui::MouseEvent press(xev); |
| 2064 // Sanity check. | 2064 // Sanity check. |
| 2065 EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type()); | 2065 EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type()); |
| 2066 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN, press.flags()); | 2066 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN, press.flags()); |
| 2067 scoped_ptr<ui::Event> new_event; | 2067 std::unique_ptr<ui::Event> new_event; |
| 2068 const ui::MouseEvent* result = | 2068 const ui::MouseEvent* result = |
| 2069 RewriteMouseButtonEvent(&rewriter, press, &new_event); | 2069 RewriteMouseButtonEvent(&rewriter, press, &new_event); |
| 2070 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); | 2070 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); |
| 2071 EXPECT_FALSE(ui::EF_LEFT_MOUSE_BUTTON & result->flags()); | 2071 EXPECT_FALSE(ui::EF_LEFT_MOUSE_BUTTON & result->flags()); |
| 2072 EXPECT_FALSE(ui::EF_CONTROL_DOWN & result->flags()); | 2072 EXPECT_FALSE(ui::EF_CONTROL_DOWN & result->flags()); |
| 2073 EXPECT_FALSE(ui::EF_ALT_DOWN & result->flags()); | 2073 EXPECT_FALSE(ui::EF_ALT_DOWN & result->flags()); |
| 2074 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); | 2074 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); |
| 2075 #endif | 2075 #endif |
| 2076 } | 2076 } |
| 2077 | 2077 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 2092 // Test Alt + Left click. | 2092 // Test Alt + Left click. |
| 2093 { | 2093 { |
| 2094 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), | 2094 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), |
| 2095 ui::EventTimeForNow(), kLeftAndAltFlag, | 2095 ui::EventTimeForNow(), kLeftAndAltFlag, |
| 2096 ui::EF_LEFT_MOUSE_BUTTON); | 2096 ui::EF_LEFT_MOUSE_BUTTON); |
| 2097 ui::EventTestApi test_press(&press); | 2097 ui::EventTestApi test_press(&press); |
| 2098 test_press.set_source_device_id(10); | 2098 test_press.set_source_device_id(10); |
| 2099 // Sanity check. | 2099 // Sanity check. |
| 2100 EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type()); | 2100 EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type()); |
| 2101 EXPECT_EQ(kLeftAndAltFlag, press.flags()); | 2101 EXPECT_EQ(kLeftAndAltFlag, press.flags()); |
| 2102 scoped_ptr<ui::Event> new_event; | 2102 std::unique_ptr<ui::Event> new_event; |
| 2103 const ui::MouseEvent* result = | 2103 const ui::MouseEvent* result = |
| 2104 RewriteMouseButtonEvent(&rewriter, press, &new_event); | 2104 RewriteMouseButtonEvent(&rewriter, press, &new_event); |
| 2105 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); | 2105 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); |
| 2106 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); | 2106 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); |
| 2107 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); | 2107 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2108 } | 2108 } |
| 2109 { | 2109 { |
| 2110 ui::MouseEvent release(ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), | 2110 ui::MouseEvent release(ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), |
| 2111 ui::EventTimeForNow(), kLeftAndAltFlag, | 2111 ui::EventTimeForNow(), kLeftAndAltFlag, |
| 2112 ui::EF_LEFT_MOUSE_BUTTON); | 2112 ui::EF_LEFT_MOUSE_BUTTON); |
| 2113 ui::EventTestApi test_release(&release); | 2113 ui::EventTestApi test_release(&release); |
| 2114 test_release.set_source_device_id(10); | 2114 test_release.set_source_device_id(10); |
| 2115 scoped_ptr<ui::Event> new_event; | 2115 std::unique_ptr<ui::Event> new_event; |
| 2116 const ui::MouseEvent* result = | 2116 const ui::MouseEvent* result = |
| 2117 RewriteMouseButtonEvent(&rewriter, release, &new_event); | 2117 RewriteMouseButtonEvent(&rewriter, release, &new_event); |
| 2118 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); | 2118 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); |
| 2119 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); | 2119 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); |
| 2120 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); | 2120 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2121 } | 2121 } |
| 2122 #if defined(USE_X11) | 2122 #if defined(USE_X11) |
| 2123 // Test Alt + Left click, using XI2 native events. | 2123 // Test Alt + Left click, using XI2 native events. |
| 2124 { | 2124 { |
| 2125 ui::ScopedXI2Event xev; | 2125 ui::ScopedXI2Event xev; |
| 2126 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_PRESSED, gfx::Point(), | 2126 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_PRESSED, gfx::Point(), |
| 2127 kLeftAndAltFlag); | 2127 kLeftAndAltFlag); |
| 2128 ui::MouseEvent press(xev); | 2128 ui::MouseEvent press(xev); |
| 2129 // Sanity check. | 2129 // Sanity check. |
| 2130 EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type()); | 2130 EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type()); |
| 2131 EXPECT_EQ(kLeftAndAltFlag, press.flags()); | 2131 EXPECT_EQ(kLeftAndAltFlag, press.flags()); |
| 2132 scoped_ptr<ui::Event> new_event; | 2132 std::unique_ptr<ui::Event> new_event; |
| 2133 const ui::MouseEvent* result = | 2133 const ui::MouseEvent* result = |
| 2134 RewriteMouseButtonEvent(&rewriter, press, &new_event); | 2134 RewriteMouseButtonEvent(&rewriter, press, &new_event); |
| 2135 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); | 2135 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); |
| 2136 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); | 2136 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); |
| 2137 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); | 2137 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2138 } | 2138 } |
| 2139 { | 2139 { |
| 2140 ui::ScopedXI2Event xev; | 2140 ui::ScopedXI2Event xev; |
| 2141 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_RELEASED, gfx::Point(), | 2141 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_RELEASED, gfx::Point(), |
| 2142 kLeftAndAltFlag); | 2142 kLeftAndAltFlag); |
| 2143 ui::MouseEvent release(xev); | 2143 ui::MouseEvent release(xev); |
| 2144 scoped_ptr<ui::Event> new_event; | 2144 std::unique_ptr<ui::Event> new_event; |
| 2145 const ui::MouseEvent* result = | 2145 const ui::MouseEvent* result = |
| 2146 RewriteMouseButtonEvent(&rewriter, release, &new_event); | 2146 RewriteMouseButtonEvent(&rewriter, release, &new_event); |
| 2147 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); | 2147 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); |
| 2148 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); | 2148 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); |
| 2149 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); | 2149 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2150 } | 2150 } |
| 2151 #endif | 2151 #endif |
| 2152 | 2152 |
| 2153 // No ALT in frst click. | 2153 // No ALT in frst click. |
| 2154 { | 2154 { |
| 2155 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), | 2155 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), |
| 2156 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, | 2156 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, |
| 2157 ui::EF_LEFT_MOUSE_BUTTON); | 2157 ui::EF_LEFT_MOUSE_BUTTON); |
| 2158 ui::EventTestApi test_press(&press); | 2158 ui::EventTestApi test_press(&press); |
| 2159 test_press.set_source_device_id(10); | 2159 test_press.set_source_device_id(10); |
| 2160 scoped_ptr<ui::Event> new_event; | 2160 std::unique_ptr<ui::Event> new_event; |
| 2161 const ui::MouseEvent* result = | 2161 const ui::MouseEvent* result = |
| 2162 RewriteMouseButtonEvent(&rewriter, press, &new_event); | 2162 RewriteMouseButtonEvent(&rewriter, press, &new_event); |
| 2163 EXPECT_TRUE(ui::EF_LEFT_MOUSE_BUTTON & result->flags()); | 2163 EXPECT_TRUE(ui::EF_LEFT_MOUSE_BUTTON & result->flags()); |
| 2164 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); | 2164 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2165 } | 2165 } |
| 2166 { | 2166 { |
| 2167 ui::MouseEvent release(ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), | 2167 ui::MouseEvent release(ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), |
| 2168 ui::EventTimeForNow(), kLeftAndAltFlag, | 2168 ui::EventTimeForNow(), kLeftAndAltFlag, |
| 2169 ui::EF_LEFT_MOUSE_BUTTON); | 2169 ui::EF_LEFT_MOUSE_BUTTON); |
| 2170 ui::EventTestApi test_release(&release); | 2170 ui::EventTestApi test_release(&release); |
| 2171 test_release.set_source_device_id(10); | 2171 test_release.set_source_device_id(10); |
| 2172 scoped_ptr<ui::Event> new_event; | 2172 std::unique_ptr<ui::Event> new_event; |
| 2173 const ui::MouseEvent* result = | 2173 const ui::MouseEvent* result = |
| 2174 RewriteMouseButtonEvent(&rewriter, release, &new_event); | 2174 RewriteMouseButtonEvent(&rewriter, release, &new_event); |
| 2175 EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & result->flags()); | 2175 EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & result->flags()); |
| 2176 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); | 2176 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2177 } | 2177 } |
| 2178 #if defined(USE_X11) | 2178 #if defined(USE_X11) |
| 2179 // No ALT in frst click, using XI2 native events. | 2179 // No ALT in frst click, using XI2 native events. |
| 2180 { | 2180 { |
| 2181 ui::ScopedXI2Event xev; | 2181 ui::ScopedXI2Event xev; |
| 2182 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_PRESSED, gfx::Point(), | 2182 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_PRESSED, gfx::Point(), |
| 2183 ui::EF_LEFT_MOUSE_BUTTON); | 2183 ui::EF_LEFT_MOUSE_BUTTON); |
| 2184 ui::MouseEvent press(xev); | 2184 ui::MouseEvent press(xev); |
| 2185 scoped_ptr<ui::Event> new_event; | 2185 std::unique_ptr<ui::Event> new_event; |
| 2186 const ui::MouseEvent* result = | 2186 const ui::MouseEvent* result = |
| 2187 RewriteMouseButtonEvent(&rewriter, press, &new_event); | 2187 RewriteMouseButtonEvent(&rewriter, press, &new_event); |
| 2188 EXPECT_TRUE(ui::EF_LEFT_MOUSE_BUTTON & result->flags()); | 2188 EXPECT_TRUE(ui::EF_LEFT_MOUSE_BUTTON & result->flags()); |
| 2189 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); | 2189 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2190 } | 2190 } |
| 2191 { | 2191 { |
| 2192 ui::ScopedXI2Event xev; | 2192 ui::ScopedXI2Event xev; |
| 2193 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_RELEASED, gfx::Point(), | 2193 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_RELEASED, gfx::Point(), |
| 2194 kLeftAndAltFlag); | 2194 kLeftAndAltFlag); |
| 2195 ui::MouseEvent release(xev); | 2195 ui::MouseEvent release(xev); |
| 2196 scoped_ptr<ui::Event> new_event; | 2196 std::unique_ptr<ui::Event> new_event; |
| 2197 const ui::MouseEvent* result = | 2197 const ui::MouseEvent* result = |
| 2198 RewriteMouseButtonEvent(&rewriter, release, &new_event); | 2198 RewriteMouseButtonEvent(&rewriter, release, &new_event); |
| 2199 EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & result->flags()); | 2199 EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & result->flags()); |
| 2200 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); | 2200 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2201 } | 2201 } |
| 2202 #endif | 2202 #endif |
| 2203 | 2203 |
| 2204 // ALT on different device. | 2204 // ALT on different device. |
| 2205 { | 2205 { |
| 2206 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), | 2206 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), |
| 2207 ui::EventTimeForNow(), kLeftAndAltFlag, | 2207 ui::EventTimeForNow(), kLeftAndAltFlag, |
| 2208 ui::EF_LEFT_MOUSE_BUTTON); | 2208 ui::EF_LEFT_MOUSE_BUTTON); |
| 2209 ui::EventTestApi test_press(&press); | 2209 ui::EventTestApi test_press(&press); |
| 2210 test_press.set_source_device_id(11); | 2210 test_press.set_source_device_id(11); |
| 2211 scoped_ptr<ui::Event> new_event; | 2211 std::unique_ptr<ui::Event> new_event; |
| 2212 const ui::MouseEvent* result = | 2212 const ui::MouseEvent* result = |
| 2213 RewriteMouseButtonEvent(&rewriter, press, &new_event); | 2213 RewriteMouseButtonEvent(&rewriter, press, &new_event); |
| 2214 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); | 2214 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); |
| 2215 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); | 2215 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); |
| 2216 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); | 2216 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2217 } | 2217 } |
| 2218 { | 2218 { |
| 2219 ui::MouseEvent release(ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), | 2219 ui::MouseEvent release(ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), |
| 2220 ui::EventTimeForNow(), kLeftAndAltFlag, | 2220 ui::EventTimeForNow(), kLeftAndAltFlag, |
| 2221 ui::EF_LEFT_MOUSE_BUTTON); | 2221 ui::EF_LEFT_MOUSE_BUTTON); |
| 2222 ui::EventTestApi test_release(&release); | 2222 ui::EventTestApi test_release(&release); |
| 2223 test_release.set_source_device_id(10); | 2223 test_release.set_source_device_id(10); |
| 2224 scoped_ptr<ui::Event> new_event; | 2224 std::unique_ptr<ui::Event> new_event; |
| 2225 const ui::MouseEvent* result = | 2225 const ui::MouseEvent* result = |
| 2226 RewriteMouseButtonEvent(&rewriter, release, &new_event); | 2226 RewriteMouseButtonEvent(&rewriter, release, &new_event); |
| 2227 EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & result->flags()); | 2227 EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & result->flags()); |
| 2228 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); | 2228 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2229 } | 2229 } |
| 2230 { | 2230 { |
| 2231 ui::MouseEvent release(ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), | 2231 ui::MouseEvent release(ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), |
| 2232 ui::EventTimeForNow(), kLeftAndAltFlag, | 2232 ui::EventTimeForNow(), kLeftAndAltFlag, |
| 2233 ui::EF_LEFT_MOUSE_BUTTON); | 2233 ui::EF_LEFT_MOUSE_BUTTON); |
| 2234 ui::EventTestApi test_release(&release); | 2234 ui::EventTestApi test_release(&release); |
| 2235 test_release.set_source_device_id(11); | 2235 test_release.set_source_device_id(11); |
| 2236 scoped_ptr<ui::Event> new_event; | 2236 std::unique_ptr<ui::Event> new_event; |
| 2237 const ui::MouseEvent* result = | 2237 const ui::MouseEvent* result = |
| 2238 RewriteMouseButtonEvent(&rewriter, release, &new_event); | 2238 RewriteMouseButtonEvent(&rewriter, release, &new_event); |
| 2239 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); | 2239 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); |
| 2240 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); | 2240 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); |
| 2241 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); | 2241 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2242 } | 2242 } |
| 2243 #if defined(USE_X11) | 2243 #if defined(USE_X11) |
| 2244 // ALT on different device, using XI2 native events. | 2244 // ALT on different device, using XI2 native events. |
| 2245 { | 2245 { |
| 2246 ui::ScopedXI2Event xev; | 2246 ui::ScopedXI2Event xev; |
| 2247 xev.InitGenericButtonEvent(11, ui::ET_MOUSE_PRESSED, gfx::Point(), | 2247 xev.InitGenericButtonEvent(11, ui::ET_MOUSE_PRESSED, gfx::Point(), |
| 2248 kLeftAndAltFlag); | 2248 kLeftAndAltFlag); |
| 2249 ui::MouseEvent press(xev); | 2249 ui::MouseEvent press(xev); |
| 2250 scoped_ptr<ui::Event> new_event; | 2250 std::unique_ptr<ui::Event> new_event; |
| 2251 const ui::MouseEvent* result = | 2251 const ui::MouseEvent* result = |
| 2252 RewriteMouseButtonEvent(&rewriter, press, &new_event); | 2252 RewriteMouseButtonEvent(&rewriter, press, &new_event); |
| 2253 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); | 2253 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); |
| 2254 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); | 2254 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); |
| 2255 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); | 2255 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2256 } | 2256 } |
| 2257 { | 2257 { |
| 2258 ui::ScopedXI2Event xev; | 2258 ui::ScopedXI2Event xev; |
| 2259 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_RELEASED, gfx::Point(), | 2259 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_RELEASED, gfx::Point(), |
| 2260 kLeftAndAltFlag); | 2260 kLeftAndAltFlag); |
| 2261 ui::MouseEvent release(xev); | 2261 ui::MouseEvent release(xev); |
| 2262 scoped_ptr<ui::Event> new_event; | 2262 std::unique_ptr<ui::Event> new_event; |
| 2263 const ui::MouseEvent* result = | 2263 const ui::MouseEvent* result = |
| 2264 RewriteMouseButtonEvent(&rewriter, release, &new_event); | 2264 RewriteMouseButtonEvent(&rewriter, release, &new_event); |
| 2265 EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & result->flags()); | 2265 EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & result->flags()); |
| 2266 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); | 2266 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2267 } | 2267 } |
| 2268 { | 2268 { |
| 2269 ui::ScopedXI2Event xev; | 2269 ui::ScopedXI2Event xev; |
| 2270 xev.InitGenericButtonEvent(11, ui::ET_MOUSE_RELEASED, gfx::Point(), | 2270 xev.InitGenericButtonEvent(11, ui::ET_MOUSE_RELEASED, gfx::Point(), |
| 2271 kLeftAndAltFlag); | 2271 kLeftAndAltFlag); |
| 2272 ui::MouseEvent release(xev); | 2272 ui::MouseEvent release(xev); |
| 2273 scoped_ptr<ui::Event> new_event; | 2273 std::unique_ptr<ui::Event> new_event; |
| 2274 const ui::MouseEvent* result = | 2274 const ui::MouseEvent* result = |
| 2275 RewriteMouseButtonEvent(&rewriter, release, &new_event); | 2275 RewriteMouseButtonEvent(&rewriter, release, &new_event); |
| 2276 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); | 2276 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); |
| 2277 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); | 2277 EXPECT_FALSE(kLeftAndAltFlag & result->flags()); |
| 2278 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); | 2278 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); |
| 2279 } | 2279 } |
| 2280 #endif | 2280 #endif |
| 2281 } | 2281 } |
| 2282 | 2282 |
| 2283 TEST_F(EventRewriterAshTest, StickyKeyEventDispatchImpl) { | 2283 TEST_F(EventRewriterAshTest, StickyKeyEventDispatchImpl) { |
| (...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2603 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); | 2603 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); |
| 2604 EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); | 2604 EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); |
| 2605 | 2605 |
| 2606 // Turn off AltGr and Mod3. | 2606 // Turn off AltGr and Mod3. |
| 2607 sticky_keys_controller_->SetModifiersEnabled(false, false); | 2607 sticky_keys_controller_->SetModifiersEnabled(false, false); |
| 2608 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); | 2608 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); |
| 2609 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); | 2609 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); |
| 2610 } | 2610 } |
| 2611 | 2611 |
| 2612 } // namespace chromeos | 2612 } // namespace chromeos |
| OLD | NEW |