summaryrefslogtreecommitdiffstats
path: root/dom/base/test/mozbrowser_api_utils.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/base/test/mozbrowser_api_utils.js')
-rw-r--r--dom/base/test/mozbrowser_api_utils.js72
1 files changed, 72 insertions, 0 deletions
diff --git a/dom/base/test/mozbrowser_api_utils.js b/dom/base/test/mozbrowser_api_utils.js
new file mode 100644
index 000000000..92b080939
--- /dev/null
+++ b/dom/base/test/mozbrowser_api_utils.js
@@ -0,0 +1,72 @@
+const FRAME_URL = "http://example.org/";
+
+const METHODS = {
+ setVisible: {},
+ getVisible: {},
+ setActive: {},
+ getActive: {},
+ addNextPaintListener: {},
+ removeNextPaintListener: {},
+ sendMouseEvent: {},
+ sendTouchEvent: {},
+ goBack: {},
+ goForward: {},
+ reload: {},
+ stop: {},
+ download: {},
+ purgeHistory: {},
+ getScreenshot: {},
+ zoom: {},
+ getCanGoBack: {},
+ getCanGoForward: {},
+ getContentDimensions: {},
+ setInputMethodActive: {},
+ findAll: {},
+ findNext: {},
+ clearMatch: {},
+ executeScript: {},
+ getWebManifest: {},
+ mute: {},
+ unmute: {},
+ getMuted: {},
+ setVolume: {},
+ getVolume: {},
+};
+
+const ATTRIBUTES = [
+ "allowedAudioChannels",
+];
+
+function once(target, eventName, useCapture = false) {
+ info("Waiting for event: '" + JSON.stringify(eventName) + "' on " + target + ".");
+
+ return new Promise(resolve => {
+ for (let [add, remove] of [
+ ["addEventListener", "removeEventListener"],
+ ["addMessageListener", "removeMessageListener"],
+ ]) {
+ if ((add in target) && (remove in target)) {
+ eventName.forEach(evName => {
+ target[add](evName, function onEvent(...aArgs) {
+ info("Got event: '" + evName + "' on " + target + ".");
+ target[remove](evName, onEvent, useCapture);
+ resolve(aArgs);
+ }, useCapture);
+ });
+ break;
+ }
+ }
+ });
+}
+
+function* loadFrame(attributes = {}) {
+ let iframe = document.createElement("iframe");
+ iframe.setAttribute("src", FRAME_URL);
+ for (let key in attributes) {
+ iframe.setAttribute(key, attributes[key]);
+ }
+ let loaded = once(iframe, [ "load", "mozbrowserloadend" ]);
+ document.body.appendChild(iframe);
+ yield loaded;
+ return iframe;
+}