123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- /**
- * Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
- var gActiveListeners = {};
- function registerPopupEventHandler(eventName, callback) {
- gActiveListeners[eventName] = function (event) {
- if (event.target != PopupNotifications.panel)
- return;
- PopupNotifications.panel.removeEventListener(eventName,
- gActiveListeners[eventName],
- false);
- delete gActiveListeners[eventName];
- callback.call(PopupNotifications.panel);
- }
- PopupNotifications.panel.addEventListener(eventName,
- gActiveListeners[eventName],
- false);
- }
- function unregisterPopupEventHandler(eventName)
- {
- PopupNotifications.panel.removeEventListener(eventName,
- gActiveListeners[eventName],
- false);
- delete gActiveListeners[eventName];
- }
- function unregisterAllPopupEventHandlers()
- {
- for (let eventName in gActiveListeners) {
- PopupNotifications.panel.removeEventListener(eventName,
- gActiveListeners[eventName],
- false);
- }
- gActiveListeners = {};
- }
- function triggerMainCommand(popup)
- {
- info("triggering main command");
- let notifications = popup.childNodes;
- ok(notifications.length > 0, "at least one notification displayed");
- let notification = notifications[0];
- info("triggering command: " + notification.getAttribute("buttonlabel"));
- // 20, 10 so that the inner button is hit
- EventUtils.synthesizeMouse(notification.button, 20, 10, {});
- }
- function triggerSecondaryCommand(popup, index)
- {
- info("triggering secondary command, " + index);
- let notifications = popup.childNodes;
- ok(notifications.length > 0, "at least one notification displayed");
- let notification = notifications[0];
- // Cancel the arrow panel slide-in transition (bug 767133) such that
- // it won't interfere with us interacting with the dropdown.
- SpecialPowers.wrap(document).getAnonymousNodes(popup)[0].style.transition = "none";
- notification.button.focus();
- popup.addEventListener("popupshown", function () {
- popup.removeEventListener("popupshown", arguments.callee, false);
- // Press down until the desired command is selected
- for (let i = 0; i <= index; i++)
- EventUtils.synthesizeKey("VK_DOWN", {});
- // Activate
- EventUtils.synthesizeKey("VK_RETURN", {});
- }, false);
- // One down event to open the popup
- EventUtils.synthesizeKey("VK_DOWN", { altKey: (navigator.platform.indexOf("Mac") == -1) });
- }
- function dismissNotification(popup)
- {
- info("dismissing notification");
- executeSoon(function () {
- EventUtils.synthesizeKey("VK_ESCAPE", {});
- });
- }
- function setFinishedCallback(callback, win)
- {
- if (!win) {
- win = window;
- }
- ContentTask.spawn(win.gBrowser.selectedBrowser, null, function*() {
- return yield new Promise(resolve => {
- content.wrappedJSObject.testFinishedCallback = (result, exception) => {
- info("got finished callback");
- resolve({result, exception});
- };
- });
- }).then(({result, exception}) => {
- callback(result, exception);
- });
- }
- function dispatchEvent(eventName)
- {
- info("dispatching event: " + eventName);
- let event = document.createEvent("Events");
- event.initEvent(eventName, false, false);
- gBrowser.selectedBrowser.contentWindow.dispatchEvent(event);
- }
- function setPermission(url, permission)
- {
- const nsIPermissionManager = Components.interfaces.nsIPermissionManager;
- let uri = Components.classes["@mozilla.org/network/io-service;1"]
- .getService(Components.interfaces.nsIIOService)
- .newURI(url, null, null);
- let ssm = Components.classes["@mozilla.org/scriptsecuritymanager;1"]
- .getService(Ci.nsIScriptSecurityManager);
- let principal = ssm.createCodebasePrincipal(uri, {});
- Components.classes["@mozilla.org/permissionmanager;1"]
- .getService(nsIPermissionManager)
- .addFromPrincipal(principal, permission,
- nsIPermissionManager.ALLOW_ACTION);
- }
- function removePermission(url, permission)
- {
- let uri = Components.classes["@mozilla.org/network/io-service;1"]
- .getService(Components.interfaces.nsIIOService)
- .newURI(url, null, null);
- let ssm = Components.classes["@mozilla.org/scriptsecuritymanager;1"]
- .getService(Ci.nsIScriptSecurityManager);
- let principal = ssm.createCodebasePrincipal(uri, {});
- Components.classes["@mozilla.org/permissionmanager;1"]
- .getService(Components.interfaces.nsIPermissionManager)
- .removeFromPrincipal(principal, permission);
- }
- function getPermission(url, permission)
- {
- let uri = Components.classes["@mozilla.org/network/io-service;1"]
- .getService(Components.interfaces.nsIIOService)
- .newURI(url, null, null);
- let ssm = Components.classes["@mozilla.org/scriptsecuritymanager;1"]
- .getService(Ci.nsIScriptSecurityManager);
- let principal = ssm.createCodebasePrincipal(uri, {});
- return Components.classes["@mozilla.org/permissionmanager;1"]
- .getService(Components.interfaces.nsIPermissionManager)
- .testPermissionFromPrincipal(principal, permission);
- }
|