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

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 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
« no previous file with comments | « ui/events/blink/input_handler_proxy.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/bind.h" 9 #include "base/bind.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 189
190 void MouseMoveAt(const gfx::Point& mouse_position) override {} 190 void MouseMoveAt(const gfx::Point& mouse_position) override {}
191 191
192 MOCK_CONST_METHOD2(IsCurrentlyScrollingLayerAt, 192 MOCK_CONST_METHOD2(IsCurrentlyScrollingLayerAt,
193 bool(const gfx::Point& point, 193 bool(const gfx::Point& point,
194 cc::InputHandler::ScrollInputType type)); 194 cc::InputHandler::ScrollInputType type));
195 195
196 MOCK_CONST_METHOD1( 196 MOCK_CONST_METHOD1(
197 GetEventListenerProperties, 197 GetEventListenerProperties,
198 cc::EventListenerProperties(cc::EventListenerClass event_class)); 198 cc::EventListenerProperties(cc::EventListenerClass event_class));
199 MOCK_METHOD1(DoTouchEventsBlockScrollAt, bool(const gfx::Point& point)); 199 MOCK_METHOD1(
200 EventListenerTypeForTouchStartAt,
201 cc::InputHandler::TouchStartEventListenerType(const gfx::Point& point));
200 202
201 MOCK_METHOD0(RequestUpdateForSynchronousInputHandler, void()); 203 MOCK_METHOD0(RequestUpdateForSynchronousInputHandler, void());
202 MOCK_METHOD1(SetSynchronousInputHandlerRootScrollOffset, 204 MOCK_METHOD1(SetSynchronousInputHandlerRootScrollOffset,
203 void(const gfx::ScrollOffset& root_offset)); 205 void(const gfx::ScrollOffset& root_offset));
204 206
205 bool IsCurrentlyScrollingViewport() const override { 207 bool IsCurrentlyScrollingViewport() const override {
206 return is_scrolling_root_; 208 return is_scrolling_root_;
207 } 209 }
208 void set_is_scrolling_root(bool is) { is_scrolling_root_ = is; } 210 void set_is_scrolling_root(bool is) { is_scrolling_root_ = is; }
209 211
(...skipping 1814 matching lines...) Expand 10 before | Expand all | Expand 10 after
2024 VERIFY_AND_RESET_MOCKS(); 2026 VERIFY_AND_RESET_MOCKS();
2025 2027
2026 EXPECT_CALL( 2028 EXPECT_CALL(
2027 mock_input_handler_, 2029 mock_input_handler_,
2028 GetEventListenerProperties(cc::EventListenerClass::kTouchStartOrMove)) 2030 GetEventListenerProperties(cc::EventListenerClass::kTouchStartOrMove))
2029 .WillOnce(testing::Return(cc::EventListenerProperties::kNone)); 2031 .WillOnce(testing::Return(cc::EventListenerProperties::kNone));
2030 EXPECT_CALL( 2032 EXPECT_CALL(
2031 mock_input_handler_, 2033 mock_input_handler_,
2032 GetEventListenerProperties(cc::EventListenerClass::kTouchEndOrCancel)) 2034 GetEventListenerProperties(cc::EventListenerClass::kTouchEndOrCancel))
2033 .WillOnce(testing::Return(cc::EventListenerProperties::kNone)); 2035 .WillOnce(testing::Return(cc::EventListenerProperties::kNone));
2034 EXPECT_CALL(mock_input_handler_, DoTouchEventsBlockScrollAt(testing::_)) 2036 EXPECT_CALL(mock_input_handler_, EventListenerTypeForTouchStartAt(testing::_))
2035 .WillOnce(testing::Return(false)); 2037 .Times(2)
2036 EXPECT_CALL(mock_input_handler_, 2038 .WillRepeatedly(testing::Return(
2037 DoTouchEventsBlockScrollAt( 2039 cc::InputHandler::TouchStartEventListenerType::NO_HANDLER));
2038 testing::Property(&gfx::Point::x, testing::Lt(0))))
2039 .WillOnce(testing::Return(false));
2040 2040
2041 WebTouchEvent touch; 2041 WebTouchEvent touch;
2042 touch.type = WebInputEvent::TouchStart; 2042 touch.type = WebInputEvent::TouchStart;
2043 2043
2044 touch.touchesLength = 3; 2044 touch.touchesLength = 3;
2045 touch.touches[0] = CreateWebTouchPoint(WebTouchPoint::StateStationary, 0, 0); 2045 touch.touches[0] = CreateWebTouchPoint(WebTouchPoint::StateStationary, 0, 0);
2046 touch.touches[1] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 10, 10); 2046 touch.touches[1] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 10, 10);
2047 touch.touches[2] = CreateWebTouchPoint(WebTouchPoint::StatePressed, -10, 10); 2047 touch.touches[2] = CreateWebTouchPoint(WebTouchPoint::StatePressed, -10, 10);
2048 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(touch)); 2048 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(touch));
2049 2049
2050 VERIFY_AND_RESET_MOCKS(); 2050 VERIFY_AND_RESET_MOCKS();
2051 } 2051 }
2052 2052
2053 TEST_P(InputHandlerProxyTest, MultiTouchPointHitTestPositive) { 2053 TEST_P(InputHandlerProxyTest, MultiTouchPointHitTestPositive) {
2054 // One of the touch points is on a touch-region. So the event should be sent 2054 // One of the touch points is on a touch-region. So the event should be sent
2055 // to the main thread. 2055 // to the main thread.
2056 expected_disposition_ = InputHandlerProxy::DID_NOT_HANDLE; 2056 expected_disposition_ = InputHandlerProxy::DID_NOT_HANDLE;
2057 VERIFY_AND_RESET_MOCKS(); 2057 VERIFY_AND_RESET_MOCKS();
2058 2058
2059 EXPECT_CALL(mock_input_handler_, 2059 EXPECT_CALL(mock_input_handler_,
2060 DoTouchEventsBlockScrollAt( 2060 EventListenerTypeForTouchStartAt(
2061 testing::Property(&gfx::Point::x, testing::Eq(0)))) 2061 testing::Property(&gfx::Point::x, testing::Eq(0))))
2062 .WillOnce(testing::Return(false)); 2062 .WillOnce(testing::Return(
2063 cc::InputHandler::TouchStartEventListenerType::NO_HANDLER));
2063 EXPECT_CALL(mock_input_handler_, 2064 EXPECT_CALL(mock_input_handler_,
2064 DoTouchEventsBlockScrollAt( 2065 EventListenerTypeForTouchStartAt(
2065 testing::Property(&gfx::Point::x, testing::Gt(0)))) 2066 testing::Property(&gfx::Point::x, testing::Gt(0))))
2066 .WillOnce(testing::Return(true)); 2067 .WillOnce(testing::Return(cc::InputHandler::TouchStartEventListenerType::
2068 HANDLER_ON_SCROLLING_LAYER));
2067 // Since the second touch point hits a touch-region, there should be no 2069 // Since the second touch point hits a touch-region, there should be no
2068 // hit-testing for the third touch point. 2070 // hit-testing for the third touch point.
2069 2071
2070 WebTouchEvent touch; 2072 WebTouchEvent touch;
2071 touch.type = WebInputEvent::TouchStart; 2073 touch.type = WebInputEvent::TouchStart;
2072 2074
2073 touch.touchesLength = 3; 2075 touch.touchesLength = 3;
2074 touch.touches[0] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 0, 0); 2076 touch.touches[0] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 0, 0);
2075 touch.touches[1] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 10, 10); 2077 touch.touches[1] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 10, 10);
2076 touch.touches[2] = CreateWebTouchPoint(WebTouchPoint::StatePressed, -10, 10); 2078 touch.touches[2] = CreateWebTouchPoint(WebTouchPoint::StatePressed, -10, 10);
2077 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(touch)); 2079 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(touch));
2078 2080
2079 VERIFY_AND_RESET_MOCKS(); 2081 VERIFY_AND_RESET_MOCKS();
2080 } 2082 }
2081 2083
2082 TEST_P(InputHandlerProxyTest, MultiTouchPointHitTestPassivePositive) { 2084 TEST_P(InputHandlerProxyTest, MultiTouchPointHitTestPassivePositive) {
2083 // One of the touch points is on a touch-region. So the event should be sent 2085 // One of the touch points is not on a touch-region. So the event should be
2084 // to the main thread. 2086 // sent to the impl thread.
2085 expected_disposition_ = InputHandlerProxy::DID_HANDLE_NON_BLOCKING; 2087 expected_disposition_ = InputHandlerProxy::DID_HANDLE_NON_BLOCKING;
2086 VERIFY_AND_RESET_MOCKS(); 2088 VERIFY_AND_RESET_MOCKS();
2087 2089
2088 EXPECT_CALL( 2090 EXPECT_CALL(
2089 mock_input_handler_, 2091 mock_input_handler_,
2090 GetEventListenerProperties(cc::EventListenerClass::kTouchStartOrMove)) 2092 GetEventListenerProperties(cc::EventListenerClass::kTouchStartOrMove))
2091 .WillRepeatedly(testing::Return(cc::EventListenerProperties::kPassive)); 2093 .WillRepeatedly(testing::Return(cc::EventListenerProperties::kPassive));
2092 EXPECT_CALL(mock_input_handler_, DoTouchEventsBlockScrollAt(testing::_)) 2094 EXPECT_CALL(mock_input_handler_, EventListenerTypeForTouchStartAt(testing::_))
2093 .WillRepeatedly(testing::Return(false)); 2095 .WillRepeatedly(testing::Return(
2096 cc::InputHandler::TouchStartEventListenerType::NO_HANDLER));
2094 2097
2095 WebTouchEvent touch; 2098 WebTouchEvent touch;
2096 touch.type = WebInputEvent::TouchStart; 2099 touch.type = WebInputEvent::TouchStart;
2097 2100
2098 touch.touchesLength = 3; 2101 touch.touchesLength = 3;
2099 touch.touches[0] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 0, 0); 2102 touch.touches[0] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 0, 0);
2100 touch.touches[1] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 10, 10); 2103 touch.touches[1] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 10, 10);
2101 touch.touches[2] = CreateWebTouchPoint(WebTouchPoint::StatePressed, -10, 10); 2104 touch.touches[2] = CreateWebTouchPoint(WebTouchPoint::StatePressed, -10, 10);
2102 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(touch)); 2105 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(touch));
2103 2106
2104 VERIFY_AND_RESET_MOCKS(); 2107 VERIFY_AND_RESET_MOCKS();
2105 } 2108 }
2106 2109
2107 TEST_P(InputHandlerProxyTest, TouchStartPassiveAndTouchEndBlocking) { 2110 TEST_P(InputHandlerProxyTest, TouchStartPassiveAndTouchEndBlocking) {
2108 // The touch start is not in a touch-region but there is a touch end handler 2111 // The touch start is not in a touch-region but there is a touch end handler
2109 // so to maintain targeting we need to dispatch the touch start as 2112 // so to maintain targeting we need to dispatch the touch start as
2110 // non-blocking but drop all touch moves. 2113 // non-blocking but drop all touch moves.
2111 expected_disposition_ = InputHandlerProxy::DID_HANDLE_NON_BLOCKING; 2114 expected_disposition_ = InputHandlerProxy::DID_HANDLE_NON_BLOCKING;
2112 VERIFY_AND_RESET_MOCKS(); 2115 VERIFY_AND_RESET_MOCKS();
2113 2116
2114 EXPECT_CALL( 2117 EXPECT_CALL(
2115 mock_input_handler_, 2118 mock_input_handler_,
2116 GetEventListenerProperties(cc::EventListenerClass::kTouchStartOrMove)) 2119 GetEventListenerProperties(cc::EventListenerClass::kTouchStartOrMove))
2117 .WillOnce(testing::Return(cc::EventListenerProperties::kNone)); 2120 .WillOnce(testing::Return(cc::EventListenerProperties::kNone));
2118 EXPECT_CALL( 2121 EXPECT_CALL(
2119 mock_input_handler_, 2122 mock_input_handler_,
2120 GetEventListenerProperties(cc::EventListenerClass::kTouchEndOrCancel)) 2123 GetEventListenerProperties(cc::EventListenerClass::kTouchEndOrCancel))
2121 .WillOnce(testing::Return(cc::EventListenerProperties::kBlocking)); 2124 .WillOnce(testing::Return(cc::EventListenerProperties::kBlocking));
2122 EXPECT_CALL(mock_input_handler_, DoTouchEventsBlockScrollAt(testing::_)) 2125 EXPECT_CALL(mock_input_handler_, EventListenerTypeForTouchStartAt(testing::_))
2123 .WillOnce(testing::Return(false)); 2126 .WillOnce(testing::Return(
2127 cc::InputHandler::TouchStartEventListenerType::NO_HANDLER));
2124 2128
2125 WebTouchEvent touch; 2129 WebTouchEvent touch;
2126 touch.type = WebInputEvent::TouchStart; 2130 touch.type = WebInputEvent::TouchStart;
2127 touch.touchesLength = 1; 2131 touch.touchesLength = 1;
2128 touch.touches[0] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 0, 0); 2132 touch.touches[0] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 0, 0);
2129 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(touch)); 2133 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(touch));
2130 2134
2131 touch.type = WebInputEvent::TouchMove; 2135 touch.type = WebInputEvent::TouchMove;
2132 touch.touchesLength = 1; 2136 touch.touchesLength = 1;
2133 touch.touches[0] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 10, 10); 2137 touch.touches[0] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 10, 10);
(...skipping 948 matching lines...) Expand 10 before | Expand all | Expand 10 after
3082 histogram_tester.ExpectBucketCount(kNonContinuousQueueingTimeHistogram, 70, 3086 histogram_tester.ExpectBucketCount(kNonContinuousQueueingTimeHistogram, 70,
3083 1); 3087 1);
3084 } 3088 }
3085 3089
3086 INSTANTIATE_TEST_CASE_P(AnimateInput, 3090 INSTANTIATE_TEST_CASE_P(AnimateInput,
3087 InputHandlerProxyTest, 3091 InputHandlerProxyTest,
3088 testing::ValuesIn(test_types)); 3092 testing::ValuesIn(test_types));
3089 3093
3090 } // namespace test 3094 } // namespace test
3091 } // namespace ui 3095 } // namespace ui
OLDNEW
« no previous file with comments | « 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