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

Side by Side Diff: ui/events/blink/input_handler_proxy_unittest.cc

Issue 2471523002: Make touch events uncancelable during fling when they are on the current active scroll layer (Closed)
Patch Set: fling layer Created 4 years, 1 month 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 "ui/events/blink/input_handler_proxy.h" 5 #include "ui/events/blink/input_handler_proxy.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/test/histogram_tester.h" 10 #include "base/test/histogram_tester.h"
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 155
156 void MouseMoveAt(const gfx::Point& mouse_position) override {} 156 void MouseMoveAt(const gfx::Point& mouse_position) override {}
157 157
158 MOCK_CONST_METHOD2(IsCurrentlyScrollingLayerAt, 158 MOCK_CONST_METHOD2(IsCurrentlyScrollingLayerAt,
159 bool(const gfx::Point& point, 159 bool(const gfx::Point& point,
160 cc::InputHandler::ScrollInputType type)); 160 cc::InputHandler::ScrollInputType type));
161 161
162 MOCK_CONST_METHOD1( 162 MOCK_CONST_METHOD1(
163 GetEventListenerProperties, 163 GetEventListenerProperties,
164 cc::EventListenerProperties(cc::EventListenerClass event_class)); 164 cc::EventListenerProperties(cc::EventListenerClass event_class));
165 MOCK_METHOD1(DoTouchEventsBlockScrollAt, bool(const gfx::Point& point)); 165 MOCK_METHOD1(EventListenerTypeForTouchStartAt,
166 cc::EventListenerProperties(const gfx::Point& point));
166 167
167 MOCK_METHOD0(RequestUpdateForSynchronousInputHandler, void()); 168 MOCK_METHOD0(RequestUpdateForSynchronousInputHandler, void());
168 MOCK_METHOD1(SetSynchronousInputHandlerRootScrollOffset, 169 MOCK_METHOD1(SetSynchronousInputHandlerRootScrollOffset,
169 void(const gfx::ScrollOffset& root_offset)); 170 void(const gfx::ScrollOffset& root_offset));
170 171
171 bool IsCurrentlyScrollingViewport() const override { 172 bool IsCurrentlyScrollingViewport() const override {
172 return is_scrolling_root_; 173 return is_scrolling_root_;
173 } 174 }
174 void set_is_scrolling_root(bool is) { is_scrolling_root_ = is; } 175 void set_is_scrolling_root(bool is) { is_scrolling_root_ = is; }
175 176
(...skipping 1758 matching lines...) Expand 10 before | Expand all | Expand 10 after
1934 VERIFY_AND_RESET_MOCKS(); 1935 VERIFY_AND_RESET_MOCKS();
1935 1936
1936 EXPECT_CALL( 1937 EXPECT_CALL(
1937 mock_input_handler_, 1938 mock_input_handler_,
1938 GetEventListenerProperties(cc::EventListenerClass::kTouchStartOrMove)) 1939 GetEventListenerProperties(cc::EventListenerClass::kTouchStartOrMove))
1939 .WillOnce(testing::Return(cc::EventListenerProperties::kNone)); 1940 .WillOnce(testing::Return(cc::EventListenerProperties::kNone));
1940 EXPECT_CALL( 1941 EXPECT_CALL(
1941 mock_input_handler_, 1942 mock_input_handler_,
1942 GetEventListenerProperties(cc::EventListenerClass::kTouchEndOrCancel)) 1943 GetEventListenerProperties(cc::EventListenerClass::kTouchEndOrCancel))
1943 .WillOnce(testing::Return(cc::EventListenerProperties::kNone)); 1944 .WillOnce(testing::Return(cc::EventListenerProperties::kNone));
1944 EXPECT_CALL(mock_input_handler_, DoTouchEventsBlockScrollAt(testing::_)) 1945 EXPECT_CALL(mock_input_handler_, EventListenerTypeForTouchStartAt(testing::_))
1945 .WillOnce(testing::Return(false)); 1946 .WillOnce(testing::Return(cc::EventListenerProperties::kNone));
bokan 2016/11/17 15:39:28 I believe this expects to be called twice so I thi
lanwei 2016/11/18 00:54:07 I changed the test, it is called twice, because it
bokan 2016/11/18 18:41:36 Ah! You're right, that makes more sense :)
1946 EXPECT_CALL(mock_input_handler_, 1947 EXPECT_CALL(mock_input_handler_,
1947 DoTouchEventsBlockScrollAt( 1948 EventListenerTypeForTouchStartAt(
1948 testing::Property(&gfx::Point::x, testing::Lt(0)))) 1949 testing::Property(&gfx::Point::x, testing::Lt(0))))
1949 .WillOnce(testing::Return(false)); 1950 .WillOnce(testing::Return(cc::EventListenerProperties::kNone));
1950 1951
1951 WebTouchEvent touch; 1952 WebTouchEvent touch;
1952 touch.type = WebInputEvent::TouchStart; 1953 touch.type = WebInputEvent::TouchStart;
1953 1954
1954 touch.touchesLength = 3; 1955 touch.touchesLength = 3;
1955 touch.touches[0] = CreateWebTouchPoint(WebTouchPoint::StateStationary, 0, 0); 1956 touch.touches[0] = CreateWebTouchPoint(WebTouchPoint::StateStationary, 0, 0);
1956 touch.touches[1] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 10, 10); 1957 touch.touches[1] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 10, 10);
1957 touch.touches[2] = CreateWebTouchPoint(WebTouchPoint::StatePressed, -10, 10); 1958 touch.touches[2] = CreateWebTouchPoint(WebTouchPoint::StatePressed, -10, 10);
1958 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(touch)); 1959 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(touch));
1959 1960
1960 VERIFY_AND_RESET_MOCKS(); 1961 VERIFY_AND_RESET_MOCKS();
1961 } 1962 }
1962 1963
1963 TEST_P(InputHandlerProxyTest, MultiTouchPointHitTestPositive) { 1964 TEST_P(InputHandlerProxyTest, MultiTouchPointHitTestPositive) {
1964 // One of the touch points is on a touch-region. So the event should be sent 1965 // One of the touch points is on a touch-region. So the event should be sent
1965 // to the main thread. 1966 // to the main thread.
1966 expected_disposition_ = InputHandlerProxy::DID_NOT_HANDLE; 1967 expected_disposition_ = InputHandlerProxy::DID_NOT_HANDLE;
1967 VERIFY_AND_RESET_MOCKS(); 1968 VERIFY_AND_RESET_MOCKS();
1968 1969
1969 EXPECT_CALL(mock_input_handler_, 1970 EXPECT_CALL(mock_input_handler_,
1970 DoTouchEventsBlockScrollAt( 1971 EventListenerTypeForTouchStartAt(
1971 testing::Property(&gfx::Point::x, testing::Eq(0)))) 1972 testing::Property(&gfx::Point::x, testing::Eq(0))))
1972 .WillOnce(testing::Return(false)); 1973 .WillOnce(testing::Return(cc::EventListenerProperties::kNone));
1973 EXPECT_CALL(mock_input_handler_, 1974 EXPECT_CALL(mock_input_handler_,
1974 DoTouchEventsBlockScrollAt( 1975 EventListenerTypeForTouchStartAt(
1975 testing::Property(&gfx::Point::x, testing::Gt(0)))) 1976 testing::Property(&gfx::Point::x, testing::Gt(0))))
1976 .WillOnce(testing::Return(true)); 1977 .WillOnce(testing::Return(
1978 cc::EventListenerProperties::kBlockingAndMaybePassiveDueToFling));
1977 // Since the second touch point hits a touch-region, there should be no 1979 // Since the second touch point hits a touch-region, there should be no
1978 // hit-testing for the third touch point. 1980 // hit-testing for the third touch point.
1979 1981
1980 WebTouchEvent touch; 1982 WebTouchEvent touch;
1981 touch.type = WebInputEvent::TouchStart; 1983 touch.type = WebInputEvent::TouchStart;
1982 1984
1983 touch.touchesLength = 3; 1985 touch.touchesLength = 3;
1984 touch.touches[0] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 0, 0); 1986 touch.touches[0] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 0, 0);
1985 touch.touches[1] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 10, 10); 1987 touch.touches[1] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 10, 10);
1986 touch.touches[2] = CreateWebTouchPoint(WebTouchPoint::StatePressed, -10, 10); 1988 touch.touches[2] = CreateWebTouchPoint(WebTouchPoint::StatePressed, -10, 10);
1987 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(touch)); 1989 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(touch));
1988 1990
1989 VERIFY_AND_RESET_MOCKS(); 1991 VERIFY_AND_RESET_MOCKS();
1990 } 1992 }
1991 1993
1992 TEST_P(InputHandlerProxyTest, MultiTouchPointHitTestPassivePositive) { 1994 TEST_P(InputHandlerProxyTest, MultiTouchPointHitTestPassivePositive) {
1993 // One of the touch points is on a touch-region. So the event should be sent 1995 // One of the touch points is on a touch-region. So the event should be sent
1994 // to the main thread. 1996 // to the main thread.
bokan 2016/11/17 15:39:28 Is this comment wrong? It says "sent to main threa
lanwei 2016/11/18 00:54:07 Done.
1995 expected_disposition_ = InputHandlerProxy::DID_HANDLE_NON_BLOCKING; 1997 expected_disposition_ = InputHandlerProxy::DID_HANDLE_NON_BLOCKING;
1996 VERIFY_AND_RESET_MOCKS(); 1998 VERIFY_AND_RESET_MOCKS();
1997 1999
1998 EXPECT_CALL( 2000 EXPECT_CALL(
1999 mock_input_handler_, 2001 mock_input_handler_,
2000 GetEventListenerProperties(cc::EventListenerClass::kTouchStartOrMove)) 2002 GetEventListenerProperties(cc::EventListenerClass::kTouchStartOrMove))
2001 .WillRepeatedly(testing::Return(cc::EventListenerProperties::kPassive)); 2003 .WillRepeatedly(testing::Return(cc::EventListenerProperties::kPassive));
2002 EXPECT_CALL(mock_input_handler_, DoTouchEventsBlockScrollAt(testing::_)) 2004 EXPECT_CALL(mock_input_handler_, EventListenerTypeForTouchStartAt(testing::_))
2003 .WillRepeatedly(testing::Return(false)); 2005 .WillRepeatedly(testing::Return(cc::EventListenerProperties::kNone));
2004 2006
2005 WebTouchEvent touch; 2007 WebTouchEvent touch;
2006 touch.type = WebInputEvent::TouchStart; 2008 touch.type = WebInputEvent::TouchStart;
2007 2009
2008 touch.touchesLength = 3; 2010 touch.touchesLength = 3;
2009 touch.touches[0] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 0, 0); 2011 touch.touches[0] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 0, 0);
2010 touch.touches[1] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 10, 10); 2012 touch.touches[1] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 10, 10);
2011 touch.touches[2] = CreateWebTouchPoint(WebTouchPoint::StatePressed, -10, 10); 2013 touch.touches[2] = CreateWebTouchPoint(WebTouchPoint::StatePressed, -10, 10);
2012 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(touch)); 2014 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(touch));
2013 2015
2014 VERIFY_AND_RESET_MOCKS(); 2016 VERIFY_AND_RESET_MOCKS();
2015 } 2017 }
2016 2018
2017 TEST_P(InputHandlerProxyTest, TouchStartPassiveAndTouchEndBlocking) { 2019 TEST_P(InputHandlerProxyTest, TouchStartPassiveAndTouchEndBlocking) {
2018 // The touch start is not in a touch-region but there is a touch end handler 2020 // The touch start is not in a touch-region but there is a touch end handler
2019 // so to maintain targeting we need to dispatch the touch start as 2021 // so to maintain targeting we need to dispatch the touch start as
2020 // non-blocking but drop all touch moves. 2022 // non-blocking but drop all touch moves.
2021 expected_disposition_ = InputHandlerProxy::DID_HANDLE_NON_BLOCKING; 2023 expected_disposition_ = InputHandlerProxy::DID_HANDLE_NON_BLOCKING;
2022 VERIFY_AND_RESET_MOCKS(); 2024 VERIFY_AND_RESET_MOCKS();
2023 2025
2024 EXPECT_CALL( 2026 EXPECT_CALL(
2025 mock_input_handler_, 2027 mock_input_handler_,
2026 GetEventListenerProperties(cc::EventListenerClass::kTouchStartOrMove)) 2028 GetEventListenerProperties(cc::EventListenerClass::kTouchStartOrMove))
2027 .WillOnce(testing::Return(cc::EventListenerProperties::kNone)); 2029 .WillOnce(testing::Return(cc::EventListenerProperties::kNone));
2028 EXPECT_CALL( 2030 EXPECT_CALL(
2029 mock_input_handler_, 2031 mock_input_handler_,
2030 GetEventListenerProperties(cc::EventListenerClass::kTouchEndOrCancel)) 2032 GetEventListenerProperties(cc::EventListenerClass::kTouchEndOrCancel))
2031 .WillOnce(testing::Return(cc::EventListenerProperties::kBlocking)); 2033 .WillOnce(testing::Return(cc::EventListenerProperties::kBlocking));
2032 EXPECT_CALL(mock_input_handler_, DoTouchEventsBlockScrollAt(testing::_)) 2034 EXPECT_CALL(mock_input_handler_, EventListenerTypeForTouchStartAt(testing::_))
2033 .WillOnce(testing::Return(false)); 2035 .WillOnce(testing::Return(cc::EventListenerProperties::kNone));
2034 2036
2035 WebTouchEvent touch; 2037 WebTouchEvent touch;
2036 touch.type = WebInputEvent::TouchStart; 2038 touch.type = WebInputEvent::TouchStart;
2037 touch.touchesLength = 1; 2039 touch.touchesLength = 1;
2038 touch.touches[0] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 0, 0); 2040 touch.touches[0] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 0, 0);
2039 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(touch)); 2041 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(touch));
2040 2042
2041 touch.type = WebInputEvent::TouchMove; 2043 touch.type = WebInputEvent::TouchMove;
2042 touch.touchesLength = 1; 2044 touch.touchesLength = 1;
2043 touch.touches[0] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 10, 10); 2045 touch.touches[0] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 10, 10);
(...skipping 770 matching lines...) Expand 10 before | Expand all | Expand 10 after
2814 testing::ElementsAre(base::Bucket(1, 1), base::Bucket(3, 1), 2816 testing::ElementsAre(base::Bucket(1, 1), base::Bucket(3, 1),
2815 base::Bucket(5, 1), base::Bucket(14, 1))); 2817 base::Bucket(5, 1), base::Bucket(14, 1)));
2816 } 2818 }
2817 2819
2818 2820
2819 INSTANTIATE_TEST_CASE_P(AnimateInput, 2821 INSTANTIATE_TEST_CASE_P(AnimateInput,
2820 InputHandlerProxyTest, 2822 InputHandlerProxyTest,
2821 testing::ValuesIn(test_types)); 2823 testing::ValuesIn(test_types));
2822 } // namespace test 2824 } // namespace test
2823 } // namespace ui 2825 } // namespace ui
OLDNEW
« cc/trees/layer_tree_host_impl_unittest.cc ('K') | « ui/events/blink/input_handler_proxy.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698