Bug 1264792 - Update web platform tests of fetch and serviceworker. r=bkelly
authorThomas Nguyen <tnguyen@mozilla.com>
Mon, 14 Nov 2016 15:15:37 +0800
changeset 322396 b9a3e66abdd17a229713fdeed38e4234841c5a1c
parent 322395 763507de3e4b87d61ec01cb1bc9e16c7b3f9df85
child 322397 f3930acd16b78469b247f33d054413aeb7db0ba0
push id30951
push usercbook@mozilla.com
push dateTue, 15 Nov 2016 11:25:40 +0000
treeherdermozilla-central@85a9d908e91a [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersbkelly
bugs1264792
milestone52.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1264792 - Update web platform tests of fetch and serviceworker. r=bkelly MozReview-Commit-ID: 4btKCi5ZvZ2
testing/web-platform/meta/MANIFEST.json
testing/web-platform/mozilla/meta/MANIFEST.json
testing/web-platform/mozilla/meta/fetch/api/redirect/redirect-referrer.https.html.ini
testing/web-platform/mozilla/tests/fetch/api/redirect/redirect-referrer-mixed-content.js
testing/web-platform/mozilla/tests/fetch/api/redirect/redirect-referrer.https.html
testing/web-platform/tests/fetch/api/redirect/redirect-referrer-worker.html
testing/web-platform/tests/fetch/api/redirect/redirect-referrer.html
testing/web-platform/tests/fetch/api/redirect/redirect-referrer.js
testing/web-platform/tests/fetch/api/request/request-idl.html
testing/web-platform/tests/fetch/api/request/request-init-001.sub.html
testing/web-platform/tests/fetch/api/resources/redirect.py
testing/web-platform/tests/service-workers/service-worker/fetch-event.https.html
--- a/testing/web-platform/meta/MANIFEST.json
+++ b/testing/web-platform/meta/MANIFEST.json
@@ -38612,16 +38612,28 @@
         ],
         "WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.worker.js": [
           {
             "path": "WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.worker.js",
             "timeout": "long",
             "url": "/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.worker"
           }
         ],
+        "fetch/api/redirect/redirect-referrer-worker.html": [
+          {
+            "path": "fetch/api/redirect/redirect-referrer-worker.html",
+            "url": "/fetch/api/redirect/redirect-referrer-worker.html"
+          }
+        ],
+        "fetch/api/redirect/redirect-referrer.html": [
+          {
+            "path": "fetch/api/redirect/redirect-referrer.html",
+            "url": "/fetch/api/redirect/redirect-referrer.html"
+          }
+        ],
         "html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/resume-timer-on-history-back.html": [
           {
             "path": "html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/resume-timer-on-history-back.html",
             "url": "/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/resume-timer-on-history-back.html"
           }
         ],
         "html/browsers/the-window-object/window-open-noopener.html": [
           {
--- a/testing/web-platform/mozilla/meta/MANIFEST.json
+++ b/testing/web-platform/mozilla/meta/MANIFEST.json
@@ -6,16 +6,22 @@
     "testharness": [],
     "wdspec": []
   },
   "local_changes": {
     "deleted": [],
     "deleted_reftests": {},
     "items": {
       "testharness": {
+        "fetch/api/redirect/redirect-referrer.https.html": [
+          {
+            "path": "fetch/api/redirect/redirect-referrer.https.html",
+            "url": "/_mozilla/fetch/api/redirect/redirect-referrer.https.html"
+          }
+        ],
         "html/syntax/parsing/math-parse01.html": [
           {
             "path": "html/syntax/parsing/math-parse01.html",
             "url": "/_mozilla/html/syntax/parsing/math-parse01.html"
           }
         ]
       }
     },
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/mozilla/meta/fetch/api/redirect/redirect-referrer.https.html.ini
@@ -0,0 +1,3 @@
+[redirect-referrer.https.html]
+  type: testharness
+  prefs: [security.mixed_content.block_active_content:false, security.mixed_content.block_display_content:false]
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/mozilla/tests/fetch/api/redirect/redirect-referrer-mixed-content.js
@@ -0,0 +1,51 @@
+if (this.document === undefined) {
+  importScripts("/common/utils.js");
+  importScripts("/resources/testharness.js");
+  importScripts("/fetch/api/resources/utils.js");
+  importScripts("/common/get-host-info.sub.js");
+}
+
+function testReferrerAfterRedirection(desc, redirectUrl, redirectLocation, referrerPolicy, redirectReferrerPolicy, expectedReferrer) {
+  var url = redirectUrl;
+  var urlParameters = "?location=" + encodeURIComponent(redirectLocation);
+
+  if (redirectReferrerPolicy)
+    urlParameters += "&redirect_referrerpolicy=" + redirectReferrerPolicy;
+
+  var requestInit = {"redirect": "follow", "referrerPolicy": referrerPolicy};
+
+    promise_test(function(test) {
+      return fetch(url + urlParameters, requestInit).then(function(response) {
+        assert_equals(response.status, 200, "Inspect header response's status is 200");
+        assert_equals(response.headers.get("x-request-referer"), expectedReferrer ? expectedReferrer : null, "Check referrer header");
+      });
+    }, desc);
+}
+
+var referrerOrigin = get_host_info().HTTPS_ORIGIN + "/";
+var referrerUrl = location.href;
+
+var RESOURCES_DIR = "/fetch/api/resources/";
+var redirectUrl = RESOURCES_DIR + "redirect.py";
+var locationUrl = get_host_info().HTTPS_ORIGIN  + RESOURCES_DIR + "inspect-headers.py?headers=referer";
+var httpLocationUrl =  get_host_info().HTTP_REMOTE_ORIGIN + RESOURCES_DIR + "inspect-headers.py?cors&headers=referer";
+
+testReferrerAfterRedirection("Downgrade, empty init, unsafe-url redirect header ", redirectUrl, httpLocationUrl, "", "unsafe-url", referrerUrl);
+testReferrerAfterRedirection("Downgrade, empty init, no-referrer-when-downgrade redirect header ", redirectUrl, httpLocationUrl, "", "no-referrer-when-downgrade", null);
+testReferrerAfterRedirection("Downgrade, empty init, same-origin redirect header ", redirectUrl, httpLocationUrl, "", "same-origin", null);
+testReferrerAfterRedirection("Downgrade, empty init, origin redirect header ", redirectUrl, httpLocationUrl, "", "origin", referrerOrigin);
+testReferrerAfterRedirection("Downgrade, empty init, origin-when-cross-origin redirect header ", redirectUrl, httpLocationUrl, "", "origin-when-cross-origin", referrerOrigin);
+testReferrerAfterRedirection("Downgrade, empty init, no-referrer redirect header ", redirectUrl, httpLocationUrl, "", "no-referrer", null);
+testReferrerAfterRedirection("Downgrade, empty init, strict-origin redirect header ", redirectUrl, httpLocationUrl, "", "strict-origin", null);
+testReferrerAfterRedirection("Downgrade, empty init, strict-origin-when-cross-origin redirect header ", redirectUrl, httpLocationUrl, "", "strict-origin-when-cross-origin", null);
+
+testReferrerAfterRedirection("Downgrade, empty redirect header, unsafe-url init ", redirectUrl, httpLocationUrl, "unsafe-url", "", referrerUrl);
+testReferrerAfterRedirection("Downgrade, empty redirect header, no-referrer-when-downgrade init ", redirectUrl, httpLocationUrl, "no-referrer-when-downgrade", "", null);
+testReferrerAfterRedirection("Downgrade, empty redirect header, same-origin init ", redirectUrl, httpLocationUrl, "same-origin", "", null);
+testReferrerAfterRedirection("Downgrade, empty redirect header, origin init ", redirectUrl, httpLocationUrl, "origin", "", referrerOrigin);
+testReferrerAfterRedirection("Downgrade, empty redirect header, origin-when-cross-origin init ", redirectUrl, httpLocationUrl, "origin-when-cross-origin", "", referrerOrigin);
+testReferrerAfterRedirection("Downgrade, empty redirect header, no-referrer init ", redirectUrl, httpLocationUrl, "no-referrer", "", null);
+testReferrerAfterRedirection("Downgrade, empty redirect header, strict-origin init ", redirectUrl, httpLocationUrl, "strict-origin", "", null);
+testReferrerAfterRedirection("Downgrade, empty redirect header, strict-origin-when-cross-origin init ", redirectUrl, httpLocationUrl, "strict-origin-when-cross-origin", "", null);
+
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/mozilla/tests/fetch/api/redirect/redirect-referrer.https.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <title>Fetch: redirect referrer handling, mixed content</title>
+    <meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
+    <meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
+    <meta name="help" href="https://fetch.spec.whatwg.org/#http-redirect-fetch">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+  </head>
+  <body>
+    <script src="/common/utils.js"></script>
+    <script src="/fetch/api/resources/utils.js"></script>
+    <script src="/common/get-host-info.sub.js"></script>
+    <script src="redirect-referrer-mixed-content.js"></script>
+  </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/fetch/api/redirect/redirect-referrer-worker.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <title>Fetch in worker: redirect referrer handling</title>
+    <meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
+    <meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
+    <meta name="help" href="https://fetch.spec.whatwg.org/#http-redirect-fetch">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+  </head>
+  <body>
+    <script>
+      fetch_tests_from_worker(new Worker("redirect-referrer.js"));
+    </script>
+  </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/fetch/api/redirect/redirect-referrer.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <title>Fetch: redirect referrer handling</title>
+    <meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
+    <meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
+    <meta name="help" href="https://fetch.spec.whatwg.org/#http-redirect-fetch">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+  </head>
+  <body>
+    <script src="/common/utils.js"></script>
+    <script src="../resources/utils.js"></script>
+    <script src="/common/get-host-info.sub.js"></script>
+    <script src="redirect-referrer.js"></script>
+  </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/fetch/api/redirect/redirect-referrer.js
@@ -0,0 +1,68 @@
+if (this.document === undefined) {
+  importScripts("/common/utils.js");
+  importScripts("/resources/testharness.js");
+  importScripts("../resources/utils.js");
+  importScripts("/common/get-host-info.sub.js");
+}
+
+function testReferrerAfterRedirection(desc, redirectUrl, redirectLocation, referrerPolicy, redirectReferrerPolicy, expectedReferrer) {
+  var url = redirectUrl;
+  var urlParameters = "?location=" + encodeURIComponent(redirectLocation);
+
+  if (redirectReferrerPolicy)
+    urlParameters += "&redirect_referrerpolicy=" + redirectReferrerPolicy;
+
+  var requestInit = {"redirect": "follow", "referrerPolicy": referrerPolicy};
+
+    promise_test(function(test) {
+      return fetch(url + urlParameters, requestInit).then(function(response) {
+        assert_equals(response.status, 200, "Inspect header response's status is 200");
+        assert_equals(response.headers.get("x-request-referer"), expectedReferrer ? expectedReferrer : null, "Check referrer header");
+      });
+    }, desc);
+}
+
+var referrerOrigin = get_host_info().HTTP_ORIGIN + "/";
+var referrerUrl = location.href;
+
+var redirectUrl = RESOURCES_DIR + "redirect.py";
+var locationUrl = get_host_info().HTTP_ORIGIN + dirname(location.pathname) + RESOURCES_DIR + "inspect-headers.py?headers=referer";
+var crossLocationUrl =  get_host_info().HTTP_REMOTE_ORIGIN + dirname(location.pathname) + RESOURCES_DIR + "inspect-headers.py?cors&headers=referer";
+
+testReferrerAfterRedirection("Same origin redirection, empty init, unsafe-url redirect header ", redirectUrl, locationUrl, "", "unsafe-url", referrerUrl);
+testReferrerAfterRedirection("Same origin redirection, empty init, no-referrer-when-downgrade redirect header ", redirectUrl, locationUrl, "", "no-referrer-when-downgrade", referrerUrl);
+testReferrerAfterRedirection("Same origin redirection, empty init, same-origin redirect header ", redirectUrl, locationUrl, "", "same-origin", referrerUrl);
+testReferrerAfterRedirection("Same origin redirection, empty init, origin redirect header ", redirectUrl, locationUrl, "", "origin", referrerOrigin);
+testReferrerAfterRedirection("Same origin redirection, empty init, origin-when-cross-origin redirect header ", redirectUrl, locationUrl, "", "origin-when-cross-origin", referrerUrl);
+testReferrerAfterRedirection("Same origin redirection, empty init, no-referrer redirect header ", redirectUrl, locationUrl, "", "no-referrer", null);
+testReferrerAfterRedirection("Same origin redirection, empty init, strict-origin redirect header ", redirectUrl, locationUrl, "", "strict-origin", referrerOrigin);
+testReferrerAfterRedirection("Same origin redirection, empty init, strict-origin-when-cross-origin redirect header ", redirectUrl, locationUrl, "", "strict-origin-when-cross-origin", referrerUrl);
+
+testReferrerAfterRedirection("Same origin redirection, empty redirect header, unsafe-url init ", redirectUrl, locationUrl, "unsafe-url", "", referrerUrl);
+testReferrerAfterRedirection("Same origin redirection, empty redirect header, no-referrer-when-downgrade init ", redirectUrl, locationUrl, "no-referrer-when-downgrade", "", referrerUrl);
+testReferrerAfterRedirection("Same origin redirection, empty redirect header, same-origin init ", redirectUrl, locationUrl, "same-origin", "", referrerUrl);
+testReferrerAfterRedirection("Same origin redirection, empty redirect header, origin init ", redirectUrl, locationUrl, "origin", "", referrerOrigin);
+testReferrerAfterRedirection("Same origin redirection, empty redirect header, origin-when-cross-origin init ", redirectUrl, locationUrl, "origin-when-cross-origin", "", referrerUrl);
+testReferrerAfterRedirection("Same origin redirection, empty redirect header, no-referrer init ", redirectUrl, locationUrl, "no-referrer", "", null);
+testReferrerAfterRedirection("Same origin redirection, empty redirect header, strict-origin init ", redirectUrl, locationUrl, "strict-origin", "", referrerOrigin);
+testReferrerAfterRedirection("Same origin redirection, empty redirect header, strict-origin-when-cross-origin init ", redirectUrl, locationUrl, "strict-origin-when-cross-origin", "", referrerUrl);
+
+testReferrerAfterRedirection("Cross origin redirection, empty init, unsafe-url redirect header ", redirectUrl, crossLocationUrl, "", "unsafe-url", referrerUrl);
+testReferrerAfterRedirection("Cross origin redirection, empty init, no-referrer-when-downgrade redirect header ", redirectUrl, crossLocationUrl, "", "no-referrer-when-downgrade", referrerUrl);
+testReferrerAfterRedirection("Cross origin redirection, empty init, same-origin redirect header ", redirectUrl, crossLocationUrl, "", "same-origin", null);
+testReferrerAfterRedirection("Cross origin redirection, empty init, origin redirect header ", redirectUrl, crossLocationUrl, "", "origin", referrerOrigin);
+testReferrerAfterRedirection("Cross origin redirection, empty init, origin-when-cross-origin redirect header ", redirectUrl, crossLocationUrl, "", "origin-when-cross-origin", referrerOrigin);
+testReferrerAfterRedirection("Cross origin redirection, empty init, no-referrer redirect header ", redirectUrl, crossLocationUrl, "", "no-referrer", null);
+testReferrerAfterRedirection("Cross origin redirection, empty init, strict-origin redirect header ", redirectUrl, crossLocationUrl, "", "strict-origin", referrerOrigin);
+testReferrerAfterRedirection("Cross origin redirection, empty init, strict-origin-when-cross-origin redirect header ", redirectUrl, crossLocationUrl, "", "strict-origin-when-cross-origin", referrerOrigin);
+
+testReferrerAfterRedirection("Cross origin redirection, empty redirect header, unsafe-url init ", redirectUrl, crossLocationUrl, "unsafe-url", "", referrerUrl);
+testReferrerAfterRedirection("Cross origin redirection, empty redirect header, no-referrer-when-downgrade init ", redirectUrl, crossLocationUrl, "no-referrer-when-downgrade", "", referrerUrl);
+testReferrerAfterRedirection("Cross origin redirection, empty redirect header, same-origin init ", redirectUrl, crossLocationUrl, "same-origin", "", null);
+testReferrerAfterRedirection("Cross origin redirection, empty redirect header, origin init ", redirectUrl, crossLocationUrl, "origin", "", referrerOrigin);
+testReferrerAfterRedirection("Cross origin redirection, empty redirect header, origin-when-cross-origin init ", redirectUrl, crossLocationUrl, "origin-when-cross-origin", "", referrerOrigin);
+testReferrerAfterRedirection("Cross origin redirection, empty redirect header, no-referrer init ", redirectUrl, crossLocationUrl, "no-referrer", "", null);
+testReferrerAfterRedirection("Cross origin redirection, empty redirect header, strict-origin init ", redirectUrl, crossLocationUrl, "strict-origin", "", referrerOrigin);
+testReferrerAfterRedirection("Cross origin redirection, empty redirect header, strict-origin-when-cross-origin init ", redirectUrl, crossLocationUrl, "strict-origin-when-cross-origin", "", referrerOrigin);
+
+done();
--- a/testing/web-platform/tests/fetch/api/request/request-idl.html
+++ b/testing/web-platform/tests/fetch/api/request/request-idl.html
@@ -65,17 +65,21 @@
       };
 
       enum RequestType { "", "audio", "font", "image", "script", "style", "track", "video" };
       enum RequestDestination { "", "document", "sharedworker", "subresource", "unknown", "worker" };
       enum RequestMode { "navigate", "same-origin", "no-cors", "cors" };
       enum RequestCredentials { "omit", "same-origin", "include" };
       enum RequestCache { "default", "no-store", "reload", "no-cache", "force-cache", "only-if-cached" };
       enum RequestRedirect { "follow", "error", "manual" };
-      enum ReferrerPolicy { "", "no-referrer", "no-referrer-when-downgrade", "origin-only", "origin-when-cross-origin", "unsafe-url" };
+      enum ReferrerPolicy {
+        "", "no-referrer", "no-referrer-when-downgrade", "origin",
+        "origin-when-cross-origin", "unsafe-url", "same-origin", "strict-origin",
+        "strict-origin-when-cross-origin"
+      };
     </script>
     <script>
       var idlsArray = new IdlArray();
       var idl = document.getElementById("body-idl").innerHTML
       idl += document.getElementById("request-idl").innerHTML
 
       idlsArray.add_idls(idl);
       idlsArray.add_untested_idls("interface Headers {};");
--- a/testing/web-platform/tests/fetch/api/request/request-init-001.sub.html
+++ b/testing/web-platform/tests/fetch/api/request/request-init-001.sub.html
@@ -26,24 +26,30 @@
                                            ""
                                           ]
       };
       var referrerPolicies = {"givenValues" : [ "",
                                                 "no-referrer",
                                                 "no-referrer-when-downgrade",
                                                 "origin",
                                                 "origin-when-cross-origin",
-                                                "unsafe-url"
+                                                "unsafe-url",
+                                                "same-origin",
+                                                "strict-origin",
+                                                "strict-origin-when-cross-origin"
                                               ],
                               "expectedValues" : ["",
                                                   "no-referrer",
                                                   "no-referrer-when-downgrade",
                                                   "origin",
                                                   "origin-when-cross-origin",
-                                                  "unsafe-url"
+                                                  "unsafe-url",
+                                                  "same-origin",
+                                                  "strict-origin",
+                                                  "strict-origin-when-cross-origin"
                                                   ]
       };
       var modes = {"givenValues" : ["same-origin", "no-cors", "cors"],
                    "expectedValues" : ["same-origin", "no-cors", "cors"]
       };
       var credentials = {"givenValues" : ["omit", "same-origin", "include"],
                           "expectedValues" : ["omit", "same-origin", "include"]
       };
--- a/testing/web-platform/tests/fetch/api/resources/redirect.py
+++ b/testing/web-platform/tests/fetch/api/resources/redirect.py
@@ -37,16 +37,19 @@ def main(request, response):
         if scheme == "" or scheme == "http" or scheme == "https":
             url += "&" if '?' in url else "?"
             #keep url parameters in location
             url += urlencode({key: request.GET.first(key) for key in request.GET.keys()})
             #make sure location changes during redirection loop
             url += "&count=" + str(stashed_data['count'])
         headers.append(("Location", url))
 
+    if "redirect_referrerpolicy" in request.GET:
+        headers.append(("Referrer-Policy", request.GET['redirect_referrerpolicy']))
+
     if token:
         request.server.stash.put(request.GET.first("token"), stashed_data)
         if "max_count" in request.GET:
             max_count =  int(request.GET['max_count'])
             #stop redirecting and return count
             if stashed_data['count'] > max_count:
                 # -1 because the last is not a redirection
                 return str(stashed_data['count'] - 1)
--- a/testing/web-platform/tests/service-workers/service-worker/fetch-event.https.html
+++ b/testing/web-platform/tests/service-workers/service-worker/fetch-event.https.html
@@ -83,17 +83,17 @@ function run_referrer_policy_tests(frame
                          '/resources/simple.html?referrerFull';
           return frame.contentWindow.fetch(http_url,
                                            {method: "GET", referrer: referrer});
         })
       .then(function(response) { return response.text(); })
       .then(function(response_text) {
           assert_equals(
             response_text,
-            'Referrer: about:client\n' +
+            'Referrer: \n' +
             'ReferrerPolicy: no-referrer-when-downgrade',
             'Service Worker should respond to fetch with no referrer when a member of RequestInit is present with an HTTP request');
           return frame.contentWindow.fetch('resources/simple.html?referrerFull',
                                            {referrerPolicy: "", referrer: referrer});
         })
       .then(function(response) { return response.text(); })
       .then(function(response_text) {
           assert_equals(
@@ -105,17 +105,17 @@ function run_referrer_policy_tests(frame
                          '/resources/simple.html?referrerFull';
           return frame.contentWindow.fetch(http_url,
                                            {referrerPolicy: "", referrer: referrer});
         })
       .then(function(response) { return response.text(); })
       .then(function(response_text) {
           assert_equals(
             response_text,
-            'Referrer: about:client\n' +
+            'Referrer: \n' +
             'ReferrerPolicy: no-referrer-when-downgrade',
             'Service Worker should respond to fetch with no referrer with ""');
           return frame.contentWindow.fetch('resources/simple.html?referrerFull',
                                            {referrerPolicy: "origin", referrer: referrer});
         })
       .then(function(response) { return response.text(); })
       .then(function(response_text) {
           assert_equals(
@@ -171,17 +171,17 @@ function run_referrer_policy_tests(frame
                          '/resources/simple.html?referrerFull';
           return frame.contentWindow.fetch(http_url,
                                            {referrerPolicy: "no-referrer-when-downgrade", referrer: referrer});
         })
       .then(function(response) { return response.text(); })
       .then(function(response_text) {
           assert_equals(
             response_text,
-            'Referrer: about:client\n' +
+            'Referrer: \n' +
             'ReferrerPolicy: no-referrer-when-downgrade',
             'Service Worker should respond to fetch with no referrer with "no-referrer-when-downgrade" and an HTTP request');
           var http_url = get_host_info()['HTTP_ORIGIN'] + base_path() +
                          '/resources/simple.html?referrerFull';
           return frame.contentWindow.fetch(http_url, {referrerPolicy: "unsafe-url", referrer: referrer});
         })
       .then(function(response) { return response.text(); })
       .then(function(response_text) {
@@ -192,19 +192,109 @@ function run_referrer_policy_tests(frame
             'Service Worker should respond to fetch with no referrer with "unsafe-url"');
           return frame.contentWindow.fetch('resources/simple.html?referrerFull',
                                            {referrerPolicy: "no-referrer", referrer: referrer});
         })
       .then(function(response) { return response.text(); })
       .then(function(response_text) {
           assert_equals(
             response_text,
-            'Referrer: about:client\n' +
+            'Referrer: \n' +
             'ReferrerPolicy: no-referrer',
             'Service Worker should respond to fetch with no referrer URL with "no-referrer"');
+          return frame.contentWindow.fetch('resources/simple.html?referrerFull',
+                                           {referrerPolicy: "same-origin", referrer: referrer});
+        })
+      .then(function(response) { return response.text(); })
+      .then(function(response_text) {
+          assert_equals(
+            response_text,
+            'Referrer: ' + href + '\n' +
+            'ReferrerPolicy: same-origin',
+            'Service Worker should respond to fetch with referrer URL with "same-origin" and a same origin request');
+          var http_url = get_host_info()['HTTPS_REMOTE_ORIGIN'] + base_path() +
+                         '/resources/simple.html?referrerFull';
+          return frame.contentWindow.fetch(http_url,
+                                           {referrerPolicy: "same-origin", referrer: referrer});
+        })
+      .then(function(response) { return response.text(); })
+      .then(function(response_text) {
+          assert_equals(
+            response_text,
+            'Referrer: \n' +
+            'ReferrerPolicy: same-origin',
+            'Service Worker should respond to fetch with no referrer with "same-origin" and cross origin request');
+          var http_url = get_host_info()['HTTPS_REMOTE_ORIGIN'] + base_path() +
+                         '/resources/simple.html?referrerFull';
+          return frame.contentWindow.fetch(http_url,
+                                           {referrerPolicy: "strict-origin", referrer: referrer});
+        })
+      .then(function(response) { return response.text(); })
+      .then(function(response_text) {
+          assert_equals(
+            response_text,
+            'Referrer: ' + origin + '/' + '\n' +
+            'ReferrerPolicy: strict-origin',
+            'Service Worker should respond to fetch with the referrer origin  with "strict-origin" and a HTTPS cross origin request');
+          return frame.contentWindow.fetch('resources/simple.html?referrerFull',
+                                           {referrerPolicy: "strict-origin", referrer: referrer});
+        })
+      .then(function(response) { return response.text(); })
+      .then(function(response_text) {
+          assert_equals(
+            response_text,
+            'Referrer: ' + origin + '/' + '\n' +
+            'ReferrerPolicy: strict-origin',
+            'Service Worker should respond to fetch with the referrer origin with "strict-origin" and a same origin request');
+          var http_url = get_host_info()['HTTP_ORIGIN'] + base_path() +
+                         '/resources/simple.html?referrerFull';
+          return frame.contentWindow.fetch(http_url,
+                                           {referrerPolicy: "strict-origin", referrer: referrer});
+        })
+      .then(function(response) { return response.text(); })
+      .then(function(response_text) {
+          assert_equals(
+            response_text,
+            'Referrer: \n' +
+            'ReferrerPolicy: strict-origin',
+            'Service Worker should respond to fetch with no referrer with "strict-origin" and a HTTP request');
+          return frame.contentWindow.fetch('resources/simple.html?referrerFull',
+                                           {referrerPolicy: "strict-origin-when-cross-origin", referrer: referrer});
+        })
+      .then(function(response) { return response.text(); })
+      .then(function(response_text) {
+          assert_equals(
+            response_text,
+            'Referrer: ' + href + '\n' +
+            'ReferrerPolicy: strict-origin-when-cross-origin',
+            'Service Worker should respond to fetch with the referrer URL with "strict-origin-when-cross-origin" and a same origin request');
+          var http_url = get_host_info()['HTTPS_REMOTE_ORIGIN'] + base_path() +
+                         '/resources/simple.html?referrerFull';
+          return frame.contentWindow.fetch(http_url,
+                                           {referrerPolicy: "strict-origin-when-cross-origin", referrer: referrer});
+        })
+      .then(function(response) { return response.text(); })
+      .then(function(response_text) {
+          assert_equals(
+            response_text,
+            'Referrer: ' + origin + '/' + '\n' +
+            'ReferrerPolicy: strict-origin-when-cross-origin',
+            'Service Worker should respond to fetch with the referrer origin with "strict-origin-when-cross-origin" and a HTTPS cross origin request');
+          var http_url = get_host_info()['HTTP_ORIGIN'] + base_path() +
+                         '/resources/simple.html?referrerFull';
+          return frame.contentWindow.fetch(http_url,
+                                           {referrerPolicy: "strict-origin-when-cross-origin", referrer: referrer});
+        })
+      .then(function(response) { return response.text(); })
+      .then(function(response_text) {
+          assert_equals(
+            response_text,
+            'Referrer: \n' +
+            'ReferrerPolicy: strict-origin-when-cross-origin',
+            'Service Worker should respond to fetch with no referrer with "strict-origin-when-cross-origin" and a HTTP request');
         });
 }
 
 async_test(function(t) {
     var scope = 'resources/simple.html?referrerPolicy';
     var frame;
     service_worker_unregister_and_register(t, worker, scope)
       .then(function(reg) {