WPT for canceling pointerevents in passive event listeners
This is a test for this spec change:
https://github.com/w3c/pointerevents/pull/403
Change-Id: Ife4dbae48295e54a41a7ab3f8b21bdf655f5f01b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4320888
Reviewed-by: Kevin Ellis <kevers@chromium.org>
Commit-Queue: Mustaq Ahmed <mustaq@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1114825}
diff --git a/pointerevents/compat/pointerevent_mouse-pointer-preventdefault-passive.html b/pointerevents/compat/pointerevent_mouse-pointer-preventdefault-passive.html
new file mode 100644
index 0000000..57da096
--- /dev/null
+++ b/pointerevents/compat/pointerevent_mouse-pointer-preventdefault-passive.html
@@ -0,0 +1,84 @@
+<!DOCTYPE HTML>
+<title>Canceling passive pointerevents does not affect compat mouseevents</title>
+<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="../pointerevent_support.js"></script>
+<style>
+ div {
+ margin: 20px;
+ padding: 20px;
+ background-color: green;
+ user-select: none; // Prevents text selection on drag.
+ }
+</style>
+<div id="logger" draggable="false"></div>
+<div id="done"></div>
+
+<script>
+ 'use strict';
+
+ const logger = document.getElementById("logger");
+ const done = document.getElementById("done");
+
+ let received_events = [];
+
+ const logged_pointer_events = ["pointerdown", "pointermove", "pointerup",
+ "pointerenter", "pointerleave", "pointerover", "pointerout"];
+ const logged_mouse_events = ["mousedown", "mousemove", "mouseup",
+ "mouseenter", "mouseleave", "mouseover", "mouseout"];
+
+ const expected_pointer_events = [
+ "pointerover", "pointerenter",
+ "pointermove", "pointerdown", "pointermove", "pointerup",
+ "pointerout", "pointerleave"
+ ];
+
+ const expected_mouse_events = [
+ "mouseover", "mouseenter",
+ "mousemove", "mousedown", "mousemove", "mouseup",
+ "mouseout", "mouseleave"
+ ];
+
+ logged_pointer_events.forEach(ename => logger.addEventListener(ename, e => {
+ received_events.push(e.type);
+ e.preventDefault();
+ }, { passive: true }));
+
+ logged_mouse_events.forEach(ename => logger.addEventListener(ename, e =>
+ received_events.push(e.type)));
+
+ promise_test(async () => {
+ received_events = [];
+
+ let click_on_done = getEvent("click", done);
+
+ let actions = new test_driver.Actions()
+ // Start outside all event listeners
+ .pointerMove(0, 0)
+ .pointerDown()
+ .pointerUp()
+ // Drag within "logger"
+ .pointerMove(0, 0, { origin: logger })
+ .pointerDown()
+ .pointerMove(15, 15, { origin: logger })
+ .pointerUp()
+ // Click "done"
+ .pointerMove(0, 0, { origin: done })
+ .pointerDown()
+ .pointerUp()
+ .send();
+
+ await actions;
+ await click_on_done;
+
+ assert_array_equals(received_events.filter(isPointerEvent),
+ expected_pointer_events, "expected pointer events");
+ assert_array_equals(received_events.filter(isMouseEvent),
+ expected_mouse_events, "expected mouse events");
+ assert_true(arePointerEventsBeforeCompatMouseEvents(received_events),
+ "pairing of pointer/mouse events");
+ }, "Canceling passive pointerevents does not affect compat mouseevents");
+</script>