fune/browser/base/content/test/alerts/browser_notification_close.js
Stanca Serban a5a1a182a7 Backed out 5 changesets (bug 1552815) for causing bp-nu bustages in nsFaviconService.cpp. CLOSED TREE
Backed out changeset 4be83e948d32 (bug 1552815)
Backed out changeset 0b2d40719586 (bug 1552815)
Backed out changeset c17e4da85514 (bug 1552815)
Backed out changeset c66812747d09 (bug 1552815)
Backed out changeset 62b3d85f4ca3 (bug 1552815)
2024-05-01 09:58:57 +03:00

108 lines
3.4 KiB
JavaScript

"use strict";
const { PlacesTestUtils } = ChromeUtils.importESModule(
"resource://testing-common/PlacesTestUtils.sys.mjs"
);
const { PermissionTestUtils } = ChromeUtils.importESModule(
"resource://testing-common/PermissionTestUtils.sys.mjs"
);
let notificationURL =
// eslint-disable-next-line @microsoft/sdl/no-insecure-url
"http://example.org/browser/browser/base/content/test/alerts/file_dom_notifications.html";
let oldShowFavicons;
add_task(async function test_notificationClose() {
let notificationURI = makeURI(notificationURL);
await addNotificationPermission(notificationURL);
oldShowFavicons = Services.prefs.getBoolPref("alerts.showFavicons");
Services.prefs.setBoolPref("alerts.showFavicons", true);
await PlacesTestUtils.addVisits(notificationURI);
let faviconURI = await new Promise(resolve => {
let uri = makeURI(
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVQI12P4//8/AAX+Av7czFnnAAAAAElFTkSuQmCC"
);
PlacesUtils.favicons.setAndFetchFaviconForPage(
notificationURI,
uri,
true,
PlacesUtils.favicons.FAVICON_LOAD_NON_PRIVATE,
uriResult => resolve(uriResult),
Services.scriptSecurityManager.getSystemPrincipal()
);
});
await BrowserTestUtils.withNewTab(
{
gBrowser,
url: notificationURL,
},
async function dummyTabTask(aBrowser) {
await openNotification(aBrowser, "showNotification2");
info("Notification alert showing");
let alertWindow = Services.wm.getMostRecentWindow("alert:alert");
if (!alertWindow) {
ok(true, "Notifications don't use XUL windows on all platforms.");
await closeNotification(aBrowser);
return;
}
let alertTitleLabel =
alertWindow.document.getElementById("alertTitleLabel");
is(
alertTitleLabel.value,
"Test title",
"Title text of notification should be present"
);
let alertTextLabel =
alertWindow.document.getElementById("alertTextLabel");
is(
alertTextLabel.textContent,
"Test body 2",
"Body text of notification should be present"
);
let alertIcon = alertWindow.document.getElementById("alertIcon");
is(
alertIcon.src,
faviconURI.spec,
"Icon of notification should be present"
);
let alertCloseButton = alertWindow.document.querySelector(".close-icon");
is(alertCloseButton.localName, "toolbarbutton", "close button found");
let promiseBeforeUnloadEvent = BrowserTestUtils.waitForEvent(
alertWindow,
"beforeunload"
);
let closedTime = alertWindow.Date.now();
alertCloseButton.click();
info("Clicked on close button");
await promiseBeforeUnloadEvent;
ok(true, "Alert should close when the close button is clicked");
let currentTime = alertWindow.Date.now();
// The notification will self-close at 12 seconds, so this checks
// that the notification closed before the timeout.
Assert.less(
currentTime - closedTime,
5000,
"Close requested at " +
closedTime +
", actually closed at " +
currentTime
);
}
);
});
add_task(async function cleanup() {
PermissionTestUtils.remove(notificationURL, "desktop-notification");
if (typeof oldShowFavicons == "boolean") {
Services.prefs.setBoolPref("alerts.showFavicons", oldShowFavicons);
}
});