| <!DOCTYPE html> |
| <html> |
| <meta charset=utf-8 /> |
| <title>Event Timing: buffer long-latency events before onload</title> |
| <meta name="timeout" content="long"> |
| <button id='button'>Generate a 'click' event</button> |
| <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> |
| /* Timeline: |
| Onload |
| PerformanceObserver is registered |
| Click 1 |
| Click 2 |
| PerformanceObserver should observe only one firstInput entry. |
| (Dispatch and Process Click 2 - not buffered) |
| */ |
| async_test(function(t) { |
| let numFirstInputObserved = 0; |
| let numEventsObserved = 0; |
| let observedEventEntries = []; |
| |
| const event_observer_promise = new Promise((resolve, reject) => { |
| new PerformanceObserver(function(entryList) { |
| observedEventEntries = entryList.getEntries().filter( |
| entry => entry.name === 'mousedown'); |
| numEventsObserved += observedEventEntries.length; |
| if (numEventsObserved >= 2) { |
| // There should be 2 event entries. |
| assert_equals(numEventsObserved, 2, |
| "There should be 2 observed event entries."); |
| resolve(); |
| } |
| }).observe({ type: 'event' , buffered: true}); |
| }); |
| |
| const first_input_observer_promise = new Promise((resolve, reject) => { |
| new PerformanceObserver(function(entryList) { |
| assert_equals(entryList.getEntries().length, 1); |
| resolve(); |
| }).observe({ type: 'firstInput' , buffered: true}); |
| }); |
| |
| on_event(window, 'load', function(e) { |
| const click_promise = clickAndBlockMain('button').then(() => { |
| clickAndBlockMain('button'); |
| }); |
| Promise.all( |
| [event_observer_promise, first_input_observer_promise, click_promise] |
| ).then(() => { |
| t.done(); |
| }); |
| }); |
| }, |
| "Event Timing: check firstInput after onload, observer, click, click." |
| ); |
| </script> |
| </html> |