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"/>
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
13 <script type=
"application/javascript">
15 SimpleTest.waitForExplicitFinish();
16 var advance = function() { tests.next(); };
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.
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 () {
38 xhr.onerror = function () {
41 xhr.open('GET', aUrl, true);
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',
51 var results = xhr.response;
52 info(JSON.stringify(xhr.response));
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 + ')');
61 ok(false,
"Can't get results from the counter server.");
66 function resetState() {
67 doXHR('/tests/dom/base/test/referrer_change_server.sjs?action=resetState',
70 ok(false,
"error in reset state");
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
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]] },
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']);
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']);
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";
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']);
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']);
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']);
129 <body onload=
"tests.next();">
130 <iframe id=
"testframe"></iframe>