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

Side by Side Diff: content/browser/renderer_host/input/input_router_impl_unittest.cc

Issue 1440923002: Convert the coordinates in WebInputEvent To Viewport in InputRouter (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 <math.h> 5 #include <math.h>
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 1799 matching lines...) Expand 10 before | Expand all | Expand 10 after
1810 1810
1811 client_overscroll = client_->GetAndResetOverscroll(); 1811 client_overscroll = client_->GetAndResetOverscroll();
1812 EXPECT_EQ(wheel_overscroll.accumulated_overscroll, 1812 EXPECT_EQ(wheel_overscroll.accumulated_overscroll,
1813 client_overscroll.accumulated_overscroll); 1813 client_overscroll.accumulated_overscroll);
1814 EXPECT_EQ(wheel_overscroll.latest_overscroll_delta, 1814 EXPECT_EQ(wheel_overscroll.latest_overscroll_delta,
1815 client_overscroll.latest_overscroll_delta); 1815 client_overscroll.latest_overscroll_delta);
1816 EXPECT_EQ(wheel_overscroll.current_fling_velocity, 1816 EXPECT_EQ(wheel_overscroll.current_fling_velocity,
1817 client_overscroll.current_fling_velocity); 1817 client_overscroll.current_fling_velocity);
1818 } 1818 }
1819 1819
1820 namespace {
1821
1822 class InputRouterImplScaleEventTest : public InputRouterImplTest {
1823 public:
1824 InputRouterImplScaleEventTest() {}
1825
1826 void SetUp() override {
1827 InputRouterImplTest::SetUp();
1828 input_router_->SetDeviceScaleFactor(2.f);
1829 }
1830
1831 template <typename T>
1832 const T* GetSentWebInputEvent() const {
1833 EXPECT_EQ(1u, process_->sink().message_count());
1834
1835 InputMsg_HandleInputEvent::Schema::Param param;
1836 InputMsg_HandleInputEvent::Read(process_->sink().GetMessageAt(0), &param);
1837 return static_cast<const T*>(base::get<0>(param));
1838 }
1839
1840 template <typename T>
1841 const T* GetFilterWebInputEvent() const {
1842 return static_cast<const T*>(client_->last_filter_event());
1843 }
1844
1845 private:
1846 DISALLOW_COPY_AND_ASSIGN(InputRouterImplScaleEventTest);
1847 };
1848
1849 class InputRouterImplScaleMouseEventTest
1850 : public InputRouterImplScaleEventTest {
1851 public:
1852 InputRouterImplScaleMouseEventTest() {}
1853
1854 void RunMouseEventTest(const std::string& name, WebInputEvent::Type type) {
1855 SCOPED_TRACE(name);
1856 SimulateMouseEvent(type, 10, 10);
1857 const WebMouseEvent* sent_event = GetSentWebInputEvent<WebMouseEvent>();
1858 EXPECT_EQ(20, sent_event->x);
1859 EXPECT_EQ(20, sent_event->y);
1860
1861 const WebMouseEvent* filter_event = GetFilterWebInputEvent<WebMouseEvent>();
1862 EXPECT_EQ(10, filter_event->x);
1863 EXPECT_EQ(10, filter_event->y);
1864
1865 process_->sink().ClearMessages();
1866 }
1867
1868 private:
1869 DISALLOW_COPY_AND_ASSIGN(InputRouterImplScaleMouseEventTest);
1870 };
1871
1872 } // namespace
1873
1874 TEST_F(InputRouterImplScaleMouseEventTest, ScaleMouseEventTest) {
1875 RunMouseEventTest("Enter", WebInputEvent::MouseEnter);
1876 RunMouseEventTest("Down", WebInputEvent::MouseDown);
1877 RunMouseEventTest("Move", WebInputEvent::MouseMove);
1878 RunMouseEventTest("Up", WebInputEvent::MouseUp);
1879 }
1880
1881 TEST_F(InputRouterImplScaleEventTest, ScaleMouseWheelEventTest) {
1882 ASSERT_EQ(0u, process_->sink().message_count());
1883 SimulateWheelEvent(10, 10, 0, false);
1884 ASSERT_EQ(1u, process_->sink().message_count());
1885
1886 const WebMouseWheelEvent* sent_event =
1887 GetSentWebInputEvent<WebMouseWheelEvent>();
1888 EXPECT_EQ(20, sent_event->deltaX);
1889 EXPECT_EQ(20, sent_event->deltaY);
1890 EXPECT_EQ(2, sent_event->wheelTicksX);
1891 EXPECT_EQ(2, sent_event->wheelTicksY);
1892
1893 const WebMouseWheelEvent* filter_event =
1894 GetFilterWebInputEvent<WebMouseWheelEvent>();
1895 EXPECT_EQ(10, filter_event->deltaX);
1896 EXPECT_EQ(10, filter_event->deltaY);
1897 EXPECT_EQ(1, filter_event->wheelTicksX);
1898 EXPECT_EQ(1, filter_event->wheelTicksY);
1899
1900 EXPECT_EQ(sent_event->accelerationRatioX, filter_event->accelerationRatioX);
1901 EXPECT_EQ(sent_event->accelerationRatioY, filter_event->accelerationRatioY);
1902 }
1903
1904 namespace {
1905
1906 class InputRouterImplScaleTouchEventTest
1907 : public InputRouterImplScaleEventTest {
1908 public:
1909 InputRouterImplScaleTouchEventTest() {}
1910
1911 void RunTouchEventTest(const std::string& name, WebTouchPoint::State state) {
tdresser 2015/11/27 21:35:20 Add a comment indicating the setup required to use
oshima 2015/11/30 23:01:12 Done.
1912 SCOPED_TRACE(name);
1913 ASSERT_EQ(1u, process_->sink().message_count());
1914 const WebTouchEvent* sent_event = GetSentWebInputEvent<WebTouchEvent>();
1915 ASSERT_EQ(2u, sent_event->touchesLength);
1916 EXPECT_EQ(state, sent_event->touches[0].state);
1917 EXPECT_EQ(20, sent_event->touches[0].position.x);
1918 EXPECT_EQ(40, sent_event->touches[0].position.y);
1919 EXPECT_EQ(10, sent_event->touches[0].screenPosition.x);
1920 EXPECT_EQ(20, sent_event->touches[0].screenPosition.y);
1921 EXPECT_EQ(2, sent_event->touches[0].radiusX);
1922 EXPECT_EQ(2, sent_event->touches[0].radiusY);
1923
1924 EXPECT_EQ(200, sent_event->touches[1].position.x);
1925 EXPECT_EQ(400, sent_event->touches[1].position.y);
1926 EXPECT_EQ(100, sent_event->touches[1].screenPosition.x);
1927 EXPECT_EQ(200, sent_event->touches[1].screenPosition.y);
1928 EXPECT_EQ(2, sent_event->touches[1].radiusX);
1929 EXPECT_EQ(2, sent_event->touches[1].radiusY);
1930
1931 const WebTouchEvent* filter_event = GetFilterWebInputEvent<WebTouchEvent>();
1932 ASSERT_EQ(2u, filter_event->touchesLength);
1933 EXPECT_EQ(10, filter_event->touches[0].position.x);
1934 EXPECT_EQ(20, filter_event->touches[0].position.y);
1935 EXPECT_EQ(10, filter_event->touches[0].screenPosition.x);
1936 EXPECT_EQ(20, filter_event->touches[0].screenPosition.y);
1937 EXPECT_EQ(1, filter_event->touches[0].radiusX);
1938 EXPECT_EQ(1, filter_event->touches[0].radiusY);
1939
1940 EXPECT_EQ(100, filter_event->touches[1].position.x);
1941 EXPECT_EQ(200, filter_event->touches[1].position.y);
1942 EXPECT_EQ(100, filter_event->touches[1].screenPosition.x);
1943 EXPECT_EQ(200, filter_event->touches[1].screenPosition.y);
1944 EXPECT_EQ(1, filter_event->touches[1].radiusX);
1945 EXPECT_EQ(1, filter_event->touches[1].radiusY);
1946 }
1947
1948 void FlushTouchEvent(WebInputEvent::Type type) {
1949 uint32 touch_event_id = SendTouchEvent();
1950 SendTouchEventACK(type, INPUT_EVENT_ACK_STATE_CONSUMED, touch_event_id);
1951 ASSERT_TRUE(TouchEventQueueEmpty());
1952 ASSERT_NE(0u, process_->sink().message_count());
1953 }
1954
1955 void ReleaseTouchPointAndAck(int index) {
1956 ReleaseTouchPoint(index);
1957 int release_event_id = SendTouchEvent();
1958 SendTouchEventACK(WebInputEvent::TouchEnd, INPUT_EVENT_ACK_STATE_CONSUMED,
1959 release_event_id);
1960 }
1961
1962 private:
1963 DISALLOW_COPY_AND_ASSIGN(InputRouterImplScaleTouchEventTest);
1964 };
1965
1966 } // namespace
1967
1968 TEST_F(InputRouterImplScaleTouchEventTest, ScaleTouchEventTest) {
1969 // Press
1970 PressTouchPoint(10, 20);
1971 PressTouchPoint(100, 200);
1972 FlushTouchEvent(WebInputEvent::TouchStart);
1973
1974 RunTouchEventTest("Press", WebTouchPoint::StatePressed);
1975 ReleaseTouchPointAndAck(1);
1976 ReleaseTouchPointAndAck(0);
1977 EXPECT_EQ(3u, GetSentMessageCountAndResetSink());
1978
1979 // Move
1980 PressTouchPoint(0, 0);
1981 PressTouchPoint(0, 0);
1982 FlushTouchEvent(WebInputEvent::TouchStart);
1983 process_->sink().ClearMessages();
1984
1985 MoveTouchPoint(0, 10, 20);
1986 MoveTouchPoint(1, 100, 200);
1987 FlushTouchEvent(WebInputEvent::TouchMove);
1988 RunTouchEventTest("Move", WebTouchPoint::StateMoved);
1989 ReleaseTouchPointAndAck(1);
1990 ReleaseTouchPointAndAck(0);
1991 EXPECT_EQ(3u, GetSentMessageCountAndResetSink());
1992
1993 // Release
1994 PressTouchPoint(10, 20);
1995 PressTouchPoint(100, 200);
1996 FlushTouchEvent(WebInputEvent::TouchMove);
1997 process_->sink().ClearMessages();
1998
1999 ReleaseTouchPoint(0);
2000 ReleaseTouchPoint(1);
2001 FlushTouchEvent(WebInputEvent::TouchEnd);
2002 RunTouchEventTest("Release", WebTouchPoint::StateReleased);
2003
2004 // Cancel
2005 PressTouchPoint(10, 20);
2006 PressTouchPoint(100, 200);
2007 FlushTouchEvent(WebInputEvent::TouchStart);
2008 process_->sink().ClearMessages();
2009
2010 CancelTouchPoint(0);
2011 CancelTouchPoint(1);
2012 FlushTouchEvent(WebInputEvent::TouchCancel);
2013 RunTouchEventTest("Cancel", WebTouchPoint::StateCancelled);
2014 }
2015
2016 namespace {
2017
2018 class InputRouterImplScaleGestureEventTest
2019 : public InputRouterImplScaleEventTest {
2020 public:
2021 InputRouterImplScaleGestureEventTest() {}
2022
2023 WebGestureEvent BuildGestureEvent(WebInputEvent::Type type, int x, int y) {
2024 auto event = SyntheticWebGestureEventBuilder::Build(
tdresser 2015/11/27 21:35:20 Some of the use of auto here seems a bit suspect t
oshima 2015/11/30 23:01:12 Done.
2025 type, blink::WebGestureDeviceTouchpad);
2026 event.globalX = event.x = x;
2027 event.globalY = event.y = y;
2028 return event;
2029 }
2030
2031 void TestTap(const std::string& name, WebInputEvent::Type type) {
2032 SCOPED_TRACE(name);
2033 auto event = BuildGestureEvent(type, 10, 20);
2034 event.data.tap.width = 30;
2035 event.data.tap.height = 40;
2036 SimulateGestureEvent(event);
2037 FlushGestureEvent(type);
2038
2039 const WebGestureEvent* sent_event = GetSentWebInputEvent<WebGestureEvent>();
2040 TestLocationInSentEvent(sent_event);
2041 EXPECT_EQ(60, sent_event->data.tap.width);
2042 EXPECT_EQ(80, sent_event->data.tap.height);
2043
2044 const WebGestureEvent* filter_event =
2045 GetFilterWebInputEvent<WebGestureEvent>();
2046 TestLocationInFilterEvent(filter_event);
2047 EXPECT_EQ(30, filter_event->data.tap.width);
2048 EXPECT_EQ(40, filter_event->data.tap.height);
2049 process_->sink().ClearMessages();
2050 }
2051
2052 void TestLongPress(const std::string& name, WebInputEvent::Type type) {
2053 auto event = BuildGestureEvent(type, 10, 20);
2054 event.data.longPress.width = 30;
2055 event.data.longPress.height = 40;
2056 SimulateGestureEvent(event);
2057 FlushGestureEvent(type);
2058 const WebGestureEvent* sent_event = GetSentWebInputEvent<WebGestureEvent>();
2059 TestLocationInSentEvent(sent_event);
2060 EXPECT_EQ(60, sent_event->data.longPress.width);
2061 EXPECT_EQ(80, sent_event->data.longPress.height);
2062
2063 const WebGestureEvent* filter_event =
2064 GetFilterWebInputEvent<WebGestureEvent>();
2065 TestLocationInFilterEvent(filter_event);
2066 EXPECT_EQ(30, filter_event->data.longPress.width);
2067 EXPECT_EQ(40, filter_event->data.longPress.height);
2068 process_->sink().ClearMessages();
2069 }
2070
2071 void FlushGestureEvent(WebInputEvent::Type type) {
2072 SendInputEventACK(type, INPUT_EVENT_ACK_STATE_CONSUMED);
2073 ASSERT_NE(0u, process_->sink().message_count());
2074 }
2075
2076 void TestLocationInSentEvent(const WebGestureEvent* sent_event) {
tdresser 2015/11/27 21:35:20 Could we take the co-ordinates here as parameters?
oshima 2015/11/30 23:01:12 Done.
2077 EXPECT_EQ(20, sent_event->x);
2078 EXPECT_EQ(40, sent_event->y);
2079 EXPECT_EQ(10, sent_event->globalX);
2080 EXPECT_EQ(20, sent_event->globalY);
2081 }
2082
2083 void TestLocationInFilterEvent(const WebGestureEvent* filter_event) {
2084 EXPECT_EQ(10, filter_event->x);
2085 EXPECT_EQ(20, filter_event->y);
2086 EXPECT_EQ(10, filter_event->globalX);
2087 EXPECT_EQ(20, filter_event->globalY);
2088 }
2089
2090 private:
2091 DISALLOW_COPY_AND_ASSIGN(InputRouterImplScaleGestureEventTest);
2092 };
2093
2094 } // namespace
2095
2096 TEST_F(InputRouterImplScaleGestureEventTest, GestureScrollUpdate) {
2097 SimulateGestureScrollUpdateEvent(10.f, 20, 0,
2098 blink::WebGestureDeviceTouchpad);
2099 FlushGestureEvent(WebInputEvent::GestureScrollUpdate);
2100 const WebGestureEvent* sent_event = GetSentWebInputEvent<WebGestureEvent>();
2101
2102 EXPECT_EQ(20.f, sent_event->data.scrollUpdate.deltaX);
2103 EXPECT_EQ(40.f, sent_event->data.scrollUpdate.deltaY);
2104
2105 const WebGestureEvent* filter_event =
2106 GetFilterWebInputEvent<WebGestureEvent>();
2107 EXPECT_EQ(10.f, filter_event->data.scrollUpdate.deltaX);
2108 EXPECT_EQ(20.f, filter_event->data.scrollUpdate.deltaY);
2109 }
2110
2111 TEST_F(InputRouterImplScaleGestureEventTest, GestureScrollBegin) {
2112 SimulateGestureEvent(
2113 SyntheticWebGestureEventBuilder::BuildScrollBegin(10.f, 20.f));
2114 const WebGestureEvent* sent_event = GetSentWebInputEvent<WebGestureEvent>();
2115 EXPECT_EQ(20.f, sent_event->data.scrollBegin.deltaXHint);
2116 EXPECT_EQ(40.f, sent_event->data.scrollBegin.deltaYHint);
2117
2118 const WebGestureEvent* filter_event =
2119 GetFilterWebInputEvent<WebGestureEvent>();
2120 EXPECT_EQ(10.f, filter_event->data.scrollBegin.deltaXHint);
2121 EXPECT_EQ(20.f, filter_event->data.scrollBegin.deltaYHint);
2122 }
2123
2124 TEST_F(InputRouterImplScaleGestureEventTest, GesturePinchUpdate) {
2125 SimulateGesturePinchUpdateEvent(1.5f, 10, 20, 0,
2126 blink::WebGestureDeviceTouchpad);
2127 FlushGestureEvent(WebInputEvent::GesturePinchUpdate);
2128 const WebGestureEvent* sent_event = GetSentWebInputEvent<WebGestureEvent>();
2129 TestLocationInSentEvent(sent_event);
2130 EXPECT_EQ(1.5f, sent_event->data.pinchUpdate.scale);
2131
2132 const WebGestureEvent* filter_event =
2133 GetFilterWebInputEvent<WebGestureEvent>();
2134 TestLocationInFilterEvent(filter_event);
2135 EXPECT_EQ(1.5f, filter_event->data.pinchUpdate.scale);
2136 }
2137
2138 TEST_F(InputRouterImplScaleGestureEventTest, GestureTapDown) {
2139 auto event = BuildGestureEvent(WebInputEvent::GestureTapDown, 10, 20);
2140 event.data.tapDown.width = 30;
2141 event.data.tapDown.height = 40;
2142 SimulateGestureEvent(event);
2143 // FlushGestureEvent(WebInputEvent::GestureTapDown);
2144 const WebGestureEvent* sent_event = GetSentWebInputEvent<WebGestureEvent>();
2145 TestLocationInSentEvent(sent_event);
2146 EXPECT_EQ(60, sent_event->data.tapDown.width);
2147 EXPECT_EQ(80, sent_event->data.tapDown.height);
2148
2149 const WebGestureEvent* filter_event =
2150 GetFilterWebInputEvent<WebGestureEvent>();
2151 TestLocationInFilterEvent(filter_event);
2152 EXPECT_EQ(30, filter_event->data.tapDown.width);
2153 EXPECT_EQ(40, filter_event->data.tapDown.height);
2154 }
2155
2156 TEST_F(InputRouterImplScaleGestureEventTest, GestureTapOthers) {
2157 TestTap("GestureDoubleTap", WebInputEvent::GestureDoubleTap);
2158 TestTap("GestureTap", WebInputEvent::GestureTap);
2159 TestTap("GestureTapUnconfirmed", WebInputEvent::GestureTapUnconfirmed);
2160 }
2161
2162 TEST_F(InputRouterImplScaleGestureEventTest, GestureShowPress) {
2163 auto event = BuildGestureEvent(WebInputEvent::GestureShowPress, 10, 20);
2164 event.data.showPress.width = 30;
2165 event.data.showPress.height = 40;
2166 SimulateGestureEvent(event);
2167
2168 const WebGestureEvent* sent_event = GetSentWebInputEvent<WebGestureEvent>();
2169 TestLocationInSentEvent(sent_event);
2170 EXPECT_EQ(60, sent_event->data.showPress.width);
2171 EXPECT_EQ(80, sent_event->data.showPress.height);
2172
2173 const WebGestureEvent* filter_event =
2174 GetFilterWebInputEvent<WebGestureEvent>();
2175 TestLocationInFilterEvent(filter_event);
2176 EXPECT_EQ(30, filter_event->data.showPress.width);
2177 EXPECT_EQ(40, filter_event->data.showPress.height);
2178 }
2179
2180 TEST_F(InputRouterImplScaleGestureEventTest, GestureLongPress) {
2181 TestLongPress("LongPress", WebInputEvent::GestureLongPress);
2182 TestLongPress("LongPap", WebInputEvent::GestureLongTap);
2183 }
2184
2185 TEST_F(InputRouterImplScaleGestureEventTest, GestureTwoFingerTap) {
2186 auto event = BuildGestureEvent(WebInputEvent::GestureTwoFingerTap, 10, 20);
2187 event.data.twoFingerTap.firstFingerWidth = 30;
2188 event.data.twoFingerTap.firstFingerHeight = 40;
2189 SimulateGestureEvent(event);
2190
2191 const WebGestureEvent* sent_event = GetSentWebInputEvent<WebGestureEvent>();
2192 EXPECT_EQ(20, sent_event->x);
2193 EXPECT_EQ(40, sent_event->y);
2194 EXPECT_EQ(60, sent_event->data.twoFingerTap.firstFingerWidth);
2195 EXPECT_EQ(80, sent_event->data.twoFingerTap.firstFingerHeight);
2196
2197 const WebGestureEvent* filter_event =
2198 GetFilterWebInputEvent<WebGestureEvent>();
2199 EXPECT_EQ(10, filter_event->x);
2200 EXPECT_EQ(20, filter_event->y);
2201 EXPECT_EQ(30, filter_event->data.twoFingerTap.firstFingerWidth);
2202 EXPECT_EQ(40, filter_event->data.twoFingerTap.firstFingerHeight);
2203 }
2204
2205 TEST_F(InputRouterImplScaleGestureEventTest, GestureFlingStart) {
2206 auto event = BuildGestureEvent(WebInputEvent::GestureFlingStart, 10, 20);
2207 event.data.flingStart.velocityX = 30;
2208 event.data.flingStart.velocityY = 40;
2209 SimulateGestureEvent(event);
2210
2211 const WebGestureEvent* sent_event = GetSentWebInputEvent<WebGestureEvent>();
2212 TestLocationInSentEvent(sent_event);
2213 EXPECT_EQ(60, sent_event->data.flingStart.velocityX);
2214 EXPECT_EQ(80, sent_event->data.flingStart.velocityY);
2215
2216 const WebGestureEvent* filter_event =
2217 GetFilterWebInputEvent<WebGestureEvent>();
2218 TestLocationInFilterEvent(filter_event);
2219 EXPECT_EQ(30, filter_event->data.flingStart.velocityX);
2220 EXPECT_EQ(40, filter_event->data.flingStart.velocityY);
2221 }
2222
1820 } // namespace content 2223 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698