function isPointerLockedRemote(aRemote) { return SpecialPowers.spawn(aRemote, [], function () { return !!content.document.pointerLockElement;
});
}
function getPopup(aDocument, aPopupType) {
let popup = aDocument.getElementById(aPopupType); if (!popup) {
let menuitem = aDocument.createXULElement("menuitem");
menuitem.label = "This is a test popup";
async function waitForPopupOpen(aDocument, aPopupType) {
let popup = getPopup(aDocument, aPopupType);
let promise = BrowserTestUtils.waitForPopupEvent(popup, "shown");
popup.openPopup();
await promise;
return popup;
}
async function waitForPopupHide(aPopup) {
let promise = BrowserTestUtils.waitForPopupEvent(aPopup, "hidden");
aPopup.hidePopup(true);
await promise;
}
function testPointerLockPopup(aPopupType, aShouldBlockPointerLock) {
add_task(async function test_open_menu_popup_when_pointer_is_locked() {
info(`Test ${aPopupType}`);
await BrowserTestUtils.withNewTab(TEST_URL, async browser => {
let promise = waitForEventRemote(browser, "pointerlockchange");
await requestPointerLockRemote(browser);
await promise;
ok(await isPointerLockedRemote(browser), "pointer should be locked");
if (aShouldBlockPointerLock) {
promise = waitForEventRemote(browser, "pointerlockchange"); // Wait for the event listener to get registered on the remote.
await executeSoonRemote(browser);
}
info(`Open popup`);
let popup = await waitForPopupOpen(document, aPopupType);
if (!aShouldBlockPointerLock) {
promise = executeSoonRemote(browser);
}
await promise;
is(
await isPointerLockedRemote(browser),
!aShouldBlockPointerLock, "check if pointer is still locked"
);
add_task(async function test_request_pointerlock_when_popup_is_opened() {
info(`Test ${aPopupType}`);
await BrowserTestUtils.withNewTab(TEST_URL, async browser => {
info(`Open popup`);
let popup = await waitForPopupOpen(document, aPopupType);
let promise = aShouldBlockPointerLock
? waitForEventRemote(browser, "pointerlockerror")
: waitForEventRemote(browser, "pointerlockchange"); // Wait for the event listener to get registered on the remote.
await executeSoonRemote(browser);
await requestPointerLockRemote(browser);
await promise;
is(
await isPointerLockedRemote(browser),
!aShouldBlockPointerLock, "check if pointer is still locked"
);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.