Runs: Chrome 158.0.8110.0 (wpt@4c84956f8, 2026-10-18) | Firefox 160.0a1 (wpt@b58866519, 2026-10-18) | Safari 254 preview (wpt@850b36a56, 2026-10-18) | Ladybird 1.0-49a95 (wpt@4c84956f8, 2026-10-18) | Servo Servo 0.7 (wpt@df642c414, 2026-10-17) | Blitz 38ca4e777 (wpt@cd1d8aa5b, 2026-10-18)
| Chrome | Firefox | Safari | Ladybird | Servo | Blitz | |
|---|---|---|---|---|---|---|
| Total | 1/1 | 0/1 | 1/1 | 0/1 | 0/1 | NOT RUN |
| Subtest | Chrome | Firefox | Safari | Ladybird | Servo | Blitz |
|---|---|---|---|---|---|---|
| Coalesced list in pointerdown/move/up events | PASS | FAIL | PASS | FAIL | FAIL | — |
/pointerevents/coalesced_events_attributes_on_redispatch.https.html
<!doctype html> <title>Coalesced event properties after JS redispatches a trusted event</title> <meta name="variant" content="?mouse"> <meta name="variant" content="?pen"> <meta name="variant" content="?touch"> <meta name="viewport" content="width=device-width"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/testdriver.js"></script> <script src="/resources/testdriver-actions.js"></script> <script src="/resources/testdriver-vendor.js"></script> <script src="pointerevent_support.js"></script> <link rel="stylesheet" type="text/css" href="pointerevent_styles.css"> <style> div { width: 100px; height: 100px; } </style> <div id="target"></div> <div id="target2"></div> <script> "use strict"; const pointer_type = location.search.substring(1); const target = document.getElementById("target"); const target2 = document.getElementById("target2"); let received_num_coalesced; function checkListAttributesBeforeRedispatch(event) { assert_equals(event.type, "pointermove"); assert_equals(event.isTrusted, true); assert_equals(event.target, target); received_num_coalesced = event.getCoalescedEvents().length; assert_greater_than_equal(received_num_coalesced, 1, "pointermove.getCoalescedEvents() has at least 1 entry"); for (const coalesced_event of event.getCoalescedEvents()) { assert_equals(coalesced_event.isTrusted, true, "coalesced_event.isTrusted is true"); assert_equals(coalesced_event.target, target, "coalesced_event.target matches dispatch target"); } } // This WPT minimally tests redispatched event attributes. For trusted // event tests, see coalesced_events_attributes.https.html. function checkListAttributesAfterRedispatch(event) { assert_equals(event.type, "pointermove"); assert_equals(event.isTrusted, false); assert_equals(event.target, target2); assert_greater_than_equal(event.getCoalescedEvents().length, received_num_coalesced, "pointermove.getCoalescedEvents() has the same number of entries"); for (const coalesced_event of event.getCoalescedEvents()) { assert_equals(coalesced_event.isTrusted, true, "coalesced_event.isTrusted maintains its original value"); assert_equals(coalesced_event.target, target, "coalesced_event.target maintains its original value"); } } promise_test(async () => { // We need "touch-action:none" to guarantee pointermove events. target.classList.add("touchActionNone"); let pointermove_promise = getEvent("pointermove", target); let pointerup_promise = getEvent("pointerup", target); await new test_driver.Actions() .addPointer("TestPointer", pointer_type) .pointerMove(0, 0, {origin: target}) .pointerDown() .pointerMove(20, 20, {origin: target}) .pointerUp() .send(); let pointermove_event = await pointermove_promise; await pointerup_promise; checkListAttributesBeforeRedispatch(pointermove_event); let pointermove_promise2 = getEvent("pointermove", target2); target2.dispatchEvent(pointermove_event); let pointermove_event2 = await pointermove_promise2; checkListAttributesAfterRedispatch(pointermove_event2); target.classList.remove("touchActionNone"); }, "Coalesced list in pointerdown/move/up events"); </script>