tor-browser

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

browser_fullscreen-tab-close-race.js (2727B)


      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 async function startTests(setupAndCompletionFn, name) {
     24  TEST_URLS.forEach(url => {
     25    add_task(async () => {
     26      info(`Test ${name}, url: ${url}`);
     27      await BrowserTestUtils.withNewTab(
     28        {
     29          gBrowser,
     30          url,
     31        },
     32        async function (browser) {
     33          let promiseFsState = waitForFullscreenExit(document);
     34          let promiseSetup = setupAndCompletionFn(browser);
     35          // Trigger click event in inner most iframe
     36          await SpecialPowers.spawn(
     37            browser.browsingContext.children[0].children[0],
     38            [],
     39            function () {
     40              content.setTimeout(() => {
     41                content.document.getElementById("div").click();
     42              }, 0);
     43            }
     44          );
     45          await promiseSetup;
     46          await promiseFsState;
     47 
     48          // Ensure the browser exits fullscreen state.
     49          ok(
     50            !window.fullScreen,
     51            "The chrome window should not be in fullscreen"
     52          );
     53          ok(
     54            !document.documentElement.hasAttribute("inDOMFullscreen"),
     55            "The chrome document should not be in fullscreen"
     56          );
     57        }
     58      );
     59    });
     60  });
     61 }
     62 
     63 async function WaitRemoveDocumentAndCloseTab(aBrowser, aBrowsingContext) {
     64  await SpecialPowers.spawn(aBrowsingContext, [], function () {
     65    return new Promise(resolve => {
     66      content.document.addEventListener(
     67        "fullscreenchange",
     68        () => {
     69          resolve();
     70        },
     71        { once: true }
     72      );
     73    });
     74  });
     75 
     76  // This should exit fullscreen
     77  let tab = gBrowser.getTabForBrowser(aBrowser);
     78  BrowserTestUtils.removeTab(tab);
     79 }
     80 
     81 startTests(browser => {
     82  // toplevel
     83  return WaitRemoveDocumentAndCloseTab(browser, browser.browsingContext);
     84 }, "tab_close_toplevel");
     85 
     86 startTests(browser => {
     87  // middle iframe
     88  return WaitRemoveDocumentAndCloseTab(
     89    browser,
     90    browser.browsingContext.children[0]
     91  );
     92 }, "tab_close_middle_frame");
     93 
     94 startTests(browser => {
     95  // innermost iframe
     96  return WaitRemoveDocumentAndCloseTab(
     97    browser,
     98    browser.browsingContext.children[0].children[0]
     99  );
    100 }, "tab_close_inner_frame");