browser_antitracking_subiframes.js (3412B)
1 const BEHAVIOR_REJECT_TRACKER = Ci.nsICookieService.BEHAVIOR_REJECT_TRACKER; 2 3 const TOP_DOMAIN = "http://mochi.test:8888/"; 4 const SW_DOMAIN = "https://example.org/"; 5 6 const TOP_TEST_ROOT = getRootDirectory(gTestPath).replace( 7 "chrome://mochitests/content/", 8 TOP_DOMAIN 9 ); 10 const SW_TEST_ROOT = getRootDirectory(gTestPath).replace( 11 "chrome://mochitests/content/", 12 SW_DOMAIN 13 ); 14 15 const TOP_EMPTY_PAGE = `${TOP_TEST_ROOT}empty_with_utils.html`; 16 const SW_REGISTER_PAGE = `${SW_TEST_ROOT}empty_with_utils.html`; 17 const SW_IFRAME_PAGE = `${SW_TEST_ROOT}page_post_controlled.html`; 18 const SW_REL_SW_SCRIPT = "empty.js"; 19 20 /** 21 * Set up a ServiceWorker on a domain that will be used as 3rd party iframe. 22 * That 3rd party frame should be controlled by the ServiceWorker. 23 * After that, we open a second iframe into the first one. That should not be 24 * controlled. 25 */ 26 add_task(async function () { 27 await SpecialPowers.pushPrefEnv({ 28 set: [ 29 ["dom.serviceWorkers.enabled", true], 30 ["dom.serviceWorkers.exemptFromPerDomainMax", true], 31 ["dom.serviceWorkers.testing.enabled", true], 32 ["network.cookie.cookieBehavior", BEHAVIOR_REJECT_TRACKER], 33 ], 34 }); 35 36 // Open the top-level page. 37 info("Opening a new tab: " + SW_REGISTER_PAGE); 38 let topTab = await BrowserTestUtils.openNewForegroundTab({ 39 gBrowser, 40 opening: SW_REGISTER_PAGE, 41 }); 42 43 // Install SW 44 info("Registering a SW: " + SW_REL_SW_SCRIPT); 45 await SpecialPowers.spawn( 46 topTab.linkedBrowser, 47 [{ sw: SW_REL_SW_SCRIPT }], 48 async function ({ sw }) { 49 // Waive the xray to use the content utils.js script functions. 50 await content.wrappedJSObject.registerAndWaitForActive(sw); 51 // User interaction 52 content.document.userInteractionForTesting(); 53 } 54 ); 55 56 info("Loading a new top-level URL: " + TOP_EMPTY_PAGE); 57 let browserLoadedPromise = BrowserTestUtils.browserLoaded( 58 topTab.linkedBrowser 59 ); 60 BrowserTestUtils.startLoadingURIString(topTab.linkedBrowser, TOP_EMPTY_PAGE); 61 await browserLoadedPromise; 62 63 // Create Iframe in the top-level page and verify its state. 64 info("Creating iframe and checking if controlled"); 65 let { controlled } = await SpecialPowers.spawn( 66 topTab.linkedBrowser, 67 [{ url: SW_IFRAME_PAGE }], 68 async function ({ url }) { 69 content.document.userInteractionForTesting(); 70 const payload = 71 await content.wrappedJSObject.createIframeAndWaitForMessage(url); 72 return payload; 73 } 74 ); 75 76 ok(controlled, "Should be controlled!"); 77 78 // Create a nested Iframe. 79 info("Creating nested-iframe and checking if controlled"); 80 let { nested_controlled } = await SpecialPowers.spawn( 81 topTab.linkedBrowser, 82 [{ url: SW_IFRAME_PAGE }], 83 async function ({ url }) { 84 const payload = 85 await content.wrappedJSObject.createNestedIframeAndWaitForMessage(url); 86 return payload; 87 } 88 ); 89 90 ok(!nested_controlled, "Should not be controlled!"); 91 92 info("Loading the SW unregister page: " + SW_REGISTER_PAGE); 93 browserLoadedPromise = BrowserTestUtils.browserLoaded(topTab.linkedBrowser); 94 BrowserTestUtils.startLoadingURIString( 95 topTab.linkedBrowser, 96 SW_REGISTER_PAGE 97 ); 98 await browserLoadedPromise; 99 100 await SpecialPowers.spawn(topTab.linkedBrowser, [], async function () { 101 await content.wrappedJSObject.unregisterAll(); 102 }); 103 104 // Close the testing tab. 105 BrowserTestUtils.removeTab(topTab); 106 });