Bug 1264164 - Add Fetch redirect referrer policy test case. r?ehsan draft
authorThomas Nguyen <tnguyen@mozilla.com>
Wed, 31 Aug 2016 11:09:11 +0800
changeset 407841 abddee6822c7821de697d95c6acc41f4c120ac9d
parent 407840 791ba875174c48bc34c7367bd457256680c50ed1
child 529961 5bbcdad1fb630d75501432b6f5bd6b5746d74b00
push id28055
push usertnguyen@mozilla.com
push dateWed, 31 Aug 2016 03:09:37 +0000
reviewersehsan
bugs1264164
milestone51.0a1
Bug 1264164 - Add Fetch redirect referrer policy test case. r?ehsan MozReview-Commit-ID: 8tb0e57xSBW
dom/base/test/mochitest.ini
dom/base/test/referrer_testserver.sjs
dom/base/test/test_referrer_redirect_fetch.html
--- 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>
+
+