blob: 296ba58f5e413891d2ecda27337d96ae8c2c8932 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
<!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>
|