diff options
Diffstat (limited to 'dom/tests/mochitest/whatwg/test_postMessage_closed.html')
-rw-r--r-- | dom/tests/mochitest/whatwg/test_postMessage_closed.html | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/dom/tests/mochitest/whatwg/test_postMessage_closed.html b/dom/tests/mochitest/whatwg/test_postMessage_closed.html new file mode 100644 index 0000000000..5a6f3f9286 --- /dev/null +++ b/dom/tests/mochitest/whatwg/test_postMessage_closed.html @@ -0,0 +1,78 @@ +<!DOCTYPE html> +<html> +<head> + <title>postMessage's interaction with closed windows</title> + <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="text/javascript" src="browserFu.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> +</head> +<body> +<p><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=417075">Bug 417075</a></p> +<p id="display"></p> +<div id="content" style="display: none"></div> + +<div id="holder"></div> + +<pre id="test"> +<script class="testbody" type="application/javascript"> + +SimpleTest.waitForExplicitFinish(); + +function receiveMessage(evt) +{ + is(evt.origin, "http://mochi.test:8888", "wrong origin"); + ok(evt.source === openedWindow, "wrong source"); + is(evt.lastEventId, "", "postMessage creates events with empty lastEventId"); + + is(evt.data, "message", "wrong data"); + if (evt.data !== "message") + return; // prevent recursion if bugs + + evt.source.close(); + + function afterClose() + { + document.removeEventListener("message", receiveMessage, false); + evt.source.postMessage("NOT-RECEIVED", "*"); + + var iframe = document.createElement("iframe"); + iframe.id = "insertedIframe"; + $("holder").appendChild(iframe); + iframe.addEventListener("load", iframeLoaded, false); + iframe.src = "postMessage_closed_helper.html?parent"; + } + + setTimeout(afterClose, 0); +} + +window.addEventListener("message", receiveMessage, false); + +function iframeLoaded(evt) +{ + var iframe = $("insertedIframe"); + iframe.removeEventListener("load", iframeLoaded, false); + + var iframeWindow = iframe.contentWindow; + $("holder").removeChild($("insertedIframe")); + iframeWindow.postMessage("NOT-RECEIVED", "*"); + + SimpleTest.finish(); +} + +var openedWindow; + +function run() +{ + openedWindow = window.open("postMessage_closed_helper.html?opener", "foobar"); + if (!openedWindow) + { + ok(false, "this test must be run with popup blocking disabled"); + SimpleTest.finish(); + } +} + +window.addEventListener("load", run, false); +</script> +</pre> +</body> +</html> |