summaryrefslogtreecommitdiffstats
path: root/dom/tests/mochitest/whatwg/test_postMessage_origin.xhtml
diff options
context:
space:
mode:
Diffstat (limited to 'dom/tests/mochitest/whatwg/test_postMessage_origin.xhtml')
-rw-r--r--dom/tests/mochitest/whatwg/test_postMessage_origin.xhtml545
1 files changed, 545 insertions, 0 deletions
diff --git a/dom/tests/mochitest/whatwg/test_postMessage_origin.xhtml b/dom/tests/mochitest/whatwg/test_postMessage_origin.xhtml
new file mode 100644
index 000000000..f6a919896
--- /dev/null
+++ b/dom/tests/mochitest/whatwg/test_postMessage_origin.xhtml
@@ -0,0 +1,545 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=417075
+-->
+<head>
+ <title>postMessage from about:blank, data URLs</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>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=417075">Mozilla Bug 417075</a>
+<p id="display"></p>
+<div id="content" style="display: none"></div>
+
+<iframe src="http://mochi.test:8888/tests/dom/tests/mochitest/whatwg/postMessage_origin_helper.xhtml"
+ id="sameDomain"></iframe>
+<iframe src="http://example.com/tests/dom/tests/mochitest/whatwg/postMessage_origin_helper.xhtml"
+ id="otherDomain"></iframe>
+<iframe src="http://example.org:8000/tests/dom/tests/mochitest/whatwg/postMessage_origin_helper.xhtml"
+ id="otherDomainPort"></iframe>
+<iframe src="ftp://mochi.test:27534/tests/dom/tests/mochitest/whatwg/postMessage_origin_helper.xhtml"
+ id="localNoExist"></iframe>
+
+<iframe src="http://sub1.παράδειγμα.δοκιμή/tests/dom/tests/mochitest/whatwg/postMessage_origin_helper.xhtml"
+ id="idnKidWhitelist"></iframe>
+
+<iframe src="http://sub1.exaмple.test/tests/dom/tests/mochitest/whatwg/postMessage_origin_helper.xhtml"
+ id="idnKidNoWhitelist"></iframe>
+
+
+<pre id="test">
+<script class="testbody" type="application/javascript"><![CDATA[
+/** Test for Bug 417075 **/
+
+SimpleTest.waitForExplicitFinish();
+
+function errorCheck(i, called, error, actual)
+{
+ ok(!called, "receiver should not have been called for test #" + i);
+ is(actual, error, "wrong error thrown in test #" + i);
+}
+
+var tests =
+ [
+ // 0
+ {
+ args: ["NOT-RECEIVED", ""],
+ source: "sameDomain",
+ name: "SyntaxError",
+ code: DOMException.SYNTAX_ERR
+ },
+ {
+ args: ["NOT-RECEIVED", "null"],
+ source: "sameDomain",
+ name: "SyntaxError",
+ code: DOMException.SYNTAX_ERR
+ },
+ {
+ args: ["NOT-RECEIVED", "a"],
+ source: "sameDomain",
+ name: "SyntaxError",
+ code: DOMException.SYNTAX_ERR
+ },
+ {
+ args: ["NOT-RECEIVED", "http :"],
+ source: "sameDomain",
+ name: "SyntaxError",
+ code: DOMException.SYNTAX_ERR
+ },
+ {
+ args: ["NOT-RECEIVED", "http: //"],
+ source: "sameDomain",
+ name: "SyntaxError",
+ code: DOMException.SYNTAX_ERR,
+
+ hasThrowsNoExceptionBug: true
+ },
+ // 5
+ {
+ args: ["NOT-RECEIVED", "http ://"],
+ source: "sameDomain",
+ name: "SyntaxError",
+ code: DOMException.SYNTAX_ERR
+ },
+ {
+ args: ["TODO", " http://localhost:8888"],
+ source: "sameDomain",
+ name: "SyntaxError",
+ code: DOMException.SYNTAX_ERR,
+
+ returnOrigin: "http://mochi.test:8888",
+ hasThrowsNoExceptionBug: true
+ },
+ {
+ args: ["NOT-RECEIVED", "hä"],
+ source: "sameDomain",
+ name: "SyntaxError",
+ code: DOMException.SYNTAX_ERR
+ },
+ {
+ args: ["NOT-RECEIVED", "http://lo\0k.com"],
+ source: "sameDomain",
+ name: "SyntaxError",
+ code: DOMException.SYNTAX_ERR
+ },
+ {
+ args: ["NOT-RECEIVED", "http: //localhost:8888"],
+ source: "sameDomain",
+ name: "SyntaxError",
+ code: DOMException.SYNTAX_ERR,
+
+ hasThrowsNoExceptionBug: true
+ },
+ // 10
+ {
+ args: ["NOT-RECEIVED", "http://localhost :8888"],
+ source: "sameDomain",
+ name: "SyntaxError",
+ code: DOMException.SYNTAX_ERR
+ },
+ {
+ args: ["NOT-RECEIVED", "http:// localhost:8888"],
+ source: "sameDomain",
+ name: "SyntaxError",
+ code: DOMException.SYNTAX_ERR,
+
+ hasThrowsNoExceptionBug: true
+ },
+ {
+ args: ["TODO", "http://\nlocalhost:8888"],
+ source: "sameDomain",
+ name: "SyntaxError",
+ code: DOMException.SYNTAX_ERR,
+
+ returnOrigin: "http://mochi.test:8888",
+ hasThrowsNoExceptionBug: true
+ },
+ {
+ args: ["TODO", "http://localhost:8888\0"],
+ source: "sameDomain",
+ name: "SyntaxError",
+ code: DOMException.SYNTAX_ERR,
+
+ returnOrigin: "http://mochi.test:8888",
+ hasThrowsNoExceptionBug: true
+ },
+ {
+ args: ["TODO", "http://localhost:8888\n"],
+ source: "sameDomain",
+ name: "SyntaxError",
+ code: DOMException.SYNTAX_ERR,
+
+ returnOrigin: "http://mochi.test:8888",
+ hasThrowsNoExceptionBug: true
+ },
+ // 15
+ {
+ args: ["PASS", "*"],
+ source: "sameDomain",
+ returnOrigin: "http://mochi.test:8888"
+ },
+ {
+ args: ["PASS", "http://mochi.test:8888"],
+ source: "sameDomain",
+ returnOrigin: "http://mochi.test:8888"
+ },
+ {
+ args: ["PASS", "http://example.com"],
+ source: "otherDomain",
+ returnOrigin: "http://example.com"
+ },
+ {
+ args: ["PASS", "http://example.com/"],
+ source: "otherDomain",
+ returnOrigin: "http://example.com"
+ },
+ {
+ args: ["PASS", "http://example.com:80"],
+ source: "otherDomain",
+ returnOrigin: "http://example.com"
+ },
+ // 20
+ {
+ args: ["PASS", "http://example.com:80/"],
+ source: "otherDomain",
+ returnOrigin: "http://example.com"
+ },
+ {
+ args: ["PASS", "http://example.com:80/foobar"],
+ source: "otherDomain",
+ returnOrigin: "http://example.com"
+ },
+ {
+ args: ["PASS", "http://example.com/foobar"],
+ source: "otherDomain",
+ returnOrigin: "http://example.com"
+ },
+ {
+ args: ["PASS", "http://example.com:8000"],
+ source: "otherDomain",
+ expectNoCallback: true
+ },
+ {
+ args: ["PASS", "http://example.com:8000/"],
+ source: "otherDomain",
+ expectNoCallback: true
+ },
+ // 25
+ {
+ args: ["PASS", "http://example.org:8000"],
+ source: "otherDomainPort",
+ returnOrigin: "http://example.org:8000"
+ },
+ {
+ args: ["PASS", "http://example.org:8000/"],
+ source: "otherDomainPort",
+ returnOrigin: "http://example.org:8000"
+ },
+ {
+ args: ["PASS", "http://example.org:8000/tests/dom/test/mochitest/whatwg/postMessage_origin_helper.xhtml"],
+ source: "otherDomainPort",
+ returnOrigin: "http://example.org:8000"
+ },
+ {
+ args: ["PASS", "http://example.org:8000/tests/dom/test/mochitest/whatwg/this_file_does_not_exist.xhtml"],
+ source: "otherDomainPort",
+ returnOrigin: "http://example.org:8000"
+ },
+ {
+ args: ["PASS", "http://example.org"],
+ source: "otherDomainPort",
+ expectNoCallback: true
+ },
+ // 30
+ {
+ args: ["PASS", "http://example.org:80"],
+ source: "otherDomainPort",
+ expectNoCallback: true
+ },
+ {
+ args: ["PASS", "http://example.org/"],
+ source: "otherDomainPort",
+ expectNoCallback: true
+ },
+ {
+ args: ["PASS", "http://example.org"],
+ source: "otherDomain",
+ expectNoCallback: true
+ },
+ {
+ args: ["PASS", "ftp://mochi.test:8888"],
+ source: "sameDomain",
+ expectNoCallback: true
+ },
+ {
+ args: ["PASS", "http://mochi.test:8888"],
+ source: "sameDomain",
+ returnOrigin: "http://mochi.test:8888"
+ },
+ // 35
+ {
+ args: ["PASS", "http://mochi.test:27534"],
+ source: "sameDomain",
+ expectNoCallback: true
+ },
+ {
+ args: ["PASS", "http://sub1.παράδειγμα.δοκιμή"],
+ source: "idnKidWhitelist",
+ returnOrigin: "http://sub1.παράδειγμα.δοκιμή"
+ },
+ {
+ args: ["PASS", "http://sub1.παράδειγμα.δοκιμή:80"],
+ source: "idnKidWhitelist",
+ returnOrigin: "http://sub1.παράδειγμα.δοκιμή"
+ },
+ {
+ args: ["PASS", "http://sub1.παράδειγμα.δοκιμή:80/"],
+ source: "idnKidWhitelist",
+ returnOrigin: "http://sub1.παράδειγμα.δοκιμή"
+ },
+ {
+ args: ["PASS", "http://sub1.παράδειγμα.δοκιμή:80/foobar"],
+ source: "idnKidWhitelist",
+ returnOrigin: "http://sub1.παράδειγμα.δοκιμή"
+ },
+ // 40
+ {
+ args: ["PASS", "http://sub1.παράδειγμα.δοκιμή/foobar"],
+ source: "idnKidWhitelist",
+ returnOrigin: "http://sub1.παράδειγμα.δοκιμή"
+ },
+ {
+ args: ["PASS", "http://sub1.xn--hxajbheg2az3al.xn--jxalpdlp"],
+ source: "idnKidWhitelist",
+ returnOrigin: "http://sub1.παράδειγμα.δοκιμή"
+ },
+ {
+ args: ["PASS", "http://sub1.xn--hxajbheg2az3al.xn--jxalpdlp:80"],
+ source: "idnKidWhitelist",
+ returnOrigin: "http://sub1.παράδειγμα.δοκιμή"
+ },
+ {
+ args: ["PASS", "http://sub1.xn--hxajbheg2az3al.xn--jxalpdlp:80/"],
+ source: "idnKidWhitelist",
+ returnOrigin: "http://sub1.παράδειγμα.δοκιμή"
+ },
+ {
+ args: ["PASS", "http://sub1.xn--hxajbheg2az3al.xn--jxalpdlp:80/foo"],
+ source: "idnKidWhitelist",
+ returnOrigin: "http://sub1.παράδειγμα.δοκιμή"
+ },
+ // 45
+ {
+ args: ["PASS", "http://sub1.exaмple.test"],
+ source: "idnKidNoWhitelist",
+ returnOrigin: "http://sub1.exaмple.test",
+
+ hasWrongReturnOriginBug: true
+ },
+ {
+ args: ["PASS", "http://sub1.exaмple.test:80"],
+ source: "idnKidNoWhitelist",
+ returnOrigin: "http://sub1.exaмple.test",
+
+ hasWrongReturnOriginBug: true
+ },
+ {
+ args: ["PASS", "http://sub1.exaмple.test:80/"],
+ source: "idnKidNoWhitelist",
+ returnOrigin: "http://sub1.exaмple.test",
+
+ hasWrongReturnOriginBug: true
+ },
+ {
+ args: ["PASS", "http://sub1.exaмple.test/"],
+ source: "idnKidNoWhitelist",
+ returnOrigin: "http://sub1.exaмple.test",
+
+ hasWrongReturnOriginBug: true
+ },
+ {
+ args: ["PASS", "http://sub1.exaмple.test/foobar"],
+ source: "idnKidNoWhitelist",
+ returnOrigin: "http://sub1.exaмple.test",
+
+ hasWrongReturnOriginBug: true
+ },
+ // 50
+ {
+ args: ["PASS", "http://sub1.xn--exaple-kqf.test"],
+ source: "idnKidNoWhitelist",
+ returnOrigin: "http://sub1.exaмple.test",
+
+ hasWrongReturnOriginBug: true
+ },
+ {
+ args: ["PASS", "http://sub1.xn--exaple-kqf.test:80"],
+ source: "idnKidNoWhitelist",
+ returnOrigin: "http://sub1.exaмple.test",
+
+ hasWrongReturnOriginBug: true
+ },
+ {
+ args: ["PASS", "http://sub1.xn--exaple-kqf.test:80/"],
+ source: "idnKidNoWhitelist",
+ returnOrigin: "http://sub1.exaмple.test",
+
+ hasWrongReturnOriginBug: true
+ },
+ {
+ args: ["PASS", "http://sub1.xn--exaple-kqf.test/"],
+ source: "idnKidNoWhitelist",
+ returnOrigin: "http://sub1.exaмple.test",
+
+ hasWrongReturnOriginBug: true
+ },
+ {
+ args: ["PASS", "http://sub1.xn--exaple-kqf.test/foobar"],
+ source: "idnKidNoWhitelist",
+ returnOrigin: "http://sub1.exaмple.test",
+
+ hasWrongReturnOriginBug: true
+ },
+ // 55
+ {
+ args: ["NOT-RECEIVED", undefined],
+ source: "sameDomain",
+ name: "SyntaxError",
+ code: DOMException.SYNTAX_ERR
+ },
+ ];
+
+function allTests(callback)
+{
+ var test, target, called;
+
+ function eventCheck(evt)
+ {
+ ok(test === tests[i],
+ "i and test are out of sync! async is hard, let's go shopping");
+
+ var originCheck = test.hasWrongReturnOriginBug ? todo_is : is;
+ originCheck(evt.origin, test.returnOrigin, "wrong origin for #" + i);
+ if (test.args[0] == "TODO")
+ todo_is(evt.data, "PASS", "wrong data");
+ else
+ is(evt.data, "PASS", "wrong data");
+ is(evt.lastEventId, "",
+ "postMessage creates events with empty lastEventId");
+ ok(evt.source === target, "wrong source");
+ called = true;
+ }
+
+ function nextTest()
+ {
+ i++;
+
+ if (i === end)
+ {
+ removeListener(listener);
+
+ setTimeout(callback, 0);
+ return;
+ }
+
+ test = tests[i];
+
+ target = $(test.source).contentWindow;
+ try
+ {
+ called = false;
+ target.postMessage.apply(target, test.args);
+ }
+ catch (e)
+ {
+ // Since an exception was thrown, we know at this point that we're not
+ // waiting on anything else in the queue of script to run, and we can just
+ // call nextTest directly.
+ errorCheck(i, called, e.name, test.name);
+ errorCheck(i, called, e.code, test.code);
+ nextTest();
+ return;
+ }
+
+ // We've set up the event generated by postMessage to be dispatched, and
+ // it's sitting in a queue somewhere. However, it hasn't arrived yet, and
+ // the target document hasn't received the event -- so we need to continue
+ // our tests later.
+ setTimeout(function()
+ {
+ // The event was dispatched, and the target frame's code processed it and
+ // responded -- so now *that* response is sitting in the queue of script to
+ // execute. Process pending script one more time so we know we've gotten
+ // the response.
+ setTimeout(function()
+ {
+ // Finally, we've posted our message and received our response, and
+ // there's nothing further coming down the pipe.
+ if (test.hasThrowsNoExceptionBug)
+ todo(false, "should throw on test #" + i);
+ else
+ ok(test.expectNoCallback ^ called, "should have been called #" + i);
+
+ nextTest();
+ }, 0);
+ }, 0);
+ }
+
+ var listener = registerMessageListener(eventCheck);
+
+ var i = -1, end = tests.length;
+ nextTest();
+}
+
+function registerMessageListener(func, callback)
+{
+ function receive(evt)
+ {
+ func(evt);
+ if (callback)
+ callback();
+ }
+
+ window.addEventListener("message", receive, false);
+
+ return receive;
+}
+
+function removeListener(listener)
+{
+ window.removeEventListener("message", listener, false);
+}
+
+function oddballTests(callback)
+{
+ var called = false;
+
+ function eventChecks(evt)
+ {
+ is(evt.origin, "http://mochi.test:8888", "wrong sender");
+ is(evt.data, "PASS", "wrong data");
+ is(evt.lastEventId, "",
+ "postMessage creates events with empty lastEventId");
+ ok(evt.source === window, "wrong source");
+ called = true;
+ }
+
+ var listener = registerMessageListener(eventChecks, function()
+ {
+ is(called, true, "should have been called");
+ removeListener(listener);
+
+ called = false;
+ listener = registerMessageListener(eventChecks, function()
+ {
+ is(called, true, "should have been called");
+
+ removeListener(listener);
+ callback();
+ });
+
+ window.postMessage("PASS", "http://mochi.test:8888");
+ });
+
+ window.postMessage("PASS", "http://mochi.test:8888");
+}
+
+function run()
+{
+ oddballTests(function()
+ {
+ allTests(function()
+ {
+ SimpleTest.finish();
+ });
+ });
+}
+
+window.addEventListener("load", run, false);
+]]></script>
+</pre>
+</body>
+</html>