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