| <!doctype html> | |
| <html> | |
| <head> | |
| <meta charset="utf-8" /> | |
| <title>User agent gracefully handles pointer lock request spam</title> | |
| <link rel="help" href="https://w3c.github.io/pointerlock/" /> | |
| <style> | |
| html { | |
| font-family: sans-serif; | |
| } | |
| input { | |
| width: 400px; | |
| } | |
| </style> | |
| </head> | |
| <body> | |
| <h1>Manual test for pointer lock spam handling</h1> | |
| <p>This page will spam pointer lock requests and free them as soon as the lock | |
| is acquired. Ideally, the User Agent would have some sort of mechanism to | |
| prevent the webpage from being too obtrusive of the user experience.</p> | |
| <p>The | |
| <a href="https://w3c.github.io/pointerlock/#security">spec</a> states | |
| that the U.A. can implement whatever mechanism it deems appropriate to | |
| prevent abuse. | |
| </p> | |
| <p><strong>Press spacebar to toggle pointer lock requests on/off.</strong> | |
| Status: <span id="status">Active</span></p> | |
| <input id="inputElem" name="name" autofocus value="Interactivity test"> | |
| </body> | |
| <script> | |
| // Constantly spam pointer lock requests and release them as soon as they | |
| // are acquired. | |
| let spamActive = true; | |
| const statusElem = document.getElementById('status'); | |
| setInterval(() => { | |
| if (spamActive) { | |
| document.body.requestPointerLock(); | |
| } | |
| }, 0); | |
| document.addEventListener('pointerlockchange', () => { | |
| if (document.pointerLockElement != null) { | |
| document.exitPointerLock(); | |
| } | |
| }); | |
| document.addEventListener('keydown', (e) => { | |
| if (e.code === 'Space') { | |
| e.preventDefault(); | |
| spamActive = !spamActive; | |
| statusElem.textContent = spamActive ? 'Active' : 'Stopped'; | |
| } | |
| }); | |
| </script> | |
| </html> |