summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/notificationbox/browser_tabnotificationbox_switch_tabs.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/base/content/test/notificationbox/browser_tabnotificationbox_switch_tabs.js')
-rw-r--r--browser/base/content/test/notificationbox/browser_tabnotificationbox_switch_tabs.js142
1 files changed, 142 insertions, 0 deletions
diff --git a/browser/base/content/test/notificationbox/browser_tabnotificationbox_switch_tabs.js b/browser/base/content/test/notificationbox/browser_tabnotificationbox_switch_tabs.js
new file mode 100644
index 0000000000..f00916c773
--- /dev/null
+++ b/browser/base/content/test/notificationbox/browser_tabnotificationbox_switch_tabs.js
@@ -0,0 +1,142 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+function assertNotificationBoxHidden(reason, browser) {
+ let notificationBox = gBrowser.readNotificationBox(browser);
+
+ if (!notificationBox) {
+ ok(!notificationBox, `Notification box has not been created ${reason}`);
+ return;
+ }
+
+ let name = notificationBox._stack.getAttribute("name");
+ ok(name, `Notification box has a name ${reason}`);
+
+ let { selectedViewName } = notificationBox._stack.parentElement;
+ ok(
+ selectedViewName != name,
+ `Box is not shown ${reason} ${selectedViewName} != ${name}`
+ );
+}
+
+function assertNotificationBoxShown(reason, browser) {
+ let notificationBox = gBrowser.readNotificationBox(browser);
+ ok(notificationBox, `Notification box has been created ${reason}`);
+
+ let name = notificationBox._stack.getAttribute("name");
+ ok(name, `Notification box has a name ${reason}`);
+
+ let { selectedViewName } = notificationBox._stack.parentElement;
+ is(selectedViewName, name, `Box is shown ${reason}`);
+}
+
+function createNotification({ browser, label, value, priority }) {
+ let notificationBox = gBrowser.getNotificationBox(browser);
+ let notification = notificationBox.appendNotification(value, {
+ label,
+ priority: notificationBox[priority],
+ });
+ return notification;
+}
+
+add_task(async function testNotificationInBackgroundTab() {
+ let firstTab = gBrowser.selectedTab;
+
+ // Navigating to a page should not create the notification box
+ await BrowserTestUtils.withNewTab("https://example.com", async browser => {
+ let notificationBox = gBrowser.readNotificationBox(browser);
+ ok(!notificationBox, "The notification box has not been created");
+
+ gBrowser.selectedTab = firstTab;
+ assertNotificationBoxHidden("initial first tab");
+
+ createNotification({
+ browser,
+ label: "My notification body",
+ value: "test-notification",
+ priority: "PRIORITY_INFO_LOW",
+ });
+
+ gBrowser.selectedTab = gBrowser.getTabForBrowser(browser);
+ assertNotificationBoxShown("notification created");
+ });
+});
+
+add_task(async function testNotificationInActiveTab() {
+ // Open about:blank so the notification box isn't created on tab open.
+ await BrowserTestUtils.withNewTab("about:blank", async browser => {
+ ok(!gBrowser.readNotificationBox(browser), "No notifications for new tab");
+
+ createNotification({
+ browser,
+ label: "Notification!",
+ value: "test-notification",
+ priority: "PRIORITY_INFO_LOW",
+ });
+ assertNotificationBoxShown("after appendNotification");
+ });
+});
+
+add_task(async function testNotificationMultipleTabs() {
+ let tabOne = gBrowser.selectedTab;
+ let tabTwo = await BrowserTestUtils.openNewForegroundTab({
+ gBrowser,
+ url: "about:blank",
+ });
+ let tabThree = await BrowserTestUtils.openNewForegroundTab({
+ gBrowser,
+ url: "https://example.com",
+ });
+ let browserOne = tabOne.linkedBrowser;
+ let browserTwo = tabTwo.linkedBrowser;
+ let browserThree = tabThree.linkedBrowser;
+
+ is(gBrowser.selectedBrowser, browserThree, "example.com selected");
+
+ let notificationBoxOne = gBrowser.readNotificationBox(browserOne);
+ let notificationBoxTwo = gBrowser.readNotificationBox(browserTwo);
+ let notificationBoxThree = gBrowser.readNotificationBox(browserThree);
+
+ ok(!notificationBoxOne, "no initial tab box");
+ ok(!notificationBoxTwo, "no about:blank box");
+ ok(!notificationBoxThree, "no example.com box");
+
+ // Verify the correct box is shown after creating tabs.
+ assertNotificationBoxHidden("after open", browserOne);
+ assertNotificationBoxHidden("after open", browserTwo);
+ assertNotificationBoxHidden("after open", browserThree);
+
+ createNotification({
+ browser: browserTwo,
+ label: "Test blank",
+ value: "blank",
+ priority: "PRIORITY_INFO_LOW",
+ });
+ notificationBoxTwo = gBrowser.readNotificationBox(browserTwo);
+ ok(notificationBoxTwo, "Notification box was created");
+
+ // Verify the selected browser's notification box is still hidden.
+ assertNotificationBoxHidden("hidden create", browserTwo);
+ assertNotificationBoxHidden("other create", browserThree);
+
+ createNotification({
+ browser: browserThree,
+ label: "Test active tab",
+ value: "active",
+ priority: "PRIORITY_CRITICAL_LOW",
+ });
+ // Verify the selected browser's notification box is still shown.
+ assertNotificationBoxHidden("active create", browserTwo);
+ assertNotificationBoxShown("active create", browserThree);
+
+ gBrowser.selectedTab = tabTwo;
+
+ // Verify the notification box for the tab that has one gets shown.
+ assertNotificationBoxShown("tab switch", browserTwo);
+ assertNotificationBoxHidden("tab switch", browserThree);
+
+ BrowserTestUtils.removeTab(tabTwo);
+ BrowserTestUtils.removeTab(tabThree);
+});