| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta charset=utf-8 /> |
| <title>IsInputPending: pointer locked elements may detect pending input</title> |
| </title> |
| <p> |
| This test should be run under <code>--enable-blink-features=ExperimentalIsInputPending</code>. |
| </p> |
| <p> |
| Verify that input is detected with and without pointer locking for each frame, and that sibling and child frames cannot observe pending input. |
| </p> |
| </head> |
| <p id="text-detected" style="color: green; display: none">Input detected</p> |
| <p id="text-not-detected" style="color: red">Input not detected</p> |
| <p><button id="pointer-locker">Lock pointer</button></p> |
| <script> |
| |
| const NUM_CHILD_FRAMES = 2; |
| const PERIOD_MS = 20; |
| |
| const iipOptions = {includeContinuous: true}; |
| |
| const detectedText = document.querySelector('#text-detected'); |
| const notDetectedText = document.querySelector('#text-not-detected'); |
| |
| setInterval(() => { |
| for (const end = performance.now() + PERIOD_MS; performance.now() < end;) {} |
| const detected = navigator.scheduling.isInputPending(iipOptions); |
| |
| detectedText.style.display = detected ? '' : 'none'; |
| notDetectedText.style.display = detected ? 'none' : ''; |
| }, PERIOD_MS); |
| |
| document.querySelector('#pointer-locker').addEventListener('click', e => { |
| e.target.requestPointerLock(); |
| }); |
| |
| if (window.top === window.self) { |
| for (let i = 0; i < NUM_CHILD_FRAMES; i++) { |
| // Add child frames if we're not already one. |
| const subframe = document.createElement('iframe'); |
| subframe.width = 640; |
| subframe.height = 240; |
| subframe.src = location.href; |
| document.body.appendChild(subframe); |
| } |
| } |
| |
| </script> |
| </html> |