Backed out changeset 2450366cf7ca (bug 1891629) for causing win msix mochitest failures
[gecko.git] / dom / base / test / test_change_policy.html
blob536b7ed77644350a06eec17f5f69f432afe55c6a
1 <!DOCTYPE HTML>
2 <html>
3 <head>
4 <meta charset="utf-8">
5 <title>Test policies for Bug 1101288</title>
6 <script src="/tests/SimpleTest/SimpleTest.js"></script>
7 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
9 <!--
10 This checks if the right policies are applied from a given string when the policy is changed after the document has been loaded.
11 https://bugzilla.mozilla.org/show_bug.cgi?id=1101288
12 -->
13 <script type="application/javascript">
15 SimpleTest.waitForExplicitFinish();
16 var advance = function() { tests.next(); };
18 /**
19 * Listen for notifications from the child.
20 * These are sent in case of error, or when the loads we await have completed.
22 window.addEventListener("message", function(event) {
23 if (event.data == "childLoadComplete") {
24 // all loads happen, continue the test.
25 advance();
27 });
29 /**
30 * helper to perform an XHR.
32 function doXHR(aUrl, onSuccess, onFail) {
33 var xhr = new XMLHttpRequest();
34 xhr.responseType = "json";
35 xhr.onload = function () {
36 onSuccess(xhr);
38 xhr.onerror = function () {
39 onFail(xhr);
41 xhr.open('GET', aUrl, true);
42 xhr.send(null);
45 /**
46 * Grabs the results via XHR and passes to checker.
48 function checkIndividualResults(aTestname, aExpectedReferrer, aName) {
49 doXHR('/tests/dom/base/test/referrer_change_server.sjs?action=get-test-results',
50 function(xhr) {
51 var results = xhr.response;
52 info(JSON.stringify(xhr.response));
54 for (i in aName) {
55 ok(aName[i] in results.tests, aName[i] + " tests have to be performed.");
56 is(results.tests[aName[i]].policy, aExpectedReferrer[i], aTestname + ' --- ' + results.tests[aName[i]].policy + ' (' + results.tests[aName[i]].referrer + ')');
58 advance();
60 function(xhr) {
61 ok(false, "Can't get results from the counter server.");
62 SimpleTest.finish();
63 });
66 function resetState() {
67 doXHR('/tests/dom/base/test/referrer_change_server.sjs?action=resetState',
68 advance,
69 function(xhr) {
70 ok(false, "error in reset state");
71 SimpleTest.finish();
72 });
76 /**
77 * This is the main test routine -- serialized by use of a generator.
78 * It resets the counter, then performs two tests in sequence using
79 * the same iframe.
81 var tests = (function*() {
82 var iframe = document.getElementById("testframe");
83 var sjs = "/tests/dom/base/test/referrer_change_server.sjs?action=generate-policy-test";
85 yield SpecialPowers.pushPrefEnv(
86 { set: [["network.http.referer.disallowCrossSiteRelaxingDefault", false]] },
87 advance
90 yield resetState();
91 var name = "no-referrer-unsafe-url";
92 yield iframe.src = sjs + "&policy=" + escape('no-referrer') + "&name=" + name + "&newPolicy=" + escape('unsafe-url');
93 yield checkIndividualResults("unsafe-url (changed) with no-referrer first", ["full"], [name+'unsafe-url']);
95 yield resetState();
96 var name = "origin-no-referrer";
97 yield iframe.src = sjs + "&policy=" + escape('origin') + "&name=" + name + "&newPolicy=" + escape('no-referrer');
98 yield checkIndividualResults("no-referrer (changed) with origin first", ["none"], [name+'no-referrer']);
100 yield resetState();
101 var name = "unsafe-url-no-referrer";
102 yield iframe.src = sjs + "&policy=" + escape('unsafe-url') + "&name=" + name + "&newPolicy=" + escape('no-referrer');
103 yield checkIndividualResults("no-referrer (changed) with unsafe-url first", ["none"], [name+'no-referrer']);
105 sjs = "/tests/dom/base/test/referrer_change_server.sjs?action=generate-policy-test2";
107 yield resetState();
108 var name = "no-referrer-unsafe-url";
109 yield iframe.src = sjs + "&policy=" + escape('no-referrer') + "&name=" + name + "&newPolicy=" + escape('unsafe-url');
110 yield checkIndividualResults("unsafe-url (changed) with no-referrer first", ["full"], [name+'unsafe-url']);
112 yield resetState();
113 var name = "origin-no-referrer";
114 yield iframe.src = sjs + "&policy=" + escape('origin') + "&name=" + name + "&newPolicy=" + escape('no-referrer');
115 yield checkIndividualResults("no-referrer (changed) with origin first", ["none"], [name+'no-referrer']);
117 yield resetState();
118 var name = "unsafe-url-no-referrer";
119 yield iframe.src = sjs + "&policy=" + escape('unsafe-url') + "&name=" + name + "&newPolicy=" + escape('no-referrer');
120 yield checkIndividualResults("no-referrer (changed) with unsafe-url first", ["none"], [name+'no-referrer']);
122 // complete.
123 SimpleTest.finish();
124 })();
126 </script>
127 </head>
129 <body onload="tests.next();">
130 <iframe id="testframe"></iframe>
132 </body>
133 </html>