summaryrefslogtreecommitdiffstats
path: root/dom/base/test/test_postMessages_workers.html
blob: 994c0201e623ed62f41d0890a85262da540a4897 (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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<!DOCTYPE HTML>
<html>
<head>
  <title>Test for postMessages cloning/transferring objects</title>
  <script src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
  <script src="common_postMessages.js"></script>
</head>

<body>
<input id="fileList" type="file"></input>
<script type="application/javascript">

// PostMessage for Workers
tests.push(function test_workers() {
  info("Testing Workers");

  var resolve;

  var w = new Worker('worker_postMessages.js');
  w.postMessage('workers');
  w.onmessage = function(e) {
    is(e.data, 'ok', "Worker ready!");

    w.onmessage = function(e1) {
      if (!resolve) {
        ok(false, "Unexpected message!");
        return;
      }

      let tmp = resolve;
      resolve = null;
      tmp({ data: e1.data, ports: e1.ports, error: e1.data === "error" });
    }

    runTests({
      clonableObjectsEveryWhere: true,
      clonableObjectsSameProcess: true,
      transferableObjects: true,
      send(what, ports) {
        return new Promise(function(r, rr) {
          resolve = r;
          try {
            w.postMessage(what, ports);
          } catch(ex) {
            resolve = null;
            rr();
          }
        });
      },

      finished() {
        w.terminate();
        next();
      }
    });
  }
});

// PostMessage for SharedWorkers
tests.push(function test_sharedWorkers() {
  info("Testing SharedWorkers");

  var resolve;

  var w = new SharedWorker('worker_postMessages.js');
  w.port.postMessage('sharedworkers');
  w.port.onmessage = function(e) {
    is(e.data, 'ok', "Worker ready!");

    w.port.onmessage = function(e1) {
      if (!resolve) {
        ok(false, "Unexpected message!");
        return;
      }

      let tmp = resolve;
      resolve = null;
      tmp({ data: e1.data, ports: e1.ports, error: e1.data === "error" });
    }

    runTests({
      clonableObjectsEveryWhere: true,
      clonableObjectsSameProcess: false,
      transferableObjects: true,
      send(what, ports) {
        return new Promise(function(r, rr) {
          resolve = r;
          try {
            w.port.postMessage(what, ports);
          } catch(ex) {
            resolve = null;
            rr();
          }
        });
      },

      finished() {
        w.port.postMessage("terminate");
        next();
      }
    });
  }
});

SimpleTest.waitForExplicitFinish();
next();

</script>
</body>
</html>