no bug - Bumping Firefox l10n changesets r=release a=l10n-bump DONTBUILD CLOSED TREE
[gecko.git] / dom / workers / test / test_multi_sharedWorker.html
blob7bfbeaa9e913716833beed18f98d16fda38198c1
1 <!--
2 Any copyright is dedicated to the Public Domain.
3 http://creativecommons.org/publicdomain/zero/1.0/
4 -->
5 <!DOCTYPE HTML>
6 <html>
7 <head>
8 <title>Test for SharedWorker</title>
9 <script src="/tests/SimpleTest/SimpleTest.js"></script>
10 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css">
11 <script class="testbody" type="text/javascript">
12 "use strict";
14 const basePath =
15 location.pathname.substring(0,
16 location.pathname.lastIndexOf("/") + 1);
17 const baseURL = location.origin + basePath;
19 const frameRelativeURL = "multi_sharedWorker_frame.html";
20 const frameAbsoluteURL = baseURL + frameRelativeURL;
21 const workerAbsoluteURL =
22 baseURL + "multi_sharedWorker_sharedWorker.js";
24 const storedData = "0123456789abcdefghijklmnopqrstuvwxyz";
25 const errorMessage = "Error: Expected";
26 const errorLineno = 34;
28 let testGenerator = (function*() {
29 SimpleTest.waitForExplicitFinish();
31 window.addEventListener("message", function(event) {
32 if (typeof(event.data) == "string") {
33 info(event.data);
34 } else {
35 sendToGenerator(event);
37 });
39 let frame1 = document.getElementById("frame1");
40 frame1.src = frameRelativeURL;
41 frame1.onload = sendToGenerator;
43 yield undefined;
45 frame1 = frame1.contentWindow;
47 let frame2 = document.getElementById("frame2");
48 frame2.src = frameAbsoluteURL;
49 frame2.onload = sendToGenerator;
51 yield undefined;
53 frame2 = frame2.contentWindow;
55 let data = {
56 command: "start"
59 frame1.postMessage(data, "*");
60 frame2.postMessage(data, "*");
62 let event = yield undefined;
63 ok(event instanceof MessageEvent, "Got a MessageEvent");
64 is(event.source, frame1, "First window got the event");
65 is(event.data.type, "connect", "Got a connect message");
67 data = {
68 command: "retrieve"
70 frame1.postMessage(data, "*");
72 event = yield undefined;
73 ok(event instanceof MessageEvent, "Got a MessageEvent");
74 is(event.source, frame1, "First window got the event");
75 is(event.data.type, "result", "Got a result message");
76 is(event.data.data, undefined, "No data stored yet");
78 frame2.postMessage(data, "*");
80 event = yield undefined;
81 ok(event instanceof MessageEvent, "Got a MessageEvent");
82 is(event.source, frame2, "Second window got the event");
83 is(event.data.type, "result", "Got a result message");
84 is(event.data.data, undefined, "No data stored yet");
86 data = {
87 command: "store",
88 data: storedData
90 frame2.postMessage(data, "*");
92 data = {
93 command: "retrieve"
95 frame1.postMessage(data, "*");
97 event = yield undefined;
98 ok(event instanceof MessageEvent, "Got a MessageEvent");
99 is(event.source, frame1, "First window got the event");
100 is(event.data.type, "result", "Got a result message");
101 is(event.data.data, storedData, "Got stored data");
103 // This will generate two MessageEvents, one for each window.
104 let sawFrame1Error = false;
105 let sawFrame2Error = false;
107 data = {
108 command: "error"
110 frame1.postMessage(data, "*");
112 // First event.
113 event = yield undefined;
115 ok(event instanceof MessageEvent, "Got a MessageEvent");
116 is(event.data.type, "worker-error", "Got an error message");
117 is(event.data.message, errorMessage, "Got correct error message");
118 is(event.data.filename, workerAbsoluteURL, "Got correct filename");
119 is(event.data.lineno, errorLineno, "Got correct lineno");
120 if (event.source == frame1) {
121 is(sawFrame1Error, false, "Haven't seen error for frame1 yet");
122 sawFrame1Error = true;
123 } else if (event.source == frame2) {
124 is(sawFrame2Error, false, "Haven't seen error for frame1 yet");
125 sawFrame2Error = true;
126 } else {
127 ok(false, "Saw error from unknown window");
130 // Second event
131 event = yield undefined;
133 ok(event instanceof MessageEvent, "Got a MessageEvent");
134 is(event.data.type, "worker-error", "Got an error message");
135 is(event.data.message, errorMessage, "Got correct error message");
136 is(event.data.filename, workerAbsoluteURL, "Got correct filename");
137 is(event.data.lineno, errorLineno, "Got correct lineno");
138 if (event.source == frame1) {
139 is(sawFrame1Error, false, "Haven't seen error for frame1 yet");
140 sawFrame1Error = true;
141 } else if (event.source == frame2) {
142 is(sawFrame2Error, false, "Haven't seen error for frame1 yet");
143 sawFrame2Error = true;
144 } else {
145 ok(false, "Saw error from unknown window");
148 is(sawFrame1Error, true, "Saw error for frame1");
149 is(sawFrame2Error, true, "Saw error for frame2");
151 // This will generate two MessageEvents, one for each window.
152 sawFrame1Error = false;
153 sawFrame2Error = false;
155 data = {
156 command: "error"
158 frame1.postMessage(data, "*");
160 // First event.
161 event = yield undefined;
163 ok(event instanceof MessageEvent, "Got a MessageEvent");
164 is(event.data.type, "error", "Got an error message");
165 is(event.data.message, errorMessage, "Got correct error message");
166 is(event.data.filename, workerAbsoluteURL, "Got correct filename");
167 is(event.data.lineno, errorLineno, "Got correct lineno");
168 is(event.data.isErrorEvent, true, "Frame got an ErrorEvent");
169 if (event.source == frame1) {
170 is(sawFrame1Error, false, "Haven't seen error for frame1 yet");
171 sawFrame1Error = true;
172 } else if (event.source == frame2) {
173 is(sawFrame2Error, false, "Haven't seen error for frame1 yet");
174 sawFrame2Error = true;
175 } else {
176 ok(false, "Saw error from unknown window");
179 // Second event
180 event = yield undefined;
182 ok(event instanceof MessageEvent, "Got a MessageEvent");
183 is(event.data.type, "error", "Got an error message");
184 is(event.data.message, errorMessage, "Got correct error message");
185 is(event.data.filename, workerAbsoluteURL, "Got correct filename");
186 is(event.data.lineno, errorLineno, "Got correct lineno");
187 is(event.data.isErrorEvent, true, "Frame got an ErrorEvent");
188 if (event.source == frame1) {
189 is(sawFrame1Error, false, "Haven't seen error for frame1 yet");
190 sawFrame1Error = true;
191 } else if (event.source == frame2) {
192 is(sawFrame2Error, false, "Haven't seen error for frame1 yet");
193 sawFrame2Error = true;
194 } else {
195 ok(false, "Saw error from unknown window");
198 is(sawFrame1Error, true, "Saw error for frame1");
199 is(sawFrame2Error, true, "Saw error for frame2");
201 // Try a shared worker in a different origin.
202 frame1 = document.getElementById("frame1");
203 frame1.src = "http://example.org" + basePath + frameRelativeURL;
204 frame1.onload = sendToGenerator;
205 yield undefined;
207 frame1 = frame1.contentWindow;
209 data = {
210 command: "retrieve"
212 frame1.postMessage(data, "*");
214 event = yield undefined;
215 ok(event instanceof MessageEvent, "Got a MessageEvent");
216 is(event.source, frame1, "First window got the event");
217 is(event.data.type, "result", "Got a result message");
218 is(event.data.data, undefined, "No data stored yet");
220 frame2.postMessage(data, "*");
222 event = yield undefined;
223 ok(event instanceof MessageEvent, "Got a MessageEvent");
224 is(event.source, frame2, "First window got the event");
225 is(event.data.type, "result", "Got a result message");
226 is(event.data.data, storedData, "Got stored data");
228 window.removeEventListener("message", sendToGenerator);
230 SimpleTest.finish();
231 })();
233 let sendToGenerator = testGenerator.next.bind(testGenerator);
235 </script>
236 </head>
237 <body onload="testGenerator.next();">
238 <iframe id="frame1"></iframe>
239 <iframe id="frame2"></iframe>
240 </body>
241 </html>