<!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>