buffered-flag.html (1871B)
1 <!DOCTYPE html> 2 <html> 3 <meta charset=utf-8 /> 4 <title>Event Timing: PerformanceObserver sees entries with buffered flag</title> 5 <button id='button'>Generate a 'click' event</button> 6 <script src=/resources/testharness.js></script> 7 <script src=/resources/testharnessreport.js></script> 8 <script src=/resources/testdriver.js></script> 9 <script src=/resources/testdriver-vendor.js></script> 10 <script src=resources/event-timing-test-utils.js></script> 11 <script> 12 let firstInputSeen = false; 13 let eventSeen = false; 14 async_test(t => { 15 assert_implements(window.PerformanceEventTiming, 'Event Timing is not supported.'); 16 const validateEntry = t.step_func(entry => { 17 if (entry.entryType === 'first-input') 18 firstInputSeen = true; 19 else if (entry.entryType === 'event') 20 eventSeen = true; 21 else 22 assert_unreached('Should only observe Event Timing entries!'); 23 }); 24 // First observer creates second in callback to ensure the entry has been dispatched by the time 25 // the second observer begins observing. 26 new PerformanceObserver((list, obs) => { 27 list.getEntries().forEach(validateEntry); 28 if (!firstInputSeen || !eventSeen) 29 return; 30 31 obs.disconnect(); 32 firstInputSeen = false; 33 eventSeen = false; 34 // Second observer requires 'buffered: true' to see entries. 35 const bufferedObserver = new PerformanceObserver(entryList => { 36 entryList.getEntries().forEach(validateEntry); 37 if (firstInputSeen && eventSeen) 38 t.done(); 39 }); 40 bufferedObserver.observe({type: "event", buffered: true}); 41 bufferedObserver.observe({type: 'first-input', buffered: true}); 42 }).observe({entryTypes: ['event', 'first-input']}); 43 clickAndBlockMain('button'); 44 }, "PerformanceObserver with buffered flag sees previous Event Timing entries"); 45 </script> 46 </html>