2 Any copyright is dedicated to the Public Domain.
3 http://creativecommons.org/publicdomain/zero/1.0/
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">
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") {
35 sendToGenerator(event);
39 let frame1 = document.getElementById(
"frame1");
40 frame1.src = frameRelativeURL;
41 frame1.onload = sendToGenerator;
45 frame1 = frame1.contentWindow;
47 let frame2 = document.getElementById(
"frame2");
48 frame2.src = frameAbsoluteURL;
49 frame2.onload = sendToGenerator;
53 frame2 = frame2.contentWindow;
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");
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");
90 frame2.postMessage(data,
"*");
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;
110 frame1.postMessage(data,
"*");
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;
127 ok(false,
"Saw error from unknown window");
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;
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;
158 frame1.postMessage(data,
"*");
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;
176 ok(false,
"Saw error from unknown window");
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;
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;
207 frame1 = frame1.contentWindow;
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);
233 let sendToGenerator = testGenerator.next.bind(testGenerator);
237 <body onload=
"testGenerator.next();">
238 <iframe id=
"frame1"></iframe>
239 <iframe id=
"frame2"></iframe>