File: dedicatedworker-connect-src.html

package info (click to toggle)
firefox-esr 91.13.0esr-1~deb11u1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 3,375,652 kB
  • sloc: cpp: 5,762,054; javascript: 5,481,714; ansic: 3,121,191; python: 851,492; asm: 331,172; xml: 178,949; java: 155,554; sh: 63,704; makefile: 20,127; perl: 12,825; yacc: 4,583; cs: 3,846; objc: 3,026; lex: 1,720; exp: 762; pascal: 635; php: 436; lisp: 260; awk: 231; ruby: 103; sed: 53; sql: 46; csh: 45
file content (60 lines) | stat: -rw-r--r-- 2,324 bytes parent folder | download | duplicates (4)
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
58
59
60
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<!-- Test the 'connect-src' directive on dedicated workers -->
<script>
  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 honor CSP received in their response headers.
    await fetch_tests_from_worker(
      new Worker(
        `./support/connect-src-self.sub.js?id=${reportID}` +
          `&test-name=connect-src 'self'` +
          `&pipe=sub|header(Content-Security-Policy,` +
          `connect-src 'self' ; report-uri ` +
          `/reporting/resources/report.py?op=put%26reportID=${reportID})`));


    let blob = await fetch(`./support/connect-src-self.sub.js?id=${reportID}` +
                        `&test-name=connect-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-connect-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));
    }

    // Dedicated workers do not inherit CSP in general.
    // We put this at the end since chrome is failing this at the moment, and
    // this sends reports which would make the report checks in the other tests
    // fail.
    await fetch_tests_from_worker(
      new Worker("./support/connect-src-allow.sub.js"));
  });
</script>