summaryrefslogtreecommitdiffstats
path: root/dom/base/test/referrer_change_server.sjs
diff options
context:
space:
mode:
Diffstat (limited to 'dom/base/test/referrer_change_server.sjs')
-rw-r--r--dom/base/test/referrer_change_server.sjs166
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;
+ }
+}