diff --git a/browser/components/preferences/in-content/tests/browser_extension_controlled.js b/browser/components/preferences/in-content/tests/browser_extension_controlled.js index fed4719a908b..49dd7f088d05 100644 --- a/browser/components/preferences/in-content/tests/browser_extension_controlled.js +++ b/browser/components/preferences/in-content/tests/browser_extension_controlled.js @@ -1124,8 +1124,8 @@ add_task(async function testExtensionControlledProxyConfig() { async function closeProxyPanel(panelObj) { let dialog = panelObj.panel.document.getElementById("ConnectionsDialog"); dialog.cancelDialog(); - let panelClosingEvent = await panelObj.closingPromise; - ok(panelClosingEvent, "Proxy panel closed."); + await panelObj.closingPromise; + is(panelObj.pane.state, "closed", "Proxy panel closed."); } await openPreferencesViaOpenPreferencesAPI("paneGeneral", { diff --git a/browser/components/preferences/in-content/tests/head.js b/browser/components/preferences/in-content/tests/head.js index d201d66f8e0c..98c0a176e29e 100644 --- a/browser/components/preferences/in-content/tests/head.js +++ b/browser/components/preferences/in-content/tests/head.js @@ -130,13 +130,12 @@ function waitForEvent(aSubject, aEventName, aTimeoutMs, aTarget) { eventDeferred.resolve(aEvent); }; - function cleanup(aEventOrError) { + function cleanup() { // unhook listener in case of success or failure aSubject.removeEventListener(aEventName, listener); - return aEventOrError; } aSubject.addEventListener(aEventName, listener); - return eventDeferred.promise.then(cleanup, cleanup); + return eventDeferred.promise.finally(cleanup); } function openPreferencesViaOpenPreferencesAPI(aPane, aOptions) { diff --git a/browser/components/sessionstore/SessionStore.jsm b/browser/components/sessionstore/SessionStore.jsm index 4557105583df..2a5e5a21968e 100644 --- a/browser/components/sessionstore/SessionStore.jsm +++ b/browser/components/sessionstore/SessionStore.jsm @@ -2235,7 +2235,7 @@ var SessionStoreInternal = { deferred.resolve(); } }, topic); - deferred.promise.then(cleanup, cleanup); + deferred.promise.finally(cleanup); return deferred; }; @@ -6158,10 +6158,7 @@ var SessionStoreInternal = { ); // Ensure that the timer is both canceled once we are done with it // and not garbage-collected until then. - deferred.promise.then( - () => timer.cancel(), - () => timer.cancel() - ); + deferred.promise.finally(() => timer.cancel()); return deferred; }, diff --git a/browser/modules/FaviconLoader.jsm b/browser/modules/FaviconLoader.jsm index 5c667608030a..0dd4d0c621b8 100644 --- a/browser/modules/FaviconLoader.jsm +++ b/browser/modules/FaviconLoader.jsm @@ -151,7 +151,7 @@ class FaviconLoad { this.dataBuffer = null; this.stream = null; }; - this._deferred.promise.then(cleanup, cleanup); + this._deferred.promise.finally(cleanup); this.dataBuffer = new StorageStream(STREAM_SEGMENT_SIZE, PR_UINT32_MAX); diff --git a/devtools/client/inspector/markup/markup.js b/devtools/client/inspector/markup/markup.js index 6c1f6e051662..4a2b1e2e8d4c 100644 --- a/devtools/client/inspector/markup/markup.js +++ b/devtools/client/inspector/markup/markup.js @@ -750,7 +750,7 @@ MarkupView.prototype = { this._briefBoxModelPromise = new Promise(resolve => { _resolve = resolve; this._briefBoxModelTimer = setTimeout(() => { - this._hideBoxModel().then(resolve, resolve); + this._hideBoxModel().finally(resolve); }, NEW_SELECTION_HIGHLIGHTER_TIMER); }); this._briefBoxModelPromise.resolve = _resolve; diff --git a/devtools/client/inspector/rules/rules.js b/devtools/client/inspector/rules/rules.js index ab366503fc70..3caef1ab24a4 100644 --- a/devtools/client/inspector/rules/rules.js +++ b/devtools/client/inspector/rules/rules.js @@ -1891,9 +1891,7 @@ RuleViewTool.prototype = { if (selectElement) { const done = this.inspector.updating("rule-view"); - this.view - .selectElement(this.inspector.selection.nodeFront) - .then(done, done); + this.view.selectElement(this.inspector.selection.nodeFront).finally(done); } }, diff --git a/devtools/client/netmonitor/src/connector/chrome/bulk-loader.js b/devtools/client/netmonitor/src/connector/chrome/bulk-loader.js index ae886c280fc9..39be0cb06bb2 100644 --- a/devtools/client/netmonitor/src/connector/chrome/bulk-loader.js +++ b/devtools/client/netmonitor/src/connector/chrome/bulk-loader.js @@ -24,13 +24,13 @@ class Scheduler { dequeue() { const self = this; - const recursive = resolve => { + const recursive = () => { self.dequeue(); }; this.busy = true; const next = this.queue.shift(); if (next) { - next().then(recursive, recursive); + next().finally(recursive); } else { this.busy = false; } diff --git a/devtools/client/webconsole/actions/input.js b/devtools/client/webconsole/actions/input.js index 3f2ab7f753b7..61587dd1a447 100644 --- a/devtools/client/webconsole/actions/input.js +++ b/devtools/client/webconsole/actions/input.js @@ -87,8 +87,6 @@ function evaluateExpression(expression, from = "input") { // Even if the evaluation fails, // we still need to pass the error response to onExpressionEvaluated. - const onSettled = res => res; - const response = await client .evaluateJSAsync(expression, { frameActor: await webConsoleUI.getFrameActor(), @@ -96,7 +94,7 @@ function evaluateExpression(expression, from = "input") { selectedTargetFront: toolbox && toolbox.getSelectedTargetFront(), mapped, }) - .then(onSettled, onSettled); + .catch(e => e); return dispatch(onExpressionEvaluated(response)); }; diff --git a/devtools/server/tests/xpcshell/test_forwardingprefix.js b/devtools/server/tests/xpcshell/test_forwardingprefix.js index ccb3cfa5fe6b..8e50d1c62849 100644 --- a/devtools/server/tests/xpcshell/test_forwardingprefix.js +++ b/devtools/server/tests/xpcshell/test_forwardingprefix.js @@ -115,7 +115,7 @@ function tryActors(reachables, completed) { executeSoon(completed, "tryActors callback " + completed.name); } }; - promise.then(callback, callback); + promise.catch(e => e).then(callback); } } diff --git a/devtools/shared/transport/stream-utils.js b/devtools/shared/transport/stream-utils.js index dfda16c3cfdf..d2f16196fd4c 100644 --- a/devtools/shared/transport/stream-utils.js +++ b/devtools/shared/transport/stream-utils.js @@ -96,7 +96,8 @@ function StreamCopier(input, output, length) { // fail scenarios, but also emit events (due to the EventEmitter) for other // states, like progress. this.then = this._deferred.then.bind(this._deferred); - this.then(this._destroy, this._destroy); + this.finally = this._deferred.finally.bind(this._deferred); + this.finally(this._destroy); // Stream ready callback starts as |_copy|, but may switch to |_flush| at end // if flushing would block the output stream. diff --git a/dom/base/test/browser_use_counters.js b/dom/base/test/browser_use_counters.js index bc15283e6730..f18b33085669 100644 --- a/dom/base/test/browser_use_counters.js +++ b/dom/base/test/browser_use_counters.js @@ -177,7 +177,7 @@ function grabHistogramsFromContent(use_counter_middlefix, page_before = null) { }; return BrowserTestUtils.waitForCondition(() => { return page_before != gather()[0]; - }).then(gather, gather); + }).finally(gather); } var check_use_counter_iframe = async function( diff --git a/dom/cache/test/mochitest/test_cache_match_vary.js b/dom/cache/test/mochitest/test_cache_match_vary.js index 17b21844065d..0f4c343ae0f5 100644 --- a/dom/cache/test/mochitest/test_cache_match_vary.js +++ b/dom/cache/test/mochitest/test_cache_match_vary.js @@ -511,14 +511,9 @@ function testMultipleCacheEntries() { // Make sure to clean up after each test step. function step(testPromise) { - return testPromise.then( - function() { - caches.delete(name); - }, - function() { - caches.delete(name); - } - ); + return testPromise.finally(function() { + caches.delete(name); + }); } step(testBasics()) diff --git a/dom/canvas/test/imagebitmap_on_worker.js b/dom/canvas/test/imagebitmap_on_worker.js index 1d88eb09f66e..973a9532ef4c 100644 --- a/dom/canvas/test/imagebitmap_on_worker.js +++ b/dom/canvas/test/imagebitmap_on_worker.js @@ -153,6 +153,6 @@ onmessage = function(event) { doneTask(); } else if (event.data.type == "testBug1239300") { var promise = testBug1239300(); - promise.then(doneTask, doneTask); + promise.finally(doneTask); } }; diff --git a/dom/events/test/pointerevents/test_touch_action.html b/dom/events/test/pointerevents/test_touch_action.html index af61820c8f41..e10ec82b31d6 100644 --- a/dom/events/test/pointerevents/test_touch_action.html +++ b/dom/events/test/pointerevents/test_touch_action.html @@ -92,7 +92,7 @@ if (isApzEnabled()) { SimpleTest.waitForExplicitFinish(); window.onload = function() { runSubtestsSeriallyInFreshWindows(subtests) - .then(SimpleTest.finish, SimpleTest.finish); + .finally(SimpleTest.finish); }; } diff --git a/dom/media/PeerConnection.jsm b/dom/media/PeerConnection.jsm index 631d64c76a46..e4cca45e0f65 100644 --- a/dom/media/PeerConnection.jsm +++ b/dom/media/PeerConnection.jsm @@ -575,7 +575,7 @@ class RTCPeerConnection { this.updateNegotiationNeeded(); } }; - p.then(doNextOperation, doNextOperation); + p.finally(doNextOperation); }); if (this._operations.length == 1) { this._operations[0](); diff --git a/dom/media/test/can_play_type_ogg.js b/dom/media/test/can_play_type_ogg.js index c03f8b2d3efd..5a54fbdd0682 100644 --- a/dom/media/test/can_play_type_ogg.js +++ b/dom/media/test/can_play_type_ogg.js @@ -68,5 +68,5 @@ function check_ogg(v, enabled, finish) { .then(verify_opus_support) .then(opus_enable) .then(opus_disable) - .then(unspported_ogg, unspported_ogg); + .finally(unspported_ogg); } diff --git a/dom/push/test/xpcshell/test_service_child.js b/dom/push/test/xpcshell/test_service_child.js index 50615581d55d..7ecc3ca07011 100644 --- a/dom/push/test/xpcshell/test_service_child.js +++ b/dom/push/test/xpcshell/test_service_child.js @@ -41,7 +41,7 @@ if (isParent) { registerCleanupFunction(() => { return db.drop().then(_ => db.close()); }); - setUpServiceInParent(PushService, db).then(run_next_test, run_next_test); + setUpServiceInParent(PushService, db).finally(run_next_test); }); } @@ -352,6 +352,6 @@ add_test(function test_subscribe_missing_principal() { if (isParent) { add_test(function tearDown() { - tearDownServiceInParent(db).then(run_next_test, run_next_test); + tearDownServiceInParent(db).finally(run_next_test); }); } diff --git a/dom/serviceworkers/test/test_privateBrowsing.html b/dom/serviceworkers/test/test_privateBrowsing.html index cdb0622b332f..737d24ef1ac0 100644 --- a/dom/serviceworkers/test/test_privateBrowsing.html +++ b/dom/serviceworkers/test/test_privateBrowsing.html @@ -81,7 +81,7 @@ function cleanup() { function runTest() { if (!steps.length) { - registration.unregister().then(cleanup, cleanup); + registration.unregister().finally(cleanup); return; } diff --git a/dom/serviceworkers/test/test_service_worker_allowed.html b/dom/serviceworkers/test/test_service_worker_allowed.html index a74379f38368..4743596bd45c 100644 --- a/dom/serviceworkers/test/test_service_worker_allowed.html +++ b/dom/serviceworkers/test/test_service_worker_allowed.html @@ -55,7 +55,7 @@ Promise.all([ testPermissiveHeader(), testPreciseHeader(), - ]).then(SimpleTest.finish, SimpleTest.finish); + ]).finally(SimpleTest.finish); }, (x) => { ok(false, "Registration should not succeed, but it did"); SimpleTest.finish(); diff --git a/dom/tests/mochitest/fetch/worker_wrapper.js b/dom/tests/mochitest/fetch/worker_wrapper.js index ec6f88f9bead..2888e5ff4d24 100644 --- a/dom/tests/mochitest/fetch/worker_wrapper.js +++ b/dom/tests/mochitest/fetch/worker_wrapper.js @@ -32,16 +32,15 @@ addEventListener("message", function workerWrapperOnMessage(e) { var data = e.data; function runTestAndReportToClient(event) { - var done = function(res) { + var done = function() { client.postMessage({ type: "finish", context }); - return res; }; try { // runTest() is provided by the test. - var result = runTest().then(done, done); + var promise = runTest().finally(done); if ("waitUntil" in event) { - event.waitUntil(result); + event.waitUntil(promise); } } catch (e) { client.postMessage({ diff --git a/dom/workers/test/browser_worker_use_counters.js b/dom/workers/test/browser_worker_use_counters.js index 1cc43c26761e..46286a1ae939 100644 --- a/dom/workers/test/browser_worker_use_counters.js +++ b/dom/workers/test/browser_worker_use_counters.js @@ -30,7 +30,7 @@ function grabHistogramsFromContent( }; return BrowserTestUtils.waitForCondition(() => { return counter_before != gather()[0]; - }).then(gather, gather); + }).finally(gather); } var check_use_counter_worker = async function( diff --git a/gfx/layers/apz/test/mochitest/helper_fission_animation_styling_in_oopif.html b/gfx/layers/apz/test/mochitest/helper_fission_animation_styling_in_oopif.html index 4b162da3404f..3b062460f866 100644 --- a/gfx/layers/apz/test/mochitest/helper_fission_animation_styling_in_oopif.html +++ b/gfx/layers/apz/test/mochitest/helper_fission_animation_styling_in_oopif.html @@ -16,7 +16,7 @@ FissionTestHelper.startTestPromise .then(loadOOPIFrame("testframe", "helper_fission_empty.html")) .then(waitUntilApzStable) .then(runAsyncContinuation(test)) - .then(FissionTestHelper.subtestDone, FissionTestHelper.subtestDone); + .finally(FissionTestHelper.subtestDone); async function setup_in_oopif() { const setup = function() { diff --git a/gfx/layers/apz/test/mochitest/helper_fission_animation_styling_in_transformed_oopif.html b/gfx/layers/apz/test/mochitest/helper_fission_animation_styling_in_transformed_oopif.html index e6d914e2e625..de4315434640 100644 --- a/gfx/layers/apz/test/mochitest/helper_fission_animation_styling_in_transformed_oopif.html +++ b/gfx/layers/apz/test/mochitest/helper_fission_animation_styling_in_transformed_oopif.html @@ -16,7 +16,7 @@ FissionTestHelper.startTestPromise .then(loadOOPIFrame("testframe", "helper_fission_empty.html")) .then(waitUntilApzStable) .then(runAsyncContinuation(test)) - .then(FissionTestHelper.subtestDone, FissionTestHelper.subtestDone); + .finally(FissionTestHelper.subtestDone); async function setup_in_oopif() { const setup = function() { diff --git a/gfx/layers/apz/test/mochitest/helper_fission_basic.html b/gfx/layers/apz/test/mochitest/helper_fission_basic.html index beee837af9e7..f6b1756e9804 100644 --- a/gfx/layers/apz/test/mochitest/helper_fission_basic.html +++ b/gfx/layers/apz/test/mochitest/helper_fission_basic.html @@ -16,7 +16,7 @@ FissionTestHelper.startTestPromise .then(loadOOPIFrame("testframe", "helper_fission_empty.html")) .then(waitUntilApzStable) .then(runAsyncContinuation(test)) - .then(FissionTestHelper.subtestDone, FissionTestHelper.subtestDone); + .finally(FissionTestHelper.subtestDone); // The actual test diff --git a/gfx/layers/apz/test/mochitest/helper_fission_event_region_override.html b/gfx/layers/apz/test/mochitest/helper_fission_event_region_override.html index b0cc891e2912..013cc7bdd873 100644 --- a/gfx/layers/apz/test/mochitest/helper_fission_event_region_override.html +++ b/gfx/layers/apz/test/mochitest/helper_fission_event_region_override.html @@ -17,7 +17,7 @@ FissionTestHelper.startTestPromise .then(loadOOPIFrame("testframe", "helper_fission_empty.html")) .then(waitUntilApzStable) .then(runAsyncContinuation(test)) - .then(FissionTestHelper.subtestDone, FissionTestHelper.subtestDone); + .finally(FissionTestHelper.subtestDone); // The actual test diff --git a/gfx/layers/apz/test/mochitest/helper_fission_scroll_oopif.html b/gfx/layers/apz/test/mochitest/helper_fission_scroll_oopif.html index 40285f60edcc..87a941b4f029 100644 --- a/gfx/layers/apz/test/mochitest/helper_fission_scroll_oopif.html +++ b/gfx/layers/apz/test/mochitest/helper_fission_scroll_oopif.html @@ -17,7 +17,7 @@ FissionTestHelper.startTestPromise .then(loadOOPIFrame("testframe", "helper_fission_empty.html")) .then(waitUntilApzStable) .then(runAsyncContinuation(test)) - .then(FissionTestHelper.subtestDone, FissionTestHelper.subtestDone); + .finally(FissionTestHelper.subtestDone); let code_for_oopif_to_run = function() { diff --git a/gfx/layers/apz/test/mochitest/helper_fission_transforms.html b/gfx/layers/apz/test/mochitest/helper_fission_transforms.html index c6d11798fb92..5d4762a414de 100644 --- a/gfx/layers/apz/test/mochitest/helper_fission_transforms.html +++ b/gfx/layers/apz/test/mochitest/helper_fission_transforms.html @@ -17,7 +17,7 @@ FissionTestHelper.startTestPromise .then(loadOOPIFrame("testframe", "helper_fission_empty.html")) .then(waitUntilApzStable) .then(runAsyncContinuation(test)) - .then(FissionTestHelper.subtestDone, FissionTestHelper.subtestDone); + .finally(FissionTestHelper.subtestDone); let code_for_oopif_to_run = function() { diff --git a/gfx/layers/apz/test/mochitest/test_bug1464568.html b/gfx/layers/apz/test/mochitest/test_bug1464568.html index 1d279f75a65a..c8f8808c2499 100644 --- a/gfx/layers/apz/test/mochitest/test_bug1464568.html +++ b/gfx/layers/apz/test/mochitest/test_bug1464568.html @@ -20,7 +20,7 @@ // inside an iframe which means we have no control over the root APZC. window.onload = () => { runSubtestsSeriallyInFreshWindows(subtests) - .then(SimpleTest.finish, SimpleTest.finish); + .finally(SimpleTest.finish); }; } diff --git a/gfx/layers/apz/test/mochitest/test_group_checkerboarding.html b/gfx/layers/apz/test/mochitest/test_group_checkerboarding.html index 30c95da5c0e4..80ef10d84813 100644 --- a/gfx/layers/apz/test/mochitest/test_group_checkerboarding.html +++ b/gfx/layers/apz/test/mochitest/test_group_checkerboarding.html @@ -24,7 +24,7 @@ // inside an iframe which means we have no control over the root APZC. window.onload = () => { runSubtestsSeriallyInFreshWindows(subtests) - .then(SimpleTest.finish, SimpleTest.finish); + .finally(SimpleTest.finish); }; } diff --git a/gfx/layers/apz/test/mochitest/test_group_double_tap_zoom.html b/gfx/layers/apz/test/mochitest/test_group_double_tap_zoom.html index 5a086e7b80a0..2fb179d1c5f6 100644 --- a/gfx/layers/apz/test/mochitest/test_group_double_tap_zoom.html +++ b/gfx/layers/apz/test/mochitest/test_group_double_tap_zoom.html @@ -25,7 +25,7 @@ if (isApzEnabled()) { SimpleTest.waitForExplicitFinish(); window.onload = function() { runSubtestsSeriallyInFreshWindows(subtests) - .then(SimpleTest.finish, SimpleTest.finish); + .finally(SimpleTest.finish); }; } diff --git a/gfx/layers/apz/test/mochitest/test_group_fullscreen.html b/gfx/layers/apz/test/mochitest/test_group_fullscreen.html index 6cae68267c27..9578c6004354 100644 --- a/gfx/layers/apz/test/mochitest/test_group_fullscreen.html +++ b/gfx/layers/apz/test/mochitest/test_group_fullscreen.html @@ -23,7 +23,7 @@ // inside an iframe which means we have no control over the root APZC. window.onload = () => { runSubtestsSeriallyInFreshWindows(subtests) - .then(SimpleTest.finish, SimpleTest.finish); + .finally(SimpleTest.finish); }; } diff --git a/gfx/layers/apz/test/mochitest/test_group_hittest.html b/gfx/layers/apz/test/mochitest/test_group_hittest.html index 4fb80c06f15c..5ea40c517c36 100644 --- a/gfx/layers/apz/test/mochitest/test_group_hittest.html +++ b/gfx/layers/apz/test/mochitest/test_group_hittest.html @@ -47,7 +47,7 @@ if (isApzEnabled()) { SimpleTest.waitForExplicitFinish(); window.onload = function() { runSubtestsSeriallyInFreshWindows(subtests) - .then(SimpleTest.finish, SimpleTest.finish); + .finally(SimpleTest.finish); }; } diff --git a/gfx/layers/apz/test/mochitest/test_group_keyboard.html b/gfx/layers/apz/test/mochitest/test_group_keyboard.html index 7524b9759f7e..439e208ecd62 100644 --- a/gfx/layers/apz/test/mochitest/test_group_keyboard.html +++ b/gfx/layers/apz/test/mochitest/test_group_keyboard.html @@ -17,7 +17,7 @@ var subtests = [ SimpleTest.waitForExplicitFinish(); window.onload = function() { runSubtestsSeriallyInFreshWindows(subtests) - .then(SimpleTest.finish, SimpleTest.finish); + .finally(SimpleTest.finish); }; } else { SimpleTest.ok(true, "Keyboard APZ is disabled"); diff --git a/gfx/layers/apz/test/mochitest/test_group_mainthread.html b/gfx/layers/apz/test/mochitest/test_group_mainthread.html index cb8ed68a1d17..6b24a544d0f2 100644 --- a/gfx/layers/apz/test/mochitest/test_group_mainthread.html +++ b/gfx/layers/apz/test/mochitest/test_group_mainthread.html @@ -17,7 +17,7 @@ if (isApzEnabled()) { SimpleTest.waitForExplicitFinish(); window.onload = function() { runSubtestsSeriallyInFreshWindows(subtests) - .then(SimpleTest.finish, SimpleTest.finish); + .finally(SimpleTest.finish); }; } diff --git a/gfx/layers/apz/test/mochitest/test_group_minimum_scale_size.html b/gfx/layers/apz/test/mochitest/test_group_minimum_scale_size.html index 7b9991841748..6b9e90667ac2 100644 --- a/gfx/layers/apz/test/mochitest/test_group_minimum_scale_size.html +++ b/gfx/layers/apz/test/mochitest/test_group_minimum_scale_size.html @@ -46,7 +46,7 @@ if (isApzEnabled()) { // inside an iframe which means we have no control over the root APZC. window.onload = () => { runSubtestsSeriallyInFreshWindows(subtests) - .then(SimpleTest.finish, SimpleTest.finish); + .finally(SimpleTest.finish); }; } diff --git a/gfx/layers/apz/test/mochitest/test_group_mouseevents.html b/gfx/layers/apz/test/mochitest/test_group_mouseevents.html index 649f5f7b6744..a3f9d359ea1a 100644 --- a/gfx/layers/apz/test/mochitest/test_group_mouseevents.html +++ b/gfx/layers/apz/test/mochitest/test_group_mouseevents.html @@ -47,7 +47,7 @@ if (isApzEnabled()) { SimpleTest.expectAssertions(0, 2); // from helper_bug1550510.html, bug 1232856 window.onload = function() { runSubtestsSeriallyInFreshWindows(subtests) - .then(SimpleTest.finish, SimpleTest.finish); + .finally(SimpleTest.finish); }; } diff --git a/gfx/layers/apz/test/mochitest/test_group_overrides.html b/gfx/layers/apz/test/mochitest/test_group_overrides.html index de7c85f52ca8..f8c492e97491 100644 --- a/gfx/layers/apz/test/mochitest/test_group_overrides.html +++ b/gfx/layers/apz/test/mochitest/test_group_overrides.html @@ -26,7 +26,7 @@ if (isApzEnabled()) { SimpleTest.waitForExplicitFinish(); window.onload = function() { runSubtestsSeriallyInFreshWindows(subtests) - .then(SimpleTest.finish, SimpleTest.finish); + .finally(SimpleTest.finish); }; } diff --git a/gfx/layers/apz/test/mochitest/test_group_pointerevents.html b/gfx/layers/apz/test/mochitest/test_group_pointerevents.html index 8c4060d8b886..305f2d9e4fbd 100644 --- a/gfx/layers/apz/test/mochitest/test_group_pointerevents.html +++ b/gfx/layers/apz/test/mochitest/test_group_pointerevents.html @@ -29,7 +29,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1285070 SimpleTest.waitForExplicitFinish(); window.onload = function() { runSubtestsSeriallyInFreshWindows(subtests) - .then(SimpleTest.finish, SimpleTest.finish); + .finally(SimpleTest.finish); }; } diff --git a/gfx/layers/apz/test/mochitest/test_group_scroll_snap.html b/gfx/layers/apz/test/mochitest/test_group_scroll_snap.html index ff079fc607f3..e686419b55f8 100644 --- a/gfx/layers/apz/test/mochitest/test_group_scroll_snap.html +++ b/gfx/layers/apz/test/mochitest/test_group_scroll_snap.html @@ -25,7 +25,7 @@ if (isApzEnabled()) { SimpleTest.waitForExplicitFinish(); window.onload = function() { runSubtestsSeriallyInFreshWindows(subtests) - .then(SimpleTest.finish, SimpleTest.finish); + .finally(SimpleTest.finish); }; } diff --git a/gfx/layers/apz/test/mochitest/test_group_touchevents-2.html b/gfx/layers/apz/test/mochitest/test_group_touchevents-2.html index 59838545ddf8..4cb44bd35416 100644 --- a/gfx/layers/apz/test/mochitest/test_group_touchevents-2.html +++ b/gfx/layers/apz/test/mochitest/test_group_touchevents-2.html @@ -56,7 +56,7 @@ if (isApzEnabled()) { SimpleTest.waitForExplicitFinish(); window.onload = function() { runSubtestsSeriallyInFreshWindows(subtests) - .then(SimpleTest.finish, SimpleTest.finish); + .finally(SimpleTest.finish); }; } diff --git a/gfx/layers/apz/test/mochitest/test_group_touchevents-3.html b/gfx/layers/apz/test/mochitest/test_group_touchevents-3.html index f39807154456..153c4682c36a 100644 --- a/gfx/layers/apz/test/mochitest/test_group_touchevents-3.html +++ b/gfx/layers/apz/test/mochitest/test_group_touchevents-3.html @@ -36,7 +36,7 @@ if (isApzEnabled()) { SimpleTest.waitForExplicitFinish(); window.onload = function() { runSubtestsSeriallyInFreshWindows(subtests) - .then(SimpleTest.finish, SimpleTest.finish); + .finally(SimpleTest.finish); }; } diff --git a/gfx/layers/apz/test/mochitest/test_group_touchevents-4.html b/gfx/layers/apz/test/mochitest/test_group_touchevents-4.html index 93b86d891f00..f2c5df99d3b5 100644 --- a/gfx/layers/apz/test/mochitest/test_group_touchevents-4.html +++ b/gfx/layers/apz/test/mochitest/test_group_touchevents-4.html @@ -34,7 +34,7 @@ if (isApzEnabled()) { SimpleTest.waitForExplicitFinish(); window.onload = function() { runSubtestsSeriallyInFreshWindows(subtests) - .then(SimpleTest.finish, SimpleTest.finish); + .finally(SimpleTest.finish); }; } diff --git a/gfx/layers/apz/test/mochitest/test_group_touchevents.html b/gfx/layers/apz/test/mochitest/test_group_touchevents.html index 32466a5730d1..65d8f49cab54 100644 --- a/gfx/layers/apz/test/mochitest/test_group_touchevents.html +++ b/gfx/layers/apz/test/mochitest/test_group_touchevents.html @@ -44,7 +44,7 @@ if (isApzEnabled()) { SimpleTest.waitForExplicitFinish(); window.onload = function() { runSubtestsSeriallyInFreshWindows(subtests) - .then(SimpleTest.finish, SimpleTest.finish); + .finally(SimpleTest.finish); }; } diff --git a/gfx/layers/apz/test/mochitest/test_group_wheelevents.html b/gfx/layers/apz/test/mochitest/test_group_wheelevents.html index a16b8f2c1241..30e616d904f0 100644 --- a/gfx/layers/apz/test/mochitest/test_group_wheelevents.html +++ b/gfx/layers/apz/test/mochitest/test_group_wheelevents.html @@ -48,7 +48,7 @@ if (isApzEnabled()) { SimpleTest.waitForExplicitFinish(); window.onload = function() { runSubtestsSeriallyInFreshWindows(subtests) - .then(SimpleTest.finish, SimpleTest.finish); + .finally(SimpleTest.finish); }; } diff --git a/gfx/layers/apz/test/mochitest/test_group_zoom-2.html b/gfx/layers/apz/test/mochitest/test_group_zoom-2.html index b623a46872dd..875eaeb819b4 100644 --- a/gfx/layers/apz/test/mochitest/test_group_zoom-2.html +++ b/gfx/layers/apz/test/mochitest/test_group_zoom-2.html @@ -44,7 +44,7 @@ if (isApzEnabled()) { SimpleTest.waitForExplicitFinish(); window.onload = function() { runSubtestsSeriallyInFreshWindows(subtests) - .then(SimpleTest.finish, SimpleTest.finish); + .finally(SimpleTest.finish); }; } diff --git a/gfx/layers/apz/test/mochitest/test_group_zoom.html b/gfx/layers/apz/test/mochitest/test_group_zoom.html index 7b6c65313a22..426e28fee5ce 100644 --- a/gfx/layers/apz/test/mochitest/test_group_zoom.html +++ b/gfx/layers/apz/test/mochitest/test_group_zoom.html @@ -63,7 +63,7 @@ if (isApzEnabled()) { SimpleTest.waitForExplicitFinish(); window.onload = function() { runSubtestsSeriallyInFreshWindows(subtests) - .then(SimpleTest.finish, SimpleTest.finish); + .finally(SimpleTest.finish); }; } diff --git a/gfx/layers/apz/test/mochitest/test_group_zoomToFocusedInput.html b/gfx/layers/apz/test/mochitest/test_group_zoomToFocusedInput.html index fdd0c73475f3..a5f7438965ae 100644 --- a/gfx/layers/apz/test/mochitest/test_group_zoomToFocusedInput.html +++ b/gfx/layers/apz/test/mochitest/test_group_zoomToFocusedInput.html @@ -16,7 +16,7 @@ if (isApzEnabled()) { SimpleTest.waitForExplicitFinish(); window.onload = function() { runSubtestsSeriallyInFreshWindows(subtests) - .then(SimpleTest.finish, SimpleTest.finish); + .finally(SimpleTest.finish); }; } diff --git a/mobile/android/components/geckoview/GeckoViewPermission.js b/mobile/android/components/geckoview/GeckoViewPermission.js index 6d9e7444a6fe..eec0e44d4bfe 100644 --- a/mobile/android/components/geckoview/GeckoViewPermission.js +++ b/mobile/android/components/geckoview/GeckoViewPermission.js @@ -88,7 +88,7 @@ GeckoViewPermission.prototype = { }; if (dispatcher) { - this.getAppPermissions(dispatcher, perms).then(callback, callback); + this.getAppPermissions(dispatcher, perms).finally(callback); } else { // No dispatcher; just bail. callback(); diff --git a/testing/marionette/stream-utils.js b/testing/marionette/stream-utils.js index 5988226f6f8b..d5056eb1822a 100644 --- a/testing/marionette/stream-utils.js +++ b/testing/marionette/stream-utils.js @@ -97,7 +97,8 @@ function StreamCopier(input, output, length) { // or fail scenarios, but also emit events (due to the EventEmitter) // for other states, like progress. this.then = this._deferred.promise.then.bind(this._deferred.promise); - this.then(this._destroy, this._destroy); + this.finally = this._deferred.promise.finally.bind(this._deferred.promise); + this.finally(this._destroy); // Stream ready callback starts as |_copy|, but may switch to |_flush| // at end if flushing would block the output stream. diff --git a/testing/xpcshell/head.js b/testing/xpcshell/head.js index 4a1512f43105..ebcd9a45f902 100644 --- a/testing/xpcshell/head.js +++ b/testing/xpcshell/head.js @@ -1639,7 +1639,7 @@ try { let complete = false; let doComplete = () => (complete = true); - _TelemetryController.testRegisterJsProbes().then(doComplete, doComplete); + _TelemetryController.testRegisterJsProbes().finally(doComplete); _Services.tm.spinEventLoopUntil(() => complete); } } catch (e) { diff --git a/toolkit/components/asyncshutdown/AsyncShutdown.jsm b/toolkit/components/asyncshutdown/AsyncShutdown.jsm index 976f9b3c836c..e1c422954084 100644 --- a/toolkit/components/asyncshutdown/AsyncShutdown.jsm +++ b/toolkit/components/asyncshutdown/AsyncShutdown.jsm @@ -288,10 +288,7 @@ function looseTimer(delay) { ); // Ensure that the timer is both canceled once we are done with it // and not garbage-collected until then. - deferred.promise.then( - () => timer.cancel(), - () => timer.cancel() - ); + deferred.promise.finally(() => timer.cancel()); return deferred; } diff --git a/toolkit/components/downloads/DownloadCore.jsm b/toolkit/components/downloads/DownloadCore.jsm index 7baefca75f7d..b4b63b98eda9 100644 --- a/toolkit/components/downloads/DownloadCore.jsm +++ b/toolkit/components/downloads/DownloadCore.jsm @@ -802,7 +802,7 @@ Download.prototype = { if (!this._promiseCanceled) { // Start a new cancellation request. this._promiseCanceled = new Promise(resolve => { - this._currentAttempt.then(resolve, resolve); + this._currentAttempt.finally(resolve); }); // The download can already be restarted. diff --git a/toolkit/components/extensions/ExtensionParent.jsm b/toolkit/components/extensions/ExtensionParent.jsm index f7f3d6dcf3f5..05fe56cc5a68 100644 --- a/toolkit/components/extensions/ExtensionParent.jsm +++ b/toolkit/components/extensions/ExtensionParent.jsm @@ -1033,7 +1033,7 @@ ParentAPIManager = { let remove = () => { listenerPromises.delete(promise); }; - promise.then(remove, remove); + promise.finally(remove); } let handler = await promise; diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_contexts.js b/toolkit/components/extensions/test/xpcshell/test_ext_contexts.js index 7c06fe33a52c..7953d91dbfe8 100644 --- a/toolkit/components/extensions/test/xpcshell/test_ext_contexts.js +++ b/toolkit/components/extensions/test/xpcshell/test_ext_contexts.js @@ -48,6 +48,8 @@ add_task(async function test_post_unload_promises() { context.wrapPromise(Promise.resolve("resolved")).then(fail); + // We care about which way we fail here (if we do), so we don't want to use finally. + // eslint-disable-next-line mozilla/use-finally context.wrapPromise(Promise.reject({ message: "rejected" })).then(fail, fail); context.unload(); diff --git a/toolkit/components/osfile/tests/xpcshell/test_osfile_async.js b/toolkit/components/osfile/tests/xpcshell/test_osfile_async.js index 7c2e2db06b32..d31f89ff44a8 100644 --- a/toolkit/components/osfile/tests/xpcshell/test_osfile_async.js +++ b/toolkit/components/osfile/tests/xpcshell/test_osfile_async.js @@ -9,5 +9,5 @@ const { OS } = ChromeUtils.import("resource://gre/modules/osfile.jsm"); function run_test() { do_test_pending(); - OS.File.getCurrentDirectory().then(do_test_finished, do_test_finished); + OS.File.getCurrentDirectory().finally(do_test_finished); } diff --git a/toolkit/components/telemetry/app/ClientID.jsm b/toolkit/components/telemetry/app/ClientID.jsm index 35b8c13d320b..53f06bf93092 100644 --- a/toolkit/components/telemetry/app/ClientID.jsm +++ b/toolkit/components/telemetry/app/ClientID.jsm @@ -150,7 +150,7 @@ var ClientIDImpl = { this._loadClientIdTask = this._doLoadClientID(); let clear = () => (this._loadClientIdTask = null); - this._loadClientIdTask.then(clear, clear); + this._loadClientIdTask.finally(clear); return this._loadClientIdTask; }, @@ -330,7 +330,7 @@ var ClientIDImpl = { // Asynchronous calls to getClientID will also be blocked on this. this._removeClientIdTask = this._doRemoveClientID(); let clear = () => (this._removeClientIdTask = null); - this._removeClientIdTask.then(clear, clear); + this._removeClientIdTask.finally(clear); await this._removeClientIdTask; diff --git a/toolkit/components/telemetry/app/TelemetrySend.jsm b/toolkit/components/telemetry/app/TelemetrySend.jsm index 63002d133563..4c37de996ee1 100644 --- a/toolkit/components/telemetry/app/TelemetrySend.jsm +++ b/toolkit/components/telemetry/app/TelemetrySend.jsm @@ -469,7 +469,7 @@ var SendScheduler = { if (!this._sendTask) { this._sendTask = this._doSendTask(); let clear = () => (this._sendTask = null); - this._sendTask.then(clear, clear); + this._sendTask.finally(clear); } else if (immediately) { CancellableTimeout.cancelTimeout(); } @@ -1521,7 +1521,7 @@ var TelemetrySendImpl = { */ _trackPendingPingTask(promise) { let clear = () => this._pendingPingActivity.delete(promise); - promise.then(clear, clear); + promise.finally(clear); this._pendingPingActivity.add(promise); }, diff --git a/toolkit/components/telemetry/app/TelemetryStorage.jsm b/toolkit/components/telemetry/app/TelemetryStorage.jsm index 12a98298fe41..a9e88c095aa8 100644 --- a/toolkit/components/telemetry/app/TelemetryStorage.jsm +++ b/toolkit/components/telemetry/app/TelemetryStorage.jsm @@ -856,7 +856,7 @@ var TelemetryStorageImpl = { // Make sure to clear |_cleanArchiveTask| once done. let clear = () => (this._cleanArchiveTask = null); // Since there's no archive cleaning task running, start it. - this._cleanArchiveTask = this._cleanArchive().then(clear, clear); + this._cleanArchiveTask = this._cleanArchive().finally(clear); return this._cleanArchiveTask; }, @@ -1541,7 +1541,7 @@ var TelemetryStorageImpl = { */ _trackPendingPingSaveTask(promise) { let clear = () => this._activePendingPingSaves.delete(promise); - promise.then(clear, clear); + promise.finally(clear); this._activePendingPingSaves.add(promise); }, diff --git a/toolkit/components/thumbnails/BackgroundPageThumbs.jsm b/toolkit/components/thumbnails/BackgroundPageThumbs.jsm index 620c63efec8e..99ab2495fc60 100644 --- a/toolkit/components/thumbnails/BackgroundPageThumbs.jsm +++ b/toolkit/components/thumbnails/BackgroundPageThumbs.jsm @@ -602,8 +602,7 @@ Capture.prototype = { return; } - PageThumbs._store(this.url, data.finalURL, data.imageData, true).then( - done, + PageThumbs._store(this.url, data.finalURL, data.imageData, true).finally( done ); }, diff --git a/toolkit/components/url-classifier/tests/mochitest/test_donottrack.html b/toolkit/components/url-classifier/tests/mochitest/test_donottrack.html index 4c01946f9852..444a72b8d288 100644 --- a/toolkit/components/url-classifier/tests/mochitest/test_donottrack.html +++ b/toolkit/components/url-classifier/tests/mochitest/test_donottrack.html @@ -127,7 +127,7 @@ let loop = function loop(index) { loop(index + 1); }; let result = executeTest(test); - result.then(next, next); + result.finally(next); }; SimpleTest.waitForExplicitFinish(); diff --git a/toolkit/modules/Sqlite.jsm b/toolkit/modules/Sqlite.jsm index 48b33b864820..bd850ec1c335 100644 --- a/toolkit/modules/Sqlite.jsm +++ b/toolkit/modules/Sqlite.jsm @@ -723,7 +723,7 @@ ConnectionData.prototype = Object.freeze({ shrinkMemory() { this._log.info("Shrinking memory usage."); let onShrunk = this._clearIdleShrinkTimer.bind(this); - return this.execute("PRAGMA shrink_memory").then(onShrunk, onShrunk); + return this.execute("PRAGMA shrink_memory").finally(onShrunk); }, discardCachedStatements() { diff --git a/toolkit/modules/tests/xpcshell/test_Promise.js b/toolkit/modules/tests/xpcshell/test_Promise.js index 8d5b00df3939..d37cbf14bdb2 100644 --- a/toolkit/modules/tests/xpcshell/test_Promise.js +++ b/toolkit/modules/tests/xpcshell/test_Promise.js @@ -31,7 +31,7 @@ var run_promise_tests = function run_promise_tests(tests, cb) { }); }; let result = test(); - result.then(next, next); + result.finally(next); }; return loop(0); };