From 0b1a14651994e6e0e85a2e02c20cb657113be61b Mon Sep 17 00:00:00 2001 From: Kris Maglione Date: Fri, 13 Dec 2019 20:36:36 +0000 Subject: [PATCH] Bug 1596918: Part 4c - Fix callers which depend on document lifecycle changes. r=mccr8 ContentTask tasks have a different lifetime than SpecialPowers tasks, with the former being tied to the lifetime of a message manager and the latter tied to the lifetime of a window global. That means that existing ContentTask callers which expect to be able to register load listeners before the creation of a window global, or which expect to persist after a page has navigated, won't work as SpecialPowers tasks. Since those sorts of tasks are not really resilient in the face of Fission, they should really be written to work differently, but this patch mostly just reverts them to using ContentTask for the time being. Differential Revision: https://phabricator.services.mozilla.com/D53744 --HG-- extra : moz-landing-system : lando --- .../browser_fullscreen_permissions_prompt.js | 15 ++--- .../general/browser_bug763468_perwindowpb.js | 12 ++-- .../general/browser_bug767836_perwindowpb.js | 12 ++-- .../test/general/browser_tabs_isActive.js | 4 +- .../test/popups/browser_popup_frames.js | 4 +- browser/base/content/test/webrtc/head.js | 10 ++-- .../browser/browser_loginSortOrderRestored.js | 8 +-- .../extensions/test/browser/head.js | 2 +- .../test/browser/browser_aboutwelcome.js | 4 +- .../test/browser/browser_as_load_location.js | 4 +- .../components/newtab/test/browser/head.js | 4 +- .../browser_spoofing_keyboard_event.js | 8 +-- .../sessionstore/test/browser_911547.js | 4 +- .../sessionstore/test/browser_frametree.js | 4 +- .../test/browser_send_async_message_oom.js | 2 +- .../test/browser_sessionHistory.js | 4 +- .../test/browser_windowStateContainer.js | 6 +- .../browser/browser_locationBarCommand.js | 2 +- ...rowser_switchToTabHavingURI_aOpenParams.js | 2 +- .../browser/browser_preloading_tab_moving.js | 2 +- devtools/client/inspector/test/shared-head.js | 4 +- .../client/responsive/test/browser/head.js | 4 +- .../test/browser_dbg_multiple-windows.js | 2 +- .../client/webconsole/test/browser/head.js | 4 +- docshell/test/browser/browser_bug349769.js | 2 +- docshell/test/browser/browser_bug441169.js | 2 +- docshell/test/browser/browser_bug670318.js | 23 +++----- docshell/test/browser/browser_bug673467.js | 4 +- dom/base/test/browser_bug1058164.js | 2 +- .../tests/browser/browser_active_document.js | 4 +- .../test/browser_DOMDocElementInserted.js | 27 +++------ .../test/browser_fire_appinstalled_event.js | 2 +- .../test/csp/browser_test_web_manifest.js | 2 +- .../browser/browser_ConsoleStorageAPITests.js | 6 +- dom/tests/browser/browser_hasbeforeunload.js | 2 +- dom/tests/browser/helper_largeAllocation.js | 54 +++++++++--------- .../browser/browser_fido_appid_extension.js | 6 +- .../tests/browser/browser_webauthn_prompts.js | 56 +++++++++---------- dom/xhr/tests/browser_xhr_onchange_leak.js | 2 +- .../tests/browser/browser_dead_object.js | 4 +- .../tests/browser/browser_exception_leak.js | 4 +- .../BrowserTestUtils/BrowserTestUtils.jsm | 21 +++---- .../browser/browser_DOMFormHasPassword.js | 2 +- .../browser/browser_DOMInputPasswordAdded.js | 2 +- .../test/browser/browser_context_menu.js | 4 +- ...browser_context_menu_generated_password.js | 4 +- .../passwordmgr/test/browser/head.js | 14 ++--- .../browser_resume_bkg_video_on_tab_hover.js | 4 +- .../tests/chrome/bug304188_window.xhtml | 13 ++--- .../tests/chrome/bug360437_window.xhtml | 9 +-- .../chrome/findbar_entireword_window.xhtml | 16 ++---- .../tests/chrome/window_browser_drop.xhtml | 5 +- .../test/xpinstall/browser_badargs.js | 4 +- .../test/xpinstall/browser_badargs2.js | 4 +- .../test/xpinstall/browser_enabled.js | 16 ++---- .../test/xpinstall/browser_enabled2.js | 16 ++---- .../test/xpinstall/browser_enabled3.js | 16 ++---- .../test/xpinstall/browser_localfile2.js | 8 ++- .../test/xpinstall/browser_offline.js | 2 +- .../browser_test_feature_preferencereads.js | 14 ++--- 60 files changed, 209 insertions(+), 294 deletions(-) diff --git a/browser/base/content/test/fullscreen/browser_fullscreen_permissions_prompt.js b/browser/base/content/test/fullscreen/browser_fullscreen_permissions_prompt.js index 5f363fbac96b..26e4ec971a66 100644 --- a/browser/base/content/test/fullscreen/browser_fullscreen_permissions_prompt.js +++ b/browser/base/content/test/fullscreen/browser_fullscreen_permissions_prompt.js @@ -18,14 +18,11 @@ async function requestNotificationPermission(browser) { } async function requestCameraPermission(browser) { - return SpecialPowers.spawn(browser, [], () => { - return new Promise(resolve => { - content.navigator.mediaDevices - .getUserMedia({ video: true, fake: true }) - .catch(resolve(false)) - .then(resolve(true)); - }); - }); + return SpecialPowers.spawn(browser, [], () => + content.navigator.mediaDevices + .getUserMedia({ video: true, fake: true }) + .then(() => true, () => false) + ); } add_task(async function test_fullscreen_closes_permissionui_prompt() { @@ -145,7 +142,7 @@ add_task(async function test_permission_prompt_closes_fullscreen() { let fullScreenExit = waitForFullScreenState(browser, false); info("Requesting notification permission"); - requestNotificationPermission(browser); + requestNotificationPermission(browser).catch(() => {}); await popupShown; info("Waiting for full-screen exit"); diff --git a/browser/base/content/test/general/browser_bug763468_perwindowpb.js b/browser/base/content/test/general/browser_bug763468_perwindowpb.js index dff1f31da01e..78ab921ba91b 100644 --- a/browser/base/content/test/general/browser_bug763468_perwindowpb.js +++ b/browser/base/content/test/general/browser_bug763468_perwindowpb.js @@ -52,14 +52,10 @@ async function openNewTab(aWindow, aExpectedURL) { false, aExpectedURL ); - let alreadyLoaded = await SpecialPowers.spawn( - browser, - [aExpectedURL], - url => { - let doc = content.document; - return doc && doc.readyState === "complete" && doc.location.href == url; - } - ); + let alreadyLoaded = await ContentTask.spawn(browser, aExpectedURL, url => { + let doc = content.document; + return doc && doc.readyState === "complete" && doc.location.href == url; + }); if (!alreadyLoaded) { await loadPromise; } diff --git a/browser/base/content/test/general/browser_bug767836_perwindowpb.js b/browser/base/content/test/general/browser_bug767836_perwindowpb.js index 2d13059d4cc9..46835e9f8c39 100644 --- a/browser/base/content/test/general/browser_bug767836_perwindowpb.js +++ b/browser/base/content/test/general/browser_bug767836_perwindowpb.js @@ -71,14 +71,10 @@ async function openNewTab(aWindow, aExpectedURL) { false, aExpectedURL ); - let alreadyLoaded = await SpecialPowers.spawn( - browser, - [aExpectedURL], - url => { - let doc = content.document; - return doc && doc.readyState === "complete" && doc.location.href == url; - } - ); + let alreadyLoaded = await ContentTask.spawn(browser, aExpectedURL, url => { + let doc = content.document; + return doc && doc.readyState === "complete" && doc.location.href == url; + }); if (!alreadyLoaded) { await loadPromise; } diff --git a/browser/base/content/test/general/browser_tabs_isActive.js b/browser/base/content/test/general/browser_tabs_isActive.js index cfe8023c1fe9..d75bf8046cc3 100644 --- a/browser/base/content/test/general/browser_tabs_isActive.js +++ b/browser/base/content/test/general/browser_tabs_isActive.js @@ -24,9 +24,7 @@ function getParentTabState(aTab) { } function getChildTabState(aTab) { - return SpecialPowers.spawn(aTab.linkedBrowser, [], async function() { - return docShell.isActive; - }); + return ContentTask.spawn(aTab.linkedBrowser, null, () => docShell.isActive); } function checkState(parentSide, childSide, value, message) { diff --git a/browser/base/content/test/popups/browser_popup_frames.js b/browser/base/content/test/popups/browser_popup_frames.js index 986a196d83e0..40fec3ebd7ff 100644 --- a/browser/base/content/test/popups/browser_popup_frames.js +++ b/browser/base/content/test/popups/browser_popup_frames.js @@ -41,7 +41,7 @@ add_task(async function test_opening_blocked_popups() { ok(notification, "Should have notification."); - await SpecialPowers.spawn(tab.linkedBrowser, [baseURL], async function(uri) { + await ContentTask.spawn(tab.linkedBrowser, baseURL, async function(uri) { let iframe = content.document.createElement("iframe"); let pageHideHappened = ContentTaskUtils.waitForEvent( this, @@ -59,7 +59,7 @@ add_task(async function test_opening_blocked_popups() { ok(notification, "Should still have notification"); // Now navigate the subframe. - await SpecialPowers.spawn(tab.linkedBrowser, [], async function() { + await ContentTask.spawn(tab.linkedBrowser, null, async function() { let pageHideHappened = ContentTaskUtils.waitForEvent( this, "pagehide", diff --git a/browser/base/content/test/webrtc/head.js b/browser/base/content/test/webrtc/head.js index 58c96709590b..e177fee622c3 100644 --- a/browser/base/content/test/webrtc/head.js +++ b/browser/base/content/test/webrtc/head.js @@ -276,9 +276,9 @@ function expectObserverCalledOnClose( } function promiseMessage(aMessage, aAction, aCount = 1) { - let promise = SpecialPowers.spawn( + let promise = ContentTask.spawn( gBrowser.selectedBrowser, - [[aMessage, aCount]], + [aMessage, aCount], async function([expectedMessage, expectedCount]) { return new Promise(resolve => { function listenForMessage({ data }) { @@ -509,10 +509,8 @@ async function reloadAndAssertClosedStreams() { await disableObserverVerification(); let loadedPromise = BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser); - await SpecialPowers.spawn( - gBrowser.selectedBrowser, - [], - "() => content.location.reload()" + await ContentTask.spawn(gBrowser.selectedBrowser, null, () => + content.location.reload() ); await loadedPromise; diff --git a/browser/components/aboutlogins/tests/browser/browser_loginSortOrderRestored.js b/browser/components/aboutlogins/tests/browser/browser_loginSortOrderRestored.js index 25f416871c12..e6495f2814c8 100644 --- a/browser/components/aboutlogins/tests/browser/browser_loginSortOrderRestored.js +++ b/browser/components/aboutlogins/tests/browser/browser_loginSortOrderRestored.js @@ -23,9 +23,9 @@ add_task(async function test_sort_order_persisted() { url: "about:logins", }, async function(browser) { - await SpecialPowers.spawn( + await ContentTask.spawn( browser, - [[TEST_LOGIN1, TEST_LOGIN2]], + [TEST_LOGIN1, TEST_LOGIN2], async function([testLogin1, testLogin2]) { let loginList = Cu.waiveXrays( content.document.querySelector("login-list") @@ -65,9 +65,7 @@ add_task(async function test_sort_order_persisted() { url: "about:logins", }, async function(browser) { - await SpecialPowers.spawn(browser, [TEST_LOGIN1], async function( - testLogin1 - ) { + await ContentTask.spawn(browser, TEST_LOGIN1, async function(testLogin1) { let loginList = Cu.waiveXrays( content.document.querySelector("login-list") ); diff --git a/browser/components/extensions/test/browser/head.js b/browser/components/extensions/test/browser/head.js index 90602b1397ca..93ff93a37098 100644 --- a/browser/components/extensions/test/browser/head.js +++ b/browser/components/extensions/test/browser/head.js @@ -303,7 +303,7 @@ async function focusButtonAndPressKey(key, elem, modifiers) { } var awaitBrowserLoaded = browser => - SpecialPowers.spawn(browser, [], () => { + ContentTask.spawn(browser, null, () => { if ( content.document.readyState !== "complete" || content.document.documentURI === "about:blank" diff --git a/browser/components/newtab/test/browser/browser_aboutwelcome.js b/browser/components/newtab/test/browser/browser_aboutwelcome.js index 4bd7a381ee0c..022ea08cfe9b 100644 --- a/browser/components/newtab/test/browser/browser_aboutwelcome.js +++ b/browser/components/newtab/test/browser/browser_aboutwelcome.js @@ -38,9 +38,9 @@ async function test_trailhead_branch( ); let browser = tab.linkedBrowser; - await SpecialPowers.spawn( + await ContentTask.spawn( browser, - [{ expectedSelectors, branchName, unexpectedSelectors }], + { expectedSelectors, branchName, unexpectedSelectors }, async ({ expectedSelectors: expected, branchName: branch, diff --git a/browser/components/newtab/test/browser/browser_as_load_location.js b/browser/components/newtab/test/browser/browser_as_load_location.js index e31870e88475..f11b6cf503fc 100644 --- a/browser/components/newtab/test/browser/browser_as_load_location.js +++ b/browser/components/newtab/test/browser/browser_as_load_location.js @@ -15,9 +15,9 @@ async function checkNewtabLoads(selector, message) { await waitForPreloaded(browser); // check what the content task thinks has been loaded. - let found = await SpecialPowers.spawn( + let found = await ContentTask.spawn( browser, - [selector], + selector, arg => content.document.querySelector(arg) !== null ); ok(found, message); diff --git a/browser/components/newtab/test/browser/head.js b/browser/components/newtab/test/browser/head.js index 6f1299f0b1e2..5f0d5490dc1a 100644 --- a/browser/components/newtab/test/browser/head.js +++ b/browser/components/newtab/test/browser/head.js @@ -47,9 +47,9 @@ async function clearHistoryAndBookmarks() { * not necessarily have had all its javascript/render logic executed. */ async function waitForPreloaded(browser) { - let readyState = await SpecialPowers.spawn( + let readyState = await ContentTask.spawn( browser, - [], + null, () => content.document.readyState ); if (readyState !== "complete") { diff --git a/browser/components/resistfingerprinting/test/browser/browser_spoofing_keyboard_event.js b/browser/components/resistfingerprinting/test/browser/browser_spoofing_keyboard_event.js index 0209381f4643..9c5eeec8c022 100644 --- a/browser/components/resistfingerprinting/test/browser/browser_spoofing_keyboard_event.js +++ b/browser/components/resistfingerprinting/test/browser/browser_spoofing_keyboard_event.js @@ -1986,9 +1986,9 @@ async function testKeyEvent(aTab, aTestCase) { let allKeyEventPromises = []; for (let testEvent of testEvents) { - let keyEventPromise = SpecialPowers.spawn( + let keyEventPromise = ContentTask.spawn( aTab.linkedBrowser, - [{ testEvent, result: aTestCase.result, kSameKeyCodeAndCharCodeValue }], + { testEvent, result: aTestCase.result, kSameKeyCodeAndCharCodeValue }, async aInput => { function verifyKeyboardEvent( aEvent, @@ -2217,9 +2217,9 @@ add_task(async function runTestForSuppressModifierKeys() { for (let eventType of ["keydown", "keyup"]) { for (let modifierKey of ["Alt", "Shift", "Control"]) { - let testPromise = SpecialPowers.spawn( + let testPromise = ContentTask.spawn( tab.linkedBrowser, - [eventType], + eventType, async aEventType => { let inputBox = content.document.getElementById("test"); diff --git a/browser/components/sessionstore/test/browser_911547.js b/browser/components/sessionstore/test/browser_911547.js index 046ddbece82c..14b979660686 100644 --- a/browser/components/sessionstore/test/browser_911547.js +++ b/browser/components/sessionstore/test/browser_911547.js @@ -38,7 +38,7 @@ add_task(async function test() { await loadedPromise; - await SpecialPowers.spawn(browser, [], function({}) { + await SpecialPowers.spawn(browser, [], function() { // eslint-disable-line // the data: URI inherits the CSP and the inline script needs to be blocked is( @@ -56,7 +56,7 @@ add_task(async function test() { await promiseTabRestored(tab); browser = tab.linkedBrowser; - await SpecialPowers.spawn(browser, [], function({}) { + await SpecialPowers.spawn(browser, [], function() { // eslint-disable-line // the data: URI should be restored including the inherited CSP and the // inline script should be blocked. diff --git a/browser/components/sessionstore/test/browser_frametree.js b/browser/components/sessionstore/test/browser_frametree.js index 1de925660420..cca26bd2da46 100644 --- a/browser/components/sessionstore/test/browser_frametree.js +++ b/browser/components/sessionstore/test/browser_frametree.js @@ -27,8 +27,8 @@ add_task(async function test_frametree() { is(await countNonDynamicFrames(browser), 2, "two non-dynamic child frames"); // Go back in history. - let pageShowPromise = SpecialPowers.spawn(browser, [], async () => { - return ContentTaskUtils.waitForEvent(this, "pageshow", true); + let pageShowPromise = ContentTask.spawn(browser, null, async () => { + await ContentTaskUtils.waitForEvent(this, "pageshow", true); }); browser.goBack(); await pageShowPromise; diff --git a/browser/components/sessionstore/test/browser_send_async_message_oom.js b/browser/components/sessionstore/test/browser_send_async_message_oom.js index 092dd0b19fc8..4c14ac90b6dc 100644 --- a/browser/components/sessionstore/test/browser_send_async_message_oom.js +++ b/browser/components/sessionstore/test/browser_send_async_message_oom.js @@ -41,7 +41,7 @@ add_task(async function() { // Open a browser, configure it to cause OOM. let newTab = BrowserTestUtils.addTab(gBrowser, "about:robots"); let browser = newTab.linkedBrowser; - await SpecialPowers.spawn(browser, [], frameScript); + await ContentTask.spawn(browser, null, frameScript); let promiseReported = new Promise(resolve => { browser.messageManager.addMessageListener("SessionStore:error", resolve); diff --git a/browser/components/sessionstore/test/browser_sessionHistory.js b/browser/components/sessionstore/test/browser_sessionHistory.js index 4d25ee942e64..ff60776e382c 100644 --- a/browser/components/sessionstore/test/browser_sessionHistory.js +++ b/browser/components/sessionstore/test/browser_sessionHistory.js @@ -82,8 +82,8 @@ add_task(async function test_pageshow() { await promiseBrowserLoaded(browser); // Wait until shistory changes. - let pageShowPromise = SpecialPowers.spawn(browser, [], async () => { - return ContentTaskUtils.waitForEvent(this, "pageshow", true); + let pageShowPromise = ContentTask.spawn(browser, null, async () => { + await ContentTaskUtils.waitForEvent(this, "pageshow", true); }); // Go back to the previous url which is loaded from the bfcache. diff --git a/browser/components/sessionstore/test/browser_windowStateContainer.js b/browser/components/sessionstore/test/browser_windowStateContainer.js index 1c339a6e5911..7249fb6b63c7 100644 --- a/browser/components/sessionstore/test/browser_windowStateContainer.js +++ b/browser/components/sessionstore/test/browser_windowStateContainer.js @@ -52,7 +52,7 @@ add_task(async function() { for (let i = 0; i < 4; i++) { let browser = win2.gBrowser.tabs[i].linkedBrowser; - await SpecialPowers.spawn(browser, [{ expectedId: i + 1 }], async function( + await ContentTask.spawn(browser, { expectedId: i + 1 }, async function( args ) { Assert.equal( @@ -129,9 +129,7 @@ add_task(async function() { for (let i = 0; i < 2; i++) { let browser = win2.gBrowser.tabs[i].linkedBrowser; - await SpecialPowers.spawn(browser, [{ expectedId: i }], async function( - args - ) { + await ContentTask.spawn(browser, { expectedId: i }, async function(args) { Assert.equal( docShell.getOriginAttributes().userContextId, args.expectedId, diff --git a/browser/components/urlbar/tests/browser/browser_locationBarCommand.js b/browser/components/urlbar/tests/browser/browser_locationBarCommand.js index 8d8c338ce851..6fe9d80600e0 100644 --- a/browser/components/urlbar/tests/browser/browser_locationBarCommand.js +++ b/browser/components/urlbar/tests/browser/browser_locationBarCommand.js @@ -278,7 +278,7 @@ function promiseCheckChildNoFocusedElement(browser) { return null; } - return SpecialPowers.spawn(browser, [], async function() { + return ContentTask.spawn(browser, null, async function() { Assert.equal( Services.focus.focusedElement, null, diff --git a/browser/components/urlbar/tests/browser/browser_switchToTabHavingURI_aOpenParams.js b/browser/components/urlbar/tests/browser/browser_switchToTabHavingURI_aOpenParams.js index 7000d3136256..aa6360163973 100644 --- a/browser/components/urlbar/tests/browser/browser_switchToTabHavingURI_aOpenParams.js +++ b/browser/components/urlbar/tests/browser/browser_switchToTabHavingURI_aOpenParams.js @@ -13,7 +13,7 @@ add_task(async function test_ignoreFragment() { switchTab("about:home#1", true); switchTab("about:mozilla", true); - let hashChangePromise = SpecialPowers.spawn( + let hashChangePromise = ContentTask.spawn( tabRefAboutHome.linkedBrowser, [], async function() { diff --git a/browser/modules/test/browser/browser_preloading_tab_moving.js b/browser/modules/test/browser/browser_preloading_tab_moving.js index 3800d7a15582..08a2e0969f5b 100644 --- a/browser/modules/test/browser/browser_preloading_tab_moving.js +++ b/browser/modules/test/browser/browser_preloading_tab_moving.js @@ -72,7 +72,7 @@ add_task(async function moving_works() { return ContentTaskUtils.waitForCondition(() => { return content.document.readyState == "complete"; }); - }); + }).catch(Cu.reportError); ok(true, "Managed to open a tab in the original window still."); diff --git a/devtools/client/inspector/test/shared-head.js b/devtools/client/inspector/test/shared-head.js index 98fcfb3017a2..3656fde7e62f 100644 --- a/devtools/client/inspector/test/shared-head.js +++ b/devtools/client/inspector/test/shared-head.js @@ -726,9 +726,9 @@ function openContextMenuAndGetAllItems(inspector, options) { */ async function waitUntilVisitedState(tab, selectors) { await asyncWaitUntil(async () => { - const hasVisitedState = await SpecialPowers.spawn( + const hasVisitedState = await ContentTask.spawn( tab.linkedBrowser, - [selectors], + selectors, args => { const NS_EVENT_STATE_VISITED = 1 << 24; diff --git a/devtools/client/responsive/test/browser/head.js b/devtools/client/responsive/test/browser/head.js index 3f77cbe9a33f..d117b3fdcb43 100644 --- a/devtools/client/responsive/test/browser/head.js +++ b/devtools/client/responsive/test/browser/head.js @@ -194,7 +194,7 @@ function addRDMTask(rdmUrl, rdmTask, includeBrowserEmbeddedUI) { } function spawnViewportTask(ui, args, task) { - return SpecialPowers.spawn(ui.getViewportBrowser(), [args], task); + return ContentTask.spawn(ui.getViewportBrowser(), args, task); } function waitForFrameLoad(ui, targetURL) { @@ -442,7 +442,7 @@ const selectNetworkThrottling = (ui, value) => ]); function getSessionHistory(browser) { - return SpecialPowers.spawn(browser, [], async function() { + return ContentTask.spawn(browser, null, function() { /* eslint-disable no-undef */ const { SessionHistory } = ChromeUtils.import( "resource://gre/modules/sessionstore/SessionHistory.jsm" diff --git a/devtools/client/shared/test/browser_dbg_multiple-windows.js b/devtools/client/shared/test/browser_dbg_multiple-windows.js index 6df6a58ba8a9..b04c42c4cfc3 100644 --- a/devtools/client/shared/test/browser_dbg_multiple-windows.js +++ b/devtools/client/shared/test/browser_dbg_multiple-windows.js @@ -75,7 +75,7 @@ async function testNewWindow(client, win) { async function testFocusFirst(client) { const tab = window.gBrowser.selectedTab; - await SpecialPowers.spawn(tab.linkedBrowser, [], async function() { + await ContentTask.spawn(tab.linkedBrowser, null, async function() { const onFocus = new Promise(resolve => { content.addEventListener("focus", resolve, { once: true }); }); diff --git a/devtools/client/webconsole/test/browser/head.js b/devtools/client/webconsole/test/browser/head.js index 82749965b7d3..5b6adec9fe12 100644 --- a/devtools/client/webconsole/test/browser/head.js +++ b/devtools/client/webconsole/test/browser/head.js @@ -1351,9 +1351,9 @@ async function selectFrame(dbg, frame) { async function pauseDebugger(dbg) { info("Waiting for debugger to pause"); const onPaused = waitForPaused(dbg); - SpecialPowers.spawn(gBrowser.selectedBrowser, [], async function() { + SpecialPowers.spawn(gBrowser.selectedBrowser, [], function() { content.wrappedJSObject.firstCall(); - }); + }).catch(() => {}); await onPaused; } diff --git a/docshell/test/browser/browser_bug349769.js b/docshell/test/browser/browser_bug349769.js index 0fe1263921b4..94ff94da3c43 100644 --- a/docshell/test/browser/browser_bug349769.js +++ b/docshell/test/browser/browser_bug349769.js @@ -2,7 +2,7 @@ add_task(async function test() { const uris = [undefined, "about:blank"]; function checkContentProcess(newBrowser, uri) { - return SpecialPowers.spawn(newBrowser, [uri], async function(uri) { + return ContentTask.spawn(newBrowser, [uri], async function(uri) { var prin = content.document.nodePrincipal; Assert.notEqual( prin, diff --git a/docshell/test/browser/browser_bug441169.js b/docshell/test/browser/browser_bug441169.js index 3a29372f2b04..09e83b040c44 100644 --- a/docshell/test/browser/browser_bug441169.js +++ b/docshell/test/browser/browser_bug441169.js @@ -37,7 +37,7 @@ function test() { gBrowser.selectedTab = newTab; newBrowser = gBrowser.getBrowserForTab(newTab); - SpecialPowers.spawn(newBrowser, [], task).then(() => { + ContentTask.spawn(newBrowser, null, task).then(() => { gBrowser.removeCurrentTab(); finish(); }); diff --git a/docshell/test/browser/browser_bug670318.js b/docshell/test/browser/browser_bug670318.js index 1dc14b518416..d6a685656c6b 100644 --- a/docshell/test/browser/browser_bug670318.js +++ b/docshell/test/browser/browser_bug670318.js @@ -16,7 +16,7 @@ add_task(async function test() { { gBrowser, url: "about:blank" }, async function(browser) { if (!SpecialPowers.getBoolPref("fission.sessionHistoryInParent")) { - await SpecialPowers.spawn(browser, [URL], async function(URL) { + await ContentTask.spawn(browser, URL, async function(URL) { let history = docShell.QueryInterface(Ci.nsIWebNavigation) .sessionHistory; let count = 0; @@ -29,22 +29,16 @@ add_task(async function test() { let listener = { OnHistoryNewEntry(aNewURI) { if (aNewURI.spec == URL && 5 == ++count) { - docShell.chromeEventHandler.addEventListener( + addEventListener( "load", function onLoad() { - docShell.chromeEventHandler.removeEventListener( - "load", - onLoad, - true - ); - Assert.ok( history.index < history.count, "history.index is valid" ); testDone.resolve(); }, - true + { capture: true, once: true } ); history.legacySHistory.removeSHistoryListener(listener); @@ -98,9 +92,9 @@ add_task(async function test() { async OnHistoryNewEntry(aNewURI) { if (aNewURI.spec == URL && 5 == ++count) { history.removeSHistoryListener(listener); - await SpecialPowers.spawn(browser, [], async () => { - let promise = new Promise(resolve => { - docShell.chromeEventHandler.addEventListener( + await ContentTask.spawn(browser, null, () => { + return new Promise(resolve => { + addEventListener( "load", evt => { let history = docShell.QueryInterface(Ci.nsIWebNavigation) @@ -113,10 +107,9 @@ add_task(async function test() { }, { capture: true, once: true } ); - }); - content.location.reload(); - await promise; + content.location.reload(); + }); }); testDone.resolve(); } diff --git a/docshell/test/browser/browser_bug673467.js b/docshell/test/browser/browser_bug673467.js index 12bcb906ca0f..182cc0ee80b9 100644 --- a/docshell/test/browser/browser_bug673467.js +++ b/docshell/test/browser/browser_bug673467.js @@ -23,9 +23,9 @@ function test() { let taskFinished; let tab = BrowserTestUtils.addTab(gBrowser, doc, {}, tab => { - taskFinished = SpecialPowers.spawn(tab.linkedBrowser, [], () => { + taskFinished = ContentTask.spawn(tab.linkedBrowser, null, () => { return new Promise(resolve => { - docShell.chromeEventHandler.addEventListener( + addEventListener( "load", function() { // The main page has loaded. Now wait for the iframe to load. diff --git a/dom/base/test/browser_bug1058164.js b/dom/base/test/browser_bug1058164.js index d93fa7de207c..40f8a8c132d8 100644 --- a/dom/base/test/browser_bug1058164.js +++ b/dom/base/test/browser_bug1058164.js @@ -203,7 +203,7 @@ add_task(async function test_swap_frameloader_pagevisibility_events() { // Wait for that initial browser to show its pageshow event if it hasn't // happened so that we don't confuse it with the other expected events. - await SpecialPowers.spawn(emptyBrowser, [], async () => { + await ContentTask.spawn(emptyBrowser, null, async () => { if (content.document.visibilityState === "hidden") { info("waiting for hidden emptyBrowser to pageshow"); await ContentTaskUtils.waitForEvent(content, "pageshow", {}); diff --git a/dom/credentialmanagement/tests/browser/browser_active_document.js b/dom/credentialmanagement/tests/browser/browser_active_document.js index ad56c1e7a9f1..2799979f6eaf 100644 --- a/dom/credentialmanagement/tests/browser/browser_active_document.js +++ b/dom/credentialmanagement/tests/browser/browser_active_document.js @@ -16,7 +16,7 @@ function expectNotAllowedError(aResult) { } function promiseMakeCredential(tab) { - return SpecialPowers.spawn(tab.linkedBrowser, [], async function() { + return ContentTask.spawn(tab.linkedBrowser, null, async function() { const cose_alg_ECDSA_w_SHA256 = -7; let publicKey = { @@ -37,7 +37,7 @@ function promiseMakeCredential(tab) { } function promiseGetAssertion(tab) { - return SpecialPowers.spawn(tab.linkedBrowser, [], async function() { + return ContentTask.spawn(tab.linkedBrowser, null, async function() { let newCredential = { type: "public-key", id: content.crypto.getRandomValues(new Uint8Array(16)), diff --git a/dom/html/test/browser_DOMDocElementInserted.js b/dom/html/test/browser_DOMDocElementInserted.js index caef6aaa264d..241b0f93da6a 100644 --- a/dom/html/test/browser_DOMDocElementInserted.js +++ b/dom/html/test/browser_DOMDocElementInserted.js @@ -3,27 +3,16 @@ add_task(async function() { let tab = BrowserTestUtils.addTab(gBrowser); let uri = "data:text/html;charset=utf-8,"; - let eventPromise = SpecialPowers.spawn(tab.linkedBrowser, [], function() { - const { PromiseUtils } = ChromeUtils.import( - "resource://gre/modules/PromiseUtils.jsm" - ); - let deferred = PromiseUtils.defer(); - - let listener = event => { - docShell.chromeEventHandler.removeEventListener( + let eventPromise = ContentTask.spawn(tab.linkedBrowser, null, function() { + return new Promise(resolve => { + addEventListener( "DOMDocElementInserted", - listener, - true + event => resolve(event.target.documentURIObject.spec), + { + once: true, + } ); - deferred.resolve(event.target.documentURIObject.spec); - }; - docShell.chromeEventHandler.addEventListener( - "DOMDocElementInserted", - listener, - true - ); - - return deferred.promise; + }); }); BrowserTestUtils.loadURI(tab.linkedBrowser, uri); diff --git a/dom/manifest/test/browser_fire_appinstalled_event.js b/dom/manifest/test/browser_fire_appinstalled_event.js index 92fde29d6613..3dd721447fa3 100644 --- a/dom/manifest/test/browser_fire_appinstalled_event.js +++ b/dom/manifest/test/browser_fire_appinstalled_event.js @@ -23,7 +23,7 @@ function enableOnAppInstalledPref() { // This cause file_reg_install_event.html to be dynamically change. async function theTest(aBrowser) { aBrowser.allowEvents = true; - let waitForInstall = SpecialPowers.spawn(aBrowser, [], async function() { + let waitForInstall = ContentTask.spawn(aBrowser, null, async function() { await ContentTaskUtils.waitForEvent(content.window, "appinstalled"); }); const { diff --git a/dom/security/test/csp/browser_test_web_manifest.js b/dom/security/test/csp/browser_test_web_manifest.js index 727c17188c5a..3868eeabe910 100644 --- a/dom/security/test/csp/browser_test_web_manifest.js +++ b/dom/security/test/csp/browser_test_web_manifest.js @@ -223,7 +223,7 @@ function waitForNetObserver(aBrowser, aTest) { return Promise.resolve(); } - return SpecialPowers.spawn(aBrowser, [], () => { + return ContentTask.spawn(aBrowser, [], () => { return new Promise(resolve => { function observe(subject, topic) { Services.obs.removeObserver(observe, "csp-on-violate-policy"); diff --git a/dom/tests/browser/browser_ConsoleStorageAPITests.js b/dom/tests/browser/browser_ConsoleStorageAPITests.js index 4baf210988a2..e5b48eee4c06 100644 --- a/dom/tests/browser/browser_ConsoleStorageAPITests.js +++ b/dom/tests/browser/browser_ConsoleStorageAPITests.js @@ -24,7 +24,7 @@ add_task(async function() { gBrowser.selectedTab = tab; var browser = gBrowser.selectedBrowser; - let observerPromise = SpecialPowers.spawn(browser, [], async function(opt) { + let observerPromise = ContentTask.spawn(browser, null, async function(opt) { const TEST_URI = "http://example.com/browser/dom/tests/browser/test-console-api.html"; let ConsoleAPIStorage = Cc["@mozilla.org/consoleAPI-storage;1"].getService( @@ -93,9 +93,7 @@ add_task(async function() { browser = gBrowser.selectedBrowser; // Spin the event loop to make sure everything is cleared. - await SpecialPowers.spawn(browser, [], function() { - return Promise.resolve(); - }); + await SpecialPowers.spawn(browser, [], () => {}); await SpecialPowers.spawn(browser, [windowId], function(windowId) { var ConsoleAPIStorage = Cc["@mozilla.org/consoleAPI-storage;1"].getService( diff --git a/dom/tests/browser/browser_hasbeforeunload.js b/dom/tests/browser/browser_hasbeforeunload.js index 2b2b8a2e97f1..204d76186428 100644 --- a/dom/tests/browser/browser_hasbeforeunload.js +++ b/dom/tests/browser/browser_hasbeforeunload.js @@ -313,7 +313,7 @@ function controlFrameAt(browser, frameDepth, command) { break; } } - }); + }).catch(Cu.reportError); } /** diff --git a/dom/tests/browser/helper_largeAllocation.js b/dom/tests/browser/helper_largeAllocation.js index 90d1f00ac01c..0117e8500342 100644 --- a/dom/tests/browser/helper_largeAllocation.js +++ b/dom/tests/browser/helper_largeAllocation.js @@ -41,13 +41,13 @@ function expectNoProcess() { } function getPID(aBrowser) { - return SpecialPowers.spawn(aBrowser, [], () => { + return ContentTask.spawn(aBrowser, [], () => { return Services.appinfo.processID; }); } function getInLAProc(aBrowser) { - return SpecialPowers.spawn(aBrowser, [], () => { + return ContentTask.spawn(aBrowser, [], () => { return Services.appinfo.remoteType == "webLargeAllocation"; }); } @@ -80,7 +80,7 @@ async function largeAllocSuccessTests() { is(false, await getInLAProc(aBrowser)); let epc = expectProcessCreated(); - await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { + await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { content.document.location = TEST_URI; }); @@ -107,7 +107,7 @@ async function largeAllocSuccessTests() { // Fail the test if we create a process let stopExpectNoProcess = expectNoProcess(); - await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { + await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { // eslint-disable-next-line no-unsanitized/property content.document.body.innerHTML = ``; @@ -138,7 +138,7 @@ async function largeAllocSuccessTests() { // Fail the test if we create a process let stopExpectNoProcess = expectNoProcess(); - let loaded = SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { + let loaded = ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { content.document.body.innerHTML = ""; return new Promise(resolve => { @@ -173,7 +173,7 @@ async function largeAllocSuccessTests() { let epc = expectProcessCreated(); - await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { + await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { content.document.location = TEST_URI; }); @@ -186,7 +186,7 @@ async function largeAllocSuccessTests() { await BrowserTestUtils.browserLoaded(aBrowser); - await SpecialPowers.spawn( + await ContentTask.spawn( aBrowser, [], () => (content.document.location = "about:blank") @@ -200,7 +200,7 @@ async function largeAllocSuccessTests() { epc = expectProcessCreated(); - await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { + await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { content.document.location = TEST_URI; }); @@ -221,7 +221,7 @@ async function largeAllocSuccessTests() { let epc = expectProcessCreated(); - await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { + await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { content.document.location = TEST_URI; }); @@ -235,7 +235,7 @@ async function largeAllocSuccessTests() { await BrowserTestUtils.browserLoaded(aBrowser); // Switch to about:blank, so we can navigate back - await SpecialPowers.spawn(aBrowser, [], () => { + await ContentTask.spawn(aBrowser, [], () => { content.document.location = "about:blank"; }); @@ -251,7 +251,7 @@ async function largeAllocSuccessTests() { // Navigate back to the previous page. As the large alloation process was // left, it won't be in bfcache and will have to be loaded fresh. - await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { + await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { content.window.history.back(); }); @@ -276,7 +276,7 @@ async function largeAllocSuccessTests() { BrowserTestUtils.browserLoaded(aBrowser), ]); - await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { + await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { content.document.location = TEST_URI; }); @@ -289,7 +289,7 @@ async function largeAllocSuccessTests() { let epc = expectProcessCreated(); - await SpecialPowers.spawn(aBrowser, [TEST_URI_2], TEST_URI_2 => { + await ContentTask.spawn(aBrowser, TEST_URI_2, TEST_URI_2 => { content.document.location = TEST_URI_2; }); @@ -327,7 +327,7 @@ async function largeAllocSuccessTests() { BrowserTestUtils.browserLoaded(aBrowser), ]); - await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { + await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { content.document.location = TEST_URI; }); @@ -340,7 +340,7 @@ async function largeAllocSuccessTests() { let stopExpectNoProcess = expectNoProcess(); - await SpecialPowers.spawn(aBrowser, [], () => { + await ContentTask.spawn(aBrowser, [], () => { this.__newWindow = content.window.open("about:blank"); content.document.location = "about:blank"; }); @@ -354,7 +354,7 @@ async function largeAllocSuccessTests() { stopExpectNoProcess(); - await SpecialPowers.spawn(aBrowser, [], () => { + await ContentTask.spawn(aBrowser, [], () => { ok(this.__newWindow, "The window should have been stored"); this.__newWindow.close(); }); @@ -372,7 +372,7 @@ async function largeAllocSuccessTests() { BrowserTestUtils.browserLoaded(aBrowser), ]); - await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { + await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { content.document.location = TEST_URI; }); @@ -390,7 +390,7 @@ async function largeAllocSuccessTests() { gBrowser, "about:blank" ); - await SpecialPowers.spawn(aBrowser, [], () => { + await ContentTask.spawn(aBrowser, [], () => { this.__newWindow = content.window.open("about:blank"); }); await promiseTabOpened; @@ -410,7 +410,7 @@ async function largeAllocSuccessTests() { stopExpectNoProcess(); - await SpecialPowers.spawn(aBrowser, [], () => { + await ContentTask.spawn(aBrowser, [], () => { ok(this.__newWindow, "The window should have been stored"); this.__newWindow.close(); }); @@ -428,7 +428,7 @@ async function largeAllocSuccessTests() { expectProcessCreated(), BrowserTestUtils.browserLoaded(aBrowser), ]); - await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { + await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { content.document.location = TEST_URI; }); @@ -476,7 +476,7 @@ async function largeAllocSuccessTests() { BrowserTestUtils.browserLoaded(aBrowser), ]); - await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { + await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { content.document.location = TEST_URI; }); @@ -493,7 +493,7 @@ async function largeAllocSuccessTests() { is(false, await getInLAProc(aBrowser)); let ready = Promise.all([BrowserTestUtils.browserLoaded(aBrowser)]); - await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { + await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { content.document.location = TEST_URI; }); await ready; @@ -517,7 +517,7 @@ async function largeAllocSuccessTests() { // Fail the test if we create a process let stopExpectNoProcess = expectNoProcess(); - await SpecialPowers.spawn(aBrowser, [], () => { + await ContentTask.spawn(aBrowser, [], () => { content.document.location = "view-source:http://example.com"; }); @@ -546,7 +546,7 @@ async function largeAllocSuccessTests() { expectProcessCreated(), BrowserTestUtils.browserLoaded(aBrowser), ]); - await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { + await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { content.document.location = TEST_URI; }); @@ -588,7 +588,7 @@ async function largeAllocSuccessTests() { expectProcessCreated(), BrowserTestUtils.browserLoaded(aBrowser), ]); - await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { + await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { content.document.location = TEST_URI; }); @@ -600,7 +600,7 @@ async function largeAllocSuccessTests() { is(true, await getInLAProc(aBrowser)); await Promise.all([ - SpecialPowers.spawn(aBrowser, [], () => { + ContentTask.spawn(aBrowser, null, () => { content.document.querySelector("#submit").click(); }), BrowserTestUtils.browserLoaded(aBrowser), @@ -632,7 +632,7 @@ async function largeAllocFailTests() { // Fail the test if we create a process let stopExpectNoProcess = expectNoProcess(); - await SpecialPowers.spawn(aBrowser, [TEST_URI], TEST_URI => { + await ContentTask.spawn(aBrowser, TEST_URI, TEST_URI => { content.document.location = TEST_URI; }); diff --git a/dom/webauthn/tests/browser/browser_fido_appid_extension.js b/dom/webauthn/tests/browser/browser_fido_appid_extension.js index ceda86eb9358..782db266370a 100644 --- a/dom/webauthn/tests/browser/browser_fido_appid_extension.js +++ b/dom/webauthn/tests/browser/browser_fido_appid_extension.js @@ -52,7 +52,7 @@ function promiseU2FRegister(tab, app_id) { } function promiseWebAuthnRegister(tab, appid) { - return SpecialPowers.spawn(tab.linkedBrowser, [[appid]], ([appid]) => { + return ContentTask.spawn(tab.linkedBrowser, appid, appid => { const cose_alg_ECDSA_w_SHA256 = -7; let challenge = content.crypto.getRandomValues(new Uint8Array(16)); @@ -84,9 +84,9 @@ function promiseWebAuthnRegister(tab, appid) { } function promiseWebAuthnSign(tab, key_handle, extensions = {}) { - return SpecialPowers.spawn( + return ContentTask.spawn( tab.linkedBrowser, - [[key_handle, extensions]], + [key_handle, extensions], ([key_handle, extensions]) => { let challenge = content.crypto.getRandomValues(new Uint8Array(16)); diff --git a/dom/webauthn/tests/browser/browser_webauthn_prompts.js b/dom/webauthn/tests/browser/browser_webauthn_prompts.js index f0fc74c0c36a..99e1744ea3d4 100644 --- a/dom/webauthn/tests/browser/browser_webauthn_prompts.js +++ b/dom/webauthn/tests/browser/browser_webauthn_prompts.js @@ -51,44 +51,40 @@ function verifyDirectCertificate(attestationObject) { function promiseWebAuthnRegister(tab, attestation = "indirect") { /* eslint-disable no-shadow */ - return SpecialPowers.spawn( - tab.linkedBrowser, - [[attestation]], - ([attestation]) => { - const cose_alg_ECDSA_w_SHA256 = -7; + return ContentTask.spawn(tab.linkedBrowser, attestation, attestation => { + const cose_alg_ECDSA_w_SHA256 = -7; - let challenge = content.crypto.getRandomValues(new Uint8Array(16)); + let challenge = content.crypto.getRandomValues(new Uint8Array(16)); - let pubKeyCredParams = [ - { - type: "public-key", - alg: cose_alg_ECDSA_w_SHA256, - }, - ]; + let pubKeyCredParams = [ + { + type: "public-key", + alg: cose_alg_ECDSA_w_SHA256, + }, + ]; - let publicKey = { - rp: { id: content.document.domain, name: "none", icon: "none" }, - user: { - id: new Uint8Array(), - name: "none", - icon: "none", - displayName: "none", - }, - pubKeyCredParams, - attestation, - challenge, - }; + let publicKey = { + rp: { id: content.document.domain, name: "none", icon: "none" }, + user: { + id: new Uint8Array(), + name: "none", + icon: "none", + displayName: "none", + }, + pubKeyCredParams, + attestation, + challenge, + }; - return content.navigator.credentials - .create({ publicKey }) - .then(cred => cred.response.attestationObject); - } - ); + return content.navigator.credentials + .create({ publicKey }) + .then(cred => cred.response.attestationObject); + }); /* eslint-enable no-shadow */ } function promiseWebAuthnSign(tab) { - return SpecialPowers.spawn(tab.linkedBrowser, [[]], () => { + return ContentTask.spawn(tab.linkedBrowser, null, () => { let challenge = content.crypto.getRandomValues(new Uint8Array(16)); let key_handle = content.crypto.getRandomValues(new Uint8Array(16)); diff --git a/dom/xhr/tests/browser_xhr_onchange_leak.js b/dom/xhr/tests/browser_xhr_onchange_leak.js index fc5f1655e15f..13845ec54570 100644 --- a/dom/xhr/tests/browser_xhr_onchange_leak.js +++ b/dom/xhr/tests/browser_xhr_onchange_leak.js @@ -18,7 +18,7 @@ add_task(async function test() { "http://mochi.test:8888/browser/dom/xhr/tests/browser_xhr_onchange_leak.html"; let newTab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url); let browser = gBrowser.selectedBrowser; - let done = await SpecialPowers.spawn(browser, [], async function() { + let done = await ContentTask.spawn(browser, null, async function() { let promise = ContentTaskUtils.waitForEvent(this, "DOMContentLoaded", true); content.location = "http://mochi.test:8888/"; await promise; diff --git a/js/xpconnect/tests/browser/browser_dead_object.js b/js/xpconnect/tests/browser/browser_dead_object.js index ce2b0ea40395..b101c6484820 100644 --- a/js/xpconnect/tests/browser/browser_dead_object.js +++ b/js/xpconnect/tests/browser/browser_dead_object.js @@ -11,9 +11,9 @@ add_task(async function test() { let newTab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url); let browser = gBrowser.selectedBrowser; let innerWindowId = browser.innerWindowID; - let contentDocDead = await SpecialPowers.spawn( + let contentDocDead = await ContentTask.spawn( browser, - [{ innerWindowId }], + { innerWindowId }, async function(args) { let doc = content.document; let { TestUtils } = ChromeUtils.import( diff --git a/js/xpconnect/tests/browser/browser_exception_leak.js b/js/xpconnect/tests/browser/browser_exception_leak.js index 374a02bd491e..13df33783d25 100644 --- a/js/xpconnect/tests/browser/browser_exception_leak.js +++ b/js/xpconnect/tests/browser/browser_exception_leak.js @@ -12,9 +12,9 @@ add_task(async function test() { let browser = gBrowser.selectedBrowser; let innerWindowId = browser.innerWindowID; - let stackTraceEmpty = await SpecialPowers.spawn( + let stackTraceEmpty = await ContentTask.spawn( browser, - [{ innerWindowId }], + { innerWindowId }, async function(args) { let { TestUtils } = ChromeUtils.import( "resource://testing-common/TestUtils.jsm" diff --git a/testing/mochitest/BrowserTestUtils/BrowserTestUtils.jsm b/testing/mochitest/BrowserTestUtils/BrowserTestUtils.jsm index 5e5a53de0651..9c4781ae3cf7 100644 --- a/testing/mochitest/BrowserTestUtils/BrowserTestUtils.jsm +++ b/testing/mochitest/BrowserTestUtils/BrowserTestUtils.jsm @@ -30,6 +30,7 @@ const { OS } = ChromeUtils.import("resource://gre/modules/osfile.jsm"); XPCOMUtils.defineLazyModuleGetters(this, { BrowserWindowTracker: "resource:///modules/BrowserWindowTracker.jsm", + ContentTask: "resource://testing-common/ContentTask.jsm", E10SUtils: "resource://gre/modules/E10SUtils.jsm", }); @@ -852,18 +853,14 @@ var BrowserTestUtils = { // We cannot use the regular BrowserTestUtils helper for waiting here, since that // would try to insert the preloaded browser, which would only break things. - await gBrowser.preloadedBrowser.ownerGlobal.SpecialPowers.spawn( - gBrowser.preloadedBrowser, - [], - async () => { - await ContentTaskUtils.waitForCondition(() => { - return ( - this.content.document && - this.content.document.readyState == "complete" - ); - }); - } - ); + await ContentTask.spawn(gBrowser.preloadedBrowser, [], async () => { + await ContentTaskUtils.waitForCondition(() => { + return ( + this.content.document && + this.content.document.readyState == "complete" + ); + }); + }); }, /** diff --git a/toolkit/components/passwordmgr/test/browser/browser_DOMFormHasPassword.js b/toolkit/components/passwordmgr/test/browser/browser_DOMFormHasPassword.js index 550095cebdaa..1079b33eb793 100644 --- a/toolkit/components/passwordmgr/test/browser/browser_DOMFormHasPassword.js +++ b/toolkit/components/passwordmgr/test/browser/browser_DOMFormHasPassword.js @@ -92,7 +92,7 @@ function task(contentIds) { add_task(async function() { let tab = (gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser)); - let promise = SpecialPowers.spawn(tab.linkedBrowser, [ids], task); + let promise = ContentTask.spawn(tab.linkedBrowser, ids, task); BrowserTestUtils.loadURI( tab.linkedBrowser, "data:text/html;charset=utf-8," + diff --git a/toolkit/components/passwordmgr/test/browser/browser_DOMInputPasswordAdded.js b/toolkit/components/passwordmgr/test/browser/browser_DOMInputPasswordAdded.js index 4ab79b6eed1a..bbab34801560 100644 --- a/toolkit/components/passwordmgr/test/browser/browser_DOMInputPasswordAdded.js +++ b/toolkit/components/passwordmgr/test/browser/browser_DOMInputPasswordAdded.js @@ -106,7 +106,7 @@ function task(contentConsts) { add_task(async function() { let tab = (gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser)); - let promise = SpecialPowers.spawn(tab.linkedBrowser, [consts], task); + let promise = ContentTask.spawn(tab.linkedBrowser, consts, task); BrowserTestUtils.loadURI( tab.linkedBrowser, "data:text/html;charset=utf-8," + diff --git a/toolkit/components/passwordmgr/test/browser/browser_context_menu.js b/toolkit/components/passwordmgr/test/browser/browser_context_menu.js index b4d2691b58cf..2bb9645dfa9e 100644 --- a/toolkit/components/passwordmgr/test/browser/browser_context_menu.js +++ b/toolkit/components/passwordmgr/test/browser/browser_context_menu.js @@ -449,9 +449,7 @@ async function assertContextMenuFill( formId, unchangedSelector, }; - let continuePromise = SpecialPowers.spawn(browser, [data], async function( - data - ) { + let continuePromise = ContentTask.spawn(browser, data, async function(data) { let { username, password, diff --git a/toolkit/components/passwordmgr/test/browser/browser_context_menu_generated_password.js b/toolkit/components/passwordmgr/test/browser/browser_context_menu_generated_password.js index 9de53f71bd6c..285405e445f1 100644 --- a/toolkit/components/passwordmgr/test/browser/browser_context_menu_generated_password.js +++ b/toolkit/components/passwordmgr/test/browser/browser_context_menu_generated_password.js @@ -301,9 +301,9 @@ add_task(async function fill_generated_password_with_matching_logins() { await openPasswordContextMenu(browser, passwordInputSelector); // Execute the command of the first login menuitem found at the context menu. - let passwordChangedPromise = SpecialPowers.spawn( + let passwordChangedPromise = ContentTask.spawn( browser, - [], + null, async function() { let passwordInput = content.document.getElementById( "form-basic-password" diff --git a/toolkit/components/passwordmgr/test/browser/head.js b/toolkit/components/passwordmgr/test/browser/head.js index 13ade3c61b84..a165f6e834f9 100644 --- a/toolkit/components/passwordmgr/test/browser/head.js +++ b/toolkit/components/passwordmgr/test/browser/head.js @@ -168,15 +168,13 @@ async function getFormSubmitResponseResult( { username = "#user", password = "#pass" } = {} ) { // default selectors are for the response page produced by formsubmit.sjs - let fieldValues = await SpecialPowers.spawn( + let fieldValues = await ContentTask.spawn( browser, - [ - { - resultURL, - usernameSelector: username, - passwordSelector: password, - }, - ], + { + resultURL, + usernameSelector: username, + passwordSelector: password, + }, async function({ resultURL, usernameSelector, passwordSelector }) { await ContentTaskUtils.waitForCondition(() => { return ( diff --git a/toolkit/content/tests/browser/browser_resume_bkg_video_on_tab_hover.js b/toolkit/content/tests/browser/browser_resume_bkg_video_on_tab_hover.js index 4725f4cb9f08..137f2eda55f6 100644 --- a/toolkit/content/tests/browser/browser_resume_bkg_video_on_tab_hover.js +++ b/toolkit/content/tests/browser/browser_resume_bkg_video_on_tab_hover.js @@ -92,9 +92,9 @@ function get_video_decoding_suspend_promise(browser, reload) { function get_video_decoding_resume_promise(browser) { let suspend = false; let reload = false; - return SpecialPowers.spawn( + return ContentTask.spawn( browser, - [{ suspend, reload }], + { suspend, reload }, check_video_decoding_state ); } diff --git a/toolkit/content/tests/chrome/bug304188_window.xhtml b/toolkit/content/tests/chrome/bug304188_window.xhtml index 26905d78411e..455fce1b74bf 100644 --- a/toolkit/content/tests/chrome/bug304188_window.xhtml +++ b/toolkit/content/tests/chrome/bug304188_window.xhtml @@ -18,7 +18,7 @@ find-menu appears in editor element which has had makeEditable() called but desi