tor-browser

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

referrer-tests.js (9692B)


      1 function openWindow(t, url) {
      2  return new Promise(resolve => {
      3      let win = window.open(url, '_blank');
      4      t.add_cleanup(() => win.close());
      5      window.onmessage = e => {
      6        assert_equals(e.data, 'LOADED');
      7        resolve(win);
      8      };
      9    });
     10 }
     11 
     12 // Run a referrer policy test with the given settings.
     13 //
     14 // Example:
     15 // settings = {
     16 //   workletType: 'paint',
     17 //   fetchType: 'top-level' or 'descendant',
     18 //   referrerPolicy: 'no-referrer',
     19 //   scriptsOrigins: { topLevel: 'same', descendant: 'remote' }
     20 // };
     21 function runReferrerTest(t, settings) {
     22  const kWindowURL =
     23      'resources/referrer-window.html' +
     24      `?pipe=header(Referrer-Policy,${settings.referrerPolicy})`;
     25  return openWindow(t, kWindowURL).then(win => {
     26    const promise = new Promise(resolve => window.onmessage = resolve);
     27    win.postMessage(settings, '*');
     28    return promise;
     29  }).then(msg_event => assert_equals(msg_event.data, 'RESOLVED'));
     30 }
     31 
     32 // Runs a series of tests related to the referrer policy on a worklet.
     33 //
     34 // Usage:
     35 // runReferrerTests("paint");
     36 function runReferrerTests(workletType) {
     37  const worklet = get_worklet(workletType);
     38 
     39  // Tests for top-level script fetch -----------------------------------------
     40 
     41  promise_test(t => {
     42    return runReferrerTest(t, { workletType: workletType,
     43                                fetchType: 'top-level',
     44                                referrerPolicy: 'no-referrer',
     45                                scriptOrigins: { topLevel: 'same' } });
     46  }, 'Importing a same-origin script from a page that has "no-referrer" ' +
     47     'referrer policy should not send referrer.');
     48 
     49  promise_test(t => {
     50    return runReferrerTest(t, { workletType: workletType,
     51                                fetchType: 'top-level',
     52                                referrerPolicy: 'no-referrer',
     53                                scriptOrigins: { topLevel: 'remote' } });
     54  }, 'Importing a remote-origin script from a page that has "no-referrer" ' +
     55     'referrer policy should not send referrer.');
     56 
     57  promise_test(t => {
     58    return runReferrerTest(t, { workletType: workletType,
     59                                fetchType: 'top-level',
     60                                referrerPolicy: 'origin',
     61                                scriptOrigins: { topLevel: 'same' } });
     62  }, 'Importing a same-origin script from a page that has "origin" ' +
     63     'referrer policy should send only an origin as referrer.');
     64 
     65  promise_test(t => {
     66    return runReferrerTest(t, { workletType: workletType,
     67                                fetchType: 'top-level',
     68                                referrerPolicy: 'origin',
     69                                scriptOrigins: { topLevel: 'remote' } });
     70  }, 'Importing a remote-origin script from a page that has "origin" ' +
     71     'referrer policy should send only an origin as referrer.');
     72 
     73  promise_test(t => {
     74    return runReferrerTest(t, { workletType: workletType,
     75                                fetchType: 'top-level',
     76                                referrerPolicy: 'same-origin',
     77                                scriptOrigins: { topLevel: 'same' } });
     78  }, 'Importing a same-origin script from a page that has "same-origin" ' +
     79     'referrer policy should send referrer.');
     80 
     81  promise_test(t => {
     82    return runReferrerTest(t, { workletType: workletType,
     83                                fetchType: 'top-level',
     84                                referrerPolicy: 'same-origin',
     85                                scriptOrigins: { topLevel: 'remote' } });
     86  }, 'Importing a remote-origin script from a page that has "same-origin" ' +
     87     'referrer policy should not send referrer.');
     88 
     89  // Tests for descendant script fetch -----------------------------------------
     90 
     91  // Referrer policy: no-referrer.
     92  promise_test(t => {
     93    return runReferrerTest(t, { workletType: workletType,
     94                                fetchType: 'descendant',
     95                                referrerPolicy: 'no-referrer',
     96                                scriptOrigins: { topLevel: 'same',
     97                                                 descendant: 'same' } });
     98  }, 'Importing a same-origin script from a same-origin worklet script that ' +
     99     'has "no-referrer" referrer policy should not send referrer.');
    100 
    101  promise_test(t => {
    102    return runReferrerTest(t, { workletType: workletType,
    103                                fetchType: 'descendant',
    104                                referrerPolicy: 'no-referrer',
    105                                scriptOrigins: { topLevel: 'same',
    106                                                 descendant: 'remote' } });
    107  }, 'Importing a remote-origin script from a same-origin worklet script ' +
    108     'that has "no-referrer" referrer policy should not send referrer.');
    109 
    110  promise_test(t => {
    111    return runReferrerTest(t, { workletType: workletType,
    112                                fetchType: 'descendant',
    113                                referrerPolicy: 'no-referrer',
    114                                scriptOrigins: { topLevel: 'remote',
    115                                                 descendant: 'same' } });
    116  }, 'Importing a same-origin script from a remote-origin worklet script ' +
    117     'that has "no-referrer" referrer policy should not send referrer.');
    118 
    119  promise_test(t => {
    120    return runReferrerTest(t, { workletType: workletType,
    121                                fetchType: 'descendant',
    122                                referrerPolicy: 'no-referrer',
    123                                scriptOrigins: { topLevel: 'remote',
    124                                                 descendant: 'remote' } });
    125  }, 'Importing a remote-origin script from a remote-origin worklet script ' +
    126     'that has "no-referrer" referrer policy should not send referrer.');
    127 
    128  // Referrer policy: origin.
    129  promise_test(t => {
    130    return runReferrerTest(t, { workletType: workletType,
    131                                fetchType: 'descendant',
    132                                referrerPolicy: 'origin',
    133                                scriptOrigins: { topLevel: 'same',
    134                                                 descendant: 'same' } });
    135  }, 'Importing a same-origin script from a same-origin worklet script that ' +
    136     'has "origin" referrer policy should send referrer.');
    137 
    138  promise_test(t => {
    139    return runReferrerTest(t, { workletType: workletType,
    140                                fetchType: 'descendant',
    141                                referrerPolicy: 'origin',
    142                                scriptOrigins: { topLevel: 'same',
    143                                                 descendant: 'remote' } });
    144  }, 'Importing a remote-origin script from a same-origin worklet script ' +
    145     'that has "origin" referrer policy should send referrer.');
    146 
    147  promise_test(t => {
    148    return runReferrerTest(t, { workletType: workletType,
    149                                fetchType: 'descendant',
    150                                referrerPolicy: 'origin',
    151                                scriptOrigins: { topLevel: 'remote',
    152                                                 descendant: 'same' } });
    153  }, 'Importing a same-origin script from a remote-origin worklet script ' +
    154     'that has "origin" referrer policy should send referrer.');
    155 
    156  promise_test(t => {
    157    return runReferrerTest(t, { workletType: workletType,
    158                                fetchType: 'descendant',
    159                                referrerPolicy: 'origin',
    160                                scriptOrigins: { topLevel: 'remote',
    161                                                 descendant: 'remote' } });
    162  }, 'Importing a remote-origin script from a remote-origin worklet script ' +
    163     'that has "origin" referrer policy should send referrer.');
    164 
    165  // Referrer policy: same-origin.
    166  promise_test(t => {
    167    return runReferrerTest(t, { workletType: workletType,
    168                                fetchType: 'descendant',
    169                                referrerPolicy: 'same-origin',
    170                                scriptOrigins: { topLevel: 'same',
    171                                                 descendant: 'same' } });
    172  }, 'Importing a same-origin script from a same-origin worklet script that ' +
    173     'has "same-origin" referrer policy should send referrer.');
    174 
    175  promise_test(t => {
    176    return runReferrerTest(t, { workletType: workletType,
    177                                fetchType: 'descendant',
    178                                referrerPolicy: 'same-origin',
    179                                scriptOrigins: { topLevel: 'same',
    180                                                 descendant: 'remote' } });
    181  }, 'Importing a remote-origin script from a same-origin worklet script ' +
    182     'that has "same-origin" referrer policy should not send referrer.');
    183 
    184  promise_test(t => {
    185    return runReferrerTest(t, { workletType: workletType,
    186                                fetchType: 'descendant',
    187                                referrerPolicy: 'same-origin',
    188                                scriptOrigins: { topLevel: 'remote',
    189                                                 descendant: 'same' } });
    190  }, 'Importing a same-origin script from a remote-origin worklet script ' +
    191     'that has "same-origin" referrer policy should not send referrer.');
    192 
    193  promise_test(t => {
    194    return runReferrerTest(t, { workletType: workletType,
    195                                fetchType: 'descendant',
    196                                referrerPolicy: 'same-origin',
    197                                scriptOrigins: { topLevel: 'remote',
    198                                                 descendant: 'remote' } });
    199  }, 'Importing a remote-origin script from a remote-origin worklet script ' +
    200     'that has "same-origin" referrer policy should send referrer.');
    201 }