browser_pointerlock_sidebar.js (2437B)
1 /** 2 * Any copyright is dedicated to the Public Domain. 3 * http://creativecommons.org/publicdomain/zero/1.0/ 4 */ 5 6 "use strict"; 7 8 const TEST_URL = 9 "data:text/html,<body><div style='width: 100px; height: 100px; background-color: red;'></div></body>"; 10 11 function requestPointerLockRemote(aRemote) { 12 return SpecialPowers.spawn(aRemote, [], function () { 13 return new Promise(resolve => { 14 content.document.addEventListener( 15 "pointerlockchange", 16 _e => { 17 info(`Received pointerlockchange event`); 18 resolve(); 19 }, 20 { once: true } 21 ); 22 23 SpecialPowers.wrap(content.document).notifyUserGestureActivation(); 24 content.document.body.requestPointerLock(); 25 }); 26 }); 27 } 28 29 function exitPointerLockRemote(aRemote) { 30 return SpecialPowers.spawn(aRemote, [], function () { 31 return new Promise(resolve => { 32 if (!content.document.pointerLockElement) { 33 resolve(); 34 return; 35 } 36 37 content.document.addEventListener( 38 "pointerlockchange", 39 _e => { 40 info(`Received pointerlockchange event`); 41 resolve(); 42 }, 43 { once: true } 44 ); 45 content.document.exitPointerLock(); 46 }); 47 }); 48 } 49 50 function isPointerLockedRemote(aRemote) { 51 return SpecialPowers.spawn(aRemote, [], function () { 52 return !!content.document.pointerLockElement; 53 }); 54 } 55 56 add_task(async function test_pointerlock_close_sidebar() { 57 info("Open new browser window"); 58 const win = await BrowserTestUtils.openNewBrowserWindow(); 59 const tab = await BrowserTestUtils.openNewForegroundTab( 60 win.gBrowser, 61 TEST_URL 62 ); 63 64 info("Open sidebar"); 65 const sidebar = win.document.getElementById("sidebar"); 66 let loadPromise = BrowserTestUtils.waitForEvent(sidebar, "load", true); 67 await win.SidebarController.show("viewBookmarksSidebar"); 68 await loadPromise; 69 70 info("Switch focus back to tab"); 71 const browser = tab.linkedBrowser; 72 await SimpleTest.promiseFocus(browser); 73 74 info("Request PointerLock"); 75 await requestPointerLockRemote(browser); 76 77 info("Close sidebar"); 78 win.SidebarController.hide(); 79 await new Promise(resolve => SimpleTest.executeSoon(resolve)); 80 ok(await isPointerLockedRemote(browser), "Pointer should still be locked"); 81 82 info("Exit PointerLock"); 83 await exitPointerLockRemote(browser); 84 85 // Close opened window 86 info("Close new browser window"); 87 await BrowserTestUtils.closeWindow(win); 88 });