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 25f9186836352a8ebc582cb18e76a84e45e36177..b9994ed07b8b99e536b0f6b4dad50674b3fbdf49 100644 |
--- a/ui/aura/window_event_dispatcher_unittest.cc |
+++ b/ui/aura/window_event_dispatcher_unittest.cc |
@@ -449,7 +449,8 @@ class EventFilterRecorder : public ui::EventHandler { |
typedef std::vector<int> EventFlags; |
EventFilterRecorder() |
- : wait_until_event_(ui::ET_UNKNOWN) { |
+ : wait_until_event_(ui::ET_UNKNOWN), |
+ last_touch_may_cause_scrolling_(false) { |
} |
const Events& events() const { return events_; } |
@@ -478,6 +479,7 @@ class EventFilterRecorder : public ui::EventHandler { |
touch_locations_.clear(); |
gesture_locations_.clear(); |
mouse_event_flags_.clear(); |
+ last_touch_may_cause_scrolling_ = false; |
} |
// ui::EventHandler overrides: |
@@ -497,6 +499,7 @@ class EventFilterRecorder : public ui::EventHandler { |
void OnTouchEvent(ui::TouchEvent* event) override { |
touch_locations_.push_back(event->location()); |
+ last_touch_may_cause_scrolling_ = event->may_cause_scrolling(); |
} |
void OnGestureEvent(ui::GestureEvent* event) override { |
@@ -507,6 +510,10 @@ class EventFilterRecorder : public ui::EventHandler { |
return std::find(events_.begin(), events_.end(), type) != events_.end(); |
} |
+ bool LastTouchMayCauseScrolling() const { |
+ return last_touch_may_cause_scrolling_; |
+ } |
+ |
private: |
scoped_ptr<base::RunLoop> run_loop_; |
ui::EventType wait_until_event_; |
@@ -516,6 +523,7 @@ class EventFilterRecorder : public ui::EventHandler { |
EventLocations touch_locations_; |
EventLocations gesture_locations_; |
EventFlags mouse_event_flags_; |
+ bool last_touch_may_cause_scrolling_; |
DISALLOW_COPY_AND_ASSIGN(EventFilterRecorder); |
}; |
@@ -2378,4 +2386,51 @@ TEST_F(WindowEventDispatcherTest, GestureEventCoordinates) { |
recorder.gesture_locations()[0].ToString()); |
} |
+// Tests that a scroll-generating touch-event is marked as such. |
+TEST_F(WindowEventDispatcherTest, TouchMovesMarkedWhenCausingScroll) { |
+ 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_FALSE(recorder.LastTouchMayCauseScrolling()); |
+ EXPECT_TRUE(recorder.HasReceivedEvent(ui::ET_TOUCH_PRESSED)); |
+ recorder.Reset(); |
+ |
+ ui::TouchEvent move(ui::ET_TOUCH_MOVED, |
+ location + gfx::Vector2d(100, 100), |
+ 0, |
+ ui::EventTimeForNow()); |
+ DispatchEventUsingWindowDispatcher(&move); |
+ EXPECT_TRUE(recorder.LastTouchMayCauseScrolling()); |
+ 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)); |
+ recorder.Reset(); |
+ |
+ ui::TouchEvent move2(ui::ET_TOUCH_MOVED, |
+ location + gfx::Vector2d(200, 200), |
+ 0, |
+ ui::EventTimeForNow()); |
+ DispatchEventUsingWindowDispatcher(&move2); |
+ EXPECT_TRUE(recorder.LastTouchMayCauseScrolling()); |
+ EXPECT_TRUE(recorder.HasReceivedEvent(ui::ET_TOUCH_MOVED)); |
+ EXPECT_TRUE(recorder.HasReceivedEvent(ui::ET_GESTURE_SCROLL_UPDATE)); |
+ recorder.Reset(); |
+ |
+ // Delay the release to avoid fling generation. |
+ ui::TouchEvent release( |
+ ui::ET_TOUCH_RELEASED, |
+ location + gfx::Vector2dF(200, 200), |
+ 0, |
+ ui::EventTimeForNow() + base::TimeDelta::FromSeconds(1)); |
+ DispatchEventUsingWindowDispatcher(&release); |
+ EXPECT_FALSE(recorder.LastTouchMayCauseScrolling()); |
+ EXPECT_TRUE(recorder.HasReceivedEvent(ui::ET_TOUCH_RELEASED)); |
+ EXPECT_TRUE(recorder.HasReceivedEvent(ui::ET_GESTURE_SCROLL_END)); |
+ |
+ root_window()->RemovePreTargetHandler(&recorder); |
+} |
} // namespace aura |