Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

<!DOCTYPE html>
<html>
<meta charset=utf-8 />
<title>Event Timing: PerformanceObserver sees entries with buffered flag</title>
<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>
let firstInputSeen = false;
let eventSeen = false;
async_test(t => {
assert_implements(window.PerformanceEventTiming, 'Event Timing is not supported.');
const validateEntry = t.step_func(entry => {
if (entry.entryType === 'first-input')
firstInputSeen = true;
else if (entry.entryType === 'event')
eventSeen = true;
else
assert_unreached('Should only observe Event Timing entries!');
});
// First observer creates second in callback to ensure the entry has been dispatched by the time
// the second observer begins observing.
new PerformanceObserver((list, obs) => {
list.getEntries().forEach(validateEntry);
if (!firstInputSeen || !eventSeen)
return;
obs.disconnect();
firstInputSeen = false;
eventSeen = false;
// Second observer requires 'buffered: true' to see entries.
const bufferedObserver = new PerformanceObserver(entryList => {
entryList.getEntries().forEach(validateEntry);
if (firstInputSeen && eventSeen)
t.done();
});
bufferedObserver.observe({type: "event", buffered: true});
bufferedObserver.observe({type: 'first-input', buffered: true});
}).observe({entryTypes: ['event', 'first-input']});
clickAndBlockMain('button');
}, "PerformanceObserver with buffered flag sees previous Event Timing entries");
</script>
</html>