OLD | NEW |
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/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
234 | 234 |
235 void SimulateGestureFlingStartEvent(float velocityX, | 235 void SimulateGestureFlingStartEvent(float velocityX, |
236 float velocityY, | 236 float velocityY, |
237 WebGestureDevice sourceDevice) { | 237 WebGestureDevice sourceDevice) { |
238 SimulateGestureEvent( | 238 SimulateGestureEvent( |
239 SyntheticWebGestureEventBuilder::BuildFling(velocityX, | 239 SyntheticWebGestureEventBuilder::BuildFling(velocityX, |
240 velocityY, | 240 velocityY, |
241 sourceDevice)); | 241 sourceDevice)); |
242 } | 242 } |
243 | 243 |
244 void SimulateTouchEvent(WebInputEvent::Type type) { | |
245 touch_event_.ResetPoints(); | |
246 int index = PressTouchPoint(0, 0); | |
247 switch (type) { | |
248 case WebInputEvent::TouchStart: | |
249 // Already handled by |PressTouchPoint()|. | |
250 break; | |
251 case WebInputEvent::TouchMove: | |
252 MoveTouchPoint(index, 5, 5); | |
253 break; | |
254 case WebInputEvent::TouchEnd: | |
255 ReleaseTouchPoint(index); | |
256 break; | |
257 case WebInputEvent::TouchCancel: | |
258 CancelTouchPoint(index); | |
259 break; | |
260 default: | |
261 FAIL() << "Invalid touch event type."; | |
262 break; | |
263 } | |
264 SendTouchEvent(); | |
265 } | |
266 | |
267 void SetTouchTimestamp(base::TimeDelta timestamp) { | 244 void SetTouchTimestamp(base::TimeDelta timestamp) { |
268 touch_event_.SetTimestamp(timestamp); | 245 touch_event_.SetTimestamp(timestamp); |
269 } | 246 } |
270 | 247 |
271 void SendTouchEvent() { | 248 void SendTouchEvent() { |
272 input_router_->SendTouchEvent( | 249 input_router_->SendTouchEvent( |
273 TouchEventWithLatencyInfo(touch_event_, ui::LatencyInfo())); | 250 TouchEventWithLatencyInfo(touch_event_, ui::LatencyInfo())); |
274 touch_event_.ResetPoints(); | 251 touch_event_.ResetPoints(); |
275 } | 252 } |
276 | 253 |
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
778 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( | 755 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( |
779 InputMsg_HandleInputEvent::ID)); | 756 InputMsg_HandleInputEvent::ID)); |
780 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | 757 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
781 | 758 |
782 // Check that the correct unhandled wheel event was received. | 759 // Check that the correct unhandled wheel event was received. |
783 EXPECT_EQ(ack_handler_->acked_wheel_event().deltaY, -5); | 760 EXPECT_EQ(ack_handler_->acked_wheel_event().deltaY, -5); |
784 } | 761 } |
785 | 762 |
786 TEST_F(InputRouterImplTest, TouchTypesIgnoringAck) { | 763 TEST_F(InputRouterImplTest, TouchTypesIgnoringAck) { |
787 OnHasTouchEventHandlers(true); | 764 OnHasTouchEventHandlers(true); |
| 765 // Only acks for TouchCancel should always be ignored. |
| 766 ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition( |
| 767 GetEventWithType(WebInputEvent::TouchStart))); |
| 768 ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition( |
| 769 GetEventWithType(WebInputEvent::TouchMove))); |
| 770 ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition( |
| 771 GetEventWithType(WebInputEvent::TouchEnd))); |
788 | 772 |
789 int start_type = static_cast<int>(WebInputEvent::TouchStart); | 773 // Precede the TouchCancel with an appropriate TouchStart; |
790 int end_type = static_cast<int>(WebInputEvent::TouchCancel); | 774 PressTouchPoint(1, 1); |
791 ASSERT_LT(start_type, end_type); | 775 SendTouchEvent(); |
792 for (int i = start_type; i <= end_type; ++i) { | 776 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); |
793 WebInputEvent::Type type = static_cast<WebInputEvent::Type>(i); | 777 ASSERT_EQ(1U, GetSentMessageCountAndResetSink()); |
794 if (!WebInputEventTraits::IgnoresAckDisposition(GetEventWithType(type))) | 778 ASSERT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
795 continue; | 779 ASSERT_EQ(0, client_->in_flight_event_count()); |
796 | 780 |
797 // The TouchEventQueue requires an initial TouchStart for it to begin | 781 // The TouchCancel ack is always ignored. |
798 // forwarding other touch event types. | 782 CancelTouchPoint(0); |
799 if (type != WebInputEvent::TouchStart) { | 783 SendTouchEvent(); |
800 SimulateTouchEvent(WebInputEvent::TouchStart); | 784 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
801 SendInputEventACK(WebInputEvent::TouchStart, | 785 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); |
802 INPUT_EVENT_ACK_STATE_CONSUMED); | 786 EXPECT_EQ(0, client_->in_flight_event_count()); |
803 ASSERT_EQ(1U, GetSentMessageCountAndResetSink()); | 787 EXPECT_FALSE(HasPendingEvents()); |
804 ASSERT_EQ(1U, ack_handler_->GetAndResetAckCount()); | 788 SendInputEventACK(WebInputEvent::TouchCancel, |
805 ASSERT_EQ(0, client_->in_flight_event_count()); | 789 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
806 } | 790 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
807 | 791 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); |
808 SimulateTouchEvent(type); | 792 EXPECT_FALSE(HasPendingEvents()); |
809 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); | |
810 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); | |
811 EXPECT_EQ(0, client_->in_flight_event_count()); | |
812 EXPECT_FALSE(HasPendingEvents()); | |
813 SendInputEventACK(type, INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | |
814 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); | |
815 EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount()); | |
816 EXPECT_FALSE(HasPendingEvents()); | |
817 } | |
818 } | 793 } |
819 | 794 |
820 TEST_F(InputRouterImplTest, GestureTypesIgnoringAck) { | 795 TEST_F(InputRouterImplTest, GestureTypesIgnoringAck) { |
821 // We test every gesture type, ensuring that the stream of gestures is valid. | 796 // We test every gesture type, ensuring that the stream of gestures is valid. |
822 const int kEventTypesLength = 29; | 797 const int kEventTypesLength = 29; |
823 WebInputEvent::Type eventTypes[kEventTypesLength] = { | 798 WebInputEvent::Type eventTypes[kEventTypesLength] = { |
824 WebInputEvent::GestureTapDown, | 799 WebInputEvent::GestureTapDown, |
825 WebInputEvent::GestureShowPress, | 800 WebInputEvent::GestureShowPress, |
826 WebInputEvent::GestureTapCancel, | 801 WebInputEvent::GestureTapCancel, |
827 WebInputEvent::GestureScrollBegin, | 802 WebInputEvent::GestureScrollBegin, |
(...skipping 913 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1741 client_overscroll = client_->GetAndResetOverscroll(); | 1716 client_overscroll = client_->GetAndResetOverscroll(); |
1742 EXPECT_EQ(wheel_overscroll.accumulated_overscroll, | 1717 EXPECT_EQ(wheel_overscroll.accumulated_overscroll, |
1743 client_overscroll.accumulated_overscroll); | 1718 client_overscroll.accumulated_overscroll); |
1744 EXPECT_EQ(wheel_overscroll.latest_overscroll_delta, | 1719 EXPECT_EQ(wheel_overscroll.latest_overscroll_delta, |
1745 client_overscroll.latest_overscroll_delta); | 1720 client_overscroll.latest_overscroll_delta); |
1746 EXPECT_EQ(wheel_overscroll.current_fling_velocity, | 1721 EXPECT_EQ(wheel_overscroll.current_fling_velocity, |
1747 client_overscroll.current_fling_velocity); | 1722 client_overscroll.current_fling_velocity); |
1748 } | 1723 } |
1749 | 1724 |
1750 } // namespace content | 1725 } // namespace content |
OLD | NEW |