tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

request-format.sub.https.html (2782B)


      1 <!doctype html>
      2 <meta charset=utf-8>
      3 <meta name=timeout content=long>
      4 <meta name=variant content="?method=a&expected-eligible=navigation-source">
      5 <meta name=variant content="?method=area&expected-eligible=navigation-source">
      6 <meta name=variant content="?method=img&expected-eligible=event-source, trigger">
      7 <meta name=variant content="?method=img&eligible&expected-eligible=event-source, trigger">
      8 <meta name=variant content="?method=open&expected-eligible=navigation-source">
      9 <meta name=variant content="?method=script&expected-eligible=event-source, trigger">
     10 <meta name=variant content="?method=script&eligible&expected-eligible=event-source, trigger">
     11 <meta name=variant content="?method=fetch">
     12 <meta name=variant content='?method=fetch&eligible={"eventSourceEligible":true,"triggerEligible":false}&expected-eligible=event-source'>
     13 <meta name=variant content="?method=xhr">
     14 <meta name=variant content='?method=xhr&eligible={"eventSourceEligible":true,"triggerEligible":false}&expected-eligible=event-source'>
     15 <script src="/resources/testdriver.js"></script>
     16 <script src="/resources/testdriver-vendor.js"></script>
     17 <script src="/resources/testharness.js"></script>
     18 <script src="/resources/testharnessreport.js"></script>
     19 <script src="resources/helpers.js"></script>
     20 <body>
     21 <script>
     22 const waitForRequest = async () => {
     23  const url = blankURL();
     24  url.searchParams.set('get-requests', 'true');
     25 
     26  for (let i = 0; i < 20; i++) {
     27    const resp = await fetch(url);
     28    const payload = await resp.json();
     29    if (payload !== null && payload.length > 0) {
     30      return payload;
     31    }
     32    await delay(100);
     33  }
     34  throw new Error('Timeout polling requests');
     35 };
     36 
     37 const searchParams = new URLSearchParams(location.search);
     38 const expected_eligible =
     39    searchParams.get('expected-eligible') === null ? undefined : searchParams.get('expected-eligible');
     40 
     41 promise_test(async t => {
     42  // Set mixed-case query params to ensure that they are propagated correctly.
     43  registerAttributionSrc({
     44    method: 'variant',
     45    extraQueryParams: {'aB': 'Cd', 'store-request': 'true'},
     46  });
     47 
     48  const requests = await waitForRequest();
     49  assert_equals(requests.length, 1);
     50  assert_equals(requests[0].method, 'GET');
     51  // TODO(apaseltiner): Check header values once WPT can parse structured dictionaries.
     52  if (expected_eligible) {
     53    assert_own_property(requests[0], 'attribution-reporting-eligible');
     54  } else {
     55    assert_not_own_property(requests[0], 'attribution-reporting-eligible');
     56  }
     57 
     58  // TODO(apaseltiner): Test cookie propagation.
     59 
     60  const expectedURL = blankURL();
     61  expectedURL.searchParams.set('aB', 'Cd');
     62  expectedURL.searchParams.set('store-request', 'true');
     63  assert_equals(requests[0].url, expectedURL.toString());
     64 }, 'attributionsrc request has the proper format.');
     65 </script>