| <!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 observedMouseDown = false; |
| const observerPromise = new Promise(resolve => { |
| const observer = new PerformanceObserver(t.step_func(entryList => { |
| const mouseDowns = entryList.getEntriesByName('mousedown'); |
| // Ignore cases in which there is no mousedown. |
| if (mouseDowns.length === 0) |
| return; |
| |
| assert_false(observedMouseDown, 'There must only be one mousedown entry.'); |
| assert_equals(mouseDowns.length, 1); |
| const entry = mouseDowns[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); |
| observedMouseDown = 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> |