/** * Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ // The path to the top level directory. const depth = "../../../../"; var gActiveListeners = {}; loadScript("dom/quota/test/common/browser.js"); function loadScript(path) { const url = new URL(depth + path, gTestPath); Services.scriptloader.loadSubScript(url.href, this); } // These event (un)registration handlers only work for one window, DONOT use // them with multiple windows. function registerPopupEventHandler(eventName, callback, win) { if (!win) { win = window; } gActiveListeners[eventName] = function (event) { if (event.target != win.PopupNotifications.panel) { return; } win.PopupNotifications.panel.removeEventListener( eventName, gActiveListeners[eventName] ); delete gActiveListeners[eventName]; callback.call(win.PopupNotifications.panel); }; win.PopupNotifications.panel.addEventListener( eventName, gActiveListeners[eventName] ); } function unregisterAllPopupEventHandlers(win) { if (!win) { win = window; } for (let eventName in gActiveListeners) { win.PopupNotifications.panel.removeEventListener( eventName, gActiveListeners[eventName] ); } gActiveListeners = {}; } function triggerMainCommand(popup, win) { if (!win) { win = window; } info("triggering main command"); let notifications = popup.childNodes; ok(notifications.length, "at least one notification displayed"); let notification = notifications[0]; info("triggering command: " + notification.getAttribute("buttonlabel")); EventUtils.synthesizeMouseAtCenter(notification.button, {}, win); } async function triggerSecondaryCommand(popup, remember = false, win = window) { info("triggering secondary command"); let notifications = popup.childNodes; ok(notifications.length, "at least one notification displayed"); let notification = notifications[0]; if (remember) { notification.checkbox.checked = true; } await EventUtils.synthesizeMouseAtCenter( notification.secondaryButton, {}, win ); } function dismissNotification(popup, win = window) { info("dismissing notification"); executeSoon(function () { EventUtils.synthesizeKey("VK_ESCAPE", {}, win); }); } function waitForMessage(aMessage, browser) { // We cannot capture aMessage inside the checkFn, so we override the // checkFn.toSource to tunnel aMessage instead. let checkFn = function () {}; checkFn.toSource = function () { return `function checkFn(event) { let message = ${aMessage.toSource()}; if (event.data == message) { return true; } throw new Error( \`Unexpected result: \$\{event.data\}, expected \$\{message\}\` ); }`; }; return BrowserTestUtils.waitForContentEvent( browser.selectedBrowser, "message", /* capture */ true, checkFn, /* wantsUntrusted */ true ).then(() => { // An assertion in checkFn wouldn't be recorded as part of the test, so we // use this assertion to confirm that we've successfully received the // message (we'll only reach this point if that's the case). ok(true, "Received message: " + aMessage); }); } function removePermission(url, permission) { let uri = Cc["@mozilla.org/network/io-service;1"] .getService(Ci.nsIIOService) .newURI(url); let ssm = Cc["@mozilla.org/scriptsecuritymanager;1"].getService( Ci.nsIScriptSecurityManager ); let principal = ssm.createContentPrincipal(uri, {}); Cc["@mozilla.org/permissionmanager;1"] .getService(Ci.nsIPermissionManager) .removeFromPrincipal(principal, permission); } function getPermission(url, permission) { let uri = Cc["@mozilla.org/network/io-service;1"] .getService(Ci.nsIIOService) .newURI(url); let ssm = Cc["@mozilla.org/scriptsecuritymanager;1"].getService( Ci.nsIScriptSecurityManager ); let principal = ssm.createContentPrincipal(uri, {}); return Cc["@mozilla.org/permissionmanager;1"] .getService(Ci.nsIPermissionManager) .testPermissionFromPrincipal(principal, permission); }