dedicated-worker.https.html (6473B)
1 <!doctype html> 2 <title>COEP and dedicated worker</title> 3 <script src=/resources/testharness.js></script> 4 <script src=/resources/testharnessreport.js></script> 5 <script src="/common/get-host-info.sub.js"></script> 6 <script src="resources/worker-support.js"></script> 7 <body> 8 <script> 9 10 const targetUrl = resolveUrl("/common/blank.html", { 11 host: get_host_info().REMOTE_HOST, 12 }).href; 13 14 function workerUrl(options) { 15 return resolveUrl("resources/dedicated-worker.js", options); 16 } 17 18 async function createWorker(t, url, options) { 19 const { ownerCoep, workerOptions } = options || {}; 20 21 const frameUrl = resolveUrl("/common/blank.html", { 22 coep: ownerCoep, 23 }); 24 const frame = await withIframe(t, frameUrl); 25 26 return new frame.contentWindow.Worker(url, workerOptions); 27 } 28 29 promise_test(async (t) => { 30 const worker = await createWorker(t, workerUrl()); 31 worker.onerror = t.unreached_func('Worker.onerror should not be called'); 32 33 worker.postMessage(targetUrl); 34 35 const result = await waitForMessage(worker); 36 assert_equals(result.data, 'LOADED'); 37 }, 'COEP: none worker in COEP: none frame'); 38 39 promise_test(async (t) => { 40 const worker = await createWorker(t, workerUrl(), { 41 ownerCoep: "require-corp", 42 }); 43 await new Promise(resolve => { 44 worker.onerror = resolve; 45 }); 46 }, 'COEP: none worker in COEP: require-corp frame'); 47 48 promise_test(async (t) => { 49 const worker = await createWorker(t, workerUrl({ coep: "require-corp" })); 50 worker.onerror = t.unreached_func('Worker.onerror should not be called'); 51 52 worker.postMessage(targetUrl); 53 54 const result = await waitForMessage(worker); 55 assert_equals(result.data, 'FAILED'); 56 }, 'COEP: require-corp worker in COEP: none frame'); 57 58 promise_test(async (t) => { 59 const worker = await createWorker(t, workerUrl({ coep: "require-corp" }), { 60 ownerCoep: "require-corp", 61 }); 62 worker.onerror = t.unreached_func('Worker.onerror should not be called'); 63 64 worker.postMessage(targetUrl); 65 66 const result = await waitForMessage(worker); 67 assert_equals(result.data, 'FAILED'); 68 }, 'COEP: require-corp worker in COEP: require-corp frame'); 69 70 promise_test(async (t) => { 71 const worker = await createWorker(t, workerUrl(), { 72 workerOptions: { type: 'module' }, 73 }); 74 worker.onerror = t.unreached_func('Worker.onerror should not be called'); 75 76 worker.postMessage(targetUrl); 77 78 const result = await waitForMessage(worker); 79 assert_equals(result.data, 'LOADED'); 80 }, 'COEP: none module worker in COEP: none frame'); 81 82 promise_test(async (t) => { 83 const worker = await createWorker(t, workerUrl(), { 84 ownerCoep: "require-corp", 85 workerOptions: { type: 'module' }, 86 }); 87 await new Promise(resolve => { 88 worker.onerror = resolve; 89 }); 90 }, 'COEP: none module worker in COEP: require-corp frame'); 91 92 promise_test(async (t) => { 93 const worker = await createWorker(t, workerUrl({ coep: "require-corp" }), { 94 workerOptions: { type: 'module' }, 95 }); 96 worker.onerror = t.unreached_func('Worker.onerror should not be called'); 97 98 worker.postMessage(targetUrl); 99 100 const result = await waitForMessage(worker); 101 assert_equals(result.data, 'FAILED'); 102 }, 'COEP: require-corp module worker in COEP: none frame'); 103 104 promise_test(async (t) => { 105 const worker = await createWorker(t, workerUrl({ coep: "require-corp" }), { 106 ownerCoep: "require-corp", 107 workerOptions: { type: 'module' }, 108 }); 109 worker.onerror = t.unreached_func('Worker.onerror should not be called'); 110 111 worker.postMessage(targetUrl); 112 113 const result = await waitForMessage(worker); 114 assert_equals(result.data, 'FAILED'); 115 }, 'COEP: require-corp module worker in COEP: require-corp frame'); 116 117 promise_test(async (t) => { 118 const url = await createLocalUrl(t, { 119 url: workerUrl(), 120 creatorCoep: "require-corp", 121 scheme: "blob", 122 }); 123 124 const worker = await createWorker(t, url, { ownerCoep: "require-corp" }); 125 worker.onerror = t.unreached_func('Worker.onerror should not be called'); 126 127 worker.postMessage(targetUrl); 128 129 const result = await waitForMessage(worker); 130 assert_equals(result.data, 'FAILED'); 131 }, "COEP: worker inherits COEP for blob URL."); 132 133 promise_test(async (t) => { 134 const url = await createLocalUrl(t, { 135 url: workerUrl(), 136 creatorCoep: "require-corp", 137 scheme: "blob", 138 }); 139 140 const worker = await createWorker(t, url); 141 worker.onerror = t.unreached_func('Worker.onerror should not be called'); 142 143 worker.postMessage(targetUrl); 144 145 const result = await waitForMessage(worker); 146 assert_equals(result.data, 'FAILED'); 147 }, "COEP: worker inherits COEP from blob URL creator, not owner."); 148 149 promise_test(async (t) => { 150 const url = await createLocalUrl(t, { 151 url: workerUrl(), 152 creatorCoep: "require-corp", 153 scheme: "data", 154 }); 155 156 const worker = await createWorker(t, url, { ownerCoep: "require-corp" }); 157 worker.onerror = t.unreached_func('Worker.onerror should not be called'); 158 159 worker.postMessage(targetUrl); 160 161 const result = await waitForMessage(worker); 162 assert_equals(result.data, 'FAILED'); 163 }, "COEP: worker inherits COEP for data URL."); 164 165 promise_test(async (t) => { 166 const url = await createLocalUrl(t, { 167 url: workerUrl(), 168 creatorCoep: "require-corp", 169 scheme: "data", 170 }); 171 172 const worker = await createWorker(t, url); 173 worker.onerror = t.unreached_func('Worker.onerror should not be called'); 174 175 worker.postMessage(targetUrl); 176 177 const result = await waitForMessage(worker); 178 assert_equals(result.data, 'LOADED'); 179 }, "COEP: worker inherits COEP from owner, not data URL creator."); 180 181 promise_test(async (t) => { 182 const url = await createLocalUrl(t, { 183 url: workerUrl(), 184 creatorCoep: "require-corp", 185 scheme: "filesystem", 186 }); 187 188 const worker = await createWorker(t, url, { ownerCoep: "require-corp" }); 189 worker.onerror = t.unreached_func('Worker.onerror should not be called'); 190 191 worker.postMessage(targetUrl); 192 193 const result = await waitForMessage(worker); 194 assert_equals(result.data, 'FAILED'); 195 }, "COEP: worker inherits COEP for filesystem URL."); 196 197 promise_test(async (t) => { 198 const url = await createLocalUrl(t, { 199 url: workerUrl(), 200 creatorCoep: "require-corp", 201 scheme: "filesystem", 202 }); 203 204 const worker = await createWorker(t, url); 205 worker.onerror = t.unreached_func('Worker.onerror should not be called'); 206 207 worker.postMessage(targetUrl); 208 209 const result = await waitForMessage(worker); 210 assert_equals(result.data, 'FAILED'); 211 }, "COEP: worker inherits COEP from filesystem URL creator, not owner."); 212 213 </script> 214 </body>