132 lines
3.3 KiB
HTML
132 lines
3.3 KiB
HTML
<body>
|
|
<p>Test cross-frame MessagePort communication.</p>
|
|
<p>Should be a series of SUCCESS messages, followed with DONE.</p>
|
|
<pre id=log></pre>
|
|
<script>
|
|
function log(message)
|
|
{
|
|
document.getElementById("log").innerHTML += message + "<br>";
|
|
}
|
|
|
|
if (window.testRunner) {
|
|
testRunner.dumpAsText();
|
|
testRunner.waitUntilDone();
|
|
}
|
|
|
|
var mainPort;
|
|
|
|
var allTests;
|
|
var currentTest = 0;
|
|
|
|
function nextTest()
|
|
{
|
|
var fun = "postMessage";
|
|
var testFunNo = Math.floor(currentTest / 2);
|
|
if (testFunNo < allTests.length)
|
|
{
|
|
var test = allTests[testFunNo];
|
|
currentTest++;
|
|
test(fun);
|
|
}
|
|
else
|
|
{
|
|
done();
|
|
}
|
|
}
|
|
|
|
function test(postMessageFun)
|
|
{
|
|
var channel = new MessageChannel;
|
|
|
|
window.frames[0][postMessageFun]("msg", "*", [channel.port2]);
|
|
mainPort = channel.port1;
|
|
mainPort[postMessageFun]("ping");
|
|
mainPort.onmessage = function(evt) {
|
|
if (evt.data == "pong" && evt.origin == "")
|
|
log("Simple exchange: SUCCESS");
|
|
else
|
|
log("Simple exchange: FAIL. Got message '" + evt.data + "' from '" + evt.origin + "'.");
|
|
nextTest();
|
|
};
|
|
}
|
|
|
|
function test2(postMessageFun)
|
|
{
|
|
var channel = new MessageChannel;
|
|
mainPort[postMessageFun]("newPort", [channel.port2]);
|
|
channel.port1.onmessage = function(evt) {
|
|
if (evt.data == "yo" && evt.origin == "")
|
|
log("Posted port: SUCCESS");
|
|
else
|
|
log("Posted port: FAIL. Got message '" + evt.data + "' from '" + evt.origin + "'.");
|
|
nextTest();
|
|
};
|
|
}
|
|
|
|
function test3(postMessageFun)
|
|
{
|
|
var channel = new MessageChannel;
|
|
channel.port1[postMessageFun]("1");
|
|
var started = false;
|
|
channel.port2.addEventListener("message", function(evt) {
|
|
if (started) {
|
|
log("Event Listener: SUCCESS");
|
|
nextTest();
|
|
} else
|
|
log("Event Listener: FAIL. Event listener called before start()");
|
|
});
|
|
setTimeout(function() {
|
|
channel.port2.start();
|
|
started = true;
|
|
}, 100);
|
|
|
|
}
|
|
|
|
function test4(postMessageFun)
|
|
{
|
|
var channel = new MessageChannel;
|
|
channel.port1[postMessageFun]("1");
|
|
channel.port1.close();
|
|
channel.port1[postMessageFun]("2");
|
|
channel.port2.onmessage = function(evt) {
|
|
if (evt.data == "1") {
|
|
log("Closed port: SUCCESS");
|
|
nextTest();
|
|
} else
|
|
log("Closed port: FAIL. Got message: " + evt.data + " after close");
|
|
}
|
|
}
|
|
|
|
function test5(postMessageFun)
|
|
{
|
|
// Create a channel and put some messages in it which will go undelivered and should not leak
|
|
var channel = new MessageChannel;
|
|
channel.port1[postMessageFun]("abcde");
|
|
nextTest();
|
|
}
|
|
|
|
function test6(postMessageFun)
|
|
{
|
|
var channel = new MessageChannel;
|
|
channel.port1[postMessageFun]("howdy");
|
|
channel.port2.onmessage = function(event) {
|
|
log("MessageEvent.cancelable defaults to " + event.cancelable + ": " + (event.cancelable ? "FAIL" : "PASS"));
|
|
nextTest();
|
|
}
|
|
}
|
|
|
|
function done() {
|
|
// Wait a short period of time to ensure no messages come in from previous tests.
|
|
setTimeout(function() {
|
|
log("DONE");
|
|
if (window.testRunner)
|
|
testRunner.notifyDone();
|
|
}, 100);
|
|
}
|
|
|
|
allTests = [ test, test2, test3, test4, test5, test6 ]
|
|
|
|
</script>
|
|
<iframe src="resources/message-port-iframe.html" onload="nextTest()"></iframe>
|
|
</body>
|