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 5fbf8b0a7cb441ec3a37725df1594ad7b3708249..0b12ad923591b749fd46a29ce35ffb6058803f6d 100644 |
--- a/content/renderer/input/main_thread_event_queue_unittest.cc |
+++ b/content/renderer/input/main_thread_event_queue_unittest.cc |
@@ -259,4 +259,77 @@ TEST_F(MainThreadEventQueueTest, InterleavedEvents) { |
} |
} |
+TEST_F(MainThreadEventQueueTest, BlockingTouchesDuringFling) { |
+ SyntheticWebTouchEvent kEvents[1]; |
+ kEvents[0].PressPoint(10, 10); |
+ queue_->set_is_flinging(true); |
+ |
+ EXPECT_FALSE(main_task_runner_->HasPendingTask()); |
+ EXPECT_EQ(0u, event_queue().size()); |
+ queue_->HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, |
+ 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::DispatchType::ListenersForcedNonBlockingPassiveDueToFling; |
+ EXPECT_EQ(kEvents[0], *last_touch_event); |
+ |
+ kEvents[0].MovePoint(0, 30, 30); |
+ queue_->HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, |
+ 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::DispatchType::ListenersForcedNonBlockingPassiveDueToFling; |
+ EXPECT_EQ(kEvents[0], *last_touch_event); |
+ |
+ kEvents[0].MovePoint(0, 50, 50); |
+ queue_->HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, |
+ 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); |
+ last_touch_event = |
dtapuska
2016/08/10 14:47:42
What are you expecting to have dispatchedDuringFli
|
+ static_cast<const WebTouchEvent*>(handled_events_.at(2).get()); |
+ EXPECT_EQ(kEvents[0], *last_touch_event); |
+ |
+ kEvents[0].ReleasePoint(0); |
+ queue_->HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, |
+ 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); |
+ last_touch_event = |
+ static_cast<const WebTouchEvent*>(handled_events_.at(3).get()); |
+ EXPECT_EQ(kEvents[0], *last_touch_event); |
+} |
+ |
} // namespace content |