| Index: ui/aura/gestures/gesture_recognizer_unittest.cc
|
| diff --git a/ui/aura/gestures/gesture_recognizer_unittest.cc b/ui/aura/gestures/gesture_recognizer_unittest.cc
|
| index 963b24dac9c16db7845d6839a14f86743cac1941..f4f73a43c84d657b400b32d4ba2ee67cd6746404 100644
|
| --- a/ui/aura/gestures/gesture_recognizer_unittest.cc
|
| +++ b/ui/aura/gestures/gesture_recognizer_unittest.cc
|
| @@ -602,11 +602,10 @@ class TimedEvents {
|
| // An event handler to keep track of events.
|
| class TestEventHandler : public ui::EventHandler {
|
| public:
|
| - TestEventHandler() : touch_released_count_(0),
|
| - touch_pressed_count_(0),
|
| - touch_moved_count_(0),
|
| - touch_cancelled_count_(0) {
|
| - }
|
| + TestEventHandler()
|
| + : touch_released_count_(0),
|
| + touch_pressed_count_(0),
|
| + touch_moved_count_(0) {}
|
|
|
| virtual ~TestEventHandler() {}
|
|
|
| @@ -622,7 +621,7 @@ class TestEventHandler : public ui::EventHandler {
|
| touch_moved_count_++;
|
| break;
|
| case ui::ET_TOUCH_CANCELLED:
|
| - touch_cancelled_count_++;
|
| + touch_points_.push_back(event->location());
|
| break;
|
| default:
|
| break;
|
| @@ -633,46 +632,26 @@ class TestEventHandler : public ui::EventHandler {
|
| touch_released_count_ = 0;
|
| touch_pressed_count_ = 0;
|
| touch_moved_count_ = 0;
|
| - touch_cancelled_count_ = 0;
|
| + touch_points_.clear();
|
| }
|
|
|
| int touch_released_count() const { return touch_released_count_; }
|
| int touch_pressed_count() const { return touch_pressed_count_; }
|
| int touch_moved_count() const { return touch_moved_count_; }
|
| - int touch_cancelled_count() const { return touch_cancelled_count_; }
|
| + int touch_cancelled_count() const {
|
| + return static_cast<int>(touch_points_.size());
|
| + }
|
| + const std::vector<gfx::PointF>& touch_points() const { return touch_points_; }
|
|
|
| private:
|
| int touch_released_count_;
|
| int touch_pressed_count_;
|
| int touch_moved_count_;
|
| - int touch_cancelled_count_;
|
| + std::vector<gfx::PointF> touch_points_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(TestEventHandler);
|
| };
|
|
|
| -// Removes the target window from its parent when it receives a touch-cancel
|
| -// event.
|
| -class RemoveOnTouchCancelHandler : public TestEventHandler {
|
| - public:
|
| - RemoveOnTouchCancelHandler() {}
|
| - virtual ~RemoveOnTouchCancelHandler() {}
|
| -
|
| - private:
|
| - // ui::EventHandler:
|
| - virtual void OnTouchEvent(ui::TouchEvent* event) OVERRIDE {
|
| - TestEventHandler::OnTouchEvent(event);
|
| - if (event->type() == ui::ET_TOUCH_CANCELLED) {
|
| - Window* target = static_cast<Window*>(event->target());
|
| - // This is tiptoeing around crbug.com/310172. If this event handler isn't
|
| - // removed, we enter an infinite loop.
|
| - target->RemovePreTargetHandler(this);
|
| - target->parent()->RemoveChild(target);
|
| - }
|
| - }
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(RemoveOnTouchCancelHandler);
|
| -};
|
| -
|
| } // namespace
|
|
|
| class GestureRecognizerTest : public AuraTestBase,
|
| @@ -3769,31 +3748,46 @@ TEST_P(GestureRecognizerTest, GestureEventConsumedTouchMoveCanFireTapCancel) {
|
|
|
| TEST_P(GestureRecognizerTest,
|
| TransferEventDispatchesTouchCancel) {
|
| + // Only enabled for unified GR, as the old Aura GR doesn't assign
|
| + // positions to touch cancel events correctly.
|
| + if (!UsingUnifiedGR())
|
| + return;
|
| +
|
| scoped_ptr<GestureEventConsumeDelegate> delegate(
|
| new GestureEventConsumeDelegate());
|
| TimedEvents tes;
|
| const int kWindowWidth = 800;
|
| const int kWindowHeight = 600;
|
| - const int kTouchId = 2;
|
| + const int kTouchId1 = 1;
|
| + const int kTouchId2 = 2;
|
| gfx::Rect bounds(0, 0, kWindowWidth, kWindowHeight);
|
| scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate(
|
| delegate.get(), -1234, bounds, root_window()));
|
| - scoped_ptr<RemoveOnTouchCancelHandler>
|
| - handler(new RemoveOnTouchCancelHandler());
|
| + scoped_ptr<TestEventHandler> handler(new TestEventHandler());
|
| window->AddPreTargetHandler(handler.get());
|
|
|
| // Start a gesture sequence on |window|. Then transfer the events to NULL.
|
| // Make sure |window| receives a touch-cancel event.
|
| delegate->Reset();
|
| - ui::TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201),
|
| - kTouchId, tes.Now());
|
| - ui::TouchEvent p2(ui::ET_TOUCH_PRESSED, gfx::Point(50, 50), 1, tes.Now());
|
| + ui::TouchEvent press(
|
| + ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), kTouchId1, tes.Now());
|
| DispatchEventUsingWindowDispatcher(&press);
|
| + EXPECT_2_EVENTS(
|
| + delegate->events(), ui::ET_GESTURE_BEGIN, ui::ET_GESTURE_TAP_DOWN);
|
| + delegate->Reset();
|
| + ui::TouchEvent p2(
|
| + ui::ET_TOUCH_PRESSED, gfx::Point(50, 50), kTouchId2, tes.Now());
|
| DispatchEventUsingWindowDispatcher(&p2);
|
| - EXPECT_FALSE(delegate->tap());
|
| - EXPECT_TRUE(delegate->tap_down());
|
| - EXPECT_TRUE(delegate->tap_cancel());
|
| - EXPECT_TRUE(delegate->begin());
|
| + EXPECT_2_EVENTS(
|
| + delegate->events(), ui::ET_GESTURE_TAP_CANCEL, ui::ET_GESTURE_BEGIN);
|
| + delegate->Reset();
|
| + ui::TouchEvent move(
|
| + ui::ET_TOUCH_MOVED, gfx::Point(350, 300), kTouchId2, tes.Now());
|
| + DispatchEventUsingWindowDispatcher(&move);
|
| + EXPECT_3_EVENTS(delegate->events(),
|
| + ui::ET_GESTURE_SCROLL_BEGIN,
|
| + ui::ET_GESTURE_SCROLL_UPDATE,
|
| + ui::ET_GESTURE_PINCH_BEGIN);
|
| EXPECT_EQ(2, handler->touch_pressed_count());
|
| delegate->Reset();
|
| handler->Reset();
|
| @@ -3804,9 +3798,15 @@ TEST_P(GestureRecognizerTest,
|
| gesture_recognizer->TransferEventsTo(window.get(), NULL);
|
| EXPECT_EQ(NULL,
|
| gesture_recognizer->GetTouchLockedTarget(press));
|
| - // The event-handler removes |window| from its parent on the first
|
| - // touch-cancel event, so it won't receive the second touch-cancel event.
|
| - EXPECT_EQ(1, handler->touch_cancelled_count());
|
| + EXPECT_4_EVENTS(delegate->events(),
|
| + ui::ET_GESTURE_PINCH_END,
|
| + ui::ET_GESTURE_SCROLL_END,
|
| + ui::ET_GESTURE_END,
|
| + ui::ET_GESTURE_END);
|
| + const std::vector<gfx::PointF>& points = handler->touch_points();
|
| + EXPECT_EQ(2U, points.size());
|
| + EXPECT_EQ(gfx::Point(101, 201), points[0]);
|
| + EXPECT_EQ(gfx::Point(350, 300), points[1]);
|
| }
|
|
|
| // Check that appropriate touch events generate show press events
|
|
|