diff options
Diffstat (limited to 'dom/presentation/tests/mochitest/test_presentation_tcp_receiver_oop.html')
-rw-r--r-- | dom/presentation/tests/mochitest/test_presentation_tcp_receiver_oop.html | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/dom/presentation/tests/mochitest/test_presentation_tcp_receiver_oop.html b/dom/presentation/tests/mochitest/test_presentation_tcp_receiver_oop.html new file mode 100644 index 0000000000..bfbc7947a5 --- /dev/null +++ b/dom/presentation/tests/mochitest/test_presentation_tcp_receiver_oop.html @@ -0,0 +1,178 @@ +<!DOCTYPE HTML> +<html> +<!-- Any copyright is dedicated to the Public Domain. + - http://creativecommons.org/publicdomain/zero/1.0/ --> +<head> + <meta charset="utf-8"> + <title>Test for B2G PresentationConnection API at receiver side (OOP)</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1069230">Test B2G PresentationConnection API at receiver side (OOP)</a> +<p id="display"></p> +<div id="content" style="display: none"></div> +<pre id="test"></pre> +<script type="application/javascript"> + +'use strict'; + +var gScript = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL('PresentationSessionChromeScript.js')); +var receiverUrl = SimpleTest.getTestFileURL('file_presentation_receiver.html'); +var nonReceiverUrl = SimpleTest.getTestFileURL('file_presentation_non_receiver.html'); + +var isReceiverFinished = false; +var isNonReceiverFinished = false; + +var obs = SpecialPowers.Cc["@mozilla.org/observer-service;1"] + .getService(SpecialPowers.Ci.nsIObserverService); + +function setup() { + return new Promise(function(aResolve, aReject) { + gScript.sendAsyncMessage('trigger-device-add'); + + // Create a receiver OOP iframe. + var receiverIframe = document.createElement('iframe'); + receiverIframe.setAttribute('remote', 'true'); + receiverIframe.setAttribute('mozbrowser', 'true'); + receiverIframe.setAttribute('mozpresentation', receiverUrl); + receiverIframe.setAttribute('src', receiverUrl); + + // This event is triggered when the iframe calls "alert". + receiverIframe.addEventListener('mozbrowsershowmodalprompt', function receiverListener(aEvent) { + var message = aEvent.detail.message; + if (/^OK /.exec(message)) { + ok(true, "Message from iframe: " + message); + } else if (/^KO /.exec(message)) { + ok(false, "Message from iframe: " + message); + } else if (/^INFO /.exec(message)) { + info("Message from iframe: " + message); + } else if (/^COMMAND /.exec(message)) { + var command = JSON.parse(message.replace(/^COMMAND /, '')); + gScript.sendAsyncMessage(command.name, command.data); + } else if (/^DONE$/.exec(message)) { + ok(true, "Messaging from iframe complete."); + receiverIframe.removeEventListener('mozbrowsershowmodalprompt', receiverListener); + + isReceiverFinished = true; + + if (isNonReceiverFinished) { + teardown(); + } + } + }, false); + + var promise = new Promise(function(aResolve, aReject) { + document.body.appendChild(receiverIframe); + + aResolve(receiverIframe); + }); + obs.notifyObservers(promise, 'setup-request-promise', null); + + // Create a non-receiver OOP iframe. + var nonReceiverIframe = document.createElement('iframe'); + nonReceiverIframe.setAttribute('remote', 'true'); + nonReceiverIframe.setAttribute('mozbrowser', 'true'); + nonReceiverIframe.setAttribute('src', nonReceiverUrl); + + // This event is triggered when the iframe calls "alert". + nonReceiverIframe.addEventListener('mozbrowsershowmodalprompt', function nonReceiverListener(aEvent) { + var message = aEvent.detail.message; + if (/^OK /.exec(message)) { + ok(true, "Message from iframe: " + message); + } else if (/^KO /.exec(message)) { + ok(false, "Message from iframe: " + message); + } else if (/^INFO /.exec(message)) { + info("Message from iframe: " + message); + } else if (/^COMMAND /.exec(message)) { + var command = JSON.parse(message.replace(/^COMMAND /, '')); + gScript.sendAsyncMessage(command.name, command.data); + } else if (/^DONE$/.exec(message)) { + ok(true, "Messaging from iframe complete."); + nonReceiverIframe.removeEventListener('mozbrowsershowmodalprompt', nonReceiverListener); + + isNonReceiverFinished = true; + + if (isReceiverFinished) { + teardown(); + } + } + }, false); + + document.body.appendChild(nonReceiverIframe); + + gScript.addMessageListener('offer-received', function offerReceivedHandler() { + gScript.removeMessageListener('offer-received', offerReceivedHandler); + info("An offer is received."); + }); + + gScript.addMessageListener('answer-sent', function answerSentHandler(aIsValid) { + gScript.removeMessageListener('answer-sent', answerSentHandler); + ok(aIsValid, "A valid answer is sent."); + }); + + gScript.addMessageListener('control-channel-closed', function controlChannelClosedHandler(aReason) { + gScript.removeMessageListener('control-channel-closed', controlChannelClosedHandler); + is(aReason, SpecialPowers.Cr.NS_OK, "The control channel is closed normally."); + }); + + gScript.addMessageListener('data-transport-notification-enabled', function dataTransportNotificationEnabledHandler() { + gScript.removeMessageListener('data-transport-notification-enabled', dataTransportNotificationEnabledHandler); + info("Data notification is enabled for data transport channel."); + }); + + gScript.addMessageListener('data-transport-closed', function dataTransportClosedHandler(aReason) { + gScript.removeMessageListener('data-transport-closed', dataTransportClosedHandler); + is(aReason, SpecialPowers.Cr.NS_OK, "The data transport should be closed normally."); + }); + + aResolve(); + }); +} + +function testIncomingSessionRequest() { + return new Promise(function(aResolve, aReject) { + gScript.addMessageListener('receiver-launching', function launchReceiverHandler(aSessionId) { + gScript.removeMessageListener('receiver-launching', launchReceiverHandler); + info("Trying to launch receiver page."); + + aResolve(); + }); + + gScript.sendAsyncMessage('trigger-incoming-session-request', receiverUrl); + }); +} + +function teardown() { + gScript.addMessageListener('teardown-complete', function teardownCompleteHandler() { + gScript.removeMessageListener('teardown-complete', teardownCompleteHandler); + gScript.destroy(); + SimpleTest.finish(); + }); + + gScript.sendAsyncMessage('teardown'); +} + +function runTests() { + setup(). + then(testIncomingSessionRequest); +} + +SimpleTest.waitForExplicitFinish(); +SpecialPowers.pushPermissions([ + {type: 'presentation-device-manage', allow: false, context: document}, + {type: 'browser', allow: true, context: document}, +], function() { + SpecialPowers.pushPrefEnv({ 'set': [["dom.presentation.enabled", true], + ["dom.presentation.controller.enabled", false], + ["dom.presentation.receiver.enabled", true], + ["dom.presentation.session_transport.data_channel.enable", false], + ["dom.mozBrowserFramesEnabled", true], + ["network.disable.ipc.security", true], + ["dom.ipc.browser_frames.oop_by_default", true]]}, + runTests); +}); + +</script> +</body> +</html> |