Files
sousa-gecko/testing/web-platform/tests/html/editing/dnd/events/pointer-suppression.html
T
Gastón Rodríguez 396c15df3f Bug 2016488 [wpt PR 57749] - Suppress pointer event stream when a drag starts, a=testonly
Automatic update from web-platform-tests
Suppress pointer event stream when a drag starts

According to the HTML spec, when a drag starts the user agent should
send the appropriate events to the drag source to indicate that the
pointer event stream has been ended and that it shouldn't expect any
more events from this pointer. The events to be sent are "pointerout",
"pointercancel" and "pointerleave".

This code had been partially implemented for mouse events, and this CL
corrects the implementation and expands it to gesture based drags as
well.

Bug: 452372355
Change-Id: I64020514b01d25cf45dc3108e22554abf76e4d03
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7049213
Reviewed-by: Mustaq Ahmed <mustaq@chromium.org>
Commit-Queue: Gaston Rodriguez <gastonr@microsoft.com>
Cr-Commit-Position: refs/heads/main@{#1584020}

--

wpt-commits: 34b88445eba2e82bf6085d5260a5531b21063ba5
wpt-pr: 57749
2026-02-16 09:32:50 +00:00

53 lines
2.3 KiB
HTML

<!doctype html>
<link rel="help" href="https://w3c.github.io/pointerevents/#suppressing-a-pointer-event-stream">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="../resources/test-helper.js"></script>
<head>
<title>The UA correctly suppresses the pointer event stream after a drag starts</title>
<style type="text/css">
div {
width: 105px;
min-height: 105px;
}
</style>
</head>
<body>
<p><img src="../resources/circle.png" alt="PNG circle"/></p>
<div></div>
<script>
promise_test(async (t) => {
await new Promise(loaded => window.addEventListener("load", loaded));
const img = document.querySelector('img');
let pointerCancelCalled = false;
let pointerOutCalled = false;
let pointerLeftCalled = false;
img.addEventListener('pointercancel', _ => { pointerCancelCalled = true; });
img.addEventListener('pointerout', _ => { pointerOutCalled = true; });
img.addEventListener('pointerleave', _ => { pointerLeftCalled = true; });
const dragLeavePromise = new Promise(resolve => {
img.addEventListener('dragleave', t.step_func((event) => {
assert_true(pointerCancelCalled, 'pointercancel should have been called after dragstart:');
assert_true(pointerOutCalled, 'pointerout should have been called after dragstart:');
assert_true(pointerLeftCalled, 'pointerleave should have been called after dragstart:');
resolve();
}));
});
// First move the pointer enough that a drag is initiated but the pointer remains
// over the image. Then move the pointer to the div to trigger the dragleave.
await new test_driver.Actions()
.pointerMove(-20, -20, { origin: img })
.pointerDown()
.pointerMove(20, 20, { origin: img })
.pointerMove(0, 0, { origin: document.querySelector('div') })
.send();
await dragLeavePromise;
},
"verify that the pointer events stream is correctly suppressed when a drag starts");
</script>
</body>
</html>