зеркало из https://github.com/mozilla/gecko-dev.git
156 строки
5.3 KiB
JavaScript
156 строки
5.3 KiB
JavaScript
/**
|
|
* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/
|
|
*/
|
|
|
|
let 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;
|
|
}
|
|
let testPage = win.gBrowser.selectedBrowser.contentWindow.wrappedJSObject;
|
|
testPage.testFinishedCallback = function(result, exception) {
|
|
setTimeout(function() {
|
|
info("got finished callback");
|
|
callback(result, exception);
|
|
}, 0);
|
|
}
|
|
}
|
|
|
|
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 principal = Components.classes["@mozilla.org/scriptsecuritymanager;1"]
|
|
.getService(Ci.nsIScriptSecurityManager)
|
|
.getNoAppCodebasePrincipal(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 principal = Components.classes["@mozilla.org/scriptsecuritymanager;1"]
|
|
.getService(Ci.nsIScriptSecurityManager)
|
|
.getNoAppCodebasePrincipal(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 principal = Components.classes["@mozilla.org/scriptsecuritymanager;1"]
|
|
.getService(Ci.nsIScriptSecurityManager)
|
|
.getNoAppCodebasePrincipal(uri);
|
|
|
|
return Components.classes["@mozilla.org/permissionmanager;1"]
|
|
.getService(Components.interfaces.nsIPermissionManager)
|
|
.testPermissionFromPrincipal(principal, permission);
|
|
}
|