summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/input/pointer_event_manager_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/core/input/pointer_event_manager_test.cc')
-rw-r--r--chromium/third_party/blink/renderer/core/input/pointer_event_manager_test.cc60
1 files changed, 60 insertions, 0 deletions
diff --git a/chromium/third_party/blink/renderer/core/input/pointer_event_manager_test.cc b/chromium/third_party/blink/renderer/core/input/pointer_event_manager_test.cc
index 7532cb61043..fafa81c7277 100644
--- a/chromium/third_party/blink/renderer/core/input/pointer_event_manager_test.cc
+++ b/chromium/third_party/blink/renderer/core/input/pointer_event_manager_test.cc
@@ -489,6 +489,66 @@ TEST_F(PointerEventManagerTest, PointerRawUpdateMovements) {
ASSERT_EQ(callback->last_movement_y_, 3);
}
+TEST_F(PointerEventManagerTest, PointerRawUpdateWithRelativeMotionEvent) {
+ ScopedConsolidatedMovementXYForTest scoped_feature(true);
+
+ WebView().MainFrameViewWidget()->Resize(gfx::Size(400, 400));
+ SimRequest request("https://example.com/test.html", "text/html");
+ LoadURL("https://example.com/test.html");
+ request.Complete(
+ "<body style='padding:0px; width:400px; height:400px;'></body>");
+
+ PointerEventCoordinateListenerCallback* callback =
+ PointerEventCoordinateListenerCallback::Create();
+ GetDocument().body()->addEventListener(event_type_names::kPointerrawupdate,
+ callback);
+
+ // Initial movement_x/y are both 0.
+ WebView().MainFrameWidget()->HandleInputEvent(WebCoalescedInputEvent(
+ CreateTestPointerEvent(WebInputEvent::Type::kPointerRawUpdate,
+ WebPointerProperties::PointerType::kMouse,
+ gfx::PointF(350, 350), gfx::PointF(350, 350), 10,
+ 10),
+ {}, {}, ui::LatencyInfo()));
+ ASSERT_EQ(callback->last_movement_x_, 0);
+ ASSERT_EQ(callback->last_movement_y_, 0);
+
+ // After moving the mouse by (+40,+20), movement_x/y have same deltas.
+ WebView().MainFrameWidget()->HandleInputEvent(WebCoalescedInputEvent(
+ CreateTestPointerEvent(WebInputEvent::Type::kPointerRawUpdate,
+ WebPointerProperties::PointerType::kMouse,
+ gfx::PointF(390, 370), gfx::PointF(390, 370), 10,
+ 10),
+ {}, {}, ui::LatencyInfo()));
+ ASSERT_EQ(callback->last_movement_x_, 40);
+ ASSERT_EQ(callback->last_movement_y_, 20);
+
+ // A relative motion event to pull the mouse pointer back towards the center
+ // is not exposed to JS, so the event handler is not called and the cached
+ // coordinates remain unchanged.
+ std::unique_ptr<WebInputEvent> synthetic_event = CreateTestPointerEvent(
+ WebInputEvent::Type::kPointerRawUpdate,
+ WebPointerProperties::PointerType::kMouse, gfx::PointF(200, 200),
+ gfx::PointF(200, 200), 10, 10);
+ synthetic_event->SetModifiers(WebInputEvent::Modifiers::kRelativeMotionEvent);
+ WebView().MainFrameWidget()->HandleInputEvent(WebCoalescedInputEvent(
+ std::move(synthetic_event), {}, {}, ui::LatencyInfo()));
+ ASSERT_EQ(callback->last_movement_x_, 40);
+ ASSERT_EQ(callback->last_movement_y_, 20);
+
+ // After moving the mouse by (+15,-10) from the last unexposed event,
+ // movement_x/y have deltas from the last event, not the deltas from the last
+ // exposed event.
+ WebView().MainFrameWidget()->HandleInputEvent(WebCoalescedInputEvent(
+ CreateTestPointerEvent(WebInputEvent::Type::kPointerRawUpdate,
+ WebPointerProperties::PointerType::kMouse,
+ gfx::PointF(215, 190), gfx::PointF(215, 190), 10,
+ 10),
+ {}, {}, ui::LatencyInfo()));
+ ASSERT_EQ(callback->last_movement_x_, 15);
+ ASSERT_EQ(callback->last_movement_y_, -10);
+}
+
TEST_F(PointerEventManagerTest, PointerUnadjustedMovement) {
WebView().MainFrameViewWidget()->Resize(gfx::Size(400, 400));
SimRequest request("https://example.com/test.html", "text/html");