| Index: ui/aura/window_event_dispatcher_unittest.cc
|
| diff --git a/ui/aura/window_event_dispatcher_unittest.cc b/ui/aura/window_event_dispatcher_unittest.cc
|
| index 86b60463bc321b4ead26e7b7010a53b03107efee..716bcc908735142273b3ba8ee6ae4b58c3904f2e 100644
|
| --- a/ui/aura/window_event_dispatcher_unittest.cc
|
| +++ b/ui/aura/window_event_dispatcher_unittest.cc
|
| @@ -588,7 +588,7 @@ std::string EventTypeToString(ui::EventType type) {
|
|
|
| default:
|
| // We should explicitly require each event type.
|
| - NOTREACHED();
|
| + NOTREACHED() << "Received unexpected event: " << type;
|
| break;
|
| }
|
| return "";
|
| @@ -744,12 +744,15 @@ TEST_F(WindowEventDispatcherTest, TouchMovesHeld) {
|
| // Check that we don't immediately dispatch the TOUCH_MOVED event.
|
| ui::TouchEvent touch_moved_event(
|
| ui::ET_TOUCH_MOVED, touch_location, 0, ui::EventTimeForNow());
|
| + ui::TouchEvent touch_moved_event2 = touch_moved_event;
|
| + ui::TouchEvent touch_moved_event3 = touch_moved_event;
|
| +
|
| DispatchEventUsingWindowDispatcher(&touch_moved_event);
|
| EXPECT_TRUE(recorder.events().empty());
|
|
|
| // Check that on ReleasePointerMoves, held events are not dispatched
|
| // immediately, but posted instead.
|
| - DispatchEventUsingWindowDispatcher(&touch_moved_event);
|
| + DispatchEventUsingWindowDispatcher(&touch_moved_event2);
|
| host()->dispatcher()->ReleasePointerMoves();
|
| EXPECT_TRUE(recorder.events().empty());
|
|
|
| @@ -763,7 +766,7 @@ TEST_F(WindowEventDispatcherTest, TouchMovesHeld) {
|
| ui::ET_TOUCH_RELEASED, touch_location, 0, ui::EventTimeForNow());
|
| recorder.Reset();
|
| host()->dispatcher()->HoldPointerMoves();
|
| - DispatchEventUsingWindowDispatcher(&touch_moved_event);
|
| + DispatchEventUsingWindowDispatcher(&touch_moved_event3);
|
| DispatchEventUsingWindowDispatcher(&touch_released_event);
|
| EXPECT_EQ("TOUCH_MOVED TOUCH_RELEASED GESTURE_TAP GESTURE_END",
|
| EventTypesToString(recorder.events()));
|
| @@ -773,20 +776,21 @@ TEST_F(WindowEventDispatcherTest, TouchMovesHeld) {
|
| EXPECT_TRUE(recorder.events().empty());
|
| }
|
|
|
| +// This event handler requests the dispatcher to start holding pointer-move
|
| +// events when it receives the first scroll-update gesture.
|
| class HoldPointerOnScrollHandler : public ui::test::TestEventHandler {
|
| public:
|
| HoldPointerOnScrollHandler(WindowEventDispatcher* dispatcher,
|
| - EventFilterRecorder* filter)
|
| + EventFilterRecorder* filter)
|
| : dispatcher_(dispatcher),
|
| filter_(filter),
|
| - holding_moves_(false) {
|
| - }
|
| + holding_moves_(false) {}
|
| virtual ~HoldPointerOnScrollHandler() {}
|
|
|
| private:
|
| + // ui::test::TestEventHandler:
|
| virtual void OnGestureEvent(ui::GestureEvent* gesture) OVERRIDE {
|
| - if (gesture->type() == ui::ET_GESTURE_SCROLL_UPDATE) {
|
| - CHECK(!holding_moves_);
|
| + if (!holding_moves_ && gesture->type() == ui::ET_GESTURE_SCROLL_UPDATE) {
|
| holding_moves_ = true;
|
| dispatcher_->HoldPointerMoves();
|
| filter_->Reset();
|
| @@ -825,8 +829,10 @@ TEST_F(WindowEventDispatcherTest, TouchMovesHeldOnScroll) {
|
| // along with the subsequent events (i.e. touch-release, scroll-end, and
|
| // gesture-end).
|
| const EventFilterRecorder::Events& events = recorder.events();
|
| - EXPECT_EQ("TOUCH_MOVED TOUCH_RELEASED GESTURE_SCROLL_END GESTURE_END",
|
| - EventTypesToString(events));
|
| + EXPECT_EQ(
|
| + "TOUCH_MOVED GESTURE_SCROLL_UPDATE TOUCH_RELEASED "
|
| + "GESTURE_SCROLL_END GESTURE_END",
|
| + EventTypesToString(events));
|
| ASSERT_EQ(2u, recorder.touch_locations().size());
|
| EXPECT_EQ(gfx::Point(-40, 10).ToString(),
|
| recorder.touch_locations()[0].ToString());
|
| @@ -834,6 +840,40 @@ TEST_F(WindowEventDispatcherTest, TouchMovesHeldOnScroll) {
|
| recorder.touch_locations()[1].ToString());
|
| }
|
|
|
| +// Tests that a 'held' touch-event does contribute to gesture event when it is
|
| +// dispatched.
|
| +TEST_F(WindowEventDispatcherTest, HeldTouchMoveContributesToGesture) {
|
| + EventFilterRecorder recorder;
|
| + root_window()->AddPreTargetHandler(&recorder);
|
| +
|
| + const gfx::Point location(20, 20);
|
| + ui::TouchEvent press(
|
| + ui::ET_TOUCH_PRESSED, location, 0, ui::EventTimeForNow());
|
| + DispatchEventUsingWindowDispatcher(&press);
|
| + EXPECT_TRUE(recorder.HasReceivedEvent(ui::ET_TOUCH_PRESSED));
|
| + recorder.Reset();
|
| +
|
| + host()->dispatcher()->HoldPointerMoves();
|
| +
|
| + ui::TouchEvent move(ui::ET_TOUCH_MOVED,
|
| + location + gfx::Vector2d(100, 100),
|
| + 0,
|
| + ui::EventTimeForNow());
|
| + DispatchEventUsingWindowDispatcher(&move);
|
| + EXPECT_FALSE(recorder.HasReceivedEvent(ui::ET_TOUCH_MOVED));
|
| + EXPECT_FALSE(recorder.HasReceivedEvent(ui::ET_GESTURE_SCROLL_BEGIN));
|
| + recorder.Reset();
|
| +
|
| + host()->dispatcher()->ReleasePointerMoves();
|
| + EXPECT_FALSE(recorder.HasReceivedEvent(ui::ET_TOUCH_MOVED));
|
| + RunAllPendingInMessageLoop();
|
| + EXPECT_TRUE(recorder.HasReceivedEvent(ui::ET_TOUCH_MOVED));
|
| + EXPECT_TRUE(recorder.HasReceivedEvent(ui::ET_GESTURE_SCROLL_BEGIN));
|
| + EXPECT_TRUE(recorder.HasReceivedEvent(ui::ET_GESTURE_SCROLL_UPDATE));
|
| +
|
| + root_window()->RemovePreTargetHandler(&recorder);
|
| +}
|
| +
|
| // Tests that synthetic mouse events are ignored when mouse
|
| // events are disabled.
|
| TEST_F(WindowEventDispatcherTest, DispatchSyntheticMouseEvents) {
|
| @@ -1895,8 +1935,10 @@ TEST_F(WindowEventDispatcherTestInHighDPI, TouchMovesHeldOnScroll) {
|
| // along with the subsequent events (i.e. touch-release, scroll-end, and
|
| // gesture-end).
|
| const EventFilterRecorder::Events& events = recorder.events();
|
| - EXPECT_EQ("TOUCH_MOVED TOUCH_RELEASED GESTURE_SCROLL_END GESTURE_END",
|
| - EventTypesToString(events));
|
| + EXPECT_EQ(
|
| + "TOUCH_MOVED GESTURE_SCROLL_UPDATE TOUCH_RELEASED "
|
| + "GESTURE_SCROLL_END GESTURE_END",
|
| + EventTypesToString(events));
|
| ASSERT_EQ(2u, recorder.touch_locations().size());
|
| EXPECT_EQ(gfx::Point(-40, 10).ToString(),
|
| recorder.touch_locations()[0].ToString());
|
|
|