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

Side by Side Diff: content/renderer/gpu/input_handler_proxy_unittest.cc

Issue 76283003: touch: Fix touch-event hit-testing for multiple touch points. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 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 | Annotate | Revision Log
« no previous file with comments | « content/renderer/gpu/input_handler_proxy.cc ('k') | content/renderer/render_widget.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 "content/renderer/gpu/input_handler_proxy.h" 5 #include "content/renderer/gpu/input_handler_proxy.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "content/renderer/gpu/input_handler_proxy_client.h" 9 #include "content/renderer/gpu/input_handler_proxy_client.h"
10 #include "testing/gmock/include/gmock/gmock.h" 10 #include "testing/gmock/include/gmock/gmock.h"
11 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "third_party/WebKit/public/platform/WebFloatPoint.h" 12 #include "third_party/WebKit/public/platform/WebFloatPoint.h"
13 #include "third_party/WebKit/public/platform/WebFloatSize.h" 13 #include "third_party/WebKit/public/platform/WebFloatSize.h"
14 #include "third_party/WebKit/public/platform/WebGestureCurve.h" 14 #include "third_party/WebKit/public/platform/WebGestureCurve.h"
15 #include "third_party/WebKit/public/platform/WebPoint.h" 15 #include "third_party/WebKit/public/platform/WebPoint.h"
16 #include "third_party/WebKit/public/web/WebInputEvent.h" 16 #include "third_party/WebKit/public/web/WebInputEvent.h"
17 #include "ui/events/latency_info.h" 17 #include "ui/events/latency_info.h"
18 18
19 using blink::WebActiveWheelFlingParameters; 19 using blink::WebActiveWheelFlingParameters;
20 using blink::WebFloatPoint; 20 using blink::WebFloatPoint;
21 using blink::WebFloatSize; 21 using blink::WebFloatSize;
22 using blink::WebGestureEvent; 22 using blink::WebGestureEvent;
23 using blink::WebInputEvent; 23 using blink::WebInputEvent;
24 using blink::WebMouseWheelEvent; 24 using blink::WebMouseWheelEvent;
25 using blink::WebPoint; 25 using blink::WebPoint;
26 using blink::WebSize; 26 using blink::WebSize;
27 using blink::WebTouchEvent;
28 using blink::WebTouchPoint;
27 29
28 namespace content { 30 namespace content {
29 namespace { 31 namespace {
30 32
31 class MockInputHandler : public cc::InputHandler { 33 class MockInputHandler : public cc::InputHandler {
32 public: 34 public:
33 MockInputHandler() {} 35 MockInputHandler() {}
34 virtual ~MockInputHandler() {} 36 virtual ~MockInputHandler() {}
35 37
36 MOCK_METHOD0(PinchGestureBegin, void()); 38 MOCK_METHOD0(PinchGestureBegin, void());
(...skipping 20 matching lines...) Expand all
57 virtual void BindToClient(cc::InputHandlerClient* client) OVERRIDE {} 59 virtual void BindToClient(cc::InputHandlerClient* client) OVERRIDE {}
58 60
59 virtual void StartPageScaleAnimation(gfx::Vector2d target_offset, 61 virtual void StartPageScaleAnimation(gfx::Vector2d target_offset,
60 bool anchor_point, 62 bool anchor_point,
61 float page_scale, 63 float page_scale,
62 base::TimeDelta duration) OVERRIDE {} 64 base::TimeDelta duration) OVERRIDE {}
63 65
64 virtual void NotifyCurrentFlingVelocity(gfx::Vector2dF velocity) OVERRIDE {} 66 virtual void NotifyCurrentFlingVelocity(gfx::Vector2dF velocity) OVERRIDE {}
65 virtual void MouseMoveAt(gfx::Point mouse_position) OVERRIDE {} 67 virtual void MouseMoveAt(gfx::Point mouse_position) OVERRIDE {}
66 68
67 virtual bool HaveTouchEventHandlersAt(gfx::Point point) OVERRIDE { 69 MOCK_METHOD1(HaveTouchEventHandlersAt,
68 return false; 70 bool(gfx::Point point));
69 }
70 71
71 virtual void SetRootLayerScrollOffsetDelegate( 72 virtual void SetRootLayerScrollOffsetDelegate(
72 cc::LayerScrollOffsetDelegate* root_layer_scroll_offset_delegate) 73 cc::LayerScrollOffsetDelegate* root_layer_scroll_offset_delegate)
73 OVERRIDE {} 74 OVERRIDE {}
74 75
75 virtual void OnRootLayerDelegatedScrollOffsetChanged() OVERRIDE {} 76 virtual void OnRootLayerDelegatedScrollOffsetChanged() OVERRIDE {}
76 77
77 DISALLOW_COPY_AND_ASSIGN(MockInputHandler); 78 DISALLOW_COPY_AND_ASSIGN(MockInputHandler);
78 }; 79 };
79 80
(...skipping 987 matching lines...) Expand 10 before | Expand all | Expand 10 after
1067 EXPECT_CALL(mock_input_handler_, 1068 EXPECT_CALL(mock_input_handler_,
1068 ScrollBy(testing::_, 1069 ScrollBy(testing::_,
1069 testing::Property(&gfx::Vector2dF::y, testing::Eq(0)))) 1070 testing::Property(&gfx::Vector2dF::y, testing::Eq(0))))
1070 .WillOnce(testing::Return(true)); 1071 .WillOnce(testing::Return(true));
1071 EXPECT_CALL(mock_input_handler_, ScrollEnd()); 1072 EXPECT_CALL(mock_input_handler_, ScrollEnd());
1072 time += base::TimeDelta::FromMilliseconds(100); 1073 time += base::TimeDelta::FromMilliseconds(100);
1073 input_handler_->Animate(time); 1074 input_handler_->Animate(time);
1074 testing::Mock::VerifyAndClearExpectations(&mock_input_handler_); 1075 testing::Mock::VerifyAndClearExpectations(&mock_input_handler_);
1075 } 1076 }
1076 1077
1078 TEST_F(InputHandlerProxyTest, MultiTouchPointHitTestNegative) {
1079 // None of the three touch points fall in the touch region. So the event
1080 // should be dropped.
1081 expected_disposition_ = InputHandlerProxy::DROP_EVENT;
1082 VERIFY_AND_RESET_MOCKS();
1083
1084 EXPECT_CALL(mock_input_handler_,
1085 HaveTouchEventHandlersAt(
1086 testing::Property(&gfx::Point::x, testing::Gt(0))))
1087 .WillOnce(testing::Return(false));
1088 EXPECT_CALL(mock_input_handler_,
1089 HaveTouchEventHandlersAt(
1090 testing::Property(&gfx::Point::x, testing::Lt(0))))
1091 .WillOnce(testing::Return(false));
1092
1093 WebTouchEvent touch;
1094 touch.type = WebInputEvent::TouchStart;
1095
1096 touch.touchesLength = 3;
1097 touch.touches[0].state = WebTouchPoint::StateStationary;
1098 touch.touches[0].screenPosition = WebPoint();
1099 touch.touches[0].position = WebPoint();
1100
1101 touch.touches[1].state = WebTouchPoint::StatePressed;
1102 touch.touches[1].screenPosition = WebPoint(10, 10);
1103 touch.touches[1].position = WebPoint(10, 10);
1104
1105 touch.touches[2].state = WebTouchPoint::StatePressed;
1106 touch.touches[2].screenPosition = WebPoint(-10, 10);
1107 touch.touches[2].position = WebPoint(-10, 10);
1108
1109 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(touch));
1110 }
1111
1112 TEST_F(InputHandlerProxyTest, MultiTouchPointHitTestPositive) {
1113 // One of the touch points is on a touch-region. So the event should be sent
1114 // to the main thread.
1115 expected_disposition_ = InputHandlerProxy::DID_NOT_HANDLE;
1116 VERIFY_AND_RESET_MOCKS();
1117
1118 EXPECT_CALL(mock_input_handler_,
1119 HaveTouchEventHandlersAt(
1120 testing::Property(&gfx::Point::x, testing::Eq(0))))
1121 .WillOnce(testing::Return(false));
1122 EXPECT_CALL(mock_input_handler_,
1123 HaveTouchEventHandlersAt(
1124 testing::Property(&gfx::Point::x, testing::Gt(0))))
1125 .WillOnce(testing::Return(true));
1126 // Since the second touch point hits a touch-region, there should be no
1127 // hit-testing for the third touch point.
1128
1129 WebTouchEvent touch;
1130 touch.type = WebInputEvent::TouchStart;
1131
1132 touch.touchesLength = 3;
1133 touch.touches[0].state = WebTouchPoint::StatePressed;
1134 touch.touches[0].screenPosition = WebPoint();
1135 touch.touches[0].position = WebPoint();
1136
1137 touch.touches[1].state = WebTouchPoint::StatePressed;
1138 touch.touches[1].screenPosition = WebPoint(10, 10);
1139 touch.touches[1].position = WebPoint(10, 10);
1140
1141 touch.touches[2].state = WebTouchPoint::StatePressed;
1142 touch.touches[2].screenPosition = WebPoint(-10, 10);
1143 touch.touches[2].position = WebPoint(-10, 10);
1144
1145 EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(touch));
1146 }
1147
1077 } // namespace 1148 } // namespace
1078 } // namespace content 1149 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/gpu/input_handler_proxy.cc ('k') | content/renderer/render_widget.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698