Bug 1864821 - Replace PromiseUtils.defer() with Promise.withResolvers() in browser window scopes. r=Gijs,extension-reviewers,application-update-reviewers,rpl,nalexander

Differential Revision: https://phabricator.services.mozilla.com/D197486
This commit is contained in:
Mark Banner 2024-01-05 09:22:33 +00:00
parent 070a3d3ad1
commit 7a4d095f30
26 changed files with 45 additions and 47 deletions

View file

@ -88,7 +88,7 @@ var SidebarUI = {
*/
_observer: null,
_initDeferred: PromiseUtils.defer(),
_initDeferred: Promise.withResolvers(),
get promiseInitialized() {
return this._initDeferred.promise;

View file

@ -60,7 +60,6 @@ ChromeUtils.defineESModuleGetters(this, {
Pocket: "chrome://pocket/content/Pocket.sys.mjs",
PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs",
ProcessHangMonitor: "resource:///modules/ProcessHangMonitor.sys.mjs",
PromiseUtils: "resource://gre/modules/PromiseUtils.sys.mjs",
PromptUtils: "resource://gre/modules/PromptUtils.sys.mjs",
ReaderMode: "resource://gre/modules/ReaderMode.sys.mjs",
ResetPBMPanel: "resource:///modules/ResetPBMPanel.sys.mjs",
@ -2580,7 +2579,7 @@ var gBrowserInit = {
ChromeUtils.defineLazyGetter(
gBrowserInit,
"_firstContentWindowPaintDeferred",
() => PromiseUtils.defer()
() => Promise.withResolvers()
);
gBrowserInit.idleTasksFinishedPromise = new Promise(resolve => {

View file

@ -12,7 +12,7 @@ add_task(async () => {
let tab = await preparePendingTab();
let deferredTab = PromiseUtils.defer();
let deferredTab = Promise.withResolvers();
let win = gBrowser.replaceTabWithWindow(tab);
win.addEventListener(

View file

@ -54,7 +54,7 @@ function promiseNextTick() {
* @return {Promise} Resolved when the notification is displayed.
*/
function promiseWaitForAlertActive(aNotificationBox) {
let deferred = PromiseUtils.defer();
let deferred = Promise.withResolvers();
aNotificationBox.stack.addEventListener(
"AlertActive",
function () {
@ -71,7 +71,7 @@ function promiseWaitForAlertActive(aNotificationBox) {
* @return {Promise} Resolved when the notification is closed.
*/
function promiseWaitForNotificationClose(aNotification) {
let deferred = PromiseUtils.defer();
let deferred = Promise.withResolvers();
waitForNotificationClose(aNotification, deferred.resolve);
return deferred.promise;
}

View file

@ -123,7 +123,7 @@ async function promiseAnimationFrame(win = window) {
}
async function promisePopupNotShown(id, win = window) {
let deferred = PromiseUtils.defer();
let deferred = Promise.withResolvers();
function listener(e) {
deferred.reject("Unexpected popupshown");
}
@ -145,7 +145,7 @@ async function promisePopupNotShown(id, win = window) {
// TODO (Bug 1700780): Why is this necessary? Without this trick the test
// fails intermittently on Ubuntu.
function promiseStableResize(expectedWidth, win = window) {
let deferred = PromiseUtils.defer();
let deferred = Promise.withResolvers();
let id;
function listener() {
win.clearTimeout(id);

View file

@ -51,7 +51,7 @@ const TEST_DATA_SHORT = "This test string is downloaded.";
/**
* This is an internal reference that should not be used directly by tests.
*/
var _gDeferResponses = PromiseUtils.defer();
var _gDeferResponses = Promise.withResolvers();
/**
* Ensures that all the interruptible requests started after this function is
@ -79,7 +79,7 @@ function mustInterruptResponses() {
_gDeferResponses.resolve();
info("Interruptible responses will be blocked midway.");
_gDeferResponses = PromiseUtils.defer();
_gDeferResponses = Promise.withResolvers();
}
/**

View file

@ -211,7 +211,7 @@ async function withWindowOverflowed(
// added.
let listener = {
_remainingBrowserActions: NUM_EXTENSIONS,
_deferred: PromiseUtils.defer(),
_deferred: Promise.withResolvers(),
get promise() {
return this._deferred.promise;
@ -257,7 +257,7 @@ async function withWindowOverflowed(
let widgetOverflowListener = {
_remainingOverflowables:
browserActionsInNavBar.length + DEFAULT_WIDGET_IDS.length,
_deferred: PromiseUtils.defer(),
_deferred: Promise.withResolvers(),
get promise() {
return this._deferred.promise;

View file

@ -1482,7 +1482,7 @@ class PlacesToolbar extends PlacesViewBase {
// Container is the toolbar itself.
let instance = (this._rebuildingInstance = {});
if (!this._rebuilding) {
this._rebuilding = PromiseUtils.defer();
this._rebuilding = Promise.withResolvers();
}
this._rebuild()
.catch(console.error)

View file

@ -18,7 +18,6 @@ ChromeUtils.defineESModuleGetters(this, {
PlacesTransactions: "resource://gre/modules/PlacesTransactions.sys.mjs",
PlacesUIUtils: "resource:///modules/PlacesUIUtils.sys.mjs",
PlacesUtils: "resource://gre/modules/PlacesUtils.sys.mjs",
PromiseUtils: "resource://gre/modules/PromiseUtils.sys.mjs",
});
var gEditItemOverlay = {
@ -257,7 +256,7 @@ var gEditItemOverlay = {
* "title", "location", "keyword", "folderPicker".
*/
async initPanel(aInfo) {
const deferred = (this._initPanelDeferred = PromiseUtils.defer());
const deferred = (this._initPanelDeferred = Promise.withResolvers());
try {
if (typeof aInfo != "object" || aInfo === null) {
throw new Error("aInfo must be an object.");
@ -697,7 +696,7 @@ var gEditItemOverlay = {
* Handle tag list updates from the input field or selector box.
*/
async _updateTags() {
const deferred = (this._updateTagsDeferred = PromiseUtils.defer());
const deferred = (this._updateTagsDeferred = Promise.withResolvers());
try {
const inputTags = this._getTagsArrayFromTagsInputField();
const isLibraryWindow =

View file

@ -10,8 +10,8 @@ const RIGHT_URL = BASE_URL + "/frameRight.html";
add_task(async function test() {
// We must wait for both frames to be loaded and the visits to be registered.
let deferredLeftFrameVisit = PromiseUtils.defer();
let deferredRightFrameVisit = PromiseUtils.defer();
let deferredLeftFrameVisit = Promise.withResolvers();
let deferredRightFrameVisit = Promise.withResolvers();
Services.obs.addObserver(function observe(subject) {
(async function () {

View file

@ -19,7 +19,7 @@ add_task(async function test() {
));
await BrowserTestUtils.browserLoaded(tab.linkedBrowser);
let promiseFinished = PromiseUtils.defer();
let promiseFinished = Promise.withResolvers();
setTimeout(function () {
let notificationBox = aWindow.gBrowser.getNotificationBox();
let notification =

View file

@ -32,7 +32,7 @@ var tests = [
let highlight = document.getElementById("UITourHighlight");
let browserStartupDeferred = PromiseUtils.defer();
let browserStartupDeferred = Promise.withResolvers();
Services.obs.addObserver(function onBrowserDelayedStartup(aWindow) {
Services.obs.removeObserver(
onBrowserDelayedStartup,

View file

@ -20,7 +20,7 @@ add_setup(async function () {
class NoResponseTestProvider extends UrlbarTestUtils.TestProvider {
constructor() {
super({ name: "TestProviderNoResponse ", results: [] });
this.#deferred = PromiseUtils.defer();
this.#deferred = Promise.withResolvers();
}
get type() {
@ -45,7 +45,7 @@ const noResponseProvider = new NoResponseTestProvider();
class AnotherHeuristicProvider extends UrlbarTestUtils.TestProvider {
constructor({ results }) {
super({ name: "TestProviderAnotherHeuristic ", results });
this.#deferred = PromiseUtils.defer();
this.#deferred = Promise.withResolvers();
}
get type() {

View file

@ -9,8 +9,8 @@ add_task(async function () {
// Override the browser's `prepareToChangeRemoteness` so that we can delay
// the process switch for an indefinite amount of time. This will allow us
// to control the timing of the resolve call to trigger the bug.
let prepareToChangeCalled = PromiseUtils.defer();
let finishSwitch = PromiseUtils.defer();
let prepareToChangeCalled = Promise.withResolvers();
let finishSwitch = Promise.withResolvers();
let oldPrepare = browser.prepareToChangeRemoteness;
browser.prepareToChangeRemoteness = async () => {
prepareToChangeCalled.resolve();
@ -34,7 +34,7 @@ add_task(async function () {
// finishes.
info("Creating new tab loaded in file URI process");
let fileProcess;
let browserParentDestroyed = PromiseUtils.defer();
let browserParentDestroyed = Promise.withResolvers();
await BrowserTestUtils.withNewTab(
uriString,
async function (otherBrowser) {

View file

@ -19,7 +19,7 @@ async function createAndShutdownContentProcess(url) {
// Launch a new process and load url. Sets up a promise that will resolve
// on shutdown.
let browserDestroyed = PromiseUtils.defer();
let browserDestroyed = Promise.withResolvers();
await BrowserTestUtils.withNewTab(
{
gBrowser,

View file

@ -141,7 +141,7 @@ decorate_task(
withStub(Normandy, "finishInit"),
async function testStartupDelayed({ finishInitStub }) {
let originalDeferred = Normandy.uiAvailableNotificationObserved;
let mockUiAvailableDeferred = PromiseUtils.defer();
let mockUiAvailableDeferred = Promise.withResolvers();
Normandy.uiAvailableNotificationObserved = mockUiAvailableDeferred;
let initPromise = Normandy.init();

View file

@ -5,7 +5,7 @@ const { NormandyAddonManager } = ChromeUtils.importESModule(
);
decorate_task(ensureAddonCleanup(), async function download_and_install() {
const applyDeferred = PromiseUtils.defer();
const applyDeferred = Promise.withResolvers();
const [addonId, addonVersion] = await NormandyAddonManager.downloadAndInstall(
{
@ -37,8 +37,8 @@ decorate_task(ensureAddonCleanup(), async function download_and_install() {
});
decorate_task(ensureAddonCleanup(), async function id_mismatch() {
const applyDeferred = PromiseUtils.defer();
const undoDeferred = PromiseUtils.defer();
const applyDeferred = Promise.withResolvers();
const undoDeferred = Promise.withResolvers();
let error;
@ -87,8 +87,8 @@ decorate_task(ensureAddonCleanup(), async function id_mismatch() {
});
decorate_task(ensureAddonCleanup(), async function version_mismatch() {
const applyDeferred = PromiseUtils.defer();
const undoDeferred = PromiseUtils.defer();
const applyDeferred = Promise.withResolvers();
const undoDeferred = Promise.withResolvers();
let error;
@ -137,8 +137,8 @@ decorate_task(ensureAddonCleanup(), async function version_mismatch() {
});
decorate_task(ensureAddonCleanup(), async function download_failure() {
const applyDeferred = PromiseUtils.defer();
const undoDeferred = PromiseUtils.defer();
const applyDeferred = Promise.withResolvers();
const undoDeferred = Promise.withResolvers();
let error;

View file

@ -823,7 +823,7 @@ decorate_task(
Services.obs.addObserver(observer, "recipe-runner:start");
const originalPrefsApplied = Normandy.defaultPrefsHaveBeenApplied;
Normandy.defaultPrefsHaveBeenApplied = PromiseUtils.defer();
Normandy.defaultPrefsHaveBeenApplied = Promise.withResolvers();
const recipeRunnerPromise = RecipeRunner.run();
await Promise.resolve();

View file

@ -745,7 +745,7 @@ add_task(async function test_nimbus_about_studies_rollout() {
});
add_task(async function test_getStudiesEnabled() {
RecipeRunner.initializedPromise = PromiseUtils.defer();
RecipeRunner.initializedPromise = Promise.withResolvers();
let promise = AboutPages.aboutStudies.getStudiesEnabled();
RecipeRunner.initializedPromise.resolve();

View file

@ -10,8 +10,8 @@ const DIALOG_DELAY =
Services.prefs.getIntPref("security.dialog_enable_delay") + 200;
let UCTObserver = {
opened: PromiseUtils.defer(),
closed: PromiseUtils.defer(),
opened: Promise.withResolvers(),
closed: Promise.withResolvers(),
observe(aSubject, aTopic, aData) {
let win = aSubject;

View file

@ -35,8 +35,8 @@ add_task(async function test_unknownContentType_dialog_layout() {
for (let test of tests) {
let UCTObserver = {
opened: PromiseUtils.defer(),
closed: PromiseUtils.defer(),
opened: Promise.withResolvers(),
closed: Promise.withResolvers(),
observe(aSubject, aTopic, aData) {
let win = aSubject;

View file

@ -331,7 +331,7 @@ add_task(async function testUpdateButton() {
let item = getAddonCard(win, addon.id);
gInstalledAddonId = "";
gInstallDeferred = PromiseUtils.defer();
gInstallDeferred = Promise.withResolvers();
let loaded = waitForViewLoad(win);
item.querySelector("[action=expand]").click();

View file

@ -148,9 +148,9 @@ function mockLangpackInstall() {
XPIInstall.stageLangpacksForAppUpdate = original;
});
let stagingCall = PromiseUtils.defer();
let stagingCall = Promise.withResolvers();
XPIInstall.stageLangpacksForAppUpdate = (appVersion, platformVersion) => {
let result = PromiseUtils.defer();
let result = Promise.withResolvers();
stagingCall.resolve({
appVersion,
platformVersion,

View file

@ -143,7 +143,7 @@ async function createDownloadTest(
let oldLaunchFile = DownloadIntegration.launchFile;
let fileLaunched = null;
if (expectLaunch) {
fileLaunched = PromiseUtils.defer();
fileLaunched = Promise.withResolvers();
DownloadIntegration.launchFile = () => {
ok(
expectLaunch,

View file

@ -46,14 +46,14 @@ add_task(async function test_check_filename_urlescape() {
);
pendingTest = "save browser";
pendingPromise = PromiseUtils.defer();
pendingPromise = Promise.withResolvers();
// First try to save the browser
saveBrowser(browser);
await pendingPromise.promise;
// Next, try the context menu:
pendingTest = "save from context menu";
pendingPromise = PromiseUtils.defer();
pendingPromise = Promise.withResolvers();
let menu = document.getElementById("contentAreaContextMenu");
let menuShown = BrowserTestUtils.waitForEvent(menu, "popupshown");
BrowserTestUtils.synthesizeMouse(

View file

@ -178,7 +178,7 @@ add_task(
const { expectTab, expectLaunch, description, expectUCT } = testCase;
let oldLaunchFile = DownloadIntegration.launchFile;
let fileLaunched = PromiseUtils.defer();
let fileLaunched = Promise.withResolvers();
DownloadIntegration.launchFile = () => {
ok(
expectLaunch,