| Index: ui/views/widget/widget_unittest.cc
|
| diff --git a/ui/views/widget/widget_unittest.cc b/ui/views/widget/widget_unittest.cc
|
| index dc11612ca052709d91f6dba3c6bd661950d28d24..c23fd0f6d0d6bbdd972abd08e5e0ad3d6f5f26d3 100644
|
| --- a/ui/views/widget/widget_unittest.cc
|
| +++ b/ui/views/widget/widget_unittest.cc
|
| @@ -136,11 +136,7 @@ class EventCountView : public View {
|
| event_count_.clear();
|
| }
|
|
|
| - private:
|
| - void RecordEvent(const ui::Event& event) {
|
| - ++event_count_[event.type()];
|
| - }
|
| -
|
| + protected:
|
| // Overridden from View:
|
| virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE {
|
| RecordEvent(event);
|
| @@ -192,11 +188,42 @@ class EventCountView : public View {
|
| RecordEvent(*event);
|
| }
|
|
|
| + private:
|
| + void RecordEvent(const ui::Event& event) {
|
| + ++event_count_[event.type()];
|
| + }
|
| +
|
| std::map<ui::EventType, int> event_count_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(EventCountView);
|
| };
|
|
|
| +// A view that keeps track of the events it receives, and consumes all scroll
|
| +// gesture events.
|
| +class ScrollableEventCountView : public EventCountView {
|
| + public:
|
| + ScrollableEventCountView() {}
|
| + virtual ~ScrollableEventCountView() {}
|
| +
|
| + private:
|
| + // Overridden from ui::EventHandler:
|
| + virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE {
|
| + EventCountView::OnGestureEvent(event);
|
| + switch (event->type()) {
|
| + case ui::ET_GESTURE_SCROLL_BEGIN:
|
| + case ui::ET_GESTURE_SCROLL_UPDATE:
|
| + case ui::ET_GESTURE_SCROLL_END:
|
| + case ui::ET_SCROLL_FLING_START:
|
| + event->SetHandled();
|
| + break;
|
| + default:
|
| + break;
|
| + }
|
| + }
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ScrollableEventCountView);
|
| +};
|
| +
|
| // A view that does a capture on gesture-begin events.
|
| class GestureCaptureView : public View {
|
| public:
|
| @@ -1282,9 +1309,71 @@ TEST_F(WidgetTest, WheelEventsFromScrollEventTarget) {
|
|
|
| EXPECT_EQ(0, cursor_view->GetEventCount(ui::ET_SCROLL));
|
| EXPECT_EQ(0, cursor_view->GetEventCount(ui::ET_MOUSEWHEEL));
|
| +
|
| + widget->CloseNow();
|
| }
|
|
|
| #endif // defined(USE_AURA)
|
|
|
| +// Tests that if a scroll-begin gesture is not handled, then subsequent scroll
|
| +// events are not dispatched to any view.
|
| +TEST_F(WidgetTest, GestureScrollEventDispatching) {
|
| + EventCountView* noscroll_view = new EventCountView;
|
| + EventCountView* scroll_view = new ScrollableEventCountView;
|
| +
|
| + noscroll_view->SetBounds(0, 0, 50, 40);
|
| + scroll_view->SetBounds(60, 0, 40, 40);
|
| +
|
| + Widget* widget = CreateTopLevelPlatformWidget();
|
| + widget->GetRootView()->AddChildView(noscroll_view);
|
| + widget->GetRootView()->AddChildView(scroll_view);
|
| +
|
| + {
|
| + ui::GestureEvent begin(ui::ET_GESTURE_SCROLL_BEGIN,
|
| + 5, 5, 0, base::TimeDelta(),
|
| + ui::GestureEventDetails(ui::ET_GESTURE_SCROLL_BEGIN, 0, 0),
|
| + 1);
|
| + widget->OnGestureEvent(&begin);
|
| + ui::GestureEvent update(ui::ET_GESTURE_SCROLL_UPDATE,
|
| + 25, 15, 0, base::TimeDelta(),
|
| + ui::GestureEventDetails(ui::ET_GESTURE_SCROLL_UPDATE, 20, 10),
|
| + 1);
|
| + widget->OnGestureEvent(&update);
|
| + ui::GestureEvent end(ui::ET_GESTURE_SCROLL_END,
|
| + 25, 15, 0, base::TimeDelta(),
|
| + ui::GestureEventDetails(ui::ET_GESTURE_SCROLL_END, 0, 0),
|
| + 1);
|
| + widget->OnGestureEvent(&end);
|
| +
|
| + EXPECT_EQ(1, noscroll_view->GetEventCount(ui::ET_GESTURE_SCROLL_BEGIN));
|
| + EXPECT_EQ(0, noscroll_view->GetEventCount(ui::ET_GESTURE_SCROLL_UPDATE));
|
| + EXPECT_EQ(0, noscroll_view->GetEventCount(ui::ET_GESTURE_SCROLL_END));
|
| + }
|
| +
|
| + {
|
| + ui::GestureEvent begin(ui::ET_GESTURE_SCROLL_BEGIN,
|
| + 65, 5, 0, base::TimeDelta(),
|
| + ui::GestureEventDetails(ui::ET_GESTURE_SCROLL_BEGIN, 0, 0),
|
| + 1);
|
| + widget->OnGestureEvent(&begin);
|
| + ui::GestureEvent update(ui::ET_GESTURE_SCROLL_UPDATE,
|
| + 85, 15, 0, base::TimeDelta(),
|
| + ui::GestureEventDetails(ui::ET_GESTURE_SCROLL_UPDATE, 20, 10),
|
| + 1);
|
| + widget->OnGestureEvent(&update);
|
| + ui::GestureEvent end(ui::ET_GESTURE_SCROLL_END,
|
| + 85, 15, 0, base::TimeDelta(),
|
| + ui::GestureEventDetails(ui::ET_GESTURE_SCROLL_END, 0, 0),
|
| + 1);
|
| + widget->OnGestureEvent(&end);
|
| +
|
| + EXPECT_EQ(1, scroll_view->GetEventCount(ui::ET_GESTURE_SCROLL_BEGIN));
|
| + EXPECT_EQ(1, scroll_view->GetEventCount(ui::ET_GESTURE_SCROLL_UPDATE));
|
| + EXPECT_EQ(1, scroll_view->GetEventCount(ui::ET_GESTURE_SCROLL_END));
|
| + }
|
| +
|
| + widget->CloseNow();
|
| +}
|
| +
|
| } // namespace
|
| } // namespace views
|
|
|