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>