зеркало из https://github.com/mozilla/gecko-dev.git
140 строки
5.0 KiB
JavaScript
140 строки
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;
|
|
}
|
|
}
|