| <!doctype html> |
| <meta charset=utf-8> |
| <meta name=timeout content=long> |
| <meta name=variant content="?method=a"> |
| <meta name=variant content="?method=a&noreferrer"> |
| <meta name=variant content="?method=img"> |
| <meta name=variant content="?method=img&noreferrer"> |
| <meta name=variant content="?method=open"> |
| <meta name=variant content="?method=open&noreferrer"> |
| <meta name=variant content="?method=script"> |
| <meta name=variant content="?method=script&noreferrer"> |
| <script src="/resources/testdriver.js"></script> |
| <script src="/resources/testdriver-vendor.js"></script> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="resources/helpers.js"></script> |
| <body> |
| <script> |
| const waitForRequest = async () => { |
| const url = blankURL(); |
| url.searchParams.set('get-requests', 'true'); |
| |
| for (let i = 0; i < 20; i++) { |
| const resp = await fetch(url); |
| const payload = await resp.json(); |
| if (payload !== null && payload.length > 0) { |
| return payload; |
| } |
| await delay(100); |
| } |
| throw new Error('Timeout polling requests'); |
| }; |
| |
| const searchParams = new URLSearchParams(location.search); |
| |
| promise_test(async t => { |
| const noreferrer = searchParams.has('noreferrer'); |
| |
| await registerAttributionSrc({ |
| method: 'variant', |
| extraQueryParams: {'store-request': 'true'}, |
| referrerPolicy: noreferrer ? 'no-referrer' : '', |
| }); |
| |
| const requests = await waitForRequest(); |
| assert_equals(requests.length, 1); |
| |
| if (noreferrer) { |
| assert_not_own_property(requests[0], 'referer'); |
| } else { |
| assert_own_property(requests[0], 'referer'); |
| assert_equals(requests[0].referer, location.toString()); |
| } |
| |
| }, 'attributionsrc referrer policy is propagated.'); |
| </script> |