summaryrefslogtreecommitdiffstats
path: root/dom/indexedDB/test/head.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/indexedDB/test/head.js')
-rw-r--r--dom/indexedDB/test/head.js158
1 files changed, 158 insertions, 0 deletions
diff --git a/dom/indexedDB/test/head.js b/dom/indexedDB/test/head.js
new file mode 100644
index 000000000..898a40e8f
--- /dev/null
+++ b/dom/indexedDB/test/head.js
@@ -0,0 +1,158 @@
+/**
+ * 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);
+}