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 }