forked from mirrors/gecko-dev
		
	 aec63e140c
			
		
	
	
		aec63e140c
		
	
	
	
	
		
			
			MozReview-Commit-ID: 5ubE9EMQpZ9 --HG-- extra : histedit_source : df68d7595925c07d9d6e8bacc2c46e69556f479a%2C72b768b9825e20ede6603ead75f871c50dc041f7
		
			
				
	
	
		
			130 lines
		
	
	
	
		
			5.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
	
		
			5.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| 
 | |
| Cu.import("resource://gre/modules/AppMenuNotifications.jsm");
 | |
| 
 | |
| /**
 | |
|  * Tests that when we try to show a notification in a background window, it
 | |
|  * does not display until the window comes back into the foreground. However,
 | |
|  * it should display a badge.
 | |
|  */
 | |
| add_task(async function testDoesNotShowDoorhangerForBackgroundWindow() {
 | |
|   let options = {
 | |
|     gBrowser: window.gBrowser,
 | |
|     url: "about:blank"
 | |
|   };
 | |
| 
 | |
|   await BrowserTestUtils.withNewTab(options, async function(browser) {
 | |
|     let doc = browser.ownerDocument;
 | |
| 
 | |
|     let win = await BrowserTestUtils.openNewBrowserWindow();
 | |
|     let mainActionCalled = false;
 | |
|     let mainAction = {
 | |
|       callback: () => { mainActionCalled = true; }
 | |
|     };
 | |
|     AppMenuNotifications.showNotification("update-manual", mainAction);
 | |
|     is(PanelUI.notificationPanel.state, "closed", "The background window's doorhanger is closed.");
 | |
|     is(PanelUI.menuButton.hasAttribute("badge-status"), true, "The background window has a badge.");
 | |
| 
 | |
|     await BrowserTestUtils.closeWindow(win);
 | |
|     await SimpleTest.promiseFocus(window);
 | |
|     isnot(PanelUI.notificationPanel.state, "closed", "update-manual doorhanger is showing.");
 | |
|     let notifications = [...PanelUI.notificationPanel.children].filter(n => !n.hidden);
 | |
|     is(notifications.length, 1, "PanelUI doorhanger is only displaying one notification.");
 | |
|     let doorhanger = notifications[0];
 | |
|     is(doorhanger.id, "appMenu-update-manual-notification", "PanelUI is displaying the update-manual notification.");
 | |
| 
 | |
|     let button = doc.getAnonymousElementByAttribute(doorhanger, "anonid", "button");
 | |
|     button.click();
 | |
| 
 | |
|     ok(mainActionCalled, "Main action callback was called");
 | |
|     is(PanelUI.notificationPanel.state, "closed", "update-manual doorhanger is closed.");
 | |
|     is(PanelUI.menuButton.hasAttribute("badge-status"), false, "Should not have a badge status");
 | |
|   });
 | |
| });
 | |
| 
 | |
| /**
 | |
|  * Tests that when we try to show a notification in a background window and in
 | |
|  * a foreground window, if the foreground window's main action is called, the
 | |
|  * background window's doorhanger will be removed.
 | |
|  */
 | |
| add_task(async function testBackgroundWindowNotificationsAreRemovedByForeground() {
 | |
|   let options = {
 | |
|     gBrowser: window.gBrowser,
 | |
|     url: "about:blank"
 | |
|   };
 | |
| 
 | |
|   await BrowserTestUtils.withNewTab(options, async function(browser) {
 | |
|     let win = await BrowserTestUtils.openNewBrowserWindow();
 | |
|     AppMenuNotifications.showNotification("update-manual", {callback() {}});
 | |
|     let doc = win.gBrowser.ownerDocument;
 | |
|     let notifications = [...win.PanelUI.notificationPanel.children].filter(n => !n.hidden);
 | |
|     is(notifications.length, 1, "PanelUI doorhanger is only displaying one notification.");
 | |
|     let doorhanger = notifications[0];
 | |
|     let button = doc.getAnonymousElementByAttribute(doorhanger, "anonid", "button");
 | |
|     button.click();
 | |
| 
 | |
|     await BrowserTestUtils.closeWindow(win);
 | |
|     await SimpleTest.promiseFocus(window);
 | |
| 
 | |
|     is(PanelUI.notificationPanel.state, "closed", "update-manual doorhanger is closed.");
 | |
|     is(PanelUI.menuButton.hasAttribute("badge-status"), false, "Should not have a badge status");
 | |
|   });
 | |
| });
 | |
| 
 | |
| /**
 | |
|  * Tests that when we try to show a notification in a background window and in
 | |
|  * a foreground window, if the foreground window's doorhanger is dismissed,
 | |
|  * the background window's doorhanger will also be dismissed once the window
 | |
|  * regains focus.
 | |
|  */
 | |
| add_task(async function testBackgroundWindowNotificationsAreDismissedByForeground() {
 | |
|   let options = {
 | |
|     gBrowser: window.gBrowser,
 | |
|     url: "about:blank"
 | |
|   };
 | |
| 
 | |
|   await BrowserTestUtils.withNewTab(options, async function(browser) {
 | |
|     let win = await BrowserTestUtils.openNewBrowserWindow();
 | |
|     AppMenuNotifications.showNotification("update-manual", {callback() {}});
 | |
|     let doc = win.gBrowser.ownerDocument;
 | |
|     let notifications = [...win.PanelUI.notificationPanel.children].filter(n => !n.hidden);
 | |
|     is(notifications.length, 1, "PanelUI doorhanger is only displaying one notification.");
 | |
|     let doorhanger = notifications[0];
 | |
|     let button = doc.getAnonymousElementByAttribute(doorhanger, "anonid", "secondarybutton");
 | |
|     button.click();
 | |
| 
 | |
|     await BrowserTestUtils.closeWindow(win);
 | |
|     await SimpleTest.promiseFocus(window);
 | |
| 
 | |
|     is(PanelUI.notificationPanel.state, "closed", "The background window's doorhanger is closed.");
 | |
|     is(PanelUI.menuButton.hasAttribute("badge-status"), true,
 | |
|        "The dismissed notification should still have a badge status");
 | |
| 
 | |
|     AppMenuNotifications.removeNotification(/.*/);
 | |
|   });
 | |
| });
 | |
| 
 | |
| /**
 | |
|  * Tests that when we open a new window while a notification is showing, the
 | |
|  * notification also shows on the new window.
 | |
|  */
 | |
| add_task(async function testOpenWindowAfterShowingNotification() {
 | |
|   AppMenuNotifications.showNotification("update-manual", {callback() {}});
 | |
| 
 | |
|   let win = await BrowserTestUtils.openNewBrowserWindow();
 | |
|   let doc = win.gBrowser.ownerDocument;
 | |
|   let notifications = [...win.PanelUI.notificationPanel.children].filter(n => !n.hidden);
 | |
|   is(notifications.length, 1, "PanelUI doorhanger is only displaying one notification.");
 | |
|   let doorhanger = notifications[0];
 | |
|   let button = doc.getAnonymousElementByAttribute(doorhanger, "anonid", "secondarybutton");
 | |
|   button.click();
 | |
| 
 | |
|   await BrowserTestUtils.closeWindow(win);
 | |
|   await SimpleTest.promiseFocus(window);
 | |
| 
 | |
|   is(PanelUI.notificationPanel.state, "closed", "The background window's doorhanger is closed.");
 | |
|   is(PanelUI.menuButton.hasAttribute("badge-status"), true,
 | |
|      "The dismissed notification should still have a badge status");
 | |
| 
 | |
|   AppMenuNotifications.removeNotification(/.*/);
 | |
| });
 |