File: coep-blob-popup.https.html

package info (click to toggle)
firefox 145.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,653,344 kB
  • sloc: cpp: 7,594,932; javascript: 6,459,612; ansic: 3,752,905; python: 1,403,433; xml: 629,811; asm: 438,677; java: 186,421; sh: 67,287; makefile: 19,169; objc: 13,086; perl: 12,982; yacc: 4,583; cs: 3,846; pascal: 3,448; lex: 1,720; ruby: 1,003; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10
file content (51 lines) | stat: -rw-r--r-- 1,945 bytes parent folder | download | duplicates (18)
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
<!doctype html>
<title>Cross-Origin-Opener-Policy and Cross-Origin-Embedder-Policy: blob URL popup</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/common/get-host-info.sub.js></script>
<script src=../cross-origin-embedder-policy/resources/script-factory.js></script>
<script>
["window.open()", "<a>", "<a rel=noopener>"].forEach(type => {
  promise_test(t => {
    const origins = get_host_info();
    const id = `tut mir leid ${type}`;
    const blob = new Blob([`<script>${createScript(origins.ORIGIN, origins.HTTPS_REMOTE_ORIGIN, "channel", id)}<\/script>`], {type: "text/html"});
    const blobURL = URL.createObjectURL(blob);
    const bc = new BroadcastChannel(id);

    if (type === "window.open()") {
      const popup = window.open(blobURL);
      t.add_cleanup(() => popup.close());
      popup.onload = t.step_func(() => {
        assert_equals(popup.opener, window);
        assert_equals(popup.location.href, blobURL);
        assert_equals(popup.document.URL, blobURL);
        assert_equals(popup.origin, window.origin);
      });
    } else {
      const a = document.createElement("a");
      a.target = type;
      if (type === "<a rel=noopener>") {
        a.rel = "noopener";
      }
      a.href = blobURL;
      a.click();
    }

    return new Promise(resolve => {
      bc.onmessage = t.step_func(({ data }) => {
        assert_equals(data.id, id);
        assert_equals(data.origin, window.origin);
        assert_true(data.sameOriginNoCORPSuccess, "Same-origin without CORP did not succeed");
        assert_true(data.crossOriginNoCORPFailure, "Cross-origin without CORP did not fail");
        if (type === "<a rel=noopener>") {
          assert_false(data.opener, 'opener');
        } else {
          assert_true(data.opener, 'opener');
        }
        resolve();
      });
    });
  }, `COOP+COEP blob URL popup: ${type}`);
});
</script>