test_change_policy.html (4590B)
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"/> 8 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"> 14 15 SimpleTest.waitForExplicitFinish(); 16 var advance = function() { tests.next(); }; 17 18 /** 19 * Listen for notifications from the child. 20 * These are sent in case of error, or when the loads we await have completed. 21 */ 22 window.addEventListener("message", function(event) { 23 if (event.data == "childLoadComplete") { 24 // all loads happen, continue the test. 25 advance(); 26 } 27 }); 28 29 /** 30 * helper to perform an XHR. 31 */ 32 function doXHR(aUrl, onSuccess, onFail) { 33 var xhr = new XMLHttpRequest(); 34 xhr.responseType = "json"; 35 xhr.onload = function () { 36 onSuccess(xhr); 37 }; 38 xhr.onerror = function () { 39 onFail(xhr); 40 }; 41 xhr.open('GET', aUrl, true); 42 xhr.send(null); 43 } 44 45 /** 46 * Grabs the results via XHR and passes to checker. 47 */ 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)); 53 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 + ')'); 57 } 58 advance(); 59 }, 60 function(xhr) { 61 ok(false, "Can't get results from the counter server."); 62 SimpleTest.finish(); 63 }); 64 } 65 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 }); 73 } 74 75 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. 80 */ 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"; 84 85 yield SpecialPowers.pushPrefEnv( 86 { set: [["network.http.referer.disallowCrossSiteRelaxingDefault", false]] }, 87 advance 88 ); 89 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']); 94 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']); 99 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']); 104 105 sjs = "/tests/dom/base/test/referrer_change_server.sjs?action=generate-policy-test2"; 106 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']); 111 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']); 116 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']); 121 122 // complete. 123 SimpleTest.finish(); 124 })(); 125 126 </script> 127 </head> 128 129 <body onload="tests.next();"> 130 <iframe id="testframe"></iframe> 131 132 </body> 133 </html>