tor-browser

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

element-link-prefetch.https.optional.sub.html (15456B)


      1 <!DOCTYPE html>
      2 <!--
      3 This test was procedurally generated. Please do not modify it directly.
      4 Sources:
      5 - fetch/metadata/tools/fetch-metadata.conf.yml
      6 - fetch/metadata/tools/templates/element-link-prefetch.optional.sub.html
      7 -->
      8 <html lang="en">
      9  <meta charset="utf-8">
     10  <meta name="timeout" content="long">
     11  <title>HTTP headers on request for HTML "link" element with rel="prefetch"</title>
     12  <script src="/resources/testharness.js"></script>
     13  <script src="/resources/testharnessreport.js"></script>
     14  <script src="/fetch/metadata/resources/helper.sub.js"></script>
     15  <body>
     16  <script>
     17  'use strict';
     18 
     19  /**
     20   * The `link` element supports a `load` event. That event would reliably
     21   * indicate that the browser had received the request. Multiple major
     22   * browsers do not implement the event, however, so in order to promote the
     23   * visibility of this test, a less efficient polling-based detection
     24   * mechanism is used.
     25   *
     26   * https://bugzilla.mozilla.org/show_bug.cgi?id=1638188
     27   * https://bugs.chromium.org/p/chromium/issues/detail?id=1083034
     28   */
     29  function induceRequest(t, url, attributes) {
     30    const link = document.createElement('link');
     31    link.setAttribute('rel', 'prefetch');
     32    link.setAttribute('href', url);
     33 
     34    for (const [ name, value ] of Object.entries(attributes)) {
     35      link.setAttribute(name, value);
     36    }
     37 
     38    document.head.appendChild(link);
     39    t.add_cleanup(() => link.remove());
     40  }
     41 
     42  setup(() => {
     43    assert_implements_optional(document.createElement('link').relList.supports('prefetch'));
     44  });
     45 
     46  promise_test((t) => {
     47    const key = '{{uuid()}}';
     48 
     49    induceRequest(
     50      t,
     51      makeRequestURL(key, ['httpsOrigin']),
     52      {}
     53    );
     54 
     55    return retrieve(key, {poll:true})
     56      .then((headers) => {
     57          assert_own_property(headers, 'sec-fetch-site');
     58          assert_array_equals(headers['sec-fetch-site'], ['same-origin']);
     59      });
     60  }, 'sec-fetch-site - Same origin no attributes');
     61 
     62  promise_test((t) => {
     63    const key = '{{uuid()}}';
     64 
     65    induceRequest(
     66      t,
     67      makeRequestURL(key, ['httpsCrossSite']),
     68      {}
     69    );
     70 
     71    return retrieve(key, {poll:true})
     72      .then((headers) => {
     73          assert_own_property(headers, 'sec-fetch-site');
     74          assert_array_equals(headers['sec-fetch-site'], ['cross-site']);
     75      });
     76  }, 'sec-fetch-site - Cross-site no attributes');
     77 
     78  promise_test((t) => {
     79    const key = '{{uuid()}}';
     80 
     81    induceRequest(
     82      t,
     83      makeRequestURL(key, ['httpsSameSite']),
     84      {}
     85    );
     86 
     87    return retrieve(key, {poll:true})
     88      .then((headers) => {
     89          assert_own_property(headers, 'sec-fetch-site');
     90          assert_array_equals(headers['sec-fetch-site'], ['same-site']);
     91      });
     92  }, 'sec-fetch-site - Same site no attributes');
     93 
     94  promise_test((t) => {
     95    const key = '{{uuid()}}';
     96 
     97    induceRequest(
     98      t,
     99      makeRequestURL(key, ['httpsOrigin', 'httpsCrossSite', 'httpsOrigin']),
    100      {}
    101    );
    102 
    103    return retrieve(key, {poll:true})
    104      .then((headers) => {
    105          assert_own_property(headers, 'sec-fetch-site');
    106          assert_array_equals(headers['sec-fetch-site'], ['cross-site']);
    107      });
    108  }, 'sec-fetch-site - Same-Origin -> Cross-Site -> Same-Origin redirect no attributes');
    109 
    110  promise_test((t) => {
    111    const key = '{{uuid()}}';
    112 
    113    induceRequest(
    114      t,
    115      makeRequestURL(key, ['httpsOrigin', 'httpsSameSite', 'httpsOrigin']),
    116      {}
    117    );
    118 
    119    return retrieve(key, {poll:true})
    120      .then((headers) => {
    121          assert_own_property(headers, 'sec-fetch-site');
    122          assert_array_equals(headers['sec-fetch-site'], ['same-site']);
    123      });
    124  }, 'sec-fetch-site - Same-Origin -> Same-Site -> Same-Origin redirect no attributes');
    125 
    126  promise_test((t) => {
    127    const key = '{{uuid()}}';
    128 
    129    induceRequest(
    130      t,
    131      makeRequestURL(key, ['httpsCrossSite', 'httpsOrigin']),
    132      {}
    133    );
    134 
    135    return retrieve(key, {poll:true})
    136      .then((headers) => {
    137          assert_own_property(headers, 'sec-fetch-site');
    138          assert_array_equals(headers['sec-fetch-site'], ['cross-site']);
    139      });
    140  }, 'sec-fetch-site - Cross-Site -> Same Origin no attributes');
    141 
    142  promise_test((t) => {
    143    const key = '{{uuid()}}';
    144 
    145    induceRequest(
    146      t,
    147      makeRequestURL(key, ['httpsCrossSite', 'httpsSameSite']),
    148      {}
    149    );
    150 
    151    return retrieve(key, {poll:true})
    152      .then((headers) => {
    153          assert_own_property(headers, 'sec-fetch-site');
    154          assert_array_equals(headers['sec-fetch-site'], ['cross-site']);
    155      });
    156  }, 'sec-fetch-site - Cross-Site -> Same-Site no attributes');
    157 
    158  promise_test((t) => {
    159    const key = '{{uuid()}}';
    160 
    161    induceRequest(
    162      t,
    163      makeRequestURL(key, ['httpsCrossSite', 'httpsCrossSite']),
    164      {}
    165    );
    166 
    167    return retrieve(key, {poll:true})
    168      .then((headers) => {
    169          assert_own_property(headers, 'sec-fetch-site');
    170          assert_array_equals(headers['sec-fetch-site'], ['cross-site']);
    171      });
    172  }, 'sec-fetch-site - Cross-Site -> Cross-Site no attributes');
    173 
    174  promise_test((t) => {
    175    const key = '{{uuid()}}';
    176 
    177    induceRequest(
    178      t,
    179      makeRequestURL(key, ['httpsOrigin', 'httpsOrigin']),
    180      {}
    181    );
    182 
    183    return retrieve(key, {poll:true})
    184      .then((headers) => {
    185          assert_own_property(headers, 'sec-fetch-site');
    186          assert_array_equals(headers['sec-fetch-site'], ['same-origin']);
    187      });
    188  }, 'sec-fetch-site - Same-Origin -> Same Origin no attributes');
    189 
    190  promise_test((t) => {
    191    const key = '{{uuid()}}';
    192 
    193    induceRequest(
    194      t,
    195      makeRequestURL(key, ['httpsOrigin', 'httpsSameSite']),
    196      {}
    197    );
    198 
    199    return retrieve(key, {poll:true})
    200      .then((headers) => {
    201          assert_own_property(headers, 'sec-fetch-site');
    202          assert_array_equals(headers['sec-fetch-site'], ['same-site']);
    203      });
    204  }, 'sec-fetch-site - Same-Origin -> Same-Site no attributes');
    205 
    206  promise_test((t) => {
    207    const key = '{{uuid()}}';
    208 
    209    induceRequest(
    210      t,
    211      makeRequestURL(key, ['httpsOrigin', 'httpsCrossSite']),
    212      {}
    213    );
    214 
    215    return retrieve(key, {poll:true})
    216      .then((headers) => {
    217          assert_own_property(headers, 'sec-fetch-site');
    218          assert_array_equals(headers['sec-fetch-site'], ['cross-site']);
    219      });
    220  }, 'sec-fetch-site - Same-Origin -> Cross-Site no attributes');
    221 
    222  promise_test((t) => {
    223    const key = '{{uuid()}}';
    224 
    225    induceRequest(
    226      t,
    227      makeRequestURL(key, ['httpsSameSite', 'httpsOrigin']),
    228      {}
    229    );
    230 
    231    return retrieve(key, {poll:true})
    232      .then((headers) => {
    233          assert_own_property(headers, 'sec-fetch-site');
    234          assert_array_equals(headers['sec-fetch-site'], ['same-site']);
    235      });
    236  }, 'sec-fetch-site - Same-Site -> Same Origin no attributes');
    237 
    238  promise_test((t) => {
    239    const key = '{{uuid()}}';
    240 
    241    induceRequest(
    242      t,
    243      makeRequestURL(key, ['httpsSameSite', 'httpsSameSite']),
    244      {}
    245    );
    246 
    247    return retrieve(key, {poll:true})
    248      .then((headers) => {
    249          assert_own_property(headers, 'sec-fetch-site');
    250          assert_array_equals(headers['sec-fetch-site'], ['same-site']);
    251      });
    252  }, 'sec-fetch-site - Same-Site -> Same-Site no attributes');
    253 
    254  promise_test((t) => {
    255    const key = '{{uuid()}}';
    256 
    257    induceRequest(
    258      t,
    259      makeRequestURL(key, ['httpsSameSite', 'httpsCrossSite']),
    260      {}
    261    );
    262 
    263    return retrieve(key, {poll:true})
    264      .then((headers) => {
    265          assert_own_property(headers, 'sec-fetch-site');
    266          assert_array_equals(headers['sec-fetch-site'], ['cross-site']);
    267      });
    268  }, 'sec-fetch-site - Same-Site -> Cross-Site no attributes');
    269 
    270  promise_test((t) => {
    271    const key = '{{uuid()}}';
    272 
    273    induceRequest(
    274      t,
    275      makeRequestURL(key, []),
    276      {}
    277    );
    278 
    279    return retrieve(key, {poll:true})
    280      .then((headers) => {
    281          assert_own_property(headers, 'sec-fetch-mode');
    282          assert_array_equals(headers['sec-fetch-mode'], ['no-cors']);
    283      });
    284  }, 'sec-fetch-mode no attributes');
    285 
    286  promise_test((t) => {
    287    const key = '{{uuid()}}';
    288 
    289    induceRequest(
    290      t,
    291      makeRequestURL(key, []),
    292      {"crossorigin": ""}
    293    );
    294 
    295    return retrieve(key, {poll:true})
    296      .then((headers) => {
    297          assert_own_property(headers, 'sec-fetch-mode');
    298          assert_array_equals(headers['sec-fetch-mode'], ['cors']);
    299      });
    300  }, 'sec-fetch-mode attributes: crossorigin');
    301 
    302  promise_test((t) => {
    303    const key = '{{uuid()}}';
    304 
    305    induceRequest(
    306      t,
    307      makeRequestURL(key, []),
    308      {"crossorigin": "anonymous"}
    309    );
    310 
    311    return retrieve(key, {poll:true})
    312      .then((headers) => {
    313          assert_own_property(headers, 'sec-fetch-mode');
    314          assert_array_equals(headers['sec-fetch-mode'], ['cors']);
    315      });
    316  }, 'sec-fetch-mode attributes: crossorigin=anonymous');
    317 
    318  promise_test((t) => {
    319    const key = '{{uuid()}}';
    320 
    321    induceRequest(
    322      t,
    323      makeRequestURL(key, []),
    324      {"crossorigin": "use-credentials"}
    325    );
    326 
    327    return retrieve(key, {poll:true})
    328      .then((headers) => {
    329          assert_own_property(headers, 'sec-fetch-mode');
    330          assert_array_equals(headers['sec-fetch-mode'], ['cors']);
    331      });
    332  }, 'sec-fetch-mode attributes: crossorigin=use-credentials');
    333 
    334  promise_test((t) => {
    335    const key = '{{uuid()}}';
    336 
    337    induceRequest(
    338      t,
    339      makeRequestURL(key, []),
    340      {}
    341    );
    342 
    343    return retrieve(key, {poll:true})
    344      .then((headers) => {
    345          assert_own_property(headers, 'sec-fetch-dest');
    346          assert_array_equals(headers['sec-fetch-dest'], ['empty']);
    347      });
    348  }, 'sec-fetch-dest no attributes');
    349 
    350  promise_test((t) => {
    351    const key = '{{uuid()}}';
    352 
    353    induceRequest(
    354      t,
    355      makeRequestURL(key, []),
    356      {"as": "audio"}
    357    );
    358 
    359    return retrieve(key, {poll:true})
    360      .then((headers) => {
    361          assert_own_property(headers, 'sec-fetch-dest');
    362          assert_array_equals(headers['sec-fetch-dest'], ['audio']);
    363      });
    364  }, 'sec-fetch-dest attributes: as=audio');
    365 
    366  promise_test((t) => {
    367    const key = '{{uuid()}}';
    368 
    369    induceRequest(
    370      t,
    371      makeRequestURL(key, []),
    372      {"as": "document"}
    373    );
    374 
    375    return retrieve(key, {poll:true})
    376      .then((headers) => {
    377          assert_own_property(headers, 'sec-fetch-dest');
    378          assert_array_equals(headers['sec-fetch-dest'], ['document']);
    379      });
    380  }, 'sec-fetch-dest attributes: as=document');
    381 
    382  promise_test((t) => {
    383    const key = '{{uuid()}}';
    384 
    385    induceRequest(
    386      t,
    387      makeRequestURL(key, []),
    388      {"as": "embed"}
    389    );
    390 
    391    return retrieve(key, {poll:true})
    392      .then((headers) => {
    393          assert_own_property(headers, 'sec-fetch-dest');
    394          assert_array_equals(headers['sec-fetch-dest'], ['embed']);
    395      });
    396  }, 'sec-fetch-dest attributes: as=embed');
    397 
    398  promise_test((t) => {
    399    const key = '{{uuid()}}';
    400 
    401    induceRequest(
    402      t,
    403      makeRequestURL(key, []),
    404      {"as": "fetch"}
    405    );
    406 
    407    return retrieve(key, {poll:true})
    408      .then((headers) => {
    409          assert_own_property(headers, 'sec-fetch-dest');
    410          assert_array_equals(headers['sec-fetch-dest'], ['fetch']);
    411      });
    412  }, 'sec-fetch-dest attributes: as=fetch');
    413 
    414  promise_test((t) => {
    415    const key = '{{uuid()}}';
    416 
    417    induceRequest(
    418      t,
    419      makeRequestURL(key, []),
    420      {"as": "font"}
    421    );
    422 
    423    return retrieve(key, {poll:true})
    424      .then((headers) => {
    425          assert_own_property(headers, 'sec-fetch-dest');
    426          assert_array_equals(headers['sec-fetch-dest'], ['font']);
    427      });
    428  }, 'sec-fetch-dest attributes: as=font');
    429 
    430  promise_test((t) => {
    431    const key = '{{uuid()}}';
    432 
    433    induceRequest(
    434      t,
    435      makeRequestURL(key, []),
    436      {"as": "image"}
    437    );
    438 
    439    return retrieve(key, {poll:true})
    440      .then((headers) => {
    441          assert_own_property(headers, 'sec-fetch-dest');
    442          assert_array_equals(headers['sec-fetch-dest'], ['image']);
    443      });
    444  }, 'sec-fetch-dest attributes: as=image');
    445 
    446  promise_test((t) => {
    447    const key = '{{uuid()}}';
    448 
    449    induceRequest(
    450      t,
    451      makeRequestURL(key, []),
    452      {"as": "object"}
    453    );
    454 
    455    return retrieve(key, {poll:true})
    456      .then((headers) => {
    457          assert_own_property(headers, 'sec-fetch-dest');
    458          assert_array_equals(headers['sec-fetch-dest'], ['object']);
    459      });
    460  }, 'sec-fetch-dest attributes: as=object');
    461 
    462  promise_test((t) => {
    463    const key = '{{uuid()}}';
    464 
    465    induceRequest(
    466      t,
    467      makeRequestURL(key, []),
    468      {"as": "script"}
    469    );
    470 
    471    return retrieve(key, {poll:true})
    472      .then((headers) => {
    473          assert_own_property(headers, 'sec-fetch-dest');
    474          assert_array_equals(headers['sec-fetch-dest'], ['script']);
    475      });
    476  }, 'sec-fetch-dest attributes: as=script');
    477 
    478  promise_test((t) => {
    479    const key = '{{uuid()}}';
    480 
    481    induceRequest(
    482      t,
    483      makeRequestURL(key, []),
    484      {"as": "style"}
    485    );
    486 
    487    return retrieve(key, {poll:true})
    488      .then((headers) => {
    489          assert_own_property(headers, 'sec-fetch-dest');
    490          assert_array_equals(headers['sec-fetch-dest'], ['style']);
    491      });
    492  }, 'sec-fetch-dest attributes: as=style');
    493 
    494  promise_test((t) => {
    495    const key = '{{uuid()}}';
    496 
    497    induceRequest(
    498      t,
    499      makeRequestURL(key, []),
    500      {"as": "track"}
    501    );
    502 
    503    return retrieve(key, {poll:true})
    504      .then((headers) => {
    505          assert_own_property(headers, 'sec-fetch-dest');
    506          assert_array_equals(headers['sec-fetch-dest'], ['track']);
    507      });
    508  }, 'sec-fetch-dest attributes: as=track');
    509 
    510  promise_test((t) => {
    511    const key = '{{uuid()}}';
    512 
    513    induceRequest(
    514      t,
    515      makeRequestURL(key, []),
    516      {"as": "video"}
    517    );
    518 
    519    return retrieve(key, {poll:true})
    520      .then((headers) => {
    521          assert_own_property(headers, 'sec-fetch-dest');
    522          assert_array_equals(headers['sec-fetch-dest'], ['video']);
    523      });
    524  }, 'sec-fetch-dest attributes: as=video');
    525 
    526  promise_test((t) => {
    527    const key = '{{uuid()}}';
    528 
    529    induceRequest(
    530      t,
    531      makeRequestURL(key, []),
    532      {"as": "worker"}
    533    );
    534 
    535    return retrieve(key, {poll:true})
    536      .then((headers) => {
    537          assert_own_property(headers, 'sec-fetch-dest');
    538          assert_array_equals(headers['sec-fetch-dest'], ['worker']);
    539      });
    540  }, 'sec-fetch-dest attributes: as=worker');
    541 
    542  promise_test((t) => {
    543    const key = '{{uuid()}}';
    544 
    545    induceRequest(
    546      t,
    547      makeRequestURL(key, []),
    548      {}
    549    );
    550 
    551    return retrieve(key, {poll:true})
    552      .then((headers) => {
    553          assert_not_own_property(headers, 'sec-fetch-user');
    554      });
    555  }, 'sec-fetch-user no attributes');
    556 
    557  promise_test((t) => {
    558    const key = '{{uuid()}}';
    559 
    560    induceRequest(
    561      t,
    562      makeRequestURL(key, ['httpsCrossSite']),
    563      {}
    564    );
    565 
    566    return retrieve(key, {poll:true})
    567      .then((headers) => {
    568          assert_own_property(headers, 'sec-fetch-storage-access');
    569          assert_array_equals(headers['sec-fetch-storage-access'], ['none']);
    570      });
    571  }, 'sec-fetch-storage-access - Cross-site no attributes');
    572 
    573  promise_test((t) => {
    574    const key = '{{uuid()}}';
    575 
    576    induceRequest(
    577      t,
    578      makeRequestURL(key, ['httpsSameSite']),
    579      {}
    580    );
    581 
    582    return retrieve(key, {poll:true})
    583      .then((headers) => {
    584          assert_not_own_property(headers, 'sec-fetch-storage-access');
    585      });
    586  }, 'sec-fetch-storage-access - Same site no attributes');
    587  </script>
    588  </body>
    589 </html>