summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/alerts/head.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/base/content/test/alerts/head.js')
-rw-r--r--browser/base/content/test/alerts/head.js71
1 files changed, 71 insertions, 0 deletions
diff --git a/browser/base/content/test/alerts/head.js b/browser/base/content/test/alerts/head.js
new file mode 100644
index 000000000..21257de31
--- /dev/null
+++ b/browser/base/content/test/alerts/head.js
@@ -0,0 +1,71 @@
+function promiseAlertWindow() {
+ return new Promise(function(resolve) {
+ let listener = {
+ onOpenWindow(window) {
+ let alertWindow = window.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindow);
+ alertWindow.addEventListener("load", function onLoad() {
+ alertWindow.removeEventListener("load", onLoad);
+ let windowType = alertWindow.document.documentElement.getAttribute("windowtype");
+ if (windowType != "alert:alert") {
+ return;
+ }
+ Services.wm.removeListener(listener);
+ resolve(alertWindow);
+ });
+ },
+ };
+ Services.wm.addListener(listener);
+ });
+}
+
+/**
+ * Similar to `BrowserTestUtils.closeWindow`, but
+ * doesn't call `window.close()`.
+ */
+function promiseWindowClosed(window) {
+ return new Promise(function(resolve) {
+ Services.ww.registerNotification(function observer(subject, topic, data) {
+ if (topic == "domwindowclosed" && subject == window) {
+ Services.ww.unregisterNotification(observer);
+ resolve();
+ }
+ });
+ });
+}
+
+/**
+ * These two functions work with file_dom_notifications.html to open the
+ * notification and close it.
+ *
+ * |fn| can be showNotification1 or showNotification2.
+ * if |timeout| is passed, then the promise returned from this function is
+ * rejected after the requested number of miliseconds.
+ */
+function openNotification(aBrowser, fn, timeout) {
+ return ContentTask.spawn(aBrowser, { fn, timeout }, function* ({ fn, timeout }) {
+ let win = content.wrappedJSObject;
+ let notification = win[fn]();
+ win._notification = notification;
+ yield new Promise((resolve, reject) => {
+ function listener() {
+ notification.removeEventListener("show", listener);
+ resolve();
+ }
+
+ notification.addEventListener("show", listener);
+
+ if (timeout) {
+ content.setTimeout(() => {
+ notification.removeEventListener("show", listener);
+ reject("timed out");
+ }, timeout);
+ }
+ });
+ });
+}
+
+function closeNotification(aBrowser) {
+ return ContentTask.spawn(aBrowser, null, function() {
+ content.wrappedJSObject._notification.close();
+ });
+}