tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 });