summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/pointerevents/coalesced_events_attributes_under_load.https.html
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--testing/web-platform/tests/pointerevents/coalesced_events_attributes_under_load.https.html93
1 files changed, 93 insertions, 0 deletions
diff --git a/testing/web-platform/tests/pointerevents/coalesced_events_attributes_under_load.https.html b/testing/web-platform/tests/pointerevents/coalesced_events_attributes_under_load.https.html
new file mode 100644
index 0000000000..262742558e
--- /dev/null
+++ b/testing/web-platform/tests/pointerevents/coalesced_events_attributes_under_load.https.html
@@ -0,0 +1,93 @@
+<!doctype html>
+<title>Coalesced events under load</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>
+<style>
+ #target {
+ width: 100px;
+ height: 100px;
+ touch-action: none;
+ }
+</style>
+<div id="target"></div>
+
+<script>
+ "use strict";
+ const pointer_type = location.search.substring(1);
+ const target = document.getElementById("target");
+
+ // https://w3c.github.io/pointerevents/#coalesced-events
+ function checkCoalescedMoveEventAttributes(event) {
+ let coalesced_events = event.getCoalescedEvents();
+ assert_greater_than_equal(coalesced_events.length, 1,
+ "pointermove.getCoalescedEvents() has at least 1 entry");
+
+ for (let i = 0; i < coalesced_events.length; i++) {
+ let coalesced_event = coalesced_events[i];
+
+ assert_equals(coalesced_event.isTrusted, true,
+ "coalesced_event.isTrusted is true");
+ assert_equals(coalesced_event.bubbles, false,
+ "coalesced_event.bubbles is false");
+ assert_equals(coalesced_event.cancelable, false,
+ "coalesced_event.cancelable is false");
+
+ if (i > 0) {
+ assert_greater_than_equal(coalesced_event.timeStamp,
+ coalesced_events[i-1].timeStamp,
+ "coalesced_event.timeStamp must be ascending");
+ }
+ }
+ }
+
+ let coalesced_event_received = false;
+
+ promise_test(async t => {
+ let current_busyloop_ms = 5;
+
+ target.addEventListener("pointerdown", event => {
+ // Every pointerdown blocks the main thread for a certain time limit,
+ // and then increases the time limit for next round in case the
+ // current limit fails to cause event coalescing.
+ let start = performance.now();
+ while (performance.now() < start + current_busyloop_ms)
+ continue;
+ current_busyloop_ms *= 2;
+ });
+
+ target.addEventListener("pointermove", t.step_func(event => {
+ checkCoalescedMoveEventAttributes(event);
+ if (event.getCoalescedEvents().length > 1)
+ coalesced_event_received = true;
+ }));
+
+ // Repeatedly send a long action sequence until either a coalesced event is
+ // encountered or the busyloop becomes too long.
+ while (!coalesced_event_received && current_busyloop_ms < 500) {
+ let pointerup_promise = getEvent("pointerup", target);
+
+ let actions = new test_driver.Actions()
+ .addPointer("TestPointer", pointer_type)
+ .pointerMove(0, 0, { origin: target })
+ .pointerDown();
+ for (let i = 0; i < 5; i++) {
+ actions = actions.pointerMove(20, 20, { origin: target })
+ .pointerMove(0, 0, { origin: target });
+ }
+ actions = actions.pointerUp();
+
+ await actions.send();
+ await pointerup_promise;
+ }
+
+ assert_true(coalesced_event_received, "Coalesed pointermoves received");
+ }, "Coalesced pointermoves under load");
+</script>