Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(882)

Unified Diff: content/browser/renderer_host/input/touch_event_queue_unittest.cc

Issue 718153002: Indicate whether a touch event will cause scrolling (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/input/touch_event_queue_unittest.cc
diff --git a/content/browser/renderer_host/input/touch_event_queue_unittest.cc b/content/browser/renderer_host/input/touch_event_queue_unittest.cc
index fcd5ce8d07b4ba1c8b25408d73129788b71e3e5f..bb8f725825c7d9af5f75df7b295479ec0c9430a7 100644
--- a/content/browser/renderer_host/input/touch_event_queue_unittest.cc
+++ b/content/browser/renderer_host/input/touch_event_queue_unittest.cc
@@ -9,6 +9,7 @@
#include "content/browser/renderer_host/input/timeout_monitor.h"
#include "content/browser/renderer_host/input/touch_event_queue.h"
#include "content/common/input/synthetic_web_input_event_builders.h"
+#include "content/common/input/web_touch_event_traits.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/WebKit/public/web/WebInputEvent.h"
@@ -21,6 +22,8 @@ namespace content {
namespace {
const double kMinSecondsBetweenThrottledTouchmoves = 0.2;
+const float kSlopLengthDips = 10;
+const float kHalfSlopLengthDips = kSlopLengthDips / 2;
base::TimeDelta DefaultTouchTimeoutDelay() {
return base::TimeDelta::FromMilliseconds(1);
@@ -78,7 +81,6 @@ class TouchEventQueueTest : public testing::Test,
TouchEventQueue::Config CreateConfig() {
TouchEventQueue::Config config;
config.touch_scrolling_mode = touch_scrolling_mode_;
- config.touchmove_slop_suppression_length_dips = slop_length_dips_;
return config;
}
@@ -89,7 +91,6 @@ class TouchEventQueueTest : public testing::Test,
void SetUpForTouchMoveSlopTesting(double slop_length_dips) {
slop_length_dips_ = slop_length_dips;
- ResetQueueWithConfig(CreateConfig());
}
void SetUpForTimeoutTesting(base::TimeDelta timeout_delay) {
@@ -99,7 +100,20 @@ class TouchEventQueueTest : public testing::Test,
ResetQueueWithConfig(config);
}
- void SendTouchEvent(const WebTouchEvent& event) {
+ void SendTouchEvent(WebTouchEvent event) {
+ if (slop_length_dips_) {
+ event.causesScrollingIfUncanceled = false;
+ if (WebTouchEventTraits::IsTouchSequenceStart(event))
+ anchor_ = event.touches[0].position;
+ if (event.type == WebInputEvent::TouchMove) {
+ gfx::Vector2dF delta = anchor_ - event.touches[0].position;
+ if (delta.LengthSquared() > slop_length_dips_ * slop_length_dips_)
+ event.causesScrollingIfUncanceled = true;
+ }
+ } else {
+ event.causesScrollingIfUncanceled =
+ event.type == WebInputEvent::TouchMove;
+ }
queue_->QueueEvent(TouchEventWithLatencyInfo(event, ui::LatencyInfo()));
}
@@ -249,6 +263,7 @@ class TouchEventQueueTest : public testing::Test,
scoped_ptr<WebGestureEvent> followup_gesture_event_;
scoped_ptr<InputEventAckState> sync_ack_result_;
double slop_length_dips_;
+ gfx::PointF anchor_;
TouchEventQueue::TouchScrollingMode touch_scrolling_mode_;
base::MessageLoopForUI message_loop_;
};
@@ -1441,8 +1456,6 @@ TEST_F(TouchEventQueueTest, NoCancelOnTouchTimeoutWithoutConsumer) {
// Tests that TouchMove's are dropped if within the boundary-inclusive slop
// suppression region for an unconsumed TouchStart.
TEST_F(TouchEventQueueTest, TouchMoveSuppressionIncludingSlopBoundary) {
- const float kSlopLengthDips = 10;
- const float kHalfSlopLengthDips = kSlopLengthDips / 2;
SetUpForTouchMoveSlopTesting(kSlopLengthDips);
// Queue a TouchStart.
@@ -1526,8 +1539,6 @@ TEST_F(TouchEventQueueTest, TouchMoveSuppressionIncludingSlopBoundary) {
// Tests that TouchMove's are not dropped within the slop suppression region if
// the touchstart was consumed.
TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionAfterTouchConsumed) {
- const float kSlopLengthDips = 10;
- const float kHalfSlopLengthDips = kSlopLengthDips / 2;
SetUpForTouchMoveSlopTesting(kSlopLengthDips);
// Queue a TouchStart.
@@ -1560,51 +1571,9 @@ TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionIfDisabled) {
EXPECT_EQ(0U, GetAndResetAckedEventCount());
}
-// Tests that TouchMove's are not dropped due to incorrect handling of DPI
-// scaling.
-TEST_F(TouchEventQueueTest, TouchMoveSuppressionWithDIPScaling) {
- const float kSlopLengthPixels = 7.f;
- const float kDPIScale = 3.f;
- SetUpForTouchMoveSlopTesting(kSlopLengthPixels / kDPIScale);
-
- // Queue a TouchStart.
- PressTouchPoint(0, 0);
- SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
- ASSERT_EQ(1U, GetAndResetSentEventCount());
- ASSERT_EQ(1U, GetAndResetAckedEventCount());
-
- // TouchMove's along the slop boundary should be suppresed.
- MoveTouchPoint(0, 0, kSlopLengthPixels / kDPIScale);
- EXPECT_EQ(0U, queued_event_count());
- EXPECT_EQ(0U, GetAndResetSentEventCount());
- EXPECT_EQ(1U, GetAndResetAckedEventCount());
-
- // Reset the touch sequence.
- ReleaseTouchPoint(0);
- SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
- SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
- GetAndResetSentEventCount();
- GetAndResetAckedEventCount();
-
- // Queue a TouchStart.
- PressTouchPoint(0, 0);
- SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
- ASSERT_EQ(1U, GetAndResetSentEventCount());
- ASSERT_EQ(1U, GetAndResetAckedEventCount());
-
- // TouchMove's outside the region should not be suppressed.
- const float kPixelCoordOutsideSlopRegion = kSlopLengthPixels + 0.5f;
- MoveTouchPoint(0, 0, kPixelCoordOutsideSlopRegion / kDPIScale);
- EXPECT_EQ(1U, queued_event_count());
- EXPECT_EQ(1U, GetAndResetSentEventCount());
- EXPECT_EQ(0U, GetAndResetAckedEventCount());
-}
-
// Tests that TouchMove's are not dropped if a secondary pointer is present
// during any movement.
TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionAfterMultiTouch) {
- const float kSlopLengthDips = 10;
- const float kHalfSlopLengthDips = kSlopLengthDips / 2;
SetUpForTouchMoveSlopTesting(kSlopLengthDips);
// Queue a TouchStart.
« no previous file with comments | « content/browser/renderer_host/input/touch_event_queue.cc ('k') | content/browser/renderer_host/input/web_input_event_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698