| /* Requests a pointer lock on `element` and waits for the resulting | |
| * 'pointerlockchange' event. | |
| * @param {Element} element - The element to lock the pointer to. | |
| * @param {boolean} provideTransientActivation - If true, a synthetic click is | |
| * performed on `element` first to satisfy the user activation requirement. | |
| * @returns {Event} The pointerlockchange Event object. | |
| */ | |
| async function lockPointerAndWaitForEvent(element, provideTransientActivation) { | |
| assert_not_equals(element, null, "element can't be null"); | |
| if (provideTransientActivation) { | |
| // Make a gesture to provide transient activation so that the UA | |
| // will allow us to acquire the pointer lock. | |
| await new test_driver.Actions() | |
| .pointerMove(0, 0, { | |
| origin: element | |
| }) | |
| .pointerDown() | |
| .pointerUp() | |
| .send(); | |
| } | |
| var lockEvent = null; | |
| var lockPromise = new Promise(resolve => { | |
| document.addEventListener('pointerlockchange', function(e) { | |
| lockEvent = e; | |
| resolve(); | |
| }, { | |
| once: true | |
| }); | |
| }); | |
| await element.requestPointerLock(); | |
| await lockPromise; | |
| assert_equals(document.pointerLockElement, element, | |
| `document.pointerLockElement should be ${element}.`); | |
| return lockEvent; | |
| } | |
| /* Calls document.exitPointerLock() and waits for the resulting | |
| * 'pointerlockchange' event. Asserts that document.pointerLockElement is | |
| * null afterwards. | |
| * @returns {Event} The pointerlockchange Event object. | |
| */ | |
| async function unlockPointerAndWaitForEvent() { | |
| var unlockEvent = null; | |
| var unlockPromise = new Promise(resolve => { | |
| document.addEventListener('pointerlockchange', function(e) { | |
| unlockEvent = e; | |
| resolve(); | |
| }, { | |
| once: true | |
| }); | |
| }); | |
| document.exitPointerLock(); | |
| await unlockPromise; | |
| assert_equals(document.pointerLockElement, null, | |
| "document.pointerLockElement should be null."); | |
| return unlockEvent; | |
| } |