73 lines
2.2 KiB
JavaScript
73 lines
2.2 KiB
JavaScript
const ALLOW_ACTION = SpecialPowers.Ci.nsIPermissionManager.ALLOW_ACTION;
|
|
const DENY_ACTION = SpecialPowers.Ci.nsIPermissionManager.DENY_ACTION;
|
|
const UNKNOWN_ACTION = SpecialPowers.Ci.nsIPermissionManager.UNKNOWN_ACTION;
|
|
const PROMPT_ACTION = SpecialPowers.Ci.nsIPermissionManager.PROMPT_ACTION;
|
|
|
|
/**
|
|
* Dispatches |handler| to |element|, as if fired in response to |event|.
|
|
*/
|
|
function send(element, event, handler) {
|
|
function unique_handler() {
|
|
return handler.apply(this, arguments);
|
|
}
|
|
element.addEventListener(event, unique_handler);
|
|
try {
|
|
sendMouseEvent({ type: event }, element.id);
|
|
} finally {
|
|
element.removeEventListener(event, unique_handler);
|
|
}
|
|
}
|
|
function sendWithUserActivation(element, event, handler) {
|
|
SpecialPowers.wrap(document).notifyUserGestureActivation();
|
|
send(element, event, handler);
|
|
}
|
|
|
|
/**
|
|
* Because it's not nice to leave popup windows open after the tests are
|
|
* finished, we need a foolproof way to close some/all window.opened windows.
|
|
*/
|
|
(function (originalOpen) {
|
|
var wins = [];
|
|
(window.open = function () {
|
|
var win = originalOpen.apply(window, arguments);
|
|
if (win) {
|
|
wins[wins.length] = win;
|
|
}
|
|
return win;
|
|
}).close = function (n) {
|
|
var promises = [];
|
|
if (arguments.length < 1) {
|
|
n = wins.length;
|
|
}
|
|
while (n-- > 0) {
|
|
var win = wins.pop();
|
|
if (win) {
|
|
let openedBrowsingContextID = SpecialPowers.getBrowsingContextID(win);
|
|
promises.push(
|
|
(function (openedWindow) {
|
|
return new Promise(function (resolve) {
|
|
let observer = {
|
|
observe(subject) {
|
|
if (subject.id == openedBrowsingContextID) {
|
|
SpecialPowers.removeObserver(
|
|
observer,
|
|
"browsing-context-discarded"
|
|
);
|
|
SimpleTest.executeSoon(resolve);
|
|
}
|
|
},
|
|
};
|
|
|
|
SpecialPowers.addObserver(observer, "browsing-context-discarded");
|
|
});
|
|
})(win)
|
|
);
|
|
win.close();
|
|
} else {
|
|
promises.push(Promise.resolve());
|
|
break;
|
|
}
|
|
}
|
|
return Promise.all(promises);
|
|
};
|
|
})(window.open);
|