| <!doctype html> |
| <meta charset=utf-8> |
| <meta name=timeout content=long> |
| <meta name=variant content="?method=a&expected-eligible=navigation-source"> |
| <meta name=variant content="?method=area&expected-eligible=navigation-source"> |
| <meta name=variant content="?method=img&expected-eligible=event-source, trigger"> |
| <meta name=variant content="?method=img&eligible&expected-eligible=event-source, trigger"> |
| <meta name=variant content="?method=open&expected-eligible=navigation-source"> |
| <meta name=variant content="?method=script&expected-eligible=event-source, trigger"> |
| <meta name=variant content="?method=script&eligible&expected-eligible=event-source, trigger"> |
| <meta name=variant content="?method=fetch"> |
| <meta name=variant content='?method=fetch&eligible={"eventSourceEligible":true,"triggerEligible":false}&expected-eligible=event-source'> |
| <meta name=variant content="?method=xhr"> |
| <meta name=variant content='?method=xhr&eligible={"eventSourceEligible":true,"triggerEligible":false}&expected-eligible=event-source'> |
| <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); |
| const expected_eligible = |
| searchParams.get('expected-eligible') === null ? undefined : searchParams.get('expected-eligible'); |
| |
| promise_test(async t => { |
| // Set mixed-case query params to ensure that they are propagated correctly. |
| registerAttributionSrc({ |
| method: 'variant', |
| extraQueryParams: {'aB': 'Cd', 'store-request': 'true'}, |
| }); |
| |
| const requests = await waitForRequest(); |
| assert_equals(requests.length, 1); |
| assert_equals(requests[0].method, 'GET'); |
| // TODO(apaseltiner): Check header values once WPT can parse structured dictionaries. |
| if (expected_eligible) { |
| assert_own_property(requests[0], 'attribution-reporting-eligible'); |
| } else { |
| assert_not_own_property(requests[0], 'attribution-reporting-eligible'); |
| } |
| |
| // TODO(apaseltiner): Test cookie propagation. |
| |
| const expectedURL = blankURL(); |
| expectedURL.searchParams.set('aB', 'Cd'); |
| expectedURL.searchParams.set('store-request', 'true'); |
| assert_equals(requests[0].url, expectedURL.toString()); |
| }, 'attributionsrc request has the proper format.'); |
| </script> |