referrer_change_server.sjs (4986B)
1 var BASE_URL = "example.com/tests/dom/base/test/referrer_change_server.sjs"; 2 3 function createTestUrl(aPolicy, aAction, aName) { 4 return ( 5 "http://" + 6 BASE_URL + 7 "?" + 8 "action=" + 9 aAction + 10 "&" + 11 "policy=" + 12 aPolicy + 13 "&" + 14 "name=" + 15 aName + 16 "&" + 17 "type=link" 18 ); 19 } 20 21 function createTest(aMetaPolicy, aReferrerPolicy, aName) { 22 return ( 23 "<!DOCTYPE HTML>\n\ 24 <html>" + 25 '<meta name="referrer" content="' + 26 aMetaPolicy + 27 '">' + 28 "<body>" + 29 '<a href="' + 30 createTestUrl(aReferrerPolicy, "test", aName + aReferrerPolicy) + 31 '" id="link">' + 32 aReferrerPolicy + 33 "</a>" + 34 "<script>" + 35 // LOAD EVENT (of the test) 36 // fires when the page is loaded, then click link 37 // first change meta referrer, then click link 38 'window.addEventListener("load", function() {\n\ 39 document.getElementsByName("referrer")[0].content = "' + 40 aReferrerPolicy + 41 '";\n\ 42 document.getElementById("link").click();\n\ 43 }.bind(window), false);' + 44 "</script>\n\ 45 </body>\n\ 46 </html>" 47 ); 48 } 49 50 function createTest2(aMetaPolicy, aReferrerPolicy, aName) { 51 return ( 52 "<!DOCTYPE HTML>\n\ 53 <html>" + 54 '<meta name="referrer" content="' + 55 aMetaPolicy + 56 '">' + 57 "<body>" + 58 '<a href="' + 59 createTestUrl(aReferrerPolicy, "test", aName + aReferrerPolicy) + 60 '" id="link">' + 61 aReferrerPolicy + 62 "</a>" + 63 "<script>" + 64 // LOAD EVENT (of the test) 65 // fires when the page is loaded, then click link 66 // first change meta referrer, then click link 67 'window.addEventListener("load", function() {\n\ 68 document.getElementsByName("referrer")[0].setAttribute("content", "' + 69 aReferrerPolicy + 70 '");\n\ 71 document.getElementById("link").click();\n\ 72 }.bind(window), false);' + 73 "</script>\n\ 74 </body>\n\ 75 </html>" 76 ); 77 } 78 79 function handleRequest(request, response) { 80 var sharedKey = "referrer_change_server.sjs"; 81 var params = request.queryString.split("&"); 82 var action = params[0].split("=")[1]; 83 84 if (action === "resetState") { 85 var state = getSharedState(sharedKey); 86 state = {}; 87 setSharedState(sharedKey, JSON.stringify(state)); 88 response.write(""); 89 return; 90 } 91 if (action === "test") { 92 // ?action=test&policy=origin&name=name 93 var policy = params[1].split("=")[1]; 94 var name = params[2].split("=")[1]; 95 var type = params[3].split("=")[1]; 96 var result = getSharedState(sharedKey); 97 98 if (result === "") { 99 result = {}; 100 } else { 101 result = JSON.parse(result); 102 } 103 104 if (!result.tests) { 105 result.tests = {}; 106 } 107 108 var referrerLevel = "none"; 109 var test = {}; 110 if (request.hasHeader("Referer")) { 111 let referrer = request.getHeader("Referer"); 112 if (referrer.indexOf("referrer_change_server") > 0) { 113 referrerLevel = "full"; 114 } else if (referrer == "http://mochi.test:8888") { 115 referrerLevel = "origin"; 116 } 117 test.referrer = request.getHeader("Referer"); 118 } else { 119 test.referrer = ""; 120 } 121 test.policy = referrerLevel; 122 test.expected = policy; 123 124 result.tests[name] = test; 125 126 setSharedState(sharedKey, JSON.stringify(result)); 127 128 // forward link click to redirect URL to finish test 129 if (type === "link") { 130 var loc = 131 "https://example.com/tests/dom/base/test/file_change_policy_redirect.html"; 132 response.setStatusLine("1.1", 302, "Found"); 133 response.setHeader("Location", loc, false); 134 } 135 136 return; 137 } 138 if (action === "get-test-results") { 139 // ?action=get-result 140 response.setHeader("Cache-Control", "no-cache", false); 141 response.setHeader("Content-Type", "text/plain", false); 142 response.write(getSharedState(sharedKey)); 143 return; 144 } 145 if (action === "generate-policy-test") { 146 // ?action=generate-policy-test&referrerPolicy=b64-encoded-string&name=name&newPolicy=b64-encoded-string 147 response.setHeader("Cache-Control", "no-cache", false); 148 response.setHeader("Content-Type", "text/html; charset=utf-8", false); 149 var referrerPolicy = unescape(params[1].split("=")[1]); 150 var name = unescape(params[2].split("=")[1]); 151 var newPolicy = params[3].split("=")[1]; 152 153 response.write(createTest(referrerPolicy, newPolicy, name)); 154 return; 155 } 156 if (action === "generate-policy-test2") { 157 // ?action=generate-policy-test2&referrerPolicy=b64-encoded-string&name=name&newPolicy=b64-encoded-string 158 response.setHeader("Cache-Control", "no-cache", false); 159 response.setHeader("Content-Type", "text/html; charset=utf-8", false); 160 var referrerPolicy = unescape(params[1].split("=")[1]); 161 var name = unescape(params[2].split("=")[1]); 162 var newPolicy = params[3].split("=")[1]; 163 164 response.write(createTest2(referrerPolicy, newPolicy, name)); 165 return; 166 } 167 168 response.write("I don't know action " + action); 169 }