/**
* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
"use strict";
const TEST_URL =
"data:text/html,";
function requestPointerLockRemote(aRemote) {
return SpecialPowers.spawn(aRemote, [],
function () {
return new Promise(resolve => {
content.document.addEventListener(
"pointerlockchange",
_e => {
info(`Received pointerlockchange event`);
resolve();
},
{ once:
true }
);
SpecialPowers.wrap(content.document).notifyUserGestureActivation();
content.document.body.requestPointerLock();
});
});
}
function exitPointerLockRemote(aRemote) {
return SpecialPowers.spawn(aRemote, [],
function () {
return new Promise(resolve => {
if (!content.document.pointerLockElement) {
resolve();
return;
}
content.document.addEventListener(
"pointerlockchange",
_e => {
info(`Received pointerlockchange event`);
resolve();
},
{ once:
true }
);
content.document.exitPointerLock();
});
});
}
function isPointerLockedRemote(aRemote) {
return SpecialPowers.spawn(aRemote, [],
function () {
return !!content.document.pointerLockElement;
});
}
add_task(async
function test_pointerlock_close_sidebar() {
info(
"Open new browser window");
const win = await BrowserTestUtils.openNewBrowserWindow();
const tab = await BrowserTestUtils.openNewForegroundTab(
win.gBrowser,
TEST_URL
);
info(
"Open sidebar");
const sidebar = win.document.getElementById(
"sidebar");
let loadPromise = BrowserTestUtils.waitForEvent(sidebar,
"load",
true);
await win.SidebarController.show(
"viewBookmarksSidebar");
await loadPromise;
info(
"Switch focus back to tab");
const browser = tab.linkedBrowser;
await SimpleTest.promiseFocus(browser);
info(
"Request PointerLock");
await requestPointerLockRemote(browser);
info(
"Close sidebar");
win.SidebarController.hide();
await
new Promise(resolve => SimpleTest.executeSoon(resolve));
ok(await isPointerLockedRemote(browser),
"Pointer should still be locked");
info(
"Exit PointerLock");
await exitPointerLockRemote(browser);
// Close opened window
info(
"Close new browser window");
await BrowserTestUtils.closeWindow(win);
});