<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<!-- Test the 'script-src' directive on dedicated workers -->
<script nonce="a">
let reportCookieName = location.pathname.split('/')[
location.pathname.split('/').length - 1].split('.')[0];
let reportID = document.cookie.split('; ')
.find(cookie => cookie.startsWith(reportCookieName + '='))
.split('=')[1].trim();
promise_test(async t => {
// Dedicated workers do not inherit CSP in general.
await fetch_tests_from_worker(
new Worker("./support/script-src-allow.sub.js"));
// Dedicated workers honor CSP received in their response headers.
await fetch_tests_from_worker(
new Worker(
`./support/script-src-self.sub.js?id=${reportID}` +
`&test-name=script-src 'self'` +
`&pipe=sub|header(Content-Security-Policy,` +
`script-src 'self' ; report-uri ` +
`/reporting/resources/report.py?op=put%26reportID=${reportID})`));
let blob = await fetch(`./support/script-src-self.sub.js?id=${reportID}` +
`&test-name=script-src 'self'`)
.then(r => r.blob());
// 'blob:' URL workers inherit CSP.
let blob_url = URL.createObjectURL(blob);
await fetch_tests_from_worker(new Worker(blob_url));
if (window.webkitRequestFileSystem) {
// 'filesystem:' URL workers inherit CSP.
let fs = await new Promise(resolve =>
window.webkitRequestFileSystem(window.TEMPORARY, 1024*1024, resolve));
let fs_entry = await new Promise(resolve =>
fs.root.getFile('dedicated-script-src.js',
{ create: true }, resolve));
let writer = await new Promise(resolve => fs_entry.createWriter(resolve));
writer.onerror = t.unreached_func("Could not write to filesystem entry");
writer.write(blob);
await new Promise(resolve => writer.onwriteend = resolve);
let fs_url = fs_entry.toURL();
await fetch_tests_from_worker(new Worker(fs_url));
await new Promise(resolve => fs_entry.remove(resolve));
}
});
</script>