commit a24203b520808df4bfc0e464bcc03d1d59878b72 parent 41067c1b92a6c926a7390eb87ce8e2e410cffbdb Author: Mark Banner <standard8@mozilla.com> Date: Tue, 9 Dec 2025 15:33:54 +0000 Bug 2004684 - Replace promiseTabLoadEvent functions in head files with BrowserTestUtils.loadURIString. r=firefox-desktop-core-reviewers ,tabbrowser-reviewers,timhuang,Gijs,dao Differential Revision: https://phabricator.services.mozilla.com/D275433 Diffstat:
49 files changed, 360 insertions(+), 624 deletions(-)
diff --git a/browser/base/content/test/about/head.js b/browser/base/content/test/about/head.js @@ -104,40 +104,6 @@ function waitForCondition(condition, nextTest, errorMsg, retryTimes) { }; } -/** - * Waits for a load (or custom) event to finish in a given tab. If provided - * load an uri into the tab. - * - * @param tab - * The tab to load into. - * @param [optional] url - * The url to load, or the current url. - * @return {Promise} resolved when the event is handled. - * @resolves to the received event - * @rejects if a valid load event is not received within a meaningful interval - */ -function promiseTabLoadEvent(tab, url) { - info("Wait tab event: load"); - - function handle(loadedUrl) { - if (loadedUrl === "about:blank" || (url && loadedUrl !== url)) { - info(`Skipping spurious load event for ${loadedUrl}`); - return false; - } - - info("Tab event received: load"); - return true; - } - - let loaded = BrowserTestUtils.browserLoaded(tab.linkedBrowser, false, handle); - - if (url) { - BrowserTestUtils.startLoadingURIString(tab.linkedBrowser, url); - } - - return loaded; -} - async function waitForBookmarksToolbarVisibility({ win = window, visible, diff --git a/browser/base/content/test/general/browser_bug462673.js b/browser/base/content/test/general/browser_bug462673.js @@ -7,10 +7,10 @@ add_task(async function () { await SimpleTest.promiseFocus(win); let tab = win.gBrowser.tabs[0]; - await promiseTabLoadEvent( - tab, - getRootDirectory(gTestPath) + "test_bug462673.html" - ); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: getRootDirectory(gTestPath) + "test_bug462673.html", + }); is( win.gBrowser.browsers.length, @@ -37,10 +37,10 @@ add_task(async function () { await SimpleTest.promiseFocus(win); let tab = win.gBrowser.tabs[0]; - await promiseTabLoadEvent( - tab, - getRootDirectory(gTestPath) + "test_bug462673.html" - ); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: getRootDirectory(gTestPath) + "test_bug462673.html", + }); var newTab = BrowserTestUtils.addTab(win.gBrowser); var newBrowser = newTab.linkedBrowser; diff --git a/browser/base/content/test/general/browser_clipboard.js b/browser/base/content/test/general/browser_clipboard.js @@ -13,7 +13,10 @@ add_task(async function () { gBrowser.selectedTab = tab; - await promiseTabLoadEvent(tab, "data:text/html," + escape(testPage)); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: "data:text/html," + escape(testPage), + }); await SimpleTest.promiseFocus(browser); function sendKey(key, code) { diff --git a/browser/base/content/test/general/browser_fullscreen-window-open.js b/browser/base/content/test/general/browser_fullscreen-window-open.js @@ -23,7 +23,10 @@ async function test() { newWin = await BrowserTestUtils.openNewBrowserWindow(); newBrowser = newWin.gBrowser; - await promiseTabLoadEvent(newBrowser.selectedTab, gHttpTestRoot + TEST_FILE); + await BrowserTestUtils.loadURIString({ + browser: newBrowser.selectedTab.linkedBrowser, + uriString: gHttpTestRoot + TEST_FILE, + }); // Enter browser fullscreen mode. newWin.BrowserCommands.fullScreen(); diff --git a/browser/base/content/test/general/browser_save_video_frame.js b/browser/base/content/test/general/browser_save_video_frame.js @@ -75,7 +75,10 @@ add_task(async function () { gBrowser.selectedTab = tab; let browser = tab.linkedBrowser; info("Loading video tab"); - await promiseTabLoadEvent(tab, VIDEO_URL); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: VIDEO_URL, + }); info("Video tab loaded."); let context = document.getElementById("contentAreaContextMenu"); diff --git a/browser/base/content/test/general/browser_star_hsts.js b/browser/base/content/test/general/browser_star_hsts.js @@ -26,9 +26,16 @@ add_task(async function test_star_redirect() { let tab = (gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser)); // This will add the page to the HSTS cache. - await promiseTabLoadEvent(tab, secureURL, secureURL); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: secureURL, + }); // This should transparently be redirected to the secure page. - await promiseTabLoadEvent(tab, unsecureURL, secureURL); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: unsecureURL, + finalURI: secureURL, + }); await promiseStarState(BookmarkingUI.STATUS_UNSTARRED); @@ -62,24 +69,3 @@ function promiseStarState(aValue) { })(); }); } - -/** - * Starts a load in an existing tab and waits for it to finish (via some event). - * - * @param aTab - * The tab to load into. - * @param aUrl - * The url to load. - * @param [optional] aFinalURL - * The url to wait for, same as aURL if not defined. - * @return {Promise} resolved when the event is handled. - */ -function promiseTabLoadEvent(aTab, aURL, aFinalURL) { - if (!aFinalURL) { - aFinalURL = aURL; - } - - info("Wait for load tab event"); - BrowserTestUtils.startLoadingURIString(aTab.linkedBrowser, aURL); - return BrowserTestUtils.browserLoaded(aTab.linkedBrowser, false, aFinalURL); -} diff --git a/browser/base/content/test/general/browser_visibleFindSelection.js b/browser/base/content/test/general/browser_visibleFindSelection.js @@ -6,10 +6,10 @@ add_task(async function () { let tab = (gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser)); - await promiseTabLoadEvent( - tab, - "data:text/html;charset=utf-8," + escape(childContent) - ); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: "data:text/html;charset=utf-8," + escape(childContent), + }); await SimpleTest.promiseFocus(gBrowser.selectedBrowser); let remote = gBrowser.selectedBrowser.isRemoteBrowser; diff --git a/browser/base/content/test/general/head.js b/browser/base/content/test/general/head.js @@ -177,40 +177,6 @@ async function whenNewTabLoaded(aWindow, aCallback) { aCallback(); } -/** - * Waits for a load (or custom) event to finish in a given tab. If provided - * load an uri into the tab. - * - * @param tab - * The tab to load into. - * @param [optional] url - * The url to load, or the current url. - * @return {Promise} resolved when the event is handled. - * @resolves to the received event - * @rejects if a valid load event is not received within a meaningful interval - */ -function promiseTabLoadEvent(tab, url) { - info("Wait tab event: load"); - - function handle(loadedUrl) { - if (loadedUrl === "about:blank" || (url && loadedUrl !== url)) { - info(`Skipping spurious load event for ${loadedUrl}`); - return false; - } - - info("Tab event received: load"); - return true; - } - - let loaded = BrowserTestUtils.browserLoaded(tab.linkedBrowser, false, handle); - - if (url) { - BrowserTestUtils.startLoadingURIString(tab.linkedBrowser, url); - } - - return loaded; -} - function is_hidden(element) { var style = element.ownerGlobal.getComputedStyle(element); if (style.display == "none") { diff --git a/browser/base/content/test/plugins/browser_bug797677.js b/browser/base/content/test/plugins/browser_bug797677.js @@ -25,10 +25,10 @@ add_task(async function () { }; Services.console.registerListener(errorListener); - await promiseTabLoadEvent( - gBrowser.selectedTab, - gTestRoot + "plugin_bug797677.html" - ); + await BrowserTestUtils.loadURIString({ + browser: gBrowser.selectedTab.linkedBrowser, + uriString: gTestRoot + "plugin_bug797677.html", + }); let pluginInfo = await promiseForPluginInfo("plugin"); is( diff --git a/browser/base/content/test/plugins/head.js b/browser/base/content/test/plugins/head.js @@ -25,40 +25,6 @@ function waitForMs(aMs) { }); } -/** - * Waits for a load (or custom) event to finish in a given tab. If provided - * load an uri into the tab. - * - * @param tab - * The tab to load into. - * @param [optional] url - * The url to load, or the current url. - * @return {Promise} resolved when the event is handled. - * @resolves to the received event - * @rejects if a valid load event is not received within a meaningful interval - */ -function promiseTabLoadEvent(tab, url) { - info("Wait tab event: load"); - - function handle(loadedUrl) { - if (loadedUrl === "about:blank" || (url && loadedUrl !== url)) { - info(`Skipping spurious load event for ${loadedUrl}`); - return false; - } - - info("Tab event received: load"); - return true; - } - - let loaded = BrowserTestUtils.browserLoaded(tab.linkedBrowser, false, handle); - - if (url) { - BrowserTestUtils.startLoadingURIString(tab.linkedBrowser, url); - } - - return loaded; -} - function waitForCondition(condition, nextTest, errorMsg, aTries, aWait) { let tries = 0; let maxTries = aTries || 100; // 100 tries diff --git a/browser/base/content/test/popupNotifications/browser_popupNotification_2.js b/browser/base/content/test/popupNotifications/browser_popupNotification_2.js @@ -86,14 +86,23 @@ var tests = [ }, async onShown() { this.complete = false; - // eslint-disable-next-line @microsoft/sdl/no-insecure-url - await promiseTabLoadEvent(gBrowser.selectedTab, "http://example.org/"); - // eslint-disable-next-line @microsoft/sdl/no-insecure-url - await promiseTabLoadEvent(gBrowser.selectedTab, "http://example.com/"); + await BrowserTestUtils.loadURIString({ + browser: gBrowser.selectedTab.linkedBrowser, + // eslint-disable-next-line @microsoft/sdl/no-insecure-url + uriString: "http://example.org/", + }); + await BrowserTestUtils.loadURIString({ + browser: gBrowser.selectedTab.linkedBrowser, + // eslint-disable-next-line @microsoft/sdl/no-insecure-url + uriString: "http://example.com/", + }); // Next load will remove the notification this.complete = true; - // eslint-disable-next-line @microsoft/sdl/no-insecure-url - await promiseTabLoadEvent(gBrowser.selectedTab, "http://example.org/"); + await BrowserTestUtils.loadURIString({ + browser: gBrowser.selectedTab.linkedBrowser, + // eslint-disable-next-line @microsoft/sdl/no-insecure-url + uriString: "http://example.org/", + }); }, onHidden() { ok( @@ -124,15 +133,24 @@ var tests = [ }, async onShown() { this.complete = false; - // eslint-disable-next-line @microsoft/sdl/no-insecure-url - await promiseTabLoadEvent(gBrowser.selectedTab, "http://example.org/"); - // eslint-disable-next-line @microsoft/sdl/no-insecure-url - await promiseTabLoadEvent(gBrowser.selectedTab, "http://example.com/"); + await BrowserTestUtils.loadURIString({ + browser: gBrowser.selectedTab.linkedBrowser, + // eslint-disable-next-line @microsoft/sdl/no-insecure-url + uriString: "http://example.org/", + }); + await BrowserTestUtils.loadURIString({ + browser: gBrowser.selectedTab.linkedBrowser, + // eslint-disable-next-line @microsoft/sdl/no-insecure-url + uriString: "http://example.com/", + }); // Next load will hide the notification this.notification.options.timeout = Date.now() - 1; this.complete = true; - // eslint-disable-next-line @microsoft/sdl/no-insecure-url - await promiseTabLoadEvent(gBrowser.selectedTab, "http://example.org/"); + await BrowserTestUtils.loadURIString({ + browser: gBrowser.selectedTab.linkedBrowser, + // eslint-disable-next-line @microsoft/sdl/no-insecure-url + uriString: "http://example.org/", + }); }, onHidden() { ok( @@ -164,10 +182,16 @@ var tests = [ async onShown(popup) { this.complete = false; - // eslint-disable-next-line @microsoft/sdl/no-insecure-url - await promiseTabLoadEvent(gBrowser.selectedTab, "http://example.org/"); - // eslint-disable-next-line @microsoft/sdl/no-insecure-url - await promiseTabLoadEvent(gBrowser.selectedTab, "http://example.com/"); + await BrowserTestUtils.loadURIString({ + browser: gBrowser.selectedTab.linkedBrowser, + // eslint-disable-next-line @microsoft/sdl/no-insecure-url + uriString: "http://example.org/", + }); + await BrowserTestUtils.loadURIString({ + browser: gBrowser.selectedTab.linkedBrowser, + // eslint-disable-next-line @microsoft/sdl/no-insecure-url + uriString: "http://example.com/", + }); // Notification should persist across location changes this.complete = true; dismissNotification(popup); diff --git a/browser/base/content/test/popupNotifications/browser_popupNotification_3.js b/browser/base/content/test/popupNotifications/browser_popupNotification_3.js @@ -203,8 +203,11 @@ var tests = [ { id: "Test#6", async run() { - // eslint-disable-next-line @microsoft/sdl/no-insecure-url - await promiseTabLoadEvent(gBrowser.selectedTab, "http://example.com/"); + await BrowserTestUtils.loadURIString({ + browser: gBrowser.selectedTab.linkedBrowser, + // eslint-disable-next-line @microsoft/sdl/no-insecure-url + uriString: "http://example.com/", + }); let notifyObj = new BasicNotification(this.id); notifyObj.options.eventCallback = function (eventName) { if (eventName == "removed") { @@ -252,8 +255,11 @@ var tests = [ { id: "Test#8", async run() { - // eslint-disable-next-line @microsoft/sdl/no-insecure-url - await promiseTabLoadEvent(gBrowser.selectedTab, "http://example.com/"); + await BrowserTestUtils.loadURIString({ + browser: gBrowser.selectedTab.linkedBrowser, + // eslint-disable-next-line @microsoft/sdl/no-insecure-url + uriString: "http://example.com/", + }); let originalTab = gBrowser.selectedTab; let bgTab = await BrowserTestUtils.openNewForegroundTab( gBrowser, @@ -293,10 +299,11 @@ var tests = [ { id: "Test#9", async run() { - await promiseTabLoadEvent( - gBrowser.selectedTab, - "data:text/html;charset=utf8,<iframe%20id='iframe'%20src='http://example.com/'>" - ); + await BrowserTestUtils.loadURIString({ + browser: gBrowser.selectedTab.linkedBrowser, + uriString: + "data:text/html;charset=utf8,<iframe%20id='iframe'%20src='http://example.com/'>", + }); this.notifyObj = new BasicNotification(this.id); this.notifyObj.options.eventCallback = function (eventName) { if (eventName == "removed") { diff --git a/browser/base/content/test/popupNotifications/browser_popupNotification_5.js b/browser/base/content/test/popupNotifications/browser_popupNotification_5.js @@ -105,10 +105,16 @@ var tests = [ async onShown(popup) { this.complete = false; - // eslint-disable-next-line @microsoft/sdl/no-insecure-url - await promiseTabLoadEvent(gBrowser.selectedTab, "http://example.org/"); - // eslint-disable-next-line @microsoft/sdl/no-insecure-url - await promiseTabLoadEvent(gBrowser.selectedTab, "http://example.com/"); + await BrowserTestUtils.loadURIString({ + browser: gBrowser.selectedTab.linkedBrowser, + // eslint-disable-next-line @microsoft/sdl/no-insecure-url + uriString: "http://example.org/", + }); + await BrowserTestUtils.loadURIString({ + browser: gBrowser.selectedTab.linkedBrowser, + // eslint-disable-next-line @microsoft/sdl/no-insecure-url + uriString: "http://example.com/", + }); // This code should not be executed. ok(false, "Should have removed the notification after navigation"); diff --git a/browser/base/content/test/popupNotifications/browser_popupNotification_no_anchors.js b/browser/base/content/test/popupNotifications/browser_popupNotification_no_anchors.js @@ -61,7 +61,10 @@ var tests = [ this.notification = showNotification(this.notifyObj); }, async onShown(popup) { - await promiseTabLoadEvent(gBrowser.selectedTab, "about:blank"); + await BrowserTestUtils.loadURIString({ + browser: gBrowser.selectedTab.linkedBrowser, + uriString: "about:blank", + }); checkPopup(popup, this.notifyObj); is( @@ -103,7 +106,11 @@ var tests = [ ); // eslint-disable-next-line @microsoft/sdl/no-insecure-url - await promiseTabLoadEvent(gBrowser.selectedTab, "http://example.com/"); + await BrowserTestUtils.loadURIString({ + browser: gBrowser.selectedTab.linkedBrowser, + // eslint-disable-next-line @microsoft/sdl/no-insecure-url + uriString: "http://example.com/", + }); isnot( document.getElementById("geo-notification-icon").getBoundingClientRect() diff --git a/browser/base/content/test/popupNotifications/head.js b/browser/base/content/test/popupNotifications/head.js @@ -19,28 +19,6 @@ async function waitForWindowReadyForPopupNotifications(win) { ); } -/** - * Waits for a load (or custom) event to finish in a given tab. If provided - * load an uri into the tab. - * - * @param tab - * The tab to load into. - * @param [optional] url - * The url to load, or the current url. - * @return {Promise} resolved when the event is handled. - * @resolves to the received event - * @rejects if a valid load event is not received within a meaningful interval - */ -function promiseTabLoadEvent(tab, url) { - let browser = tab.linkedBrowser; - - if (url) { - BrowserTestUtils.startLoadingURIString(browser, url); - } - - return BrowserTestUtils.browserLoaded(browser, false, url); -} - // Tests that call setup() should have a `tests` array defined for the actual // tests to be run. /* global tests */ diff --git a/browser/base/content/test/protectionsUI/browser_protectionsUI_background_tabs.js b/browser/base/content/test/protectionsUI/browser_protectionsUI_background_tabs.js @@ -33,7 +33,10 @@ add_task(async function testBackgroundTabs() { let hasContentBlockingEvent = TestUtils.waitForCondition( () => browser.getContentBlockingEvents() != 0 ); - await promiseTabLoadEvent(backgroundTab, TRACKING_PAGE); + await BrowserTestUtils.loadURIString({ + browser: backgroundTab.linkedBrowser, + uriString: TRACKING_PAGE, + }); await hasContentBlockingEvent; is( diff --git a/browser/base/content/test/protectionsUI/browser_protectionsUI_pbmode_exceptions.js b/browser/base/content/test/protectionsUI/browser_protectionsUI_pbmode_exceptions.js @@ -107,14 +107,17 @@ add_task(async function testExceptionAddition() { info("Load a test page containing tracking elements"); await Promise.all([ - promiseTabLoadEvent(tab, TRACKING_PAGE), + BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: TRACKING_PAGE, + }), waitForContentBlockingEvent(2, tab.ownerGlobal), ]); testTrackingPage(tab.ownerGlobal); info("Disable TP for the page (which reloads the page)"); - let tabReloadPromise = promiseTabLoadEvent(tab); + let tabReloadPromise = BrowserTestUtils.browserLoaded(tab.linkedBrowser); gProtectionsHandler.disableForCurrentPage(); is(protectionsPopupState(), "closed", "protections popup is closed"); @@ -127,7 +130,10 @@ add_task(async function testExceptionAddition() { tab = browser.selectedTab = BrowserTestUtils.addTab(browser); info("Load a test page containing tracking elements"); - await promiseTabLoadEvent(tab, TRACKING_PAGE); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: TRACKING_PAGE, + }); testTrackingPageUnblocked(); await BrowserTestUtils.closeWindow(privateWin); @@ -155,14 +161,17 @@ add_task(async function testExceptionPersistence() { info("Load a test page containing tracking elements"); await Promise.all([ - promiseTabLoadEvent(tab, TRACKING_PAGE), + BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: TRACKING_PAGE, + }), waitForContentBlockingEvent(2, tab.ownerGlobal), ]); testTrackingPage(tab.ownerGlobal); info("Disable TP for the page (which reloads the page)"); - let tabReloadPromise = promiseTabLoadEvent(tab); + let tabReloadPromise = BrowserTestUtils.browserLoaded(tab.linkedBrowser); gProtectionsHandler.disableForCurrentPage(); is(protectionsPopupState(), "closed", "protections popup is closed"); diff --git a/browser/base/content/test/protectionsUI/browser_protectionsUI_state.js b/browser/base/content/test/protectionsUI/browser_protectionsUI_state.js @@ -235,30 +235,46 @@ async function testContentBlocking(tab) { info("Testing with Tracking Protection ENABLED."); info("Load a test page not containing tracking elements"); - await promiseTabLoadEvent(tab, BENIGN_PAGE); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: BENIGN_PAGE, + }); await testBenignPage(); info( "Load a test page not containing tracking elements which has an exception." ); - await promiseTabLoadEvent(tab, "https://example.org/?round=1"); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: "https://example.org/?round=1", + }); ContentBlockingAllowList.add(tab.linkedBrowser); // Load another page from the same origin to ensure there is an onlocationchange // notification which would trigger an oncontentblocking notification for us. - await promiseTabLoadEvent(tab, "https://example.org/?round=2"); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: "https://example.org/?round=2", + }); await testBenignPageWithException(); ContentBlockingAllowList.remove(tab.linkedBrowser); info("Load a test page containing tracking elements"); - await promiseTabLoadEvent(tab, gTrackingPageURL); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: gTrackingPageURL, + }); await testTrackingPage(tab.ownerGlobal); info("Disable CB for the page (which reloads the page)"); - let tabReloadPromise = promiseTabLoadEvent(tab); + let reloadURI = tab.linkedBrowser.currentURI.spec; + let tabReloadPromise = BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: reloadURI, + }); tab.ownerGlobal.gProtectionsHandler.disableForCurrentPage(); await tabReloadPromise; let isPrivateBrowsing = PrivateBrowsingUtils.isWindowPrivate(tab.ownerGlobal); @@ -266,7 +282,11 @@ async function testContentBlocking(tab) { await testTrackingPageUnblocked(blockedByTP, tab.ownerGlobal); info("Re-enable TP for the page (which reloads the page)"); - tabReloadPromise = promiseTabLoadEvent(tab); + reloadURI = tab.linkedBrowser.currentURI.spec; + tabReloadPromise = BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: reloadURI, + }); tab.ownerGlobal.gProtectionsHandler.enableForCurrentPage(); await tabReloadPromise; await testTrackingPage(tab.ownerGlobal); diff --git a/browser/base/content/test/protectionsUI/browser_protectionsUI_state_reset.js b/browser/base/content/test/protectionsUI/browser_protectionsUI_state_reset.js @@ -31,7 +31,10 @@ add_task(async function testResetOnLocationChange() { ); await Promise.all([ - promiseTabLoadEvent(tab, TRACKING_PAGE), + BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: TRACKING_PAGE, + }), waitForContentBlockingEvent(2), ]); @@ -42,7 +45,10 @@ add_task(async function testResetOnLocationChange() { ); ok(gProtectionsHandler.iconBox.hasAttribute("active"), "shield is active"); - await promiseTabLoadEvent(tab, BENIGN_PAGE); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: BENIGN_PAGE, + }); is( browser.getContentBlockingEvents(), @@ -97,12 +103,18 @@ add_task(async function testResetOnTabChange() { ); await Promise.all([ - promiseTabLoadEvent(tab, TRACKING_PAGE), + BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: TRACKING_PAGE, + }), waitForContentBlockingEvent(3), ]); ok(gProtectionsHandler.iconBox.hasAttribute("active"), "shield is active"); - await promiseTabLoadEvent(tab, ABOUT_PAGE); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: ABOUT_PAGE, + }); ok( !gProtectionsHandler.iconBox.hasAttribute("active"), "shield is not active" diff --git a/browser/base/content/test/protectionsUI/browser_protectionsUI_telemetry.js b/browser/base/content/test/protectionsUI/browser_protectionsUI_telemetry.js @@ -50,15 +50,25 @@ add_task(async function testShieldHistogram() { // Reset these to make counting easier getShieldHistogram().clear(); - await promiseTabLoadEvent(tab, BENIGN_PAGE); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: BENIGN_PAGE, + }); is(getShieldCounts()[0], 1, "Page loads without tracking"); - await promiseTabLoadEvent(tab, TRACKING_PAGE); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: TRACKING_PAGE, + }); is(getShieldCounts()[0], 2, "Adds one more page load"); is(getShieldCounts()[2], 1, "Counts one instance of the shield being shown"); info("Disable TP for the page (which reloads the page)"); - let tabReloadPromise = promiseTabLoadEvent(tab); + let reloadURI = tab.linkedBrowser.currentURI.spec; + let tabReloadPromise = BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: reloadURI, + }); gProtectionsHandler.disableForCurrentPage(); await tabReloadPromise; is(getShieldCounts()[0], 3, "Adds one more page load"); @@ -69,7 +79,11 @@ add_task(async function testShieldHistogram() { ); info("Re-enable TP for the page (which reloads the page)"); - tabReloadPromise = promiseTabLoadEvent(tab); + reloadURI = tab.linkedBrowser.currentURI.spec; + tabReloadPromise = BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: reloadURI, + }); gProtectionsHandler.enableForCurrentPage(); await tabReloadPromise; is(getShieldCounts()[0], 4, "Adds one more page load"); diff --git a/browser/base/content/test/protectionsUI/head.js b/browser/base/content/test/protectionsUI/head.js @@ -178,40 +178,6 @@ async function waitForAboutProtectionsTab() { return tab; } -/** - * Waits for a load (or custom) event to finish in a given tab. If provided - * load an uri into the tab. - * - * @param tab - * The tab to load into. - * @param [optional] url - * The url to load, or the current url. - * @return {Promise} resolved when the event is handled. - * @resolves to the received event - * @rejects if a valid load event is not received within a meaningful interval - */ -function promiseTabLoadEvent(tab, url) { - info("Wait tab event: load"); - - function handle(loadedUrl) { - if (loadedUrl === "about:blank" || (url && loadedUrl !== url)) { - info(`Skipping spurious load event for ${loadedUrl}`); - return false; - } - - info("Tab event received: load"); - return true; - } - - let loaded = BrowserTestUtils.browserLoaded(tab.linkedBrowser, false, handle); - - if (url) { - BrowserTestUtils.startLoadingURIString(tab.linkedBrowser, url); - } - - return loaded; -} - function waitForSecurityChange(numChanges = 1, win = null) { if (!win) { win = window; diff --git a/browser/base/content/test/siteIdentity/head.js b/browser/base/content/test/siteIdentity/head.js @@ -18,40 +18,6 @@ function getIdentityMode(aWindow = window) { return aWindow.document.getElementById("identity-box").className; } -/** - * Waits for a load (or custom) event to finish in a given tab. If provided - * load an uri into the tab. - * - * @param tab - * The tab to load into. - * @param [optional] url - * The url to load, or the current url. - * @return {Promise} resolved when the event is handled. - * @resolves to the received event - * @rejects if a valid load event is not received within a meaningful interval - */ -function promiseTabLoadEvent(tab, url) { - info("Wait tab event: load"); - - function handle(loadedUrl) { - if (loadedUrl === "about:blank" || (url && loadedUrl !== url)) { - info(`Skipping spurious load event for ${loadedUrl}`); - return false; - } - - info("Tab event received: load"); - return true; - } - - let loaded = BrowserTestUtils.browserLoaded(tab.linkedBrowser, false, handle); - - if (url) { - BrowserTestUtils.startLoadingURIString(tab.linkedBrowser, url); - } - - return loaded; -} - // Compares the security state of the page with what is expected function isSecurityState(browser, expectedState) { let ui = browser.securityUI; diff --git a/browser/base/content/test/zoom/head.js b/browser/base/content/test/zoom/head.js @@ -124,7 +124,10 @@ var FullZoomHelper = { let didLoad = false; let didZoom = false; - promiseTabLoadEvent(tab, url).then(() => { + BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: url, + }).then(() => { didLoad = true; if (didZoom) { resolve(); @@ -185,39 +188,3 @@ var FullZoomHelper = { }; }, }; - -/** - * Waits for a load (or custom) event to finish in a given tab. If provided - * load an uri into the tab. - * - * @param tab - * The tab to load into. - * @param [optional] url - * The url to load, or the current url. - * @return {Promise} resolved when the event is handled. - * @resolves to the received event - * @rejects if a valid load event is not received within a meaningful interval - */ -async function promiseTabLoadEvent(tab, url) { - console.info("Wait tab event: load"); - if (url) { - console.info("Expecting load for: ", url); - } - function handle(loadedUrl) { - if (loadedUrl === "about:blank" || (url && loadedUrl !== url)) { - console.info(`Skipping spurious load event for ${loadedUrl}`); - return false; - } - - console.info("Tab event received: load"); - return true; - } - - let loaded = BrowserTestUtils.browserLoaded(tab.linkedBrowser, false, handle); - - if (url) { - BrowserTestUtils.startLoadingURIString(tab.linkedBrowser, url); - } - - return loaded; -} diff --git a/browser/components/customizableui/test/browser_934951_zoom_in_toolbar.js b/browser/components/customizableui/test/browser_934951_zoom_in_toolbar.js @@ -76,7 +76,10 @@ add_task(async function () { 110, "Zoom is changed to 110% for about:mozilla" ); - await promiseTabLoadEvent(tab1, "about:home"); + await BrowserTestUtils.loadURIString({ + browser: tab1.linkedBrowser, + uriString: "about:home", + }); await waitForZoom(100); is( parseInt(gZoomResetButton.label, 10), diff --git a/browser/components/customizableui/test/head.js b/browser/components/customizableui/test/head.js @@ -386,21 +386,6 @@ function waitFor(aTimeout = 100) { } /** - * Starts a load in an existing tab and waits for it to finish (via some event). - * - * @param aTab The tab to load into. - * @param aUrl The url to load. - * @param aEventType The load event type to wait for. Defaults to "load". - * @return {Promise} resolved when the event is handled. - */ -function promiseTabLoadEvent(aTab, aURL) { - let browser = aTab.linkedBrowser; - - BrowserTestUtils.startLoadingURIString(browser, aURL); - return BrowserTestUtils.browserLoaded(browser); -} - -/** * Wait for an attribute on a node to change * * @param aNode Node on which the mutation is expected diff --git a/browser/components/safebrowsing/content/test/browser_whitelisted.js b/browser/components/safebrowsing/content/test/browser_whitelisted.js @@ -36,11 +36,23 @@ add_task(async function testNormalBrowsing() { PREF_WHITELISTED_HOSTNAMES, "example.com,www.ItIsaTrap.org,example.net" ); - await promiseTabLoadEvent(tab, TEST_PAGE, "load"); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: TEST_PAGE, + }); testWhitelistedPage(tab.ownerGlobal); info("Load a test page that's no longer whitelisted"); Services.prefs.setCharPref(PREF_WHITELISTED_HOSTNAMES, ""); - await promiseTabLoadEvent(tab, TEST_PAGE, "AboutBlockedLoaded"); + // Wait for AboutBlockedLoaded event + let blockedLoaded = BrowserTestUtils.waitForContentEvent( + tab.linkedBrowser, + "AboutBlockedLoaded", + true, + undefined, + true + ); + BrowserTestUtils.startLoadingURIString(tab.linkedBrowser, TEST_PAGE); + await blockedLoaded; testBlockedPage(tab.ownerGlobal); }); diff --git a/browser/components/safebrowsing/content/test/head.js b/browser/components/safebrowsing/content/test/head.js @@ -2,54 +2,6 @@ const PHISH_TABLE = "moztest-phish-simple"; const PHISH_URL = "https://www.itisatrap.org/firefox/its-a-trap.html"; -/** - * Waits for a load (or custom) event to finish in a given tab. If provided - * load an uri into the tab. - * - * @param tab - * The tab to load into. - * @param [optional] url - * The url to load, or the current url. - * @param [optional] event - * The load event type to wait for. Defaults to "load". - * @return {Promise} resolved when the event is handled. - * @resolves to the received event - * @rejects if a valid load event is not received within a meaningful interval - */ -function promiseTabLoadEvent(tab, url, eventType = "load") { - info(`Wait tab event: ${eventType}`); - - function handle(loadedUrl) { - if (loadedUrl === "about:blank" || (url && loadedUrl !== url)) { - info(`Skipping spurious load event for ${loadedUrl}`); - return false; - } - - info("Tab event received: load"); - return true; - } - - let loaded; - if (eventType === "load") { - loaded = BrowserTestUtils.browserLoaded(tab.linkedBrowser, false, handle); - } else { - // No need to use handle. - loaded = BrowserTestUtils.waitForContentEvent( - tab.linkedBrowser, - eventType, - true, - undefined, - true - ); - } - - if (url) { - BrowserTestUtils.startLoadingURIString(tab.linkedBrowser, url); - } - - return loaded; -} - // This function is mostly ported from classifierCommon.js // under toolkit/components/url-classifier/tests/mochitest. function waitForDBInit(callback) { diff --git a/browser/components/tabbrowser/test/browser/tabs/browser_beforeunload_duplicate_dialogs.js b/browser/components/tabbrowser/test/browser/tabs/browser_beforeunload_duplicate_dialogs.js @@ -58,7 +58,10 @@ registerCleanupFunction(() => { add_task(async function closeLastTabInWindow() { let newWin = await promiseOpenAndLoadWindow({}, true); let firstTab = newWin.gBrowser.selectedTab; - await promiseTabLoadEvent(firstTab, TEST_PAGE); + await BrowserTestUtils.loadURIString({ + browser: firstTab.linkedBrowser, + uriString: TEST_PAGE, + }); let windowClosedPromise = BrowserTestUtils.domWindowClosed(newWin); expectingDialog = true; // close tab: @@ -72,12 +75,16 @@ add_task(async function closeWindowWithMultipleTabsIncludingOneBeforeUnload() { Services.prefs.setBoolPref("browser.tabs.warnOnClose", false); let newWin = await promiseOpenAndLoadWindow({}, true); let firstTab = newWin.gBrowser.selectedTab; - await promiseTabLoadEvent(firstTab, TEST_PAGE); - await promiseTabLoadEvent( - BrowserTestUtils.addTab(newWin.gBrowser), + await BrowserTestUtils.loadURIString({ + browser: firstTab.linkedBrowser, + uriString: TEST_PAGE, + }); + let secondTab = BrowserTestUtils.addTab(newWin.gBrowser); + await BrowserTestUtils.loadURIString({ + browser: secondTab.linkedBrowser, // eslint-disable-next-line @microsoft/sdl/no-insecure-url - "http://example.com/" - ); + uriString: "http://example.com/", + }); let windowClosedPromise = BrowserTestUtils.domWindowClosed(newWin); expectingDialog = true; newWin.BrowserCommands.tryToCloseWindow(); @@ -90,7 +97,10 @@ add_task(async function closeWindowWithMultipleTabsIncludingOneBeforeUnload() { add_task(async function closeWindoWithSingleTabTwice() { let newWin = await promiseOpenAndLoadWindow({}, true); let firstTab = newWin.gBrowser.selectedTab; - await promiseTabLoadEvent(firstTab, TEST_PAGE); + await BrowserTestUtils.loadURIString({ + browser: firstTab.linkedBrowser, + uriString: TEST_PAGE, + }); let windowClosedPromise = BrowserTestUtils.domWindowClosed(newWin); expectingDialog = true; wantToClose = false; diff --git a/browser/components/tabbrowser/test/browser/tabs/browser_multiselect_tabs_unload.js b/browser/components/tabbrowser/test/browser/tabs/browser_multiselect_tabs_unload.js @@ -30,10 +30,10 @@ add_setup(async function () { // This is helpful to avoid some weird race conditions in the test, specifically // the assertion that !this.blankTab in AsyncTabSwitcher when adding a new tab. - await promiseTabLoadEvent( - gBrowser.selectedTab, - "http://mochi.test:8888/#originalTab" - ); + await BrowserTestUtils.loadURIString({ + browser: gBrowser.selectedTab.linkedBrowser, + uriString: "http://mochi.test:8888/#originalTab", + }); let originalTab = gBrowser.selectedTab; // switch to Firefox View tab to initialize it FirefoxViewHandler.openTab(); diff --git a/browser/components/tabbrowser/test/browser/tabs/browser_multiselect_tabs_unload_telemetry.js b/browser/components/tabbrowser/test/browser/tabs/browser_multiselect_tabs_unload_telemetry.js @@ -38,10 +38,10 @@ async function addBrowserTabs(numberOfTabs) { add_setup(async function () { // This is helpful to avoid some weird race conditions in the test, specifically // the assertion that !this.blankTab in AsyncTabSwitcher when adding a new tab. - await promiseTabLoadEvent( - gBrowser.selectedTab, - "http://mochi.test:8888/#originalTab" - ); + await BrowserTestUtils.loadURIString({ + browser: gBrowser.selectedTab.linkedBrowser, + uriString: "http://mochi.test:8888/#originalTab", + }); let originalTab = gBrowser.selectedTab; // switch to Firefox View tab to initialize it FirefoxViewHandler.openTab(); diff --git a/browser/components/tabbrowser/test/browser/tabs/browser_multiselect_tabs_unload_with_beforeunload.js b/browser/components/tabbrowser/test/browser/tabs/browser_multiselect_tabs_unload_with_beforeunload.js @@ -22,7 +22,9 @@ async function openTabMenuFor(tab) { async function addBrowserTabs(numberOfTabs) { // This is helpful to avoid some weird race conditions in the test, specifically // the assertion that !this.blankTab in AsyncTabSwitcher when adding a new tab. - //await promiseTabLoadEvent(gBrowser.selectedTab, "http://mochi.test:8888/#originalTab"); + // await BrowserTestUtils.loadURIString({ + // browser: gBrowser.selectedTab, uriString: "http://mochi.test:8888/#originalTab" + // }); let tabs = []; for (let i = 0; i < numberOfTabs; i++) { tabs.push(await addTab(`http://mochi.test:8888/#${i}`)); @@ -58,10 +60,10 @@ function awaitAndCloseBeforeUnloadDialog(browser, doStayOnPage) { add_setup(async function () { // This is helpful to avoid some weird race conditions in the test, specifically // the assertion that !this.blankTab in AsyncTabSwitcher when adding a new tab. - await promiseTabLoadEvent( - gBrowser.selectedTab, - "http://mochi.test:8888/#originalTab" - ); + await BrowserTestUtils.loadURIString({ + browser: gBrowser.selectedTab.linkedBrowser, + uriString: "http://mochi.test:8888/#originalTab", + }); let originalTab = gBrowser.selectedTab; // switch to Firefox View tab to initialize it FirefoxViewHandler.openTab(); diff --git a/browser/components/tabbrowser/test/browser/tabs/browser_tabfocus.js b/browser/components/tabbrowser/test/browser/tabs/browser_tabfocus.js @@ -126,8 +126,14 @@ add_task(async function () { tab2 = BrowserTestUtils.addTab(gBrowser); browser2 = gBrowser.getBrowserForTab(tab2); - await promiseTabLoadEvent(tab1, "data:text/html," + escape(testPage1)); - await promiseTabLoadEvent(tab2, "data:text/html," + escape(testPage2)); + await BrowserTestUtils.loadURIString({ + browser: tab1.linkedBrowser, + uriString: "data:text/html," + escape(testPage1), + }); + await BrowserTestUtils.loadURIString({ + browser: tab2.linkedBrowser, + uriString: "data:text/html," + escape(testPage2), + }); gURLBar.focus(); await SimpleTest.promiseFocus(); @@ -511,7 +517,10 @@ add_task(async function () { "focus button" ); - await promiseTabLoadEvent(tab1, "data:text/html," + escape(testPage3)); + await BrowserTestUtils.loadURIString({ + browser: tab1.linkedBrowser, + uriString: "data:text/html," + escape(testPage3), + }); // now go back again gURLBar.focus(); diff --git a/browser/components/tabbrowser/test/browser/tabs/browser_testOpenNewRemoteTabsFromNonRemoteBrowsers.js b/browser/components/tabbrowser/test/browser/tabs/browser_testOpenNewRemoteTabsFromNonRemoteBrowsers.js @@ -70,8 +70,7 @@ add_task(async function test_new_tab() { await insertAndClickAnchor(testBrowser); let newTab = (await tabOpenEventPromise).target; - await promiseTabLoadEvent(newTab); - + await BrowserTestUtils.browserLoaded(newTab.linkedBrowser); // insertAndClickAnchor causes an open to a web page which // means that the tab should eventually become remote. ok( @@ -137,8 +136,7 @@ add_task(async function test_new_window() { let newTab = newWindow.gBrowser.selectedTab; - await promiseTabLoadEvent(newTab); - + await BrowserTestUtils.browserLoaded(newTab.linkedBrowser); // insertAndClickAnchor causes an open to a web page which // means that the tab should eventually become remote. ok( diff --git a/browser/components/tabbrowser/test/browser/tabs/head.js b/browser/components/tabbrowser/test/browser/tabs/head.js @@ -2,28 +2,6 @@ const { TabGroupTestUtils } = ChromeUtils.importESModule( "resource://testing-common/TabGroupTestUtils.sys.mjs" ); -function promiseTabLoadEvent(tab, url) { - info("Wait tab event: load"); - - function handle(loadedUrl) { - if (loadedUrl === "about:blank" || (url && loadedUrl !== url)) { - info(`Skipping spurious load event for ${loadedUrl}`); - return false; - } - - info("Tab event received: load"); - return true; - } - - let loaded = BrowserTestUtils.browserLoaded(tab.linkedBrowser, false, handle); - - if (url) { - BrowserTestUtils.startLoadingURIString(tab.linkedBrowser, url); - } - - return loaded; -} - function updateTabContextMenu(tab) { let menu = document.getElementById("tabContextMenu"); if (!tab) { diff --git a/browser/modules/test/browser/formValidation/browser_form_validation.js b/browser/modules/test/browser/formValidation/browser_form_validation.js @@ -1,40 +1,3 @@ -/** - * COPIED FROM browser/base/content/test/general/head.js. - * This function should be removed and replaced with BTU withNewTab calls - * - * Waits for a load (or custom) event to finish in a given tab. If provided - * load an uri into the tab. - * - * @param tab - * The tab to load into. - * @param [optional] url - * The url to load, or the current url. - * @return {Promise} resolved when the event is handled. - * @resolves to the received event - * @rejects if a valid load event is not received within a meaningful interval - */ -function promiseTabLoadEvent(tab, url) { - info("Wait tab event: load"); - - function handle(loadedUrl) { - if (loadedUrl === "about:blank" || (url && loadedUrl !== url)) { - info(`Skipping spurious load event for ${loadedUrl}`); - return false; - } - - info("Tab event received: load"); - return true; - } - - let loaded = BrowserTestUtils.browserLoaded(tab.linkedBrowser, false, handle); - - if (url) { - BrowserTestUtils.startLoadingURIString(tab.linkedBrowser, url); - } - - return loaded; -} - var gInvalidFormPopup = gBrowser.selectedBrowser.browsingContext.currentWindowGlobal .getActor("FormValidation") @@ -97,7 +60,10 @@ async function openNewTab(uri, background) { if (!background) { gBrowser.selectedTab = tab; } - await promiseTabLoadEvent(tab, "data:text/html," + escape(uri)); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: "data:text/html," + escape(uri), + }); return browser; } diff --git a/dom/plugins/test/mochitest/browser_blockallplugins.js b/dom/plugins/test/mochitest/browser_blockallplugins.js @@ -10,32 +10,12 @@ add_task(async function () { }); }); -// simple tab load helper, pilfered from browser plugin tests -function promiseTabLoadEvent(tab, url) { - info("Wait tab event: load"); - - function handle(loadedUrl) { - if (loadedUrl === "about:blank" || (url && loadedUrl !== url)) { - info(`Skipping spurious load event for ${loadedUrl}`); - return false; - } - - info("Tab event received: load"); - return true; - } - - let loaded = BrowserTestUtils.browserLoaded(tab.linkedBrowser, false, handle); - - if (url) { - BrowserTestUtils.startLoadingURIString(tab.linkedBrowser, url); - } - - return loaded; -} - add_task(async function () { let pluginTab = (gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser)); - await promiseTabLoadEvent(pluginTab, gTestRoot + "block_all_plugins.html"); + await BrowserTestUtils.loadURIString({ + browser: pluginTab.linkedBrowser, + uriString: gTestRoot + "block_all_plugins.html", + }); await SpecialPowers.spawn(gBrowser.selectedBrowser, [], async function () { let doc = content.document; diff --git a/testing/mochitest/tests/browser/browser_waitForFocus.js b/testing/mochitest/tests/browser/browser_waitForFocus.js @@ -1,13 +1,5 @@ const gBaseURL = "https://example.com/browser/testing/mochitest/tests/browser/"; -function promiseTabLoadEvent(tab, url) { - let promise = BrowserTestUtils.browserLoaded(tab.linkedBrowser, false, url); - if (url) { - tab.linkedBrowser.loadURI(Services.io.newURI(url)); - } - return promise; -} - // Load a new blank tab add_task(async function () { await BrowserTestUtils.openNewForegroundTab(gBrowser); @@ -58,7 +50,10 @@ add_task(async function () { // If we're running in e10s, we don't have access to the content // window, so only test <iframe> arguments in non-e10s mode. if (browser.contentWindow) { - await promiseTabLoadEvent(tab, gBaseURL + "waitForFocusPage.html"); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: gBaseURL + "waitForFocusPage.html", + }); await SimpleTest.promiseFocus(browser.contentWindow); diff --git a/toolkit/components/antitracking/test/browser/browser_referrerDefaultPolicy.js b/toolkit/components/antitracking/test/browser/browser_referrerDefaultPolicy.js @@ -22,7 +22,10 @@ async function testOnWindowBody(win, expectedReferrer, rp) { let browser = win.gBrowser; let tab = browser.selectedTab; let b = browser.getBrowserForTab(tab); - await promiseTabLoadEvent(tab, TEST_TOP_PAGE); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: TEST_TOP_PAGE, + }); info("Loading tracking scripts and tracking images"); let { iframeReferrer, refreshReferrer } = await SpecialPowers.spawn( diff --git a/toolkit/components/antitracking/test/browser/browser_staticPartition_HSTS.js b/toolkit/components/antitracking/test/browser/browser_staticPartition_HSTS.js @@ -44,12 +44,6 @@ function cleanupHSTS(aUseSite) { } } -function promiseTabLoadEvent(aTab, aURL, aFinalURL) { - info("Wait for load tab event"); - BrowserTestUtils.startLoadingURIString(aTab.linkedBrowser, aURL); - return BrowserTestUtils.browserLoaded(aTab.linkedBrowser, false, aFinalURL); -} - function waitFor(host, type) { return new Promise(resolve => { const observer = channel => { @@ -78,14 +72,26 @@ add_task(async function () { let tab = (gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser)); // Let's load the secureURL as first-party in order to activate HSTS. - await promiseTabLoadEvent(tab, secureURL, secureURL); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: secureURL, + finalURI: secureURL, + }); // Let's test HSTS: unsecure -> secure. - await promiseTabLoadEvent(tab, unsecureURL, secureURL); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: unsecureURL, + finalURI: secureURL, + }); ok(true, "unsecure -> secure, first-party works!"); // Let's load a first-party. - await promiseTabLoadEvent(tab, unsecureEmptyURL, unsecureEmptyURL); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: unsecureEmptyURL, + finalURI: unsecureEmptyURL, + }); let finalURL = waitFor( "example.com", @@ -117,7 +123,11 @@ add_task(async function test_subresource() { let tab = (gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser)); // Load a secure page as first party. - await promiseTabLoadEvent(tab, secureEmptyURL, secureEmptyURL); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: secureEmptyURL, + finalURI: secureEmptyURL, + }); let loadPromise = waitFor( "example.com", @@ -136,7 +146,11 @@ add_task(async function test_subresource() { await loadPromise; // Reload the secure page as first party. - await promiseTabLoadEvent(tab, secureEmptyURL, secureEmptyURL); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: secureEmptyURL, + finalURI: secureEmptyURL, + }); let finalURL = waitFor( "example.com", @@ -157,11 +171,11 @@ add_task(async function test_subresource() { is(await finalURL, unsecureImgURL, "HSTS isn't set for 3rd parties"); // Load the secure page with a different origin as first party. - await promiseTabLoadEvent( - tab, - secureAnotherEmptyURL, - secureAnotherEmptyURL - ); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: secureAnotherEmptyURL, + finalURI: secureAnotherEmptyURL, + }); finalURL = waitFor("example.com", Ci.nsIContentPolicy.TYPE_INTERNAL_IMAGE); @@ -195,10 +209,18 @@ add_task(async function test_includeSubDomains() { let tab = (gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser)); // Load a secure page as first party to activate HSTS. - await promiseTabLoadEvent(tab, secureIncludeSubURL, secureIncludeSubURL); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: secureIncludeSubURL, + finalURI: secureIncludeSubURL, + }); // Load a unsecure sub-domain page as first party to see if it's upgraded. - await promiseTabLoadEvent(tab, unsecureSubEmptyURL, secureSubEmptyURL); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: unsecureSubEmptyURL, + finalURI: secureSubEmptyURL, + }); // Load a sub domain page which will trigger the cert error page. let certErrorLoaded = BrowserTestUtils.waitForErrorPage(tab.linkedBrowser); diff --git a/toolkit/components/contentanalysis/tests/browser/browser_clipboard_content_analysis.js b/toolkit/components/contentanalysis/tests/browser/browser_clipboard_content_analysis.js @@ -39,7 +39,10 @@ async function testClipboardWithContentAnalysis(allowPaste, plainTextOnly) { gBrowser.selectedTab = tab; - await promiseTabLoadEvent(tab, "data:text/html," + escape(testPage)); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: "data:text/html," + escape(testPage), + }); await SimpleTest.promiseFocus(browser); function sendKey(key, code) { diff --git a/toolkit/components/contentanalysis/tests/browser/browser_content_analysis_block_dialog.js b/toolkit/components/contentanalysis/tests/browser/browser_content_analysis_block_dialog.js @@ -43,7 +43,10 @@ async function testBlockDialog(options) { let tab = BrowserTestUtils.addTab(gBrowser); let browser = gBrowser.getBrowserForTab(tab); gBrowser.selectedTab = tab; - await promiseTabLoadEvent(tab, "data:text/html," + escape(testPage)); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: "data:text/html," + escape(testPage), + }); await SimpleTest.promiseFocus(browser); setClipboardData(CLIPBOARD_TEXT_STRING); diff --git a/toolkit/components/contentanalysis/tests/browser/browser_content_analysis_busy_dialog.js b/toolkit/components/contentanalysis/tests/browser/browser_content_analysis_busy_dialog.js @@ -39,7 +39,10 @@ async function testBusyDialog(cancel) { let tab = BrowserTestUtils.addTab(gBrowser); let browser = gBrowser.getBrowserForTab(tab); gBrowser.selectedTab = tab; - await promiseTabLoadEvent(tab, "data:text/html," + escape(testPage)); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: "data:text/html," + escape(testPage), + }); await SimpleTest.promiseFocus(browser); setClipboardData(CLIPBOARD_TEXT_STRING); @@ -106,7 +109,10 @@ async function testClosingTab() { let tab = BrowserTestUtils.addTab(gBrowser); let browser = gBrowser.getBrowserForTab(tab); gBrowser.selectedTab = tab; - await promiseTabLoadEvent(tab, "data:text/html," + escape(testPage)); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: "data:text/html," + escape(testPage), + }); await SimpleTest.promiseFocus(browser); setClipboardData(CLIPBOARD_TEXT_STRING); diff --git a/toolkit/components/contentanalysis/tests/browser/browser_content_analysis_quit_confirmation_dialog.js b/toolkit/components/contentanalysis/tests/browser/browser_content_analysis_quit_confirmation_dialog.js @@ -57,7 +57,10 @@ async function testConfirmationDialog(testMode) { let tab = BrowserTestUtils.addTab(gBrowser); let browser = gBrowser.getBrowserForTab(tab); gBrowser.selectedTab = tab; - await promiseTabLoadEvent(tab, "data:text/html," + escape(testPage)); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: "data:text/html," + escape(testPage), + }); await SimpleTest.promiseFocus(browser); setClipboardData(CLIPBOARD_TEXT_STRING); diff --git a/toolkit/components/contentanalysis/tests/browser/head.js b/toolkit/components/contentanalysis/tests/browser/head.js @@ -368,39 +368,6 @@ function makeMockContentAnalysis() { }; } -/** - * Waits for a load (or custom) event to finish in a given tab. If provided - * load an uri into the tab. - * - * @param {object} tab - * The tab to load into. - * @param {string} [url] - * The url to load, or the current url. - * @returns {Promise<string>} resolved when the event is handled. Rejected if - * a valid load event is not received within a meaningful interval - */ -function promiseTabLoadEvent(tab, url) { - info("Wait tab event: load"); - - function handle(loadedUrl) { - if (loadedUrl === "about:blank" || (url && loadedUrl !== url)) { - info(`Skipping spurious load event for ${loadedUrl}`); - return false; - } - - info("Tab event received: load"); - return true; - } - - let loaded = BrowserTestUtils.browserLoaded(tab.linkedBrowser, false, handle); - - if (url) { - BrowserTestUtils.startLoadingURIString(tab.linkedBrowser, url); - } - - return loaded; -} - function promisePopupShown(popup) { return BrowserTestUtils.waitForPopupEvent(popup, "shown"); } diff --git a/toolkit/components/reader/tests/browser/browser_bug1124271_readerModePinnedTab.js b/toolkit/components/reader/tests/browser/browser_bug1124271_readerModePinnedTab.js @@ -31,11 +31,15 @@ add_task(async function () { // Point tab to a test page that is reader-able. let url = TEST_PATH + "readerModeArticle.html"; - await promiseTabLoadEvent(tab, url); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: url, + }); await TestUtils.waitForCondition(() => !readerButton.hidden); + let tabLoadPromise = BrowserTestUtils.browserLoaded(tab.linkedBrowser); readerButton.click(); - await promiseTabLoadEvent(tab); + await tabLoadPromise; // Ensure no new tabs are opened when exiting reader mode in a pinned tab is(gBrowser.tabs.length, initialTabsCount, "No additional tabs were opened."); diff --git a/toolkit/components/reader/tests/browser/browser_readerMode.js b/toolkit/components/reader/tests/browser/browser_readerMode.js @@ -57,7 +57,10 @@ add_task(async function test_reader_button() { await PlacesTestUtils.addFavicons(new Map([[url, favicon]])); info("Opening tab and waiting for reader mode button to show up"); - await promiseTabLoadEvent(tab, url); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: url, + }); await TestUtils.waitForCondition(() => !readerButton.hidden); is_element_visible( @@ -66,7 +69,7 @@ add_task(async function test_reader_button() { ); // Switch page into reader mode. - let promiseTabLoad = promiseTabLoadEvent(tab); + let promiseTabLoad = BrowserTestUtils.browserLoaded(tab.linkedBrowser); readerButton.click(); await promiseTabLoad; @@ -132,7 +135,10 @@ add_task(async function test_reader_button() { // Load a new tab that is NOT reader-able. let newTab = (gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser)); - await promiseTabLoadEvent(newTab, nonReadableUrl); + await BrowserTestUtils.loadURIString({ + browser: newTab.linkedBrowser, + uriString: nonReadableUrl, + }); await TestUtils.waitForCondition(() => readerButton.hidden); is_element_hidden( readerButton, @@ -153,7 +159,10 @@ add_task(async function test_reader_button() { newTab.linkedBrowser, "AboutReaderContentError" ); - await promiseTabLoadEvent(newTab, "about:reader?url=" + nonReadableUrl); + await BrowserTestUtils.loadURIString({ + browser: newTab.linkedBrowser, + uriString: "about:reader?url=" + nonReadableUrl, + }); await promiseAboutReaderError; await TestUtils.waitForCondition(() => !readerButton.hidden); is_element_visible( @@ -383,11 +392,14 @@ add_task(async function test_reader_mode_lang() { let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser); BrowserTestUtils.startLoadingURIString(tab.linkedBrowser, url); - await promiseTabLoadEvent(tab, url); + await BrowserTestUtils.loadURIString({ + browser: tab.linkedBrowser, + uriString: url, + }); await TestUtils.waitForCondition(() => !readerButton.hidden); // Switch page into reader mode. - let promiseTabLoad = promiseTabLoadEvent(tab); + let promiseTabLoad = BrowserTestUtils.browserLoaded(tab.linkedBrowser); readerButton.click(); await promiseTabLoad; diff --git a/toolkit/components/reader/tests/browser/browser_readerMode_bc_reuse.js b/toolkit/components/reader/tests/browser/browser_readerMode_bc_reuse.js @@ -30,7 +30,7 @@ add_task(async function test_TODO() { { attributes: true }, () => !readerButton.hidden ); - let tabLoaded = promiseTabLoadEvent(newTab); + let tabLoaded = BrowserTestUtils.browserLoaded(newTab.linkedBrowser); readerButton.click(); await tabLoaded; isnot( diff --git a/toolkit/components/reader/tests/browser/browser_readerMode_cached.js b/toolkit/components/reader/tests/browser/browser_readerMode_cached.js @@ -16,7 +16,7 @@ add_task(async function () { return content.document.getElementById("rnd").textContent; }); - let promiseTabLoad = promiseTabLoadEvent(tab); + let promiseTabLoad = BrowserTestUtils.browserLoaded(tab.linkedBrowser); let readerButton = document.getElementById("reader-mode-button"); readerButton.click(); await promiseTabLoad; diff --git a/toolkit/components/reader/tests/browser/head.js b/toolkit/components/reader/tests/browser/head.js @@ -1,53 +1,4 @@ -/* exported promiseTabLoadEvent, is_element_visible, is_element_hidden */ - -/** - * Waits for a load (or custom) event to finish in a given tab. If provided - * load an uri into the tab. - * - * @param tab - * The tab to load into. - * @param [optional] url - * The url to load, or the current url. - * @return {Promise} resolved when the event is handled. - * @resolves to the received event - * @rejects if a valid load event is not received within a meaningful interval - */ -function promiseTabLoadEvent(tab, url) { - let deferred = Promise.withResolvers(); - info("Wait tab event: load"); - - function handle(loadedUrl) { - if (loadedUrl === "about:blank" || (url && loadedUrl !== url)) { - info(`Skipping spurious load event for ${loadedUrl}`); - return false; - } - - info("Tab event received: load"); - return true; - } - - // Create two promises: one resolved from the content process when the page - // loads and one that is rejected if we take too long to load the url. - let loaded = BrowserTestUtils.browserLoaded(tab.linkedBrowser, false, handle); - - let timeout = setTimeout(() => { - deferred.reject(new Error("Timed out while waiting for a 'load' event")); - }, 30000); - - loaded.then(() => { - clearTimeout(timeout); - deferred.resolve(); - }); - - if (url) { - BrowserTestUtils.startLoadingURIString(tab.linkedBrowser, url); - } - - // Promise.all rejects if either promise rejects (i.e. if we time out) and - // if our loaded promise resolves before the timeout, then we resolve the - // timeout promise as well, causing the all promise to resolve. - return Promise.all([deferred.promise, loaded]); -} +/* exported is_element_visible, is_element_hidden */ function is_element_visible(element, msg) { isnot(element, null, "Element should not be null, when checking visibility");