summaryrefslogtreecommitdiff
path: root/dom/apps/tests/head.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/apps/tests/head.js')
-rw-r--r--dom/apps/tests/head.js118
1 files changed, 118 insertions, 0 deletions
diff --git a/dom/apps/tests/head.js b/dom/apps/tests/head.js
new file mode 100644
index 0000000000..662d119a0c
--- /dev/null
+++ b/dom/apps/tests/head.js
@@ -0,0 +1,118 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+var { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
+
+Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+
+function runAll(steps) {
+ SimpleTest.waitForExplicitFinish();
+
+ // Clone the array so we don't modify the original.
+ steps = steps.concat();
+ function next() {
+ if (steps.length) {
+ steps.shift()(next);
+ }
+ else {
+ SimpleTest.finish();
+ }
+ }
+ next();
+}
+
+function confirmNextPopup() {
+ var Ci = SpecialPowers.Ci;
+
+ var popupNotifications = SpecialPowers.wrap(window).top.
+ QueryInterface(Ci.nsIInterfaceRequestor).
+ getInterface(Ci.nsIWebNavigation).
+ QueryInterface(Ci.nsIDocShell).
+ chromeEventHandler.ownerDocument.defaultView.
+ PopupNotifications;
+
+ var popupPanel = popupNotifications.panel;
+
+ function onPopupShown() {
+ popupPanel.removeEventListener("popupshown", onPopupShown, false);
+ SpecialPowers.wrap(this).childNodes[0].button.doCommand();
+ popupNotifications._dismiss();
+ }
+ popupPanel.addEventListener("popupshown", onPopupShown, false);
+}
+
+function promiseNoPopup() {
+ var Ci = SpecialPowers.Ci;
+
+ var popupNotifications = SpecialPowers.wrap(window).top.
+ QueryInterface(Ci.nsIInterfaceRequestor).
+ getInterface(Ci.nsIWebNavigation).
+ QueryInterface(Ci.nsIDocShell).
+ chromeEventHandler.ownerDocument.defaultView.
+ PopupNotifications;
+
+ return new Promise((resolve) => {
+ var tries = 0;
+ var interval = setInterval(function() {
+ if (tries >= 30) {
+ ok(true, "The webapps-install notification didn't appear");
+ moveOn();
+ }
+
+ if (popupNotifications.getNotification("webapps-install")) {
+ ok(false, "Found the webapps-install notification");
+ moveOn();
+ }
+ tries++;
+ }, 100);
+
+ var moveOn = () => {
+ clearInterval(interval);
+ resolve();
+ };
+ });
+}
+
+// We need to mock the Alerts service, otherwise the alert that is shown
+// at the end of an installation makes the test leak the app's icon.
+
+const CID = Cc["@mozilla.org/uuid-generator;1"].getService(Ci.nsIUUIDGenerator).generateUUID();
+const ALERTS_SERVICE_CONTRACT_ID = "@mozilla.org/alerts-service;1";
+const ALERTS_SERVICE_CID = Components.ID(Cc[ALERTS_SERVICE_CONTRACT_ID].number);
+
+var AlertsService = {
+ classID: Components.ID(CID),
+
+ QueryInterface: XPCOMUtils.generateQI([Ci.nsIFactory,
+ Ci.nsIAlertsService]),
+
+ createInstance: function(aOuter, aIID) {
+ if (aOuter) {
+ throw Cr.NS_ERROR_NO_AGGREGATION;
+ }
+
+ return this.QueryInterface(aIID);
+ },
+
+ init: function() {
+ Components.manager.nsIComponentRegistrar.registerFactory(this.classID,
+ "", ALERTS_SERVICE_CONTRACT_ID, this);
+ },
+
+ restore: function() {
+ Components.manager.nsIComponentRegistrar.registerFactory(ALERTS_SERVICE_CID,
+ "", ALERTS_SERVICE_CONTRACT_ID, null);
+ },
+
+ showAlert: function() {
+ },
+
+ showAlertNotification: function() {
+ },
+};
+
+AlertsService.init();
+
+SimpleTest.registerCleanupFunction(() => {
+ AlertsService.restore();
+});