| <!DOCTYPE html> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/common/get-host-info.sub.js"></script> |
| <script src="resources/test-helpers.sub.js"></script> |
| <body> |
| <script> |
| var worker = 'resources/fetch-event-test-worker.js'; |
| |
| function do_test(referrer, value, expected, name) |
| { |
| test(() => { |
| assert_equals(value, expected); |
| }, name + (referrer ? " - Custom Referrer" : " - Default Referrer")); |
| } |
| |
| function run_referrer_policy_tests(frame, referrer, href, origin) { |
| return frame.contentWindow.fetch('resources/simple.html?referrerFull', |
| {method: "GET", referrer: referrer}) |
| .then(function(response) { return response.text(); }) |
| .then(function(response_text) { |
| do_test(referrer, |
| response_text, |
| 'Referrer: ' + href + '\n' + |
| 'ReferrerPolicy: no-referrer-when-downgrade', |
| 'Service Worker should respond to fetch with the referrer URL when a member of RequestInit is present'); |
| var http_url = get_host_info()['HTTP_ORIGIN'] + base_path() + |
| '/resources/simple.html?referrerFull'; |
| return frame.contentWindow.fetch(http_url, |
| {method: "GET", referrer: referrer}); |
| }) |
| .then(function(response) { return response.text(); }) |
| .then(function(response_text) { |
| do_test(referrer, |
| response_text, |
| '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) { |
| do_test(referrer, |
| response_text, |
| 'Referrer: ' + href + '\n' + |
| 'ReferrerPolicy: no-referrer-when-downgrade', |
| 'Service Worker should respond to fetch with the referrer with ""'); |
| var http_url = get_host_info()['HTTP_ORIGIN'] + base_path() + |
| '/resources/simple.html?referrerFull'; |
| return frame.contentWindow.fetch(http_url, |
| {referrerPolicy: "", referrer: referrer}); |
| }) |
| .then(function(response) { return response.text(); }) |
| .then(function(response_text) { |
| do_test(referrer, |
| response_text, |
| '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) { |
| do_test(referrer, |
| response_text, |
| 'Referrer: ' + origin + '/' + '\n' + |
| 'ReferrerPolicy: origin', |
| 'Service Worker should respond to fetch with the referrer origin with "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: "origin", referrer: referrer}); |
| }) |
| .then(function(response) { return response.text(); }) |
| .then(function(response_text) { |
| do_test(referrer, |
| response_text, |
| 'Referrer: ' + origin + '/' + '\n' + |
| 'ReferrerPolicy: origin', |
| 'Service Worker should respond to fetch with the referrer origin with "origin" and a cross origin request'); |
| return frame.contentWindow.fetch('resources/simple.html?referrerFull', |
| {referrerPolicy: "origin-when-cross-origin", referrer: referrer}); |
| }) |
| .then(function(response) { return response.text(); }) |
| .then(function(response_text) { |
| do_test(referrer, |
| response_text, |
| 'Referrer: ' + href + '\n' + |
| 'ReferrerPolicy: origin-when-cross-origin', |
| 'Service Worker should respond to fetch with the referrer URL with "origin-when-cross-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: "origin-when-cross-origin", referrer: referrer}); |
| }) |
| .then(function(response) { return response.text(); }) |
| .then(function(response_text) { |
| do_test(referrer, |
| response_text, |
| 'Referrer: ' + origin + '/' + '\n' + |
| 'ReferrerPolicy: origin-when-cross-origin', |
| 'Service Worker should respond to fetch with the referrer origin with "origin-when-cross-origin" and a cross origin request'); |
| return frame.contentWindow.fetch('resources/simple.html?referrerFull', |
| {referrerPolicy: "no-referrer-when-downgrade", referrer: referrer}); |
| }) |
| .then(function(response) { return response.text(); }) |
| .then(function(response_text) { |
| do_test(referrer, |
| response_text, |
| 'Referrer: ' + href + '\n' + |
| 'ReferrerPolicy: no-referrer-when-downgrade', |
| 'Service Worker should respond to fetch with no referrer with "no-referrer-when-downgrade" 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: "no-referrer-when-downgrade", referrer: referrer}); |
| }) |
| .then(function(response) { return response.text(); }) |
| .then(function(response_text) { |
| do_test(referrer, |
| response_text, |
| '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) { |
| do_test(referrer, |
| response_text, |
| 'Referrer: ' + href + '\n' + |
| 'ReferrerPolicy: unsafe-url', |
| '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) { |
| do_test(referrer, |
| response_text, |
| '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) { |
| do_test(referrer, |
| 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) { |
| do_test(referrer, |
| 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) { |
| do_test(referrer, |
| 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) { |
| do_test(referrer, |
| 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) { |
| do_test(referrer, |
| 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) { |
| do_test(referrer, |
| 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) { |
| do_test(referrer, |
| 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) { |
| do_test(referrer, |
| 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'); |
| }); |
| } |
| |
| promise_test(function(t) { |
| var scope = 'resources/simple.html?referrerPolicy'; |
| var frame; |
| return service_worker_unregister_and_register(t, worker, scope) |
| .then(function(reg) { |
| t.add_cleanup(function() { |
| return service_worker_unregister(t, scope); |
| }); |
| |
| return wait_for_state(t, reg.installing, 'activated'); |
| }) |
| .then(function() { return with_iframe(scope); }) |
| .then(function(f) { |
| frame = f; |
| test(() => { |
| assert_equals(frame.contentDocument.body.textContent, 'ReferrerPolicy: no-referrer-when-downgrade'); |
| }, 'Service Worker should respond to fetch with the default referrer policy'); |
| // First, run the referrer policy tests without passing a referrer in RequestInit. |
| return run_referrer_policy_tests(frame, undefined, frame.contentDocument.location.href, |
| frame.contentDocument.location.origin); |
| }) |
| .then(function() { |
| // Now, run the referrer policy tests while passing a referrer in RequestInit. |
| var referrer = get_host_info()['HTTPS_ORIGIN'] + base_path() + 'resources/fake-referrer'; |
| return run_referrer_policy_tests(frame, 'fake-referrer', referrer, |
| frame.contentDocument.location.origin); |
| }) |
| .then(function() { |
| frame.remove(); |
| }); |
| }, 'Service Worker responds to fetch event with the referrer policy'); |
| |
| </script> |
| </body> |