servo/tests/wpt/web-platform-tests/event-timing/onloadthenobserve-firstInput.html

66 lines
2.1 KiB
HTML

<!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 first-input entry.
(Dispatch and Process Click 2 - not buffered)
*/
async_test(function(t) {
if (!window.PerformanceEventTiming)
assert_unreached("PerformanceEventTiming is not supported");
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: 'first-input' , 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 first-input after onload, observer, click, click."
);
</script>
</html>