diff options
Diffstat (limited to 'browser/base/content/test/popups/browser_popup_blocker.js')
-rw-r--r-- | browser/base/content/test/popups/browser_popup_blocker.js | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/browser/base/content/test/popups/browser_popup_blocker.js b/browser/base/content/test/popups/browser_popup_blocker.js new file mode 100644 index 000000000..8cadfea57 --- /dev/null +++ b/browser/base/content/test/popups/browser_popup_blocker.js @@ -0,0 +1,96 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +const baseURL = getRootDirectory(gTestPath).replace("chrome://mochitests/content", "http://example.com"); + +function clearAllPermissionsByPrefix(aPrefix) { + let perms = Services.perms.enumerator; + while (perms.hasMoreElements()) { + let perm = perms.getNext(); + if (perm.type.startsWith(aPrefix)) { + Services.perms.removePermission(perm); + } + } +} + +add_task(function* test_opening_blocked_popups() { + // Enable the popup blocker. + yield SpecialPowers.pushPrefEnv({set: [["dom.disable_open_during_load", true]]}); + + // Open the test page. + let tab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, baseURL + "popup_blocker.html"); + + // Wait for the popup-blocked notification. + let notification; + yield BrowserTestUtils.waitForCondition(() => + notification = gBrowser.getNotificationBox().getNotificationWithValue("popup-blocked")); + + // Show the menu. + let popupShown = BrowserTestUtils.waitForEvent(window, "popupshown"); + let popupFilled = BrowserTestUtils.waitForMessage(gBrowser.selectedBrowser.messageManager, + "PopupBlocking:ReplyGetBlockedPopupList"); + notification.querySelector("button").doCommand(); + let popup_event = yield popupShown; + let menu = popup_event.target; + is(menu.id, "blockedPopupOptions", "Blocked popup menu shown"); + + yield popupFilled; + // The menu is filled on the same message that we waited for, so let's ensure that it + // had a chance of running before this test code. + yield new Promise(resolve => executeSoon(resolve)); + + // Check the menu contents. + let sep = menu.querySelector("menuseparator"); + let popupCount = 0; + for (let i = sep.nextElementSibling; i; i = i.nextElementSibling) { + popupCount++; + } + is(popupCount, 2, "Two popups were blocked"); + + // Pressing "allow" should open all blocked popups. + let popupTabs = []; + function onTabOpen(event) { + popupTabs.push(event.target); + } + gBrowser.tabContainer.addEventListener("TabOpen", onTabOpen); + + // Press the button. + let allow = menu.querySelector("[observes='blockedPopupAllowSite']"); + allow.doCommand(); + yield BrowserTestUtils.waitForCondition(() => + popupTabs.length == 2 && + popupTabs.every(aTab => aTab.linkedBrowser.currentURI.spec != "about:blank")); + + gBrowser.tabContainer.removeEventListener("TabOpen", onTabOpen); + + is(popupTabs[0].linkedBrowser.currentURI.spec, "data:text/plain;charset=utf-8,a", "Popup a"); + is(popupTabs[1].linkedBrowser.currentURI.spec, "data:text/plain;charset=utf-8,b", "Popup b"); + + // Clean up. + gBrowser.removeTab(tab); + for (let popup of popupTabs) { + gBrowser.removeTab(popup); + } + clearAllPermissionsByPrefix("popup"); + // Ensure the menu closes. + menu.hidePopup(); +}); + +add_task(function* check_icon_hides() { + // Enable the popup blocker. + yield SpecialPowers.pushPrefEnv({set: [["dom.disable_open_during_load", true]]}); + + let tab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, baseURL + "popup_blocker.html"); + + let button = document.getElementById("page-report-button"); + yield BrowserTestUtils.waitForCondition(() => + gBrowser.getNotificationBox().getNotificationWithValue("popup-blocked")); + ok(!button.hidden, "Button should be visible"); + + let otherPageLoaded = BrowserTestUtils.browserLoaded(tab.linkedBrowser); + openLinkIn(baseURL, "current", {}); + yield otherPageLoaded; + ok(button.hidden, "Button should have hidden again after another page loaded."); + yield BrowserTestUtils.removeTab(tab); +}); |