diff options
Diffstat (limited to 'dom/indexedDB/test/head.js')
-rw-r--r-- | dom/indexedDB/test/head.js | 158 |
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); +} |