gecko-dev/dom/presentation/tests/mochitest/file_presentation_receiver....

140 строки
3.9 KiB
HTML

<!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">
"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.");
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(aEvent) {
is(aEvent.data, incomingMessage, "An incoming message should be received.");
aResolve();
}, {once: true});
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>