File: 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 (46 lines) | stat: -rw-r--r-- 1,669 bytes parent folder | download | duplicates (11)
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
<!doctype html>
<title>Cross-Origin-Opener-Policy and a 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=/common/utils.js></script>
<script src=/common/dispatcher/dispatcher.js></script>
<script>
promise_test(async t => {
  window.furtherPopup = null;

  const responseToken = token();
  const iframeToken = token();

  const blobContents = `<script>
const w = window.open("${get_host_info().HTTPS_REMOTE_ORIGIN}/html/cross-origin-opener-policy/resources/coop-coep.py?coop=x&coep=x&responseToken=${responseToken}&iframeToken=${iframeToken}", "${responseToken}");
window.opener.furtherPopup = w;
<\/script>`;
  const blob = new Blob([blobContents], { type: "text/html" });
  const blobURL = URL.createObjectURL(blob);
  const popup = window.open(blobURL);
  t.add_cleanup(async () => {
    // Close the popups once the test is complete.
    // The browsing context of the second popup is closed hence use the
    //  broadcast channel to trigger the closure.
    await send(iframeToken, "close");
    popup.close();
  });

  let popupOnloadHappened = false;
  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);
    popupOnloadHappened = true;
  });

  const data = JSON.parse(await receive(responseToken));

  assert_true(popupOnloadHappened);
  assert_equals(data.name.length, 0);
  assert_false(data.opener);
  assert_true(furtherPopup.closed);
});
</script>