dom/workers/test/test_multi_sharedWorker.html

branch
TOR_BUG_9701
changeset 15
b8a032363ba2
equal deleted inserted replaced
-1:000000000000 0:db9d5cdb9612
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;version=1.7">
12 "use strict";
13
14 const swPref = "dom.workers.sharedWorkers.enabled";
15
16 const basePath =
17 location.pathname.substring(0,
18 location.pathname.lastIndexOf("/") + 1);
19 const baseURL = location.origin + basePath;
20
21 const frameRelativeURL = "multi_sharedWorker_frame.html";
22 const frameAbsoluteURL = baseURL + frameRelativeURL;
23 const workerAbsoluteURL =
24 baseURL + "multi_sharedWorker_sharedWorker.js";
25
26 const storedData = "0123456789abcdefghijklmnopqrstuvwxyz";
27 const errorMessage = "Error: Expected";
28 const errorLineno = 34;
29
30 let testGenerator = (function() {
31 SimpleTest.waitForExplicitFinish();
32
33 if (!SpecialPowers.getBoolPref(swPref)) {
34 ok(!("SharedWorker" in window), "No SharedWorker without pref set");
35 }
36
37 SpecialPowers.pushPrefEnv({ set: [[swPref, true]] }, sendToGenerator);
38 yield undefined;
39
40 window.addEventListener("message", function(event) {
41 if (typeof(event.data) == "string") {
42 info(event.data);
43 } else {
44 sendToGenerator(event);
45 }
46 });
47
48 let frame1 = document.getElementById("frame1");
49 frame1.src = frameRelativeURL;
50 frame1.onload = sendToGenerator;
51
52 yield undefined;
53
54 frame1 = frame1.contentWindow;
55
56 let frame2 = document.getElementById("frame2");
57 frame2.src = frameAbsoluteURL;
58 frame2.onload = sendToGenerator;
59
60 yield undefined;
61
62 frame2 = frame2.contentWindow;
63
64 let data = {
65 command: "start"
66 };
67
68 frame1.postMessage(data, "*");
69 frame2.postMessage(data, "*");
70
71 let event = yield undefined;
72 ok(event instanceof MessageEvent, "Got a MessageEvent");
73 is(event.source, frame1, "First window got the event");
74 is(event.data.type, "connect", "Got a connect message");
75
76 data = {
77 command: "retrieve"
78 };
79 frame1.postMessage(data, "*");
80
81 event = yield undefined;
82 ok(event instanceof MessageEvent, "Got a MessageEvent");
83 is(event.source, frame1, "First window got the event");
84 is(event.data.type, "result", "Got a result message");
85 is(event.data.data, undefined, "No data stored yet");
86
87 frame2.postMessage(data, "*");
88
89 event = yield undefined;
90 ok(event instanceof MessageEvent, "Got a MessageEvent");
91 is(event.source, frame2, "Second window got the event");
92 is(event.data.type, "result", "Got a result message");
93 is(event.data.data, undefined, "No data stored yet");
94
95 data = {
96 command: "store",
97 data: storedData
98 };
99 frame2.postMessage(data, "*");
100
101 data = {
102 command: "retrieve"
103 };
104 frame1.postMessage(data, "*");
105
106 event = yield undefined;
107 ok(event instanceof MessageEvent, "Got a MessageEvent");
108 is(event.source, frame1, "First window got the event");
109 is(event.data.type, "result", "Got a result message");
110 is(event.data.data, storedData, "Got stored data");
111
112 // This will generate two MessageEvents, one for each window.
113 let sawFrame1Error = false;
114 let sawFrame2Error = false;
115
116 data = {
117 command: "error"
118 };
119 frame1.postMessage(data, "*");
120
121 // First event.
122 event = yield undefined;
123
124 ok(event instanceof MessageEvent, "Got a MessageEvent");
125 is(event.data.type, "worker-error", "Got an error message");
126 is(event.data.message, errorMessage, "Got correct error message");
127 is(event.data.filename, workerAbsoluteURL, "Got correct filename");
128 is(event.data.lineno, errorLineno, "Got correct lineno");
129 if (event.source == frame1) {
130 is(sawFrame1Error, false, "Haven't seen error for frame1 yet");
131 sawFrame1Error = true;
132 } else if (event.source == frame2) {
133 is(sawFrame2Error, false, "Haven't seen error for frame1 yet");
134 sawFrame2Error = true;
135 } else {
136 ok(false, "Saw error from unknown window");
137 }
138
139 // Second event
140 event = yield undefined;
141
142 ok(event instanceof MessageEvent, "Got a MessageEvent");
143 is(event.data.type, "worker-error", "Got an error message");
144 is(event.data.message, errorMessage, "Got correct error message");
145 is(event.data.filename, workerAbsoluteURL, "Got correct filename");
146 is(event.data.lineno, errorLineno, "Got correct lineno");
147 if (event.source == frame1) {
148 is(sawFrame1Error, false, "Haven't seen error for frame1 yet");
149 sawFrame1Error = true;
150 } else if (event.source == frame2) {
151 is(sawFrame2Error, false, "Haven't seen error for frame1 yet");
152 sawFrame2Error = true;
153 } else {
154 ok(false, "Saw error from unknown window");
155 }
156
157 is(sawFrame1Error, true, "Saw error for frame1");
158 is(sawFrame2Error, true, "Saw error for frame2");
159
160 // This will generate two MessageEvents, one for each window.
161 sawFrame1Error = false;
162 sawFrame2Error = false;
163
164 data = {
165 command: "error"
166 };
167 frame1.postMessage(data, "*");
168
169 // First event.
170 event = yield undefined;
171
172 ok(event instanceof MessageEvent, "Got a MessageEvent");
173 is(event.data.type, "error", "Got an error message");
174 is(event.data.message, errorMessage, "Got correct error message");
175 is(event.data.filename, workerAbsoluteURL, "Got correct filename");
176 is(event.data.lineno, errorLineno, "Got correct lineno");
177 is(event.data.isErrorEvent, true, "Frame got an ErrorEvent");
178 if (event.source == frame1) {
179 is(sawFrame1Error, false, "Haven't seen error for frame1 yet");
180 sawFrame1Error = true;
181 } else if (event.source == frame2) {
182 is(sawFrame2Error, false, "Haven't seen error for frame1 yet");
183 sawFrame2Error = true;
184 } else {
185 ok(false, "Saw error from unknown window");
186 }
187
188 // Second event
189 event = yield undefined;
190
191 ok(event instanceof MessageEvent, "Got a MessageEvent");
192 is(event.data.type, "error", "Got an error message");
193 is(event.data.message, errorMessage, "Got correct error message");
194 is(event.data.filename, workerAbsoluteURL, "Got correct filename");
195 is(event.data.lineno, errorLineno, "Got correct lineno");
196 is(event.data.isErrorEvent, true, "Frame got an ErrorEvent");
197 if (event.source == frame1) {
198 is(sawFrame1Error, false, "Haven't seen error for frame1 yet");
199 sawFrame1Error = true;
200 } else if (event.source == frame2) {
201 is(sawFrame2Error, false, "Haven't seen error for frame1 yet");
202 sawFrame2Error = true;
203 } else {
204 ok(false, "Saw error from unknown window");
205 }
206
207 is(sawFrame1Error, true, "Saw error for frame1");
208 is(sawFrame2Error, true, "Saw error for frame2");
209
210 // Try a shared worker in a different origin.
211 frame1 = document.getElementById("frame1");
212 frame1.src = "http://example.org" + basePath + frameRelativeURL;
213 frame1.onload = sendToGenerator;
214 yield undefined;
215
216 frame1 = frame1.contentWindow;
217
218 data = {
219 command: "retrieve"
220 };
221 frame1.postMessage(data, "*");
222
223 event = yield undefined;
224 ok(event instanceof MessageEvent, "Got a MessageEvent");
225 is(event.source, frame1, "First window got the event");
226 is(event.data.type, "result", "Got a result message");
227 is(event.data.data, undefined, "No data stored yet");
228
229 frame2.postMessage(data, "*");
230
231 event = yield undefined;
232 ok(event instanceof MessageEvent, "Got a MessageEvent");
233 is(event.source, frame2, "First window got the event");
234 is(event.data.type, "result", "Got a result message");
235 is(event.data.data, storedData, "Got stored data");
236
237 window.removeEventListener("message", sendToGenerator);
238
239 SimpleTest.finish();
240 yield undefined;
241 })();
242
243 let sendToGenerator = testGenerator.send.bind(testGenerator);
244
245 </script>
246 </head>
247 <body onload="testGenerator.next();">
248 <iframe id="frame1"></iframe>
249 <iframe id="frame2"></iframe>
250 </body>
251 </html>

mercurial