Bug 1264164 - Add Fetch redirect referrer policy test case. r?ehsan
MozReview-Commit-ID: 8tb0e57xSBW
--- a/dom/base/test/mochitest.ini
+++ b/dom/base/test/mochitest.ini
@@ -773,16 +773,17 @@ skip-if = (buildapp == 'b2g' || buildapp
support-files = worker_postMessages.js
[test_processing_instruction_update_stylesheet.xhtml]
[test_progress_events_for_gzip_data.html]
[test_range_bounds.html]
skip-if = toolkit == 'android'
[test_reentrant_flush.html]
skip-if = toolkit == 'android'
[test_referrer_redirect.html]
+[test_referrer_redirect_fetch.html]
[test_root_iframe.html]
[test_screen_orientation.html]
[test_script_loader_crossorigin_data_url.html]
[test_setInterval_uncatchable_exception.html]
skip-if = debug == false
[test_settimeout_extra_arguments.html]
[test_settimeout_inner.html]
[test_setTimeoutWith0.html]
--- a/dom/base/test/referrer_testserver.sjs
+++ b/dom/base/test/referrer_testserver.sjs
@@ -147,16 +147,42 @@ function createRedirectImgTestCase(aPara
window.addEventListener("load", function() {
parent.postMessage("childLoadComplete", "http://mochi.test:8888");
}.bind(window), false);
</script>
</body>
</html>`;
}
+function createRedirectFetchTestCase(aParams, aAttributePolicy) {
+ var metaString = "";
+ if (aParams.has("META_POLICY")) {
+ metaString = `<meta name="referrer" content="${aParams.get('META_POLICY')}">`;
+ }
+ aParams.delete("ACTION");
+ aParams.append("ACTION", "redirectFetch");
+ var srcUrl = "http://" + CROSS_ORIGIN + aParams.toString();
+
+ return `<!DOCTYPE HTML>
+ <html>
+ <head>
+ <meta charset="utf-8">
+ ${metaString}
+ <title>Test referrer policies on redirect (img)</title>
+ </head>
+ <body>
+ <script>
+ fetch("${srcUrl}").then(function (response) {
+ window.parent.postMessage("childLoadComplete", "http://mochi.test:8888");
+ });
+ </script>
+ </body>
+ </html>`;
+}
+
// test page using link referrer attribute
function createLinkPageUsingRefferer(aMetaPolicy, aAttributePolicy, aNewAttributePolicy, aName, aRel, aStringBuilder, aSchemeFrom, aSchemeTo, aTestType) {
var metaString = "";
if (aMetaPolicy) {
metaString = `<meta name="referrer" content="${aMetaPolicy}">`;
}
var relString = "";
if (aRel) {
@@ -208,16 +234,18 @@ function buildLinkString(aPolicy, aName,
}
function handleRequest(request, response) {
var params = new URLSearchParams(request.queryString);
var action = params.get("ACTION");
var schemeFrom = params.get("SCHEME_FROM") || "http";
var schemeTo = params.get("SCHEME_TO") || "http";
+ response.setHeader("Access-Control-Allow-Origin", "*", false);
+
if (action === "resetState") {
setSharedState(SHARED_KEY, "{}");
response.write("");
return;
}
if (action === "get-test-results") {
// ?action=get-result
response.setHeader("Cache-Control", "no-cache", false);
@@ -233,16 +261,30 @@ function handleRequest(request, response
params.delete("ACTION");
params.append("ACTION", "test");
params.append("type", "img");
// 302 found, 301 Moved Permanently, 303 See Other, 307 Temporary Redirect
response.setStatusLine("1.1", 302, "found");
response.setHeader("Location", "http://" + CROSS_ORIGIN + params.toString(), false);
return;
}
+
+ if (action === "redirectFetch"){
+ params.delete("ACTION");
+ params.append("ACTION", "test");
+ params.append("type", "img");
+ // 302 found, 301 Moved Permanently, 303 See Other, 307 Temporary Redirect
+ response.setStatusLine("1.1", 302, "found");
+ response.setHeader("Location", "http://" + CROSS_ORIGIN + params.toString(), false);
+ if (params.has("HEADER_POLICY")) {
+ response.setHeader("Referrer-Policy", params.get("HEADER_POLICY"), false);
+ }
+ return;
+ }
+
if (action === "redirectIframe"){
params.delete("ACTION");
params.append("ACTION", "test");
params.append("type", "iframe");
// 302 found, 301 Moved Permanently, 303 See Other, 307 Temporary Redirect
response.setStatusLine("1.1", 302, "found");
response.setHeader("Location", "http://" + CROSS_ORIGIN + params.toString(), false);
return;
@@ -358,16 +400,22 @@ function handleRequest(request, response
return;
}
// redirect tests with img and iframe
if (action === "generate-img-redirect-policy-test") {
response.write(createRedirectImgTestCase(params, attributePolicy));
return;
}
+
+ if (action === "generate-fetch-redirect-policy-test") {
+ response.write(createRedirectFetchTestCase(params, metaPolicy));
+ return;
+ }
+
if (action === "generate-iframe-redirect-policy-test") {
response.write(createIframeTestPageUsingRefferer(metaPolicy, attributePolicy, newAttributePolicy, name, params,
schemeFrom, schemeTo));
return;
}
var _getPage = createLinkPageUsingRefferer.bind(null, metaPolicy, attributePolicy, newAttributePolicy, name, rel);
var _getLinkPage = _getPage.bind(null, buildLinkString, schemeFrom, schemeTo);
new file mode 100644
--- /dev/null
+++ b/dom/base/test/test_referrer_redirect_fetch.html
@@ -0,0 +1,59 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Test anchor and area policy attribute for Bug 1184781</title>
+ <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+
+ <!--
+ Testing referrer headers after redirects.
+ -->
+
+ <script type="application/javascript;version=1.8">
+
+ const SJS = "://example.com/tests/dom/base/test/referrer_testserver.sjs?";
+ const PARAMS = ["HEADER_POLICY", "META_POLICY"];
+
+ const testCases = [
+ {ACTION: ["generate-fetch-redirect-policy-test"],
+ TESTS: [
+ {
+ META_POLICY: "unsafe-url",
+ HEADER_POLICY: "no-referrer",
+ NAME: "unsafe-url-in-meta-no-referrer-header",
+ DESC: "unsafe-url in meta-no-referrer-header",
+ RESULT: "none"
+ },
+ {
+ META_POLICY: "origin",
+ HEADER_POLICY: "no-referrer",
+ NAME: "origin-in-meta-no-referrer-header",
+ DESC: "origin in meta-no-referrer-header",
+ RESULT: "none"
+ },
+ {
+ META_POLICY: "no-referrer",
+ HEADER_POLICY: "unsafe-url",
+ NAME: "no-referrer-in-meta-unsafe-url-header",
+ DESC: "no-referrer in meta-unsafe-url-header",
+ RESULT: "full"
+ },
+ {
+ META_POLICY: "origin-when-cross-origin",
+ HEADER_POLICY: "unsafe-url",
+ NAME: "origin-when-cross-origin-in-meta-unsafe-url-header",
+ DESC: "origin-when-cross-origin in meta-unsafe-url-header",
+ RESULT: "full"
+ },
+ ]}
+ ];
+ </script>
+ <script type="application/javascript;version=1.7" src="/tests/dom/base/test/referrer_helper.js"></script>
+</head>
+<body onload="tests.next();">
+ <iframe id="testframe"></iframe>
+</body>
+</html>
+
+