tor-browser

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

browser_fullscreen-navigation.js (4034B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 requestLongerTimeout(2);
      7 
      8 // Import helpers
      9 Services.scriptloader.loadSubScript(
     10  "chrome://mochitests/content/browser/dom/base/test/fullscreen/fullscreen_helpers.js",
     11  this
     12 );
     13 
     14 add_setup(async function () {
     15  await pushPrefs(
     16    ["test.wait300msAfterTabSwitch", true],
     17    ["full-screen-api.transition-duration.enter", "0 0"],
     18    ["full-screen-api.transition-duration.leave", "0 0"],
     19    ["full-screen-api.allow-trusted-requests-only", false]
     20  );
     21 });
     22 
     23 add_task(async function navigation() {
     24  await BrowserTestUtils.withNewTab(
     25    {
     26      gBrowser,
     27      url: `data:text/html,
     28      <button id="button">Click here</button>
     29      <script>
     30        let button = document.getElementById("button");
     31        button.addEventListener("click", function() {
     32          button.requestFullscreen();
     33        });
     34      </script>`,
     35    },
     36    async function (browser) {
     37      let promiseFsState = waitForFullscreenState(document, true);
     38      // Trigger click event
     39      BrowserTestUtils.synthesizeMouseAtCenter("#button", {}, browser);
     40      await promiseFsState;
     41 
     42      promiseFsState = waitForFullscreenState(document, false);
     43      await SpecialPowers.spawn(browser, [], async function () {
     44        content.location.href = "about:blank";
     45      });
     46      await promiseFsState;
     47 
     48      // Ensure the browser exits fullscreen state.
     49      ok(!window.fullScreen, "The chrome window should not be in fullscreen");
     50      ok(
     51        !document.documentElement.hasAttribute("inDOMFullscreen"),
     52        "The chrome document should not be in fullscreen"
     53      );
     54    }
     55  );
     56 });
     57 
     58 async function startTests(testFun, name) {
     59  TEST_URLS.forEach(url => {
     60    add_task(async () => {
     61      info(`Test ${name}, url: ${url}`);
     62      await BrowserTestUtils.withNewTab(
     63        {
     64          gBrowser,
     65          url,
     66        },
     67        async function (browser) {
     68          let promiseFsState = waitForFullscreenState(document, true);
     69          // Trigger click event in inner most iframe
     70          SpecialPowers.spawn(
     71            browser.browsingContext.children[0].children[0],
     72            [],
     73            function () {
     74              content.setTimeout(() => {
     75                content.document.getElementById("div").click();
     76              }, 0);
     77            }
     78          );
     79          await promiseFsState;
     80 
     81          // This should exit fullscreen
     82          promiseFsState = waitForFullscreenState(document, false);
     83          await testFun(browser);
     84          await promiseFsState;
     85 
     86          // Ensure the browser exits fullscreen state.
     87          ok(
     88            !window.fullScreen,
     89            "The chrome window should not be in fullscreen"
     90          );
     91          ok(
     92            !document.documentElement.hasAttribute("inDOMFullscreen"),
     93            "The chrome document should not be in fullscreen"
     94          );
     95        }
     96      );
     97    });
     98  });
     99 }
    100 
    101 function NavigateRemoteDocument(aBrowsingContext, aURL) {
    102  return SpecialPowers.spawn(aBrowsingContext, [aURL], async function (url) {
    103    content.location.href = url;
    104  });
    105 }
    106 
    107 startTests(async browser => {
    108  // toplevel
    109  await NavigateRemoteDocument(browser.browsingContext, "about:blank");
    110 }, "navigation_toplevel");
    111 
    112 startTests(async browser => {
    113  let promiseRemoteFsState = waitRemoteFullscreenExitEvents([
    114    // browsingContext, name
    115    [browser.browsingContext, "toplevel"],
    116  ]);
    117  // middle iframe
    118  await NavigateRemoteDocument(
    119    browser.browsingContext.children[0],
    120    "about:blank"
    121  );
    122  await promiseRemoteFsState;
    123 }, "navigation_middle_frame");
    124 
    125 startTests(async browser => {
    126  let promiseRemoteFsState = waitRemoteFullscreenExitEvents([
    127    // browsingContext, name
    128    [browser.browsingContext, "toplevel"],
    129    [browser.browsingContext.children[0], "middle"],
    130  ]);
    131  // innermost iframe
    132  await NavigateRemoteDocument(
    133    browser.browsingContext.children[0].children[0],
    134    "about:blank"
    135  );
    136  await promiseRemoteFsState;
    137 }, "navigation_inner_frame");