46 lines
1.8 KiB
HTML
46 lines
1.8 KiB
HTML
<!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>
|