tor-browser

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

browser_fullscreen_cross_origin.js (2334B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 const ORIGIN =
      7  "https://example.com/browser/browser/base/content/test/fullscreen/fullscreen_frame.html";
      8 
      9 add_task(async function test_fullscreen_cross_origin() {
     10  await SpecialPowers.pushPrefEnv({
     11    set: [["test.wait300msAfterTabSwitch", true]],
     12  });
     13 
     14  async function requestFullscreen(aAllow, aExpect) {
     15    await BrowserTestUtils.withNewTab(ORIGIN, async function (browser) {
     16      const iframeId = aExpect == "allowed" ? "frameAllowed" : "frameDenied";
     17 
     18      info("Start fullscreen on iframe " + iframeId);
     19      await SpecialPowers.spawn(
     20        browser,
     21        [{ aExpect, iframeId }],
     22        async function (args) {
     23          let frame = content.document.getElementById(args.iframeId);
     24          frame.focus();
     25          await SpecialPowers.spawn(frame, [args.aExpect], async expect => {
     26            let frameDoc = content.document;
     27            const waitForFullscreen = new Promise(resolve => {
     28              const message =
     29                expect == "allowed" ? "fullscreenchange" : "fullscreenerror";
     30              function handler(evt) {
     31                frameDoc.removeEventListener(message, handler);
     32                Assert.equal(evt.type, message, `Request should be ${expect}`);
     33                frameDoc.exitFullscreen();
     34                resolve();
     35              }
     36              frameDoc.addEventListener(message, handler);
     37            });
     38            frameDoc.getElementById("request").click();
     39            await waitForFullscreen;
     40          });
     41        }
     42      );
     43 
     44      if (aExpect == "allowed") {
     45        DOMFullscreenTestUtils.waitForFullScreenState(browser, false);
     46      }
     47    });
     48  }
     49 
     50  await new Promise(r => {
     51    SpecialPowers.pushPrefEnv(
     52      {
     53        set: [
     54          ["full-screen-api.enabled", true],
     55          ["full-screen-api.allow-trusted-requests-only", false],
     56          ["full-screen-api.transition-duration.enter", "0 0"],
     57          ["full-screen-api.transition-duration.leave", "0 0"],
     58          ["dom.security.featurePolicy.header.enabled", true],
     59          ["dom.security.featurePolicy.webidl.enabled", true],
     60        ],
     61      },
     62      r
     63    );
     64  });
     65 
     66  await requestFullscreen(undefined, "denied");
     67  await requestFullscreen("fullscreen", "allowed");
     68 });