summaryrefslogtreecommitdiffstats
path: root/dom/workers/test/multi_sharedWorker_frame.html
blob: 2f2c451b0d80a13ef91bd4985b7d49d879092a2d (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
58
59
60
61
62
63
64
65
66
67
68
<!--
  Any copyright is dedicated to the Public Domain.
  http://creativecommons.org/publicdomain/zero/1.0/
-->
<!DOCTYPE HTML>
<html>
  <head>
    <title>Test for SharedWorker</title>
  </head>
  <body onload="notifyOpenerLoadEvent();">
    <script type="text/javascript">
      "use strict";

      function postMessageToParentOrOpener(message) {
        if (parent != window) {
          parent.postMessage(message, "*");
        }
        if (opener) {
          opener.postMessage(message, "*");
        }
      }

      // Used by test_multi_sharedWorker_lifetimes.html
      function notifyOpenerLoadEvent() {
        if (opener) {
          opener.postMessage({event: "load"}, "*");
        }
      }

      function debug(message) {
        if (typeof(message) != "string") {
          throw new Error("debug() only accepts strings!");
        }
        postMessageToParentOrOpener(message);
      }

      let worker;

      window.addEventListener("message", function(event) {
        if (!worker) {
          worker = new SharedWorker("multi_sharedWorker_sharedWorker.js",
                                    "FrameWorker");
          worker.onerror = function(error) {
            debug("Worker error: " + error.message);
            error.preventDefault();

            let data = {
              type: "error",
              message: error.message,
              filename: error.filename,
              lineno: error.lineno,
              isErrorEvent: error instanceof ErrorEvent
            };
            postMessageToParentOrOpener(data);
          };

          worker.port.onmessage = function(msg) {
            debug("Worker message: " + JSON.stringify(msg.data));
            postMessageToParentOrOpener(msg.data);
          };
        }

        debug("Posting message: " + JSON.stringify(event.data));
        worker.port.postMessage(event.data);
      });
    </script>
  </body>
</html>