| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script src="/resources/testdriver.js"></script> | |
| <script src="/resources/testdriver-actions.js"></script> | |
| <script src="/resources/testdriver-vendor.js"></script> | |
| </head> | |
| <body> | |
| <h2>Description</h2> | |
| <p>This test validates that pointer lock doesn't change when fullscreen does.</p> | |
| <hr/> | |
| <button id="Button">lockTarget</button> | |
| <div id="target">Target</div> | |
| <iframe id="frame"></iframe> | |
| <script type="text/javascript" > | |
| const button = document.getElementById('Button'); | |
| const target = document.getElementById('target'); | |
| const frame = document.getElementById('frame'); | |
| promise_test(async t => { | |
| let pointerLockChange = new Promise(resolve => document.addEventListener("pointerlockchange", resolve, { once: true })); | |
| await new Promise(resolve => button.addEventListener("mousedown", async () => { | |
| await target.requestPointerLock(); | |
| resolve(); | |
| }, {once: true})); | |
| await pointerLockChange; | |
| assert_equals(document.pointerLockElement, target); | |
| document.addEventListener("pointerlockchange", () => assert_unreached("PointerLock shouldn't change again")); | |
| let fullscreenChange = new Promise(resolve => document.addEventListener("fullscreenchange", resolve, { once: true })); | |
| await document.body.requestFullscreen(); | |
| await fullscreenChange; | |
| assert_equals(document.fullscreenElement, document.body); | |
| assert_equals(document.pointerLockElement, target); | |
| test_driver.bless("requestFullscreen", async () => await frame.contentDocument.body.requestFullscreen()); | |
| await new Promise(requestAnimationFrame); | |
| assert_equals(document.pointerLockElement, target); | |
| }, "PointerLock stays even after fullscreen change"); | |
| // Automated testing | |
| test_driver.click(button); | |
| </script> | |
| </body> | |
| </html> |