summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/event-timing/programmatic-click-not-observed.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/event-timing/programmatic-click-not-observed.html')
-rw-r--r--testing/web-platform/tests/event-timing/programmatic-click-not-observed.html51
1 files changed, 51 insertions, 0 deletions
diff --git a/testing/web-platform/tests/event-timing/programmatic-click-not-observed.html b/testing/web-platform/tests/event-timing/programmatic-click-not-observed.html
new file mode 100644
index 0000000000..049607e04e
--- /dev/null
+++ b/testing/web-platform/tests/event-timing/programmatic-click-not-observed.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<html>
+<meta charset=utf-8 />
+<div id='div' onclick='delay()'>Click me</div>
+<div id='div2'>No, click me!</div>
+<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/event-timing-test-utils.js></script>
+<script>
+ let delayCalled = false;
+ let beforeClick;
+ function delay() {
+ const end = performance.now() + 150;
+ while(performance.now() < end) {}
+ delayCalled = true;
+ }
+ promise_test(function(t) {
+ assert_implements(window.PerformanceEventTiming, 'Event Timing is not supported.');
+ let observedPointerDown = false;
+ const observerPromise = new Promise(resolve => {
+ const observer = new PerformanceObserver(t.step_func(entryList => {
+ const pointerDowns = entryList.getEntriesByName('pointerdown');
+ // Ignore cases in which there is no pointerdown.
+ if (pointerDowns.length === 0)
+ return;
+
+ assert_false(observedPointerDown, 'There must only be one pointerdown entry.');
+ assert_equals(pointerDowns.length, 1);
+ const entry = pointerDowns[0];
+ // This ensures that the entry is exposing timing from the second click, i.e.
+ // the one from the clickAndBlockMain() call.
+ assert_greater_than_equal(entry.processingStart, beforeClick);
+ verifyClickEvent(entry, 'div2', true);
+ observedPointerDown = true;
+ resolve();
+ }));
+ observer.observe({entryTypes: ['event']});
+ });
+ document.getElementById('div').click();
+ // Take the timestamp after the programmatic click but before the next click.
+ beforeClick = performance.now();
+ // After the programmatic click, use another input to know when entries have been
+ // dispatched to the PerformanceObserver callback.
+ const clickPromise = clickAndBlockMain('div2');
+ return Promise.all([observerPromise, clickPromise]);
+ }, "Event Timing: events from programmatic click are not observed");
+</script>
+</html>