tenfourfox/dom/base/test/referrer_change_server.sjs
Cameron Kaiser c9b2922b70 hello FPR
2017-04-19 00:56:45 -07:00

140 lines
5.0 KiB
JavaScript

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 '<!DOCTYPE HTML>\n\
<html>'+
'<meta name="referrer" content="' + aMetaPolicy + '">' +
'<body>' +
'<a href="' + createTestUrl(aReferrerPolicy, 'test', aName + aReferrerPolicy) + '" id="link">' + aReferrerPolicy + '</a>' +
'<script>' +
// LOAD EVENT (of the test)
// fires when the page is loaded, then click link
// first change meta referrer, then click link
'window.addEventListener("load", function() {\n\
document.getElementsByName("referrer")[0].content = "'+aReferrerPolicy+'";\n\
document.getElementById("link").click();\n\
}.bind(window), false);' +
'</script>\n\
</body>\n\
</html>';
}
function createTest2(aMetaPolicy, aReferrerPolicy, aName) {
return '<!DOCTYPE HTML>\n\
<html>'+
'<meta name="referrer" content="' + aMetaPolicy + '">' +
'<body>' +
'<a href="' + createTestUrl(aReferrerPolicy, 'test', aName + aReferrerPolicy) + '" id="link">' + aReferrerPolicy + '</a>' +
'<script>' +
// LOAD EVENT (of the test)
// fires when the page is loaded, then click link
// first change meta referrer, then click link
'window.addEventListener("load", function() {\n\
document.getElementsByName("referrer")[0].setAttribute("content", "'+aReferrerPolicy+'");\n\
document.getElementById("link").click();\n\
}.bind(window), false);' +
'</script>\n\
</body>\n\
</html>';
}
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;
}
}