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; } }