var BASE_URL = "example.com/tests/dom/base/test/referrer_change_server.sjs"; function createTestUrl(aPolicy, aAction, aName) { return ( "http://" + BASE_URL + "?" + "action=" + aAction + "&" + "policy=" + aPolicy + "&" + "name=" + aName + "&" + "type=link" ); } function createTest(aMetaPolicy, aReferrerPolicy, aName) { return ( "\n\ " + '' + "" + '' + aReferrerPolicy + "" + "\n\ \n\ " ); } function createTest2(aMetaPolicy, aReferrerPolicy, aName) { return ( "\n\ " + '' + "" + '' + aReferrerPolicy + "" + "\n\ \n\ " ); } function handleRequest(request, response) { var sharedKey = "referrer_change_server.sjs"; var params = request.queryString.split("&"); var action = params[0].split("=")[1]; if (action === "resetState") { var state = getSharedState(sharedKey); state = {}; setSharedState(sharedKey, JSON.stringify(state)); response.write(""); return; } else if (action === "test") { // ?action=test&policy=origin&name=name var policy = params[1].split("=")[1]; var name = params[2].split("=")[1]; var type = params[3].split("=")[1]; var result = getSharedState(sharedKey); if (result === "") { result = {}; } else { result = JSON.parse(result); } if (!result.tests) { result.tests = {}; } var referrerLevel = "none"; var test = {}; if (request.hasHeader("Referer")) { let referrer = request.getHeader("Referer"); if (referrer.indexOf("referrer_change_server") > 0) { referrerLevel = "full"; } else if (referrer == "http://mochi.test:8888") { referrerLevel = "origin"; } test.referrer = request.getHeader("Referer"); } else { test.referrer = ""; } test.policy = referrerLevel; test.expected = policy; result.tests[name] = test; setSharedState(sharedKey, JSON.stringify(result)); // forward link click to redirect URL to finish test if (type === "link") { var loc = "https://example.com/tests/dom/base/test/file_change_policy_redirect.html"; response.setStatusLine("1.1", 302, "Found"); response.setHeader("Location", loc, false); } return; } else if (action === "get-test-results") { // ?action=get-result response.setHeader("Cache-Control", "no-cache", false); response.setHeader("Content-Type", "text/plain", false); response.write(getSharedState(sharedKey)); return; } else if (action === "generate-policy-test") { // ?action=generate-policy-test&referrerPolicy=b64-encoded-string&name=name&newPolicy=b64-encoded-string response.setHeader("Cache-Control", "no-cache", false); response.setHeader("Content-Type", "text/html; charset=utf-8", false); var referrerPolicy = unescape(params[1].split("=")[1]); var name = unescape(params[2].split("=")[1]); var newPolicy = params[3].split("=")[1]; response.write(createTest(referrerPolicy, newPolicy, name)); return; } else if (action === "generate-policy-test2") { // ?action=generate-policy-test2&referrerPolicy=b64-encoded-string&name=name&newPolicy=b64-encoded-string response.setHeader("Cache-Control", "no-cache", false); response.setHeader("Content-Type", "text/html; charset=utf-8", false); var referrerPolicy = unescape(params[1].split("=")[1]); var name = unescape(params[2].split("=")[1]); var newPolicy = params[3].split("=")[1]; response.write(createTest2(referrerPolicy, newPolicy, name)); return; } else { response.write("I don't know action " + action); return; } }