Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
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";
14 const swPref = "dom.workers.sharedWorkers.enabled";
16 const basePath =
17 location.pathname.substring(0,
18 location.pathname.lastIndexOf("/") + 1);
19 const baseURL = location.origin + basePath;
21 const frameRelativeURL = "multi_sharedWorker_frame.html";
22 const frameAbsoluteURL = baseURL + frameRelativeURL;
23 const workerAbsoluteURL =
24 baseURL + "multi_sharedWorker_sharedWorker.js";
26 const storedData = "0123456789abcdefghijklmnopqrstuvwxyz";
27 const errorMessage = "Error: Expected";
28 const errorLineno = 34;
30 let testGenerator = (function() {
31 SimpleTest.waitForExplicitFinish();
33 if (!SpecialPowers.getBoolPref(swPref)) {
34 ok(!("SharedWorker" in window), "No SharedWorker without pref set");
35 }
37 SpecialPowers.pushPrefEnv({ set: [[swPref, true]] }, sendToGenerator);
38 yield undefined;
40 window.addEventListener("message", function(event) {
41 if (typeof(event.data) == "string") {
42 info(event.data);
43 } else {
44 sendToGenerator(event);
45 }
46 });
48 let frame1 = document.getElementById("frame1");
49 frame1.src = frameRelativeURL;
50 frame1.onload = sendToGenerator;
52 yield undefined;
54 frame1 = frame1.contentWindow;
56 let frame2 = document.getElementById("frame2");
57 frame2.src = frameAbsoluteURL;
58 frame2.onload = sendToGenerator;
60 yield undefined;
62 frame2 = frame2.contentWindow;
64 let data = {
65 command: "start"
66 };
68 frame1.postMessage(data, "*");
69 frame2.postMessage(data, "*");
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");
76 data = {
77 command: "retrieve"
78 };
79 frame1.postMessage(data, "*");
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");
87 frame2.postMessage(data, "*");
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");
95 data = {
96 command: "store",
97 data: storedData
98 };
99 frame2.postMessage(data, "*");
101 data = {
102 command: "retrieve"
103 };
104 frame1.postMessage(data, "*");
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");
112 // This will generate two MessageEvents, one for each window.
113 let sawFrame1Error = false;
114 let sawFrame2Error = false;
116 data = {
117 command: "error"
118 };
119 frame1.postMessage(data, "*");
121 // First event.
122 event = yield undefined;
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 }
139 // Second event
140 event = yield undefined;
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 }
157 is(sawFrame1Error, true, "Saw error for frame1");
158 is(sawFrame2Error, true, "Saw error for frame2");
160 // This will generate two MessageEvents, one for each window.
161 sawFrame1Error = false;
162 sawFrame2Error = false;
164 data = {
165 command: "error"
166 };
167 frame1.postMessage(data, "*");
169 // First event.
170 event = yield undefined;
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 }
188 // Second event
189 event = yield undefined;
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 }
207 is(sawFrame1Error, true, "Saw error for frame1");
208 is(sawFrame2Error, true, "Saw error for frame2");
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;
216 frame1 = frame1.contentWindow;
218 data = {
219 command: "retrieve"
220 };
221 frame1.postMessage(data, "*");
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");
229 frame2.postMessage(data, "*");
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");
237 window.removeEventListener("message", sendToGenerator);
239 SimpleTest.finish();
240 yield undefined;
241 })();
243 let sendToGenerator = testGenerator.send.bind(testGenerator);
245 </script>
246 </head>
247 <body onload="testGenerator.next();">
248 <iframe id="frame1"></iframe>
249 <iframe id="frame2"></iframe>
250 </body>
251 </html>