diff options
Diffstat (limited to 'testing/web-platform/tests/portals/portals-referrer.html')
-rw-r--r-- | testing/web-platform/tests/portals/portals-referrer.html | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/testing/web-platform/tests/portals/portals-referrer.html b/testing/web-platform/tests/portals/portals-referrer.html new file mode 100644 index 0000000000..4cd3b90895 --- /dev/null +++ b/testing/web-platform/tests/portals/portals-referrer.html @@ -0,0 +1,61 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<script> +promise_test(async () => { + assert_implements('HTMLPortalElement' in self, 'HTMLPortalElement is required for this test'); + let portal = document.createElement('portal'); + let referrerPromise = new Promise((resolve, reject) => { + portal.addEventListener('message', e => resolve(e.data), {once: true}); + }); + portal.src = 'resources/postmessage-referrer.sub.html'; + document.body.appendChild(portal); + try { + let {httpReferrer, documentReferrer} = await referrerPromise; + assert_equals(httpReferrer, location.href, 'HTTP Referer header should be sent by default'); + assert_equals(documentReferrer, location.href, 'document.referrer should be present by default'); + } finally { + document.body.removeChild(portal); + } +}, "portal contents should be loaded with referrer"); + +promise_test(async () => { + assert_implements('HTMLPortalElement' in self, 'HTMLPortalElement is required for this test'); + let portal = document.createElement('portal'); + portal.referrerPolicy = 'no-referrer'; + let referrerPromise = new Promise((resolve, reject) => { + portal.addEventListener('message', e => resolve(e.data), {once: true}); + }); + portal.src = 'resources/postmessage-referrer.sub.html'; + document.body.appendChild(portal); + try { + let {httpReferrer, documentReferrer} = await referrerPromise; + assert_equals(httpReferrer, 'no-http-referrer', 'No HTTP Referer header should be sent'); + assert_equals(documentReferrer, 'no-document-referrer', 'No document.referrer should be present'); + } finally { + document.body.removeChild(portal); + } +}, "portal contents should be loaded with no referrer if referrerpolicy=no-referrer"); + +promise_test(async () => { + assert_implements('HTMLPortalElement' in self, 'HTMLPortalElement is required for this test'); + let portal = document.createElement('portal'); + portal.referrerPolicy = 'origin'; + let referrerPromise = new Promise((resolve, reject) => { + portal.addEventListener('message', e => resolve(e.data), {once: true}); + }); + portal.src = 'resources/postmessage-referrer.sub.html'; + document.body.appendChild(portal); + try { + let {httpReferrer, documentReferrer} = await referrerPromise; + assert_equals(httpReferrer, location.origin + '/', 'HTTP Referer header should contain origin'); + assert_equals(documentReferrer, location.origin + '/', 'document.referrer should contain origin'); + } finally { + document.body.removeChild(portal); + } +}, "portal contents should be loaded with origin only if referrerpolicy=origin"); + +// This is not exhaustive coverage of all possible policies, which are tested elsewhere. +</script> +</body> |