diff options
author | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-13 22:47:31 +0000 |
---|---|---|
committer | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-13 22:47:31 +0000 |
commit | a427e071238bc08da79af70adbc71ef14be9feab (patch) | |
tree | cdff54b4de982bd5ac099cd3f316eae69651e20b /ui/aura/gestures | |
parent | 704e82e72bee263d46a3435365cef0162c98d216 (diff) | |
download | chromium_src-a427e071238bc08da79af70adbc71ef14be9feab.zip chromium_src-a427e071238bc08da79af70adbc71ef14be9feab.tar.gz chromium_src-a427e071238bc08da79af70adbc71ef14be9feab.tar.bz2 |
gesture recognizer: Change the way a processed touch-release event is handled.
Instead of creating a fake touch-cancelled event and sending that to the
gesture recognizer, send the raw touch-release event with the status of
the event-processing. Update the gesture recognizer (GestureSequence)
transitions to handle these events correctly instead.
BUG=none
Review URL: https://chromiumcodereview.appspot.com/10831295
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@151375 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/aura/gestures')
-rw-r--r-- | ui/aura/gestures/gesture_recognizer_unittest.cc | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/ui/aura/gestures/gesture_recognizer_unittest.cc b/ui/aura/gestures/gesture_recognizer_unittest.cc index 0248672..12a9d26 100644 --- a/ui/aura/gestures/gesture_recognizer_unittest.cc +++ b/ui/aura/gestures/gesture_recognizer_unittest.cc @@ -1883,6 +1883,90 @@ TEST_F(GestureRecognizerTest, NoTapWithPreventDefaultedRelease) { EXPECT_FALSE(delegate->tap()); } +TEST_F(GestureRecognizerTest, PinchScrollWithPreventDefaultedRelease) { + scoped_ptr<QueueTouchEventDelegate> delegate( + new QueueTouchEventDelegate(root_window())); + const int kTouchId1 = 7; + const int kTouchId2 = 5; + gfx::Rect bounds(10, 20, 100, 100); + scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( + delegate.get(), -1234, bounds, NULL)); + delegate->set_window(window.get()); + + delegate->Reset(); + ui::TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(15, 25), kTouchId1, + GetTime()); + ui::TouchEvent move(ui::ET_TOUCH_MOVED, gfx::Point(20, 95), kTouchId1, + press.time_stamp() + base::TimeDelta::FromMilliseconds(200)); + ui::TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(15, 25), kTouchId1, + move.time_stamp() + base::TimeDelta::FromMilliseconds(50)); + root_window()->AsRootWindowHostDelegate()->OnHostTouchEvent(&press); + root_window()->AsRootWindowHostDelegate()->OnHostTouchEvent(&move); + root_window()->AsRootWindowHostDelegate()->OnHostTouchEvent(&release); + delegate->Reset(); + + // Ack the press event. + delegate->ReceivedAck(); + EXPECT_TRUE(delegate->tap_down()); + delegate->Reset(); + + // Ack the move event. + delegate->ReceivedAck(); + EXPECT_TRUE(delegate->scroll_begin()); + delegate->Reset(); + + // Ack the release event. Although the release event has been processed, it + // should still generate a scroll-end event. + delegate->ReceivedAckPreventDefaulted(); + EXPECT_TRUE(delegate->scroll_end()); + + ui::TouchEvent press2(ui::ET_TOUCH_PRESSED, gfx::Point(55, 25), kTouchId2, + GetTime()); + ui::TouchEvent move2(ui::ET_TOUCH_MOVED, gfx::Point(45, 85), kTouchId2, + press2.time_stamp() + base::TimeDelta::FromMilliseconds(1000)); + ui::TouchEvent release2(ui::ET_TOUCH_RELEASED, gfx::Point(45, 85), kTouchId2, + move2.time_stamp() + base::TimeDelta::FromMilliseconds(14)); + + // Do a pinch. + root_window()->AsRootWindowHostDelegate()->OnHostTouchEvent(&press); + root_window()->AsRootWindowHostDelegate()->OnHostTouchEvent(&move); + root_window()->AsRootWindowHostDelegate()->OnHostTouchEvent(&press2); + root_window()->AsRootWindowHostDelegate()->OnHostTouchEvent(&move2); + root_window()->AsRootWindowHostDelegate()->OnHostTouchEvent(&release); + root_window()->AsRootWindowHostDelegate()->OnHostTouchEvent(&release2); + + // Ack the press and move events. + delegate->Reset(); + delegate->ReceivedAck(); + EXPECT_TRUE(delegate->begin()); + EXPECT_TRUE(delegate->tap_down()); + + delegate->Reset(); + delegate->ReceivedAck(); + EXPECT_TRUE(delegate->scroll_begin()); + + delegate->Reset(); + delegate->ReceivedAck(); + EXPECT_TRUE(delegate->begin()); + EXPECT_FALSE(delegate->pinch_begin()); + + delegate->Reset(); + delegate->ReceivedAck(); + EXPECT_TRUE(delegate->pinch_begin()); + + // Ack the first release. Although the release is processed, it should still + // generate a pinch-end event. + delegate->Reset(); + delegate->ReceivedAckPreventDefaulted(); + EXPECT_TRUE(delegate->pinch_end()); + EXPECT_TRUE(delegate->end()); + + delegate->Reset(); + delegate->ReceivedAckPreventDefaulted(); + EXPECT_TRUE(delegate->scroll_end()); + EXPECT_TRUE(delegate->end()); +} + TEST_F(GestureRecognizerTest, CaptureSendsGestureEnd) { scoped_ptr<GestureEventConsumeDelegate> delegate( new GestureEventConsumeDelegate()); |