1<!doctype html>
2<html>
3<head>
4<meta charset=utf-8>
5<title></title>
6<script src=/resources/testharness.js></script>
7<script src=/resources/testharnessreport.js></script>
8</head>
9<body>
10<script>
11<!--
12promise_test(t => {
13  return new Promise((resolve) => {
14    let ifr = document.createElement("iframe");
15    ifr.src =
16      "data:text/html,<script> let bc = new BroadcastChannel(\"test\");" +
17      "bc.onmessage = (e) => {" +
18      "  if (e.data == \"ping\") bc.postMessage('pong');"+
19      "  else parent.postMessage({workerMessageOrigin: e.data, messageOrigin: e.origin}, \"*\"); };" +
20      "new Worker(URL.createObjectURL(new Blob([\"" +
21      "let bc2 = new BroadcastChannel('test'); bc2.postMessage('ping'); " +
22      "bc2.onmessage = e => bc2.postMessage(e.origin);" +
23      "\"], {type: 'text/javascript'}))); </script>";
24    window.addEventListener("message", t.step_func(e => {
25        assert_equals(e.data.workerMessageOrigin, "null");
26        assert_equals(e.data.messageOrigin, "null");
27        resolve();
28      }), {once: true});
29    document.body.appendChild(ifr);
30    });
31}, "Opaque origin should be serialized to \"null\"");
32//-->
33</script>
34</body>
35</html>
36