diff options
Diffstat (limited to 'dom/base/test/referrer_change_server.sjs')
-rw-r--r-- | dom/base/test/referrer_change_server.sjs | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/dom/base/test/referrer_change_server.sjs b/dom/base/test/referrer_change_server.sjs new file mode 100644 index 0000000000..d37cfb1e5f --- /dev/null +++ b/dom/base/test/referrer_change_server.sjs @@ -0,0 +1,166 @@ +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; + } +} |