diff options
Diffstat (limited to 'dom/presentation/tests/mochitest/file_presentation_receiver.html')
-rw-r--r-- | dom/presentation/tests/mochitest/file_presentation_receiver.html | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/dom/presentation/tests/mochitest/file_presentation_receiver.html b/dom/presentation/tests/mochitest/file_presentation_receiver.html new file mode 100644 index 000000000..46a330b5f --- /dev/null +++ b/dom/presentation/tests/mochitest/file_presentation_receiver.html @@ -0,0 +1,140 @@ +<!DOCTYPE HTML> +<html> +<head> + <meta charset="utf-8"> + <title>Test for B2G PresentationReceiver at receiver side</title> +</head> +<body> +<div id="content"></div> +<script type="application/javascript;version=1.7"> + +"use strict"; + +function is(a, b, msg) { + alert((a === b ? 'OK ' : 'KO ') + msg); +} + +function ok(a, msg) { + alert((a ? 'OK ' : 'KO ') + msg); +} + +function info(msg) { + alert('INFO ' + msg); +} + +function command(msg) { + alert('COMMAND ' + JSON.stringify(msg)); +} + +function finish() { + alert('DONE'); +} + +var connection; + +function testConnectionAvailable() { + return new Promise(function(aResolve, aReject) { + ok(navigator.presentation, "navigator.presentation should be available in receiving pages."); + ok(navigator.presentation.receiver, "navigator.presentation.receiver should be available in receiving pages."); + + navigator.presentation.receiver.connectionList.then( + function(aList) { + is(aList.connections.length, 1, "Should get one conncetion."); + connection = aList.connections[0]; + ok(connection.id, "Connection ID should be set: " + connection.id); + is(connection.state, "connected", "Connection state at receiver side should be connected."); + aResolve(); + }, + function(aError) { + ok(false, "Error occurred when getting the connection list: " + aError); + finish(); + aReject(); + } + ); + command({ name: 'trigger-incoming-offer' }); + }); +} + +function testDefaultRequestIsUndefined() { + return new Promise(function(aResolve, aReject) { + is(navigator.presentation.defaultRequest, undefined, "navigator.presentation.defaultRequest should not be available in receiving UA"); + aResolve(); + }); +} + +function testConnectionAvailableSameOriginInnerIframe() { + return new Promise(function(aResolve, aReject) { + var iframe = document.createElement('iframe'); + iframe.setAttribute('src', './file_presentation_receiver_inner_iframe.html'); + document.body.appendChild(iframe); + + aResolve(); + }); +} + +function testConnectionUnavailableDiffOriginInnerIframe() { + return new Promise(function(aResolve, aReject) { + var iframe = document.createElement('iframe'); + iframe.setAttribute('src', 'http://example.com/tests/dom/presentation/tests/mochitest/file_presentation_non_receiver_inner_iframe.html'); + document.body.appendChild(iframe); + + aResolve(); + }); +} + +function testConnectionListSameObject() { + return new Promise(function(aResolve, aReject) { + is(navigator.presentation.receiver.connectionList, navigator.presentation.receiver.connectionList, "The promise should be the same object."); + var promise = navigator.presentation.receiver.connectionList.then( + function(aList) { + is(connection, aList.connections[0], "The connection from list and the one from |connectionavailable| event should be the same."); + aResolve(); + }, + function(aError) { + ok(false, "Error occurred when getting the connection list: " + aError); + finish(); + aReject(); + } + ); + }); +} + +function testIncomingMessage() { + return new Promise(function(aResolve, aReject) { + const incomingMessage = "test incoming message"; + + connection.addEventListener('message', function messageHandler(aEvent) { + connection.removeEventListener('message', messageHandler); + is(aEvent.data, incomingMessage, "An incoming message should be received."); + aResolve(); + }); + + command({ name: 'trigger-incoming-message', + data: incomingMessage }); + }); +} + +function testCloseConnection() { + return new Promise(function(aResolve, aReject) { + connection.onclose = function() { + connection.onclose = null; + is(connection.state, "closed", "Connection should be closed."); + aResolve(); + }; + + connection.close(); + }); +} + +testConnectionAvailable(). +then(testDefaultRequestIsUndefined). +then(testConnectionAvailableSameOriginInnerIframe). +then(testConnectionUnavailableDiffOriginInnerIframe). +then(testConnectionListSameObject). +then(testIncomingMessage). +then(testCloseConnection). +then(finish); + +</script> +</body> +</html> |