Index: content/renderer/input/main_thread_event_queue_unittest.cc |
diff --git a/content/renderer/input/main_thread_event_queue_unittest.cc b/content/renderer/input/main_thread_event_queue_unittest.cc |
index e54d0794fab5dd50764a14075c38c9ad7e97652d..3c8afc7130433639f38abd6178c6cf392365060d 100644 |
--- a/content/renderer/input/main_thread_event_queue_unittest.cc |
+++ b/content/renderer/input/main_thread_event_queue_unittest.cc |
@@ -241,10 +241,84 @@ TEST_F(MainThreadEventQueueTest, InterleavedEvents) { |
static_cast<const WebTouchEvent*>(handled_events_.at(1).get()); |
WebTouchEvent coalesced_event = kTouchEvents[0]; |
internal::Coalesce(kTouchEvents[1], &coalesced_event); |
- coalesced_event.dispatchType = |
- WebInputEvent::DispatchType::ListenersNonBlockingPassive; |
+ coalesced_event.dispatchType = WebInputEvent::ListenersNonBlockingPassive; |
EXPECT_EQ(coalesced_event, *last_touch_event); |
} |
} |
+TEST_F(MainThreadEventQueueTest, BlockingTouchesDuringFling) { |
+ SyntheticWebTouchEvent kEvents[1]; |
+ kEvents[0].PressPoint(10, 10); |
+ kEvents[0].touchStartOrFirstTouchMove = true; |
+ queue_->set_is_flinging(true); |
+ |
+ EXPECT_FALSE(main_task_runner_->HasPendingTask()); |
+ EXPECT_EQ(0u, event_queue().size()); |
+ HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
+ EXPECT_EQ(1u, event_queue().size()); |
+ EXPECT_TRUE(main_task_runner_->HasPendingTask()); |
+ main_task_runner_->RunUntilIdle(); |
+ EXPECT_FALSE(main_task_runner_->HasPendingTask()); |
+ EXPECT_EQ(0u, event_queue().size()); |
+ EXPECT_EQ(1u, handled_events_.size()); |
+ EXPECT_EQ(kEvents[0].size, handled_events_.at(0)->size); |
+ EXPECT_EQ(kEvents[0].type, handled_events_.at(0)->type); |
+ const WebTouchEvent* last_touch_event = |
+ static_cast<const WebTouchEvent*>(handled_events_.at(0).get()); |
+ kEvents[0].dispatchedDuringFling = true; |
+ kEvents[0].dispatchType = |
+ WebInputEvent::ListenersForcedNonBlockingPassiveDueToFling; |
+ EXPECT_EQ(kEvents[0], *last_touch_event); |
+ |
+ kEvents[0].MovePoint(0, 30, 30); |
+ HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
+ EXPECT_EQ(1u, event_queue().size()); |
+ EXPECT_TRUE(main_task_runner_->HasPendingTask()); |
+ main_task_runner_->RunUntilIdle(); |
+ EXPECT_FALSE(main_task_runner_->HasPendingTask()); |
+ EXPECT_EQ(0u, event_queue().size()); |
+ EXPECT_EQ(2u, handled_events_.size()); |
+ EXPECT_EQ(kEvents[0].size, handled_events_.at(1)->size); |
+ EXPECT_EQ(kEvents[0].type, handled_events_.at(1)->type); |
+ last_touch_event = |
+ static_cast<const WebTouchEvent*>(handled_events_.at(1).get()); |
+ kEvents[0].dispatchedDuringFling = true; |
+ kEvents[0].dispatchType = |
+ WebInputEvent::ListenersForcedNonBlockingPassiveDueToFling; |
+ EXPECT_EQ(kEvents[0], *last_touch_event); |
+ |
+ kEvents[0].MovePoint(0, 50, 50); |
+ kEvents[0].touchStartOrFirstTouchMove = false; |
+ HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
+ EXPECT_EQ(1u, event_queue().size()); |
+ EXPECT_TRUE(main_task_runner_->HasPendingTask()); |
+ main_task_runner_->RunUntilIdle(); |
+ EXPECT_FALSE(main_task_runner_->HasPendingTask()); |
+ EXPECT_EQ(0u, event_queue().size()); |
+ EXPECT_EQ(3u, handled_events_.size()); |
+ EXPECT_EQ(kEvents[0].size, handled_events_.at(2)->size); |
+ EXPECT_EQ(kEvents[0].type, handled_events_.at(2)->type); |
+ EXPECT_TRUE(kEvents[0].dispatchedDuringFling); |
+ EXPECT_EQ(kEvents[0].dispatchType, WebInputEvent::Blocking); |
+ last_touch_event = |
+ static_cast<const WebTouchEvent*>(handled_events_.at(2).get()); |
+ EXPECT_EQ(kEvents[0], *last_touch_event); |
+ |
+ kEvents[0].ReleasePoint(0); |
+ HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
+ EXPECT_EQ(1u, event_queue().size()); |
+ EXPECT_TRUE(main_task_runner_->HasPendingTask()); |
+ main_task_runner_->RunUntilIdle(); |
+ EXPECT_FALSE(main_task_runner_->HasPendingTask()); |
+ EXPECT_EQ(0u, event_queue().size()); |
+ EXPECT_EQ(4u, handled_events_.size()); |
+ EXPECT_EQ(kEvents[0].size, handled_events_.at(3)->size); |
+ EXPECT_EQ(kEvents[0].type, handled_events_.at(3)->type); |
+ EXPECT_TRUE(kEvents[0].dispatchedDuringFling); |
+ EXPECT_EQ(kEvents[0].dispatchType, WebInputEvent::Blocking); |
+ last_touch_event = |
+ static_cast<const WebTouchEvent*>(handled_events_.at(3).get()); |
+ EXPECT_EQ(kEvents[0], *last_touch_event); |
+} |
+ |
} // namespace content |