summaryrefslogtreecommitdiffstats
path: root/dom/browser-element/mochitest/browserElement_Proxy.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/browser-element/mochitest/browserElement_Proxy.js')
-rw-r--r--dom/browser-element/mochitest/browserElement_Proxy.js163
1 files changed, 163 insertions, 0 deletions
diff --git a/dom/browser-element/mochitest/browserElement_Proxy.js b/dom/browser-element/mochitest/browserElement_Proxy.js
new file mode 100644
index 000000000..227b40c5f
--- /dev/null
+++ b/dom/browser-element/mochitest/browserElement_Proxy.js
@@ -0,0 +1,163 @@
+/* Any copyright is dedicated to the public domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+SimpleTest.waitForExplicitFinish();
+browserElementTestHelpers.setEnabledPref(true);
+browserElementTestHelpers.addPermission();
+
+function runTest() {
+ let frameUrl = SimpleTest.getTestFileURL('/file_empty.html');
+ SpecialPowers.pushPermissions([{
+ type: 'browser:embedded-system-app',
+ allow: true,
+ context: {
+ url: frameUrl,
+ originAttributes: {
+ inIsolatedMozBrowser: true
+ }
+ }
+ },{
+ type: 'browser',
+ allow: true,
+ context: {
+ url: frameUrl,
+ originAttributes: {
+ inIsolatedMozBrowser: true
+ }
+ }
+ }], createFrame);
+}
+
+var frame;
+var mm;
+
+function createFrame() {
+ let loadEnd = function() {
+ // The frame script running in the frame where the input is hosted.
+ let appFrameScript = function appFrameScript() {
+ let i = 1;
+
+ addMessageListener('test:next', function() {
+ try {
+ switch (i) {
+ case 1:
+ content.document.addEventListener(
+ 'visibilitychange', function fn() {
+ content.document.removeEventListener('visibilitychange', fn);
+ sendAsyncMessage('test:done', {
+ ok: true,
+ msg: 'setVisible()'
+ });
+ });
+
+ // Test a no return method
+ content.navigator.mozBrowserElementProxy.setVisible(false);
+
+ break;
+ case 2:
+ // Test a DOMRequest method
+ var req = content.navigator.mozBrowserElementProxy.getVisible();
+ req.onsuccess = function() {
+ sendAsyncMessage('test:done', {
+ ok: true,
+ msg: 'getVisible()'
+ });
+ };
+
+ req.onerror = function() {
+ sendAsyncMessage('test:done', {
+ ok: false,
+ msg: 'getVisible() DOMRequest return error.'
+ });
+ };
+
+ break;
+ case 3:
+ // Test an unimplemented method
+ try {
+ content.navigator.mozBrowserElementProxy.getActive();
+ sendAsyncMessage('test:done', {
+ ok: false,
+ msg: 'getActive() should throw.'
+ });
+
+ } catch (e) {
+ sendAsyncMessage('test:done', {
+ ok: true,
+ msg: 'getActive() throws.'
+ });
+ }
+
+ break;
+ case 4:
+ content.navigator.mozBrowserElementProxy
+ .addEventListener(
+ 'mozbrowserlocationchange',
+ function() {
+ content.navigator.mozBrowserElementProxy
+ .onmozbrowserlocationchange = null;
+
+ sendAsyncMessage('test:done', {
+ ok: true,
+ msg: 'mozbrowserlocationchange'
+ });
+ });
+
+ // Test event
+ content.location.hash = '#foo';
+
+ break;
+ }
+ } catch (e) {
+ sendAsyncMessage('test:done', {
+ ok: false, msg: 'thrown: ' + e.toString() });
+ }
+
+ i++;
+ });
+
+ sendAsyncMessage('test:done', {});
+ }
+
+ mm = SpecialPowers.getBrowserFrameMessageManager(frame);
+ mm.loadFrameScript('data:,(' + encodeURIComponent(appFrameScript.toString()) + ')();', false);
+ mm.addMessageListener("test:done", next);
+ };
+
+ frame = document.createElement('iframe');
+ frame.setAttribute('mozbrowser', 'true');
+ frame.src = 'file_empty.html';
+ document.body.appendChild(frame);
+ frame.addEventListener('mozbrowserloadend', loadEnd);
+}
+
+var i = 0;
+function next(msg) {
+ let wrappedMsg = SpecialPowers.wrap(msg);
+ let isOK = wrappedMsg.data.ok;
+ let msgString = wrappedMsg.data.msg;
+
+ switch (i) {
+ case 0:
+ mm.sendAsyncMessage('test:next');
+ break;
+
+ case 1:
+ case 2:
+ case 3:
+ ok(isOK, msgString);
+ mm.sendAsyncMessage('test:next');
+ break;
+
+ case 4:
+ ok(isOK, msgString);
+ SimpleTest.finish();
+ break;
+ }
+
+ i++;
+}
+
+addEventListener('testready', runTest);