Bug 1965258 - Clear active infobar when user closes the window the infobar is displayed in before interacting with it a=dmeehan DONTBUILD

Original Revision: https://phabricator.services.mozilla.com/D250465

Differential Revision: https://phabricator.services.mozilla.com/D252856
This commit is contained in:
Meg Viar
2025-06-06 19:44:41 +00:00
committed by dmeehan@mozilla.com
parent b02be1715d
commit 39f4cca70c
2 changed files with 36 additions and 0 deletions

View File

@@ -280,6 +280,17 @@ export const InfoBar = {
} }
if (!universalInNewWin) { if (!universalInNewWin) {
this._activeInfobar = { message, dispatch }; this._activeInfobar = { message, dispatch };
// If the window closes before the user interacts with the active infobar,
// clear it
win.addEventListener(
"unload",
() => {
if (InfoBar._activeInfobar?.message === message) {
InfoBar._activeInfobar = null;
}
},
{ once: true }
);
} }
return notification; return notification;

View File

@@ -526,3 +526,28 @@ add_task(async function test_dismissable_button_action() {
Assert.ok(!infobar.notification, "Infobar was dismissed after button click"); Assert.ok(!infobar.notification, "Infobar was dismissed after button click");
}); });
add_task(async function clear_activeInfobar_on_window_close() {
let message = (await CFRMessageProvider.getMessages()).find(
m => m.id === "INFOBAR_ACTION_86"
);
Assert.ok(message.id, "Found the message");
let dispatchStub = sinon.stub();
let testWin = await BrowserTestUtils.openNewBrowserWindow();
let testBrowser = testWin.gBrowser.selectedBrowser;
await InfoBar.showInfoBarMessage(testBrowser, message, dispatchStub);
Assert.ok(
InfoBar._activeInfobar,
"InfoBar._activeInfobar should be set after showing infobar"
);
await BrowserTestUtils.closeWindow(testWin);
await BrowserTestUtils.waitForCondition(
() => !InfoBar._activeInfobar,
"InfoBar._activeInfobar should be cleared when the window unloads"
);
testWin.close();
sinon.restore();
});