| 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..5ae8efeff6a284369af6c97408f7a1233895e78c 100644
|
| --- a/content/renderer/input/main_thread_event_queue_unittest.cc
|
| +++ b/content/renderer/input/main_thread_event_queue_unittest.cc
|
| @@ -71,6 +71,10 @@ class MainThreadEventQueueTest : public testing::Test,
|
| return queue_->events_;
|
| }
|
|
|
| + bool is_last_touch_start_force_passive() {
|
| + return queue_->is_last_touch_start_force_passive_;
|
| + }
|
| +
|
| protected:
|
| scoped_refptr<base::TestSimpleTaskRunner> main_task_runner_;
|
| scoped_refptr<MainThreadEventQueue> queue_;
|
| @@ -247,4 +251,119 @@ TEST_F(MainThreadEventQueueTest, InterleavedEvents) {
|
| }
|
| }
|
|
|
| +TEST_F(MainThreadEventQueueTest, BlockingTouchesDuringFling) {
|
| + std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
|
| + feature_list->InitializeFromCommandLine(
|
| + features::kPassiveEventListenersDueToFling.name, std::string());
|
| + base::FeatureList::ClearInstanceForTesting();
|
| + base::FeatureList::SetInstance(std::move(feature_list));
|
| +
|
| + SyntheticWebTouchEvent kEvents[1];
|
| + kEvents[0].PressPoint(10, 10);
|
| + kEvents[0].touchStartOrFirstTouchMove = true;
|
| + queue_->set_is_flinging(true);
|
| +
|
| + EXPECT_FALSE(is_last_touch_start_force_passive());
|
| + HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + 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);
|
| + EXPECT_TRUE(is_last_touch_start_force_passive());
|
| + 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);
|
| + 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);
|
| + EXPECT_TRUE(is_last_touch_start_force_passive());
|
| + 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);
|
| + 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);
|
| + 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);
|
| +}
|
| +
|
| +TEST_F(MainThreadEventQueueTest, BlockingTouchesOutsideFling) {
|
| + std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
|
| + feature_list->InitializeFromCommandLine(
|
| + features::kPassiveEventListenersDueToFling.name, std::string());
|
| + base::FeatureList::ClearInstanceForTesting();
|
| + base::FeatureList::SetInstance(std::move(feature_list));
|
| +
|
| + SyntheticWebTouchEvent kEvents[1];
|
| + kEvents[0].PressPoint(10, 10);
|
| + kEvents[0].touchStartOrFirstTouchMove = true;
|
| +
|
| + HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + 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);
|
| + EXPECT_FALSE(kEvents[0].dispatchedDuringFling);
|
| + EXPECT_EQ(kEvents[0].dispatchType, WebInputEvent::Blocking);
|
| + EXPECT_FALSE(is_last_touch_start_force_passive());
|
| + const WebTouchEvent* last_touch_event =
|
| + static_cast<const WebTouchEvent*>(handled_events_.at(0).get());
|
| + EXPECT_EQ(kEvents[0], *last_touch_event);
|
| +
|
| + kEvents[0].MovePoint(0, 30, 30);
|
| + HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
|
| + 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);
|
| + EXPECT_FALSE(kEvents[0].dispatchedDuringFling);
|
| + EXPECT_EQ(kEvents[0].dispatchType, WebInputEvent::Blocking);
|
| + EXPECT_FALSE(is_last_touch_start_force_passive());
|
| + last_touch_event =
|
| + static_cast<const WebTouchEvent*>(handled_events_.at(1).get());
|
| + EXPECT_EQ(kEvents[0], *last_touch_event);
|
| +}
|
| +
|
| } // namespace content
|
|
|