25 lines
930 B
JavaScript
25 lines
930 B
JavaScript
// Responds to onmessage events from other frames to check for pending input.
|
|
onmessage = async e => {
|
|
if (e.data !== 'check-input') return;
|
|
|
|
const discreteOptions = { includeContinuous: false };
|
|
const continuousOptions = { includeContinuous: true };
|
|
|
|
// Use a reasonable time to wait after dispatching events, since we want to be
|
|
// able to test for cases where isInputPending returns false.
|
|
const DISPATCH_WAIT_TIME_MS = 500;
|
|
|
|
// Wait a reasonable amount of time for the event to be enqueued.
|
|
const end = performance.now() + DISPATCH_WAIT_TIME_MS;
|
|
let hasDiscrete;
|
|
let hasContinuous;
|
|
do {
|
|
hasDiscrete = navigator.scheduling.isInputPending(discreteOptions);
|
|
hasContinuous = navigator.scheduling.isInputPending(continuousOptions);
|
|
} while (performance.now() < end && !(hasDiscrete && hasContinuous));
|
|
|
|
e.source.postMessage({
|
|
discrete: hasDiscrete,
|
|
continuous: hasContinuous,
|
|
}, '*');
|
|
}
|