diff options
Diffstat (limited to 'dom/browser-element/mochitest/browserElement_Proxy.js')
-rw-r--r-- | dom/browser-element/mochitest/browserElement_Proxy.js | 163 |
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); |