tor-browser

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

commit adbbe5a3284619c6a1935b7ceb99658f52e65688
parent 80d5e410121a15d0e3632ee293469a858d1c0190
Author: Vincent Hilla <vhilla@mozilla.com>
Date:   Fri, 17 Oct 2025 14:34:13 +0000

Bug 1994668 - Change iframe initialization order in some cases to prepare for sync about:blank. r=dom-core,devtools-reviewers,cookie-reviewers,layout-reviewers,emz,ochameau,smaug,bvandersloot,emilio

Bug 543435 will make about:blank load synchronously when it is the initial
navigation. Many tests currently bind iframes to the DOM before fully
initializing them, which can cause issues.

- If src is set after binding, a blank document will fully load and fire its
  load event before the intended navigation.
- If a load listener is added after binding, it will miss the about:blank load.

This patch refactors several such cases to prevent issues with bug 543435. Some
test adjustments from bug 543435 are moved here, while most occurrences were
found via an automated scan for iframes with load listeners bound before
setting src.

Differential Revision: https://phabricator.services.mozilla.com/D268843

Diffstat:
Mbrowser/base/content/test/protectionsUI/browser_protectionsUI_suspicious_fingerprinters_subview.js | 2+-
Mdevtools/client/framework/toolbox.js | 12++++++------
Mdevtools/client/netmonitor/src/har/test/browser_net_har_multipage.js | 6++----
Mdevtools/client/webconsole/test/browser/head.js | 8+++-----
Mdevtools/shared/commands/resource/tests/browser_resources_reflows.js | 8+++-----
Mdocshell/test/navigation/test_blockBFCache.html | 3++-
Mdom/base/test/test_bug1472427.html | 2+-
Mdom/base/test/test_navigator_cookieEnabled.html | 2+-
Mlayout/base/tests/test_getBoxQuads_convertPointRectQuad.html | 2+-
Mnetwerk/cookie/test/browser/browser_cookies_serviceWorker.js | 12++++++------
Mnetwerk/test/mochitests/test_redirect_ref.html | 3+--
Mtoolkit/components/antitracking/test/browser/antitracking_head.js | 30+++++++++++-------------------
Mtoolkit/components/antitracking/test/browser/browser_PBMCookieBehavior.js | 6++----
Mtoolkit/components/antitracking/test/browser/browser_allowListNotifications.js | 2+-
Mtoolkit/components/antitracking/test/browser/browser_contentBlockingTelemetry.js | 10++++------
Mtoolkit/components/antitracking/test/browser/browser_doublyNestedTracker.js | 4++--
Mtoolkit/components/antitracking/test/browser/browser_existingCookiesForSubresources.js | 2+-
Mtoolkit/components/antitracking/test/browser/browser_partitionedABA.js | 4++--
Mtoolkit/components/antitracking/test/browser/browser_partitionedABnavigatestToAA.js | 2+-
Mtoolkit/components/antitracking/test/browser/browser_partitionedConsoleMessage.js | 2+-
Mtoolkit/components/antitracking/test/browser/browser_referrerDefaultPolicy.js | 18++++++------------
Mtoolkit/components/antitracking/test/browser/browser_script.js | 6+++---
Mtoolkit/components/antitracking/test/browser/browser_staticPartition_CORS_preflight.js | 4++--
Mtoolkit/components/antitracking/test/browser/browser_storageAccessDoorHanger.js | 2+-
Mtoolkit/components/antitracking/test/browser/browser_storageAccessPrivilegeAPI.js | 2+-
Mtoolkit/components/antitracking/test/browser/browser_storageAccessWithDynamicFpi.js | 2+-
Mtoolkit/components/antitracking/test/browser/browser_storageAccessWithHeuristics.js | 36+++++++++++++-----------------------
Mtoolkit/components/antitracking/test/browser/browser_subResources.js | 2+-
Mtoolkit/components/antitracking/test/browser/browser_subResourcesPartitioned.js | 2+-
Mtoolkit/components/antitracking/test/browser/browser_subResourcesPartitioned_alwaysPartition.js | 2+-
Mtoolkit/components/antitracking/test/browser/dynamicfpi_head.js | 2+-
Mtoolkit/components/antitracking/test/browser/partitionedstorage_head.js | 2+-
Mtoolkit/components/antitracking/test/browser/storage_access_head.js | 2+-
Mtoolkit/components/resistfingerprinting/tests/browser/browser_fingerprintingRemoteOverrides.js | 2+-
Mtoolkit/components/resistfingerprinting/tests/browser/browser_fingerprintingWebCompat.js | 18++++++------------
Mtoolkit/components/resistfingerprinting/tests/browser/browser_fingerprinting_randomization_key.js | 18++++++------------
Mtoolkit/components/resistfingerprinting/tests/browser/head.js | 2+-
37 files changed, 99 insertions(+), 145 deletions(-)

diff --git a/browser/base/content/test/protectionsUI/browser_protectionsUI_suspicious_fingerprinters_subview.js b/browser/base/content/test/protectionsUI/browser_protectionsUI_suspicious_fingerprinters_subview.js @@ -92,9 +92,9 @@ async function openTestPage(urls, usePrivateWin, testFn) { await new content.Promise(resolve => { let ifr = content.document.createElement("iframe"); ifr.onload = resolve; + ifr.src = testUrl; content.document.body.appendChild(ifr); - ifr.src = testUrl; }); }); } diff --git a/devtools/client/framework/toolbox.js b/devtools/client/framework/toolbox.js @@ -2827,12 +2827,6 @@ Toolbox.prototype = { gDevTools.emit(id + "-init", this, iframe); this.emit(id + "-init", iframe); - // If no parent yet, append the frame into default location. - if (!iframe.parentNode) { - const vbox = this.doc.getElementById("toolbox-panel-" + id); - vbox.appendChild(iframe); - } - const onLoad = async () => { // Try to set the dir attribute as early as possible. this.setIframeDocumentDir(iframe); @@ -2894,6 +2888,12 @@ Toolbox.prototype = { iframe.setAttribute("aria-label", definition.panelLabel); } + // If no parent yet, append the frame into default location. + if (!iframe.parentNode) { + const vbox = this.doc.getElementById("toolbox-panel-" + id); + vbox.appendChild(iframe); + } + // Depending on the host, iframe.contentWindow is not always // defined at this moment. If it is not defined, we use an // event listener on the iframe DOM node. If it's defined, diff --git a/devtools/client/netmonitor/src/har/test/browser_net_har_multipage.js b/devtools/client/netmonitor/src/har/test/browser_net_har_multipage.js @@ -64,11 +64,9 @@ async function testHARWithNavigation({ enableMultipage, filter }) { [MULTIPAGE_IFRAME_URL], async function (url) { const iframe = content.document.createElement("iframe"); - const onLoad = new Promise(resolve => - iframe.addEventListener("load", resolve, { once: true }) - ); - content.content.document.body.appendChild(iframe); + const onLoad = ContentTaskUtils.waitForEvent(iframe, "load"); iframe.setAttribute("src", url); + content.content.document.body.appendChild(iframe); await onLoad; } ); diff --git a/devtools/client/webconsole/test/browser/head.js b/devtools/client/webconsole/test/browser/head.js @@ -95,12 +95,10 @@ async function openNewTabWithIframesAndConsole(tabUrl, iframes) { const iframesLoadPromises = urls.map((url, i) => { const iframe = content.document.createElement("iframe"); iframe.classList.add(`iframe-${i + 1}`); - const onLoadIframe = new Promise(resolve => { - iframe.addEventListener("load", resolve, { once: true }); - }); - content.document.body.append(iframe); + const onLoad = ContentTaskUtils.waitForEvent(iframe, "load"); iframe.src = url; - return onLoadIframe; + content.document.body.append(iframe); + return onLoad; }); await Promise.all(iframesLoadPromises); diff --git a/devtools/shared/commands/resource/tests/browser_resources_reflows.js b/devtools/shared/commands/resource/tests/browser_resources_reflows.js @@ -54,13 +54,11 @@ add_task(async function () { [], async () => { const el = content.document.createElement("iframe"); - const onIframeLoaded = new Promise(resolve => - el.addEventListener("load", resolve, { once: true }) - ); - content.document.body.appendChild(el); + const onLoaded = ContentTaskUtils.waitForEvent(el, "load"); el.src = "https://example.org/document-builder.sjs?html=<h2>remote iframe</h2>"; - await onIframeLoaded; + content.document.body.appendChild(el); + await onLoaded; return el.browsingContext; } ); diff --git a/docshell/test/navigation/test_blockBFCache.html b/docshell/test/navigation/test_blockBFCache.html @@ -103,7 +103,7 @@ if (SpecialPowers.effectiveIsolationStrategy() == SpecialPowers.ISOLATION_STRATE name: "Loading OOP iframe", test: () => { return new Promise((resolve) => { - const el = document.body.appendChild(document.createElement("iframe")); + const el = document.createElement("iframe"); el.id = "frame"; addEventListener("message", ({ data }) => { if (data == "onload") { @@ -111,6 +111,7 @@ if (SpecialPowers.effectiveIsolationStrategy() == SpecialPowers.ISOLATION_STRATE } }); el.src = "https://example.com/tests/docshell/test/navigation/iframe_slow_onload.html"; + document.body.appendChild(el); }); }, waitForDone: () => { diff --git a/dom/base/test/test_bug1472427.html b/dom/base/test/test_bug1472427.html @@ -26,8 +26,8 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1472427 function initPage() { ifr = document.createElement("iframe"); ifr.src = "about:blank"; - document.body.appendChild(ifr); ifr.onload = initIframe; + document.body.appendChild(ifr); } function initIframe() { diff --git a/dom/base/test/test_navigator_cookieEnabled.html b/dom/base/test/test_navigator_cookieEnabled.html @@ -38,11 +38,11 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1753586 { once: true } ); - win.document.body.appendChild(iframe); if (sandbox) { iframe.sandbox = sandbox; } iframe.src = src; + win.document.body.appendChild(iframe); }); } diff --git a/layout/base/tests/test_getBoxQuads_convertPointRectQuad.html b/layout/base/tests/test_getBoxQuads_convertPointRectQuad.html @@ -370,7 +370,6 @@ function startTest() { function grabFeatures() { var x = document.createElement('iframe'); x.src = "about:blank"; - document.body.appendChild(x); function setupFeatures(w) { for (var name of ["getBoxQuads", "convertQuadFromNode", "convertRectFromNode", "convertPointFromNode"]) { w.Text.prototype[name] = x.contentWindow.Text.prototype[name]; @@ -386,6 +385,7 @@ function grabFeatures() { setupFeatures(f1.contentWindow); runTest(); }; + document.body.appendChild(x); } function runTest() { diff --git a/netwerk/cookie/test/browser/browser_cookies_serviceWorker.js b/netwerk/cookie/test/browser/browser_cookies_serviceWorker.js @@ -175,8 +175,8 @@ add_task(async function testCookiesWithCrossSiteServiceWorker() { await new content.Promise(resolve => { ifr.onload = resolve; - content.document.body.appendChild(ifr); ifr.src = url; + content.document.body.appendChild(ifr); }); return ifr.browsingContext; @@ -260,8 +260,8 @@ add_task(async function testPartitionedCookiesWithCrossSiteServiceWorker() { await new content.Promise(resolve => { ifr.onload = resolve; - content.document.body.appendChild(ifr); ifr.src = url; + content.document.body.appendChild(ifr); }); return ifr.browsingContext; @@ -360,8 +360,8 @@ add_task(async function testCookiesWithABAServiceWorker() { await new content.Promise(resolve => { ifr.onload = resolve; - content.document.body.appendChild(ifr); ifr.src = url; + content.document.body.appendChild(ifr); }); return ifr.browsingContext; @@ -376,8 +376,8 @@ add_task(async function testCookiesWithABAServiceWorker() { await new content.Promise(resolve => { ifr.onload = resolve; - content.document.body.appendChild(ifr); ifr.src = url; + content.document.body.appendChild(ifr); }); return ifr.browsingContext; @@ -465,8 +465,8 @@ add_task(async function testCookiesWithABAServiceWorker() { await new content.Promise(resolve => { ifr.onload = resolve; - content.document.body.appendChild(ifr); ifr.src = url; + content.document.body.appendChild(ifr); }); return ifr.browsingContext; @@ -481,8 +481,8 @@ add_task(async function testCookiesWithABAServiceWorker() { await new content.Promise(resolve => { ifr.onload = resolve; - content.document.body.appendChild(ifr); ifr.src = url; + content.document.body.appendChild(ifr); }); return ifr.browsingContext; diff --git a/netwerk/test/mochitests/test_redirect_ref.html b/netwerk/test/mochitests/test_redirect_ref.html @@ -13,10 +13,9 @@ SimpleTest.waitForExplicitFinish(); var iframe = document.createElement("iframe"); -iframe.src = "about:blank"; iframe.addEventListener("load", finishTest); -document.body.appendChild(iframe); iframe.src = "redirect.sjs#start"; +document.body.appendChild(iframe); function finishTest() { is(iframe.contentWindow.location.href, "http://mochi.test:8888/tests/netwerk/test/mochitests/empty.html#"); diff --git a/toolkit/components/antitracking/test/browser/antitracking_head.js b/toolkit/components/antitracking/test/browser/antitracking_head.js @@ -720,8 +720,8 @@ this.AntiTracking = { ok(false, "Unknown message"); }); - content.document.body.appendChild(ifr); ifr.src = obj.page; + content.document.body.appendChild(ifr); }); if (obj.doAccessRemovalChecks) { @@ -839,8 +839,8 @@ this.AntiTracking = { ok(false, "Unknown message"); }); - content.document.body.appendChild(ifr); ifr.src = obj.page; + content.document.body.appendChild(ifr); } ); } @@ -1024,11 +1024,9 @@ this.AntiTracking = { async function (obj) { // Add an iframe. let ifr = content.document.createElement("iframe"); - let loading = new content.Promise(resolve => { - ifr.onload = resolve; - }); - content.document.body.appendChild(ifr); + const loading = ContentTaskUtils.waitForEvent(ifr, "load"); ifr.src = obj.page; + content.document.body.appendChild(ifr); await loading; return ifr.browsingContext; @@ -1089,8 +1087,8 @@ this.AntiTracking = { ok(false, "Unknown message"); }); - content.document.body.appendChild(ifr); ifr.src = obj.page; + content.document.body.appendChild(ifr); }); } ); @@ -1159,11 +1157,9 @@ this.AntiTracking = { async function (obj) { // Add an iframe. let ifr = content.document.createElement("iframe"); - let loading = new content.Promise(resolve => { - ifr.onload = resolve; - }); - content.document.body.appendChild(ifr); + const loading = ContentTaskUtils.waitForEvent(ifr, "load"); ifr.src = obj.page; + content.document.body.appendChild(ifr); await loading; return ifr.browsingContext; @@ -1192,17 +1188,15 @@ this.AntiTracking = { ], async function (obj) { let ifr = content.document.createElement("iframe"); - let loading = new content.Promise(resolve => { - ifr.onload = resolve; - }); + const loading = ContentTaskUtils.waitForEvent(ifr, "load"); if (typeof obj.iframeSandbox == "string") { ifr.setAttribute("sandbox", obj.iframeSandbox); } if (typeof obj.iframeAllow == "string") { ifr.setAttribute("allow", obj.iframeAllow); } - content.document.body.appendChild(ifr); ifr.src = obj.page; + content.document.body.appendChild(ifr); await loading; info( @@ -1324,17 +1318,15 @@ this.AntiTracking = { ], async function (obj) { let ifr = content.document.createElement("iframe"); - let loading = new content.Promise(resolve => { - ifr.onload = resolve; - }); + const loading = ContentTaskUtils.waitForEvent(ifr, "load"); if (typeof obj.iframeSandbox == "string") { ifr.setAttribute("sandbox", obj.iframeSandbox); } if (typeof obj.iframeAllow == "string") { ifr.setAttribute("allow", obj.iframeAllow); } - content.document.body.appendChild(ifr); ifr.src = obj.page; + content.document.body.appendChild(ifr); await loading; let windowClosed = new content.Promise(resolve => { diff --git a/toolkit/components/antitracking/test/browser/browser_PBMCookieBehavior.js b/toolkit/components/antitracking/test/browser/browser_PBMCookieBehavior.js @@ -26,11 +26,9 @@ async function verifyCookieBehavior(browser, expected) { // Create an 3rd party iframe and check the cookieBehavior. let ifr = content.document.createElement("iframe"); - let loading = new content.Promise(resolve => { - ifr.onload = resolve; - }); - content.document.body.appendChild(ifr); + const loading = ContentTaskUtils.waitForEvent(ifr, "load"); ifr.src = obj.page; + content.document.body.appendChild(ifr); await loading; await SpecialPowers.spawn( diff --git a/toolkit/components/antitracking/test/browser/browser_allowListNotifications.js b/toolkit/components/antitracking/test/browser/browser_allowListNotifications.js @@ -88,8 +88,8 @@ add_task(async function () { ok(false, "Unknown message"); }); - content.document.body.appendChild(ifr); ifr.src = obj.page; + content.document.body.appendChild(ifr); }); } ); diff --git a/toolkit/components/antitracking/test/browser/browser_contentBlockingTelemetry.js b/toolkit/components/antitracking/test/browser/browser_contentBlockingTelemetry.js @@ -220,8 +220,8 @@ add_task(async function testTelemetryForStorageAccessAPI() { ok(false, "Unknown message"); }); - content.document.body.appendChild(ifr); ifr.src = obj.page; + content.document.body.appendChild(ifr); }); } ); @@ -306,8 +306,8 @@ add_task(async function testTelemetryForWindowOpenHeuristic() { ok(false, "Unknown message"); }); - content.document.body.appendChild(ifr); ifr.src = obj.page; + content.document.body.appendChild(ifr); }); } ); @@ -372,11 +372,9 @@ add_task(async function testTelemetryForUserInteractionHeuristic() { }).toString(); let ifr = content.document.createElement("iframe"); - let loading = new content.Promise(resolve => { - ifr.onload = resolve; - }); - content.document.body.appendChild(ifr); + const loading = ContentTaskUtils.waitForEvent(ifr, "load"); ifr.src = obj.page; + content.document.body.appendChild(ifr); await loading; info("Opening a window from the iframe."); diff --git a/toolkit/components/antitracking/test/browser/browser_doublyNestedTracker.js b/toolkit/components/antitracking/test/browser/browser_doublyNestedTracker.js @@ -67,9 +67,9 @@ add_task(async function () { ok(false, "Unknown message"); }); - document.body.appendChild(ifr); ifr.src = "https://tracking.example.org/browser/toolkit/components/antitracking/test/browser/3rdParty.html"; + document.body.appendChild(ifr); }); } @@ -110,8 +110,8 @@ add_task(async function () { ok(false, "Unknown message"); }); - content.document.body.appendChild(ifr); ifr.src = obj.page; + content.document.body.appendChild(ifr); }); } ); diff --git a/toolkit/components/antitracking/test/browser/browser_existingCookiesForSubresources.js b/toolkit/components/antitracking/test/browser/browser_existingCookiesForSubresources.js @@ -150,8 +150,8 @@ add_task(async function () { ok(false, "Unknown message"); }); - content.document.body.appendChild(ifr); ifr.src = obj.page; + content.document.body.appendChild(ifr); }); } ); diff --git a/toolkit/components/antitracking/test/browser/browser_partitionedABA.js b/toolkit/components/antitracking/test/browser/browser_partitionedABA.js @@ -32,8 +32,8 @@ add_task(async function runTest() { let ifr = content.document.createElement("iframe"); let loading = ContentTaskUtils.waitForEvent(ifr, "load"); - content.document.body.appendChild(ifr); ifr.src = page; + content.document.body.appendChild(ifr); await loading; return ifr.browsingContext; @@ -48,8 +48,8 @@ add_task(async function runTest() { let ifr = content.document.createElement("iframe"); let loading = ContentTaskUtils.waitForEvent(ifr, "load"); - content.document.body.appendChild(ifr); ifr.src = page; + content.document.body.appendChild(ifr); await loading; return ifr.browsingContext; diff --git a/toolkit/components/antitracking/test/browser/browser_partitionedABnavigatestToAA.js b/toolkit/components/antitracking/test/browser/browser_partitionedABnavigatestToAA.js @@ -34,8 +34,8 @@ add_task(async function runTest() { ifr.id = "iframe"; let loading = ContentTaskUtils.waitForEvent(ifr, "load"); - content.document.body.appendChild(ifr); ifr.src = page; + content.document.body.appendChild(ifr); await loading; return ifr.browsingContext; diff --git a/toolkit/components/antitracking/test/browser/browser_partitionedConsoleMessage.js b/toolkit/components/antitracking/test/browser/browser_partitionedConsoleMessage.js @@ -50,8 +50,8 @@ add_task(async function runTest() { let ifr = content.document.createElement("iframe"); let loading = ContentTaskUtils.waitForEvent(ifr, "load"); - content.document.body.appendChild(ifr); ifr.src = page; + content.document.body.appendChild(ifr); await loading; return ifr.browsingContext; diff --git a/toolkit/components/antitracking/test/browser/browser_referrerDefaultPolicy.js b/toolkit/components/antitracking/test/browser/browser_referrerDefaultPolicy.js @@ -60,24 +60,18 @@ async function testOnWindowBody(win, expectedReferrer, rp) { let iframeReferrer; { let iframe = content.document.createElement("iframe"); - let p = new content.Promise(resolve => { - iframe.onload = resolve; - }); - content.document.body.appendChild(iframe); + const loaded = ContentTaskUtils.waitForEvent(iframe, "load"); if (rp) { iframe.referrerPolicy = rp; } iframe.src = "https://tracking.example.org/browser/toolkit/components/antitracking/test/browser/referrer.sjs?what=iframe"; - await p; + content.document.body.appendChild(iframe); + await loaded; - p = new content.Promise(resolve => { - content.onmessage = event => { - resolve(event.data); - }; - }); + const messageEvent = ContentTaskUtils.waitForEvent(content, "message"); iframe.contentWindow.postMessage("ping", "*"); - iframeReferrer = await p; + iframeReferrer = (await messageEvent).data; } let refreshReferrer; @@ -105,8 +99,8 @@ async function testOnWindowBody(win, expectedReferrer, rp) { iframeLoaded(); } }; - content.document.body.appendChild(iframe); iframe.src = content.location; + content.document.body.appendChild(iframe); await p; } diff --git a/toolkit/components/antitracking/test/browser/browser_script.js b/toolkit/components/antitracking/test/browser/browser_script.js @@ -85,8 +85,8 @@ add_task(async function () { ok(false, "Unknown message"); }); - content.document.body.appendChild(ifr); ifr.src = obj.page; + content.document.body.appendChild(ifr); }); await assertBlocked(); @@ -158,8 +158,8 @@ add_task(async function () { ok(false, "Unknown message"); }); - content.document.body.appendChild(ifr); ifr.src = obj.page; + content.document.body.appendChild(ifr); }); info("Triggering a 3rd party script..."); @@ -207,8 +207,8 @@ add_task(async function () { ok(false, "Unknown message"); }); - content.document.body.appendChild(ifr); ifr.src = obj.page; + content.document.body.appendChild(ifr); }); } ); diff --git a/toolkit/components/antitracking/test/browser/browser_staticPartition_CORS_preflight.js b/toolkit/components/antitracking/test/browser/browser_staticPartition_CORS_preflight.js @@ -37,8 +37,8 @@ add_task(async function () { iframe.onload = () => { resolve(); }; - content.document.body.appendChild(iframe); iframe.src = iframe_url; + content.document.body.appendChild(iframe); }); await SpecialPowers.spawn(iframe, [url, token], async (url, token) => { @@ -94,8 +94,8 @@ add_task(async function () { iframe.onload = () => { resolve(); }; - content.document.body.appendChild(iframe); iframe.src = iframe_url; + content.document.body.appendChild(iframe); }); await SpecialPowers.spawn(iframe, [url, token], async (url, token) => { diff --git a/toolkit/components/antitracking/test/browser/browser_storageAccessDoorHanger.js b/toolkit/components/antitracking/test/browser/browser_storageAccessDoorHanger.js @@ -218,8 +218,8 @@ async function testDoorHanger( ok(false, "Unknown message"); }); - content.document.body.appendChild(ifr); ifr.src = obj.page; + content.document.body.appendChild(ifr); }); } ); diff --git a/toolkit/components/antitracking/test/browser/browser_storageAccessPrivilegeAPI.js b/toolkit/components/antitracking/test/browser/browser_storageAccessPrivilegeAPI.js @@ -20,8 +20,8 @@ async function insertSubFrame(browser, url, id) { ifr.setAttribute("id", id); let loaded = ContentTaskUtils.waitForEvent(ifr, "load", false); - content.document.body.appendChild(ifr); ifr.src = url; + content.document.body.appendChild(ifr); await loaded; }); } diff --git a/toolkit/components/antitracking/test/browser/browser_storageAccessWithDynamicFpi.js b/toolkit/components/antitracking/test/browser/browser_storageAccessWithDynamicFpi.js @@ -88,8 +88,8 @@ function executeContentScript(browser, callback, options = {}) { once: true, }); - content.document.body.appendChild(ifr); ifr.src = obj.page; + content.document.body.appendChild(ifr); } else { // first-party let runnableStr = `(() => {return (${obj.callback});})();`; diff --git a/toolkit/components/antitracking/test/browser/browser_storageAccessWithHeuristics.js b/toolkit/components/antitracking/test/browser/browser_storageAccessWithHeuristics.js @@ -124,8 +124,8 @@ async function runTestWindowOpenHeuristic(disableHeuristics) { ok(false, "Unknown message"); }); - content.document.body.appendChild(ifr); ifr.src = obj.page; + content.document.body.appendChild(ifr); }); } ); @@ -209,8 +209,8 @@ add_task(async function testDoublyNestedWindowOpenHeuristic() { ok(false, "Unknown message"); }); - content.document.body.appendChild(ifr); ifr.src = obj.page; + content.document.body.appendChild(ifr); }); } ); @@ -264,11 +264,9 @@ async function runTestUserInteractionHeuristic(disableHeuristics) { info("Checking if storage access is denied"); let ifr = content.document.createElement("iframe"); - let loading = new content.Promise(resolve => { - ifr.onload = resolve; - }); - content.document.body.appendChild(ifr); + const loading = ContentTaskUtils.waitForEvent(ifr, "load"); ifr.src = obj.page; + content.document.body.appendChild(ifr); await loading; info( @@ -384,11 +382,9 @@ async function runTestUserInteractionHeuristic(disableHeuristics) { info("Checking if storage access is denied"); let ifr = content.document.createElement("iframe"); - let loading = new content.Promise(resolve => { - ifr.onload = resolve; - }); - content.document.body.appendChild(ifr); + const loading = ContentTaskUtils.waitForEvent(ifr, "load"); ifr.src = obj.page; + content.document.body.appendChild(ifr); await loading; info( @@ -536,11 +532,9 @@ add_task(async function testDoublyNestedUserInteractionHeuristic() { info("Checking if storage access is denied"); let ifr = content.document.createElement("iframe"); - let loading = new content.Promise(resolve => { - ifr.onload = resolve; - }); - content.document.body.appendChild(ifr); + const loading = ContentTaskUtils.waitForEvent(ifr, "load"); ifr.src = obj.page; + content.document.body.appendChild(ifr); await loading; info( @@ -644,11 +638,9 @@ add_task(async function testDoublyNestedUserInteractionHeuristic() { info("Checking if storage access is denied"); let ifr = content.document.createElement("iframe"); - let loading = new content.Promise(resolve => { - ifr.onload = resolve; - }); - content.document.body.appendChild(ifr); + const loading = ContentTaskUtils.waitForEvent(ifr, "load"); ifr.src = obj.page; + content.document.body.appendChild(ifr); await loading; info( @@ -805,9 +797,9 @@ async function runTestFirstPartyWindowOpenHeuristic(disableHeuristics) { ok(false, "Unknown message"); }); - content.document.body.appendChild(ifr); ifr.id = "ifr"; ifr.src = obj.page; + content.document.body.appendChild(ifr); }); } ); @@ -823,11 +815,9 @@ async function runTestFirstPartyWindowOpenHeuristic(disableHeuristics) { ], async obj => { let ifr = content.document.createElement("iframe"); - let loading = new content.Promise(resolve => { - ifr.onload = resolve; - }); - content.document.body.appendChild(ifr); + const loading = ContentTaskUtils.waitForEvent(ifr, "load"); ifr.src = obj.page; + content.document.body.appendChild(ifr); await loading; info("Opening a window from the iframe."); diff --git a/toolkit/components/antitracking/test/browser/browser_subResources.js b/toolkit/components/antitracking/test/browser/browser_subResources.js @@ -139,8 +139,8 @@ add_task(async function () { ok(false, "Unknown message"); }); - content.document.body.appendChild(ifr); ifr.src = obj.page; + content.document.body.appendChild(ifr); }); } ); diff --git a/toolkit/components/antitracking/test/browser/browser_subResourcesPartitioned.js b/toolkit/components/antitracking/test/browser/browser_subResourcesPartitioned.js @@ -115,8 +115,8 @@ async function runTests(topPage, limitForeignContexts) { ok(false, "Unknown message"); }); - content.document.body.appendChild(ifr); ifr.src = obj.page; + content.document.body.appendChild(ifr); }); } ); diff --git a/toolkit/components/antitracking/test/browser/browser_subResourcesPartitioned_alwaysPartition.js b/toolkit/components/antitracking/test/browser/browser_subResourcesPartitioned_alwaysPartition.js @@ -115,8 +115,8 @@ async function runTests(topPage, limitForeignContexts) { ok(false, "Unknown message"); }); - content.document.body.appendChild(ifr); ifr.src = obj.page; + content.document.body.appendChild(ifr); }); } ); diff --git a/toolkit/components/antitracking/test/browser/dynamicfpi_head.js b/toolkit/components/antitracking/test/browser/dynamicfpi_head.js @@ -147,8 +147,8 @@ this.DynamicFPIHelper = { ok(false, "Unknown message"); }); - content.document.body.appendChild(ifr); ifr.src = obj.page; + content.document.body.appendChild(ifr); }); } ); diff --git a/toolkit/components/antitracking/test/browser/partitionedstorage_head.js b/toolkit/components/antitracking/test/browser/partitionedstorage_head.js @@ -233,8 +233,8 @@ this.PartitionedStorageHelper = { { once: true } ); - content.document.body.appendChild(ifr); ifr.src = obj.page; + content.document.body.appendChild(ifr); }); } ); diff --git a/toolkit/components/antitracking/test/browser/storage_access_head.js b/toolkit/components/antitracking/test/browser/storage_access_head.js @@ -45,8 +45,8 @@ async function openPageAndRunCode( ok(false, "Unknown message"); }); - content.document.body.appendChild(ifr); ifr.src = obj.page; + content.document.body.appendChild(ifr); }); } ); diff --git a/toolkit/components/resistfingerprinting/tests/browser/browser_fingerprintingRemoteOverrides.js b/toolkit/components/resistfingerprinting/tests/browser/browser_fingerprintingRemoteOverrides.js @@ -523,8 +523,8 @@ add_task(async function test_beacon_request() { await new content.Promise(resolve => { ifr.onload = resolve; - content.document.body.appendChild(ifr); ifr.src = url; + content.document.body.appendChild(ifr); }); await SpecialPowers.spawn(ifr, [url], url => { diff --git a/toolkit/components/resistfingerprinting/tests/browser/browser_fingerprintingWebCompat.js b/toolkit/components/resistfingerprinting/tests/browser/browser_fingerprintingWebCompat.js @@ -262,19 +262,15 @@ async function openAndSetupTestPage() { [TEST_TOP_PAGE, TEST_THIRD_PARTY_PAGE], async (firstPartySrc, thirdPartySrc) => { let firstPartyFrame = content.document.createElement("iframe"); - let loading = new content.Promise(resolve => { - firstPartyFrame.onload = resolve; - }); - content.document.body.appendChild(firstPartyFrame); + let loading = ContentTaskUtils.waitForEvent(firstPartyFrame, "load"); firstPartyFrame.src = firstPartySrc; + content.document.body.appendChild(firstPartyFrame); await loading; let thirdPartyFrame = content.document.createElement("iframe"); - loading = new content.Promise(resolve => { - thirdPartyFrame.onload = resolve; - }); - content.document.body.appendChild(thirdPartyFrame); + loading = ContentTaskUtils.waitForEvent(thirdPartyFrame, "load"); thirdPartyFrame.src = thirdPartySrc; + content.document.body.appendChild(thirdPartyFrame); await loading; return { @@ -299,11 +295,9 @@ async function openAndSetupTestPageForPopup() { [TEST_THIRD_PARTY_PAGE], async thirdPartySrc => { let thirdPartyFrame = content.document.createElement("iframe"); - let loading = new content.Promise(resolve => { - thirdPartyFrame.onload = resolve; - }); - content.document.body.appendChild(thirdPartyFrame); + const loading = ContentTaskUtils.waitForEvent(thirdPartyFrame, "load"); thirdPartyFrame.src = thirdPartySrc; + content.document.body.appendChild(thirdPartyFrame); await loading; let popupBC = await SpecialPowers.spawn( diff --git a/toolkit/components/resistfingerprinting/tests/browser/browser_fingerprinting_randomization_key.js b/toolkit/components/resistfingerprinting/tests/browser/browser_fingerprinting_randomization_key.js @@ -60,11 +60,9 @@ async function getRandomKeyHexFromBrowser( let keyAboutBlank = await SpecialPowers.spawn(browser, [], async _ => { let ifr = content.document.createElement("iframe"); - let loaded = new content.Promise(resolve => { - ifr.onload = resolve; - }); - content.document.body.appendChild(ifr); + const loaded = ContentTaskUtils.waitForEvent(ifr, "load"); ifr.src = "about:blank"; + content.document.body.appendChild(ifr); await loaded; @@ -106,11 +104,9 @@ async function getRandomKeyHexFromBrowser( async domain => { let ifr = content.document.createElement("iframe"); - let loaded = new content.Promise(resolve => { - ifr.onload = resolve; - }); - content.document.body.appendChild(ifr); + const loaded = ContentTaskUtils.waitForEvent(ifr, "load"); ifr.src = domain; + content.document.body.appendChild(ifr); await loaded; @@ -137,11 +133,9 @@ async function getRandomKeyHexFromBrowser( async domain => { let ifr = content.document.createElement("iframe"); - let loaded = new content.Promise(resolve => { - ifr.onload = resolve; - }); - content.document.body.appendChild(ifr); + const loaded = ContentTaskUtils.waitForEvent(ifr, "load"); ifr.src = domain; + content.document.body.appendChild(ifr); await loaded; diff --git a/toolkit/components/resistfingerprinting/tests/browser/head.js b/toolkit/components/resistfingerprinting/tests/browser/head.js @@ -215,8 +215,8 @@ function runTestInFirstAndThirdPartyContexts( await new content.Promise(resolve => { ifr.onload = resolve; - content.document.body.appendChild(ifr); ifr.src = url; + content.document.body.appendChild(ifr); }); content.open(url);