1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/workers/test/test_multi_sharedWorker.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,251 @@ 1.4 +<!-- 1.5 + Any copyright is dedicated to the Public Domain. 1.6 + http://creativecommons.org/publicdomain/zero/1.0/ 1.7 +--> 1.8 +<!DOCTYPE HTML> 1.9 +<html> 1.10 + <head> 1.11 + <title>Test for SharedWorker</title> 1.12 + <script src="/tests/SimpleTest/SimpleTest.js"></script> 1.13 + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"> 1.14 + <script class="testbody" type="text/javascript;version=1.7"> 1.15 + "use strict"; 1.16 + 1.17 + const swPref = "dom.workers.sharedWorkers.enabled"; 1.18 + 1.19 + const basePath = 1.20 + location.pathname.substring(0, 1.21 + location.pathname.lastIndexOf("/") + 1); 1.22 + const baseURL = location.origin + basePath; 1.23 + 1.24 + const frameRelativeURL = "multi_sharedWorker_frame.html"; 1.25 + const frameAbsoluteURL = baseURL + frameRelativeURL; 1.26 + const workerAbsoluteURL = 1.27 + baseURL + "multi_sharedWorker_sharedWorker.js"; 1.28 + 1.29 + const storedData = "0123456789abcdefghijklmnopqrstuvwxyz"; 1.30 + const errorMessage = "Error: Expected"; 1.31 + const errorLineno = 34; 1.32 + 1.33 + let testGenerator = (function() { 1.34 + SimpleTest.waitForExplicitFinish(); 1.35 + 1.36 + if (!SpecialPowers.getBoolPref(swPref)) { 1.37 + ok(!("SharedWorker" in window), "No SharedWorker without pref set"); 1.38 + } 1.39 + 1.40 + SpecialPowers.pushPrefEnv({ set: [[swPref, true]] }, sendToGenerator); 1.41 + yield undefined; 1.42 + 1.43 + window.addEventListener("message", function(event) { 1.44 + if (typeof(event.data) == "string") { 1.45 + info(event.data); 1.46 + } else { 1.47 + sendToGenerator(event); 1.48 + } 1.49 + }); 1.50 + 1.51 + let frame1 = document.getElementById("frame1"); 1.52 + frame1.src = frameRelativeURL; 1.53 + frame1.onload = sendToGenerator; 1.54 + 1.55 + yield undefined; 1.56 + 1.57 + frame1 = frame1.contentWindow; 1.58 + 1.59 + let frame2 = document.getElementById("frame2"); 1.60 + frame2.src = frameAbsoluteURL; 1.61 + frame2.onload = sendToGenerator; 1.62 + 1.63 + yield undefined; 1.64 + 1.65 + frame2 = frame2.contentWindow; 1.66 + 1.67 + let data = { 1.68 + command: "start" 1.69 + }; 1.70 + 1.71 + frame1.postMessage(data, "*"); 1.72 + frame2.postMessage(data, "*"); 1.73 + 1.74 + let event = yield undefined; 1.75 + ok(event instanceof MessageEvent, "Got a MessageEvent"); 1.76 + is(event.source, frame1, "First window got the event"); 1.77 + is(event.data.type, "connect", "Got a connect message"); 1.78 + 1.79 + data = { 1.80 + command: "retrieve" 1.81 + }; 1.82 + frame1.postMessage(data, "*"); 1.83 + 1.84 + event = yield undefined; 1.85 + ok(event instanceof MessageEvent, "Got a MessageEvent"); 1.86 + is(event.source, frame1, "First window got the event"); 1.87 + is(event.data.type, "result", "Got a result message"); 1.88 + is(event.data.data, undefined, "No data stored yet"); 1.89 + 1.90 + frame2.postMessage(data, "*"); 1.91 + 1.92 + event = yield undefined; 1.93 + ok(event instanceof MessageEvent, "Got a MessageEvent"); 1.94 + is(event.source, frame2, "Second window got the event"); 1.95 + is(event.data.type, "result", "Got a result message"); 1.96 + is(event.data.data, undefined, "No data stored yet"); 1.97 + 1.98 + data = { 1.99 + command: "store", 1.100 + data: storedData 1.101 + }; 1.102 + frame2.postMessage(data, "*"); 1.103 + 1.104 + data = { 1.105 + command: "retrieve" 1.106 + }; 1.107 + frame1.postMessage(data, "*"); 1.108 + 1.109 + event = yield undefined; 1.110 + ok(event instanceof MessageEvent, "Got a MessageEvent"); 1.111 + is(event.source, frame1, "First window got the event"); 1.112 + is(event.data.type, "result", "Got a result message"); 1.113 + is(event.data.data, storedData, "Got stored data"); 1.114 + 1.115 + // This will generate two MessageEvents, one for each window. 1.116 + let sawFrame1Error = false; 1.117 + let sawFrame2Error = false; 1.118 + 1.119 + data = { 1.120 + command: "error" 1.121 + }; 1.122 + frame1.postMessage(data, "*"); 1.123 + 1.124 + // First event. 1.125 + event = yield undefined; 1.126 + 1.127 + ok(event instanceof MessageEvent, "Got a MessageEvent"); 1.128 + is(event.data.type, "worker-error", "Got an error message"); 1.129 + is(event.data.message, errorMessage, "Got correct error message"); 1.130 + is(event.data.filename, workerAbsoluteURL, "Got correct filename"); 1.131 + is(event.data.lineno, errorLineno, "Got correct lineno"); 1.132 + if (event.source == frame1) { 1.133 + is(sawFrame1Error, false, "Haven't seen error for frame1 yet"); 1.134 + sawFrame1Error = true; 1.135 + } else if (event.source == frame2) { 1.136 + is(sawFrame2Error, false, "Haven't seen error for frame1 yet"); 1.137 + sawFrame2Error = true; 1.138 + } else { 1.139 + ok(false, "Saw error from unknown window"); 1.140 + } 1.141 + 1.142 + // Second event 1.143 + event = yield undefined; 1.144 + 1.145 + ok(event instanceof MessageEvent, "Got a MessageEvent"); 1.146 + is(event.data.type, "worker-error", "Got an error message"); 1.147 + is(event.data.message, errorMessage, "Got correct error message"); 1.148 + is(event.data.filename, workerAbsoluteURL, "Got correct filename"); 1.149 + is(event.data.lineno, errorLineno, "Got correct lineno"); 1.150 + if (event.source == frame1) { 1.151 + is(sawFrame1Error, false, "Haven't seen error for frame1 yet"); 1.152 + sawFrame1Error = true; 1.153 + } else if (event.source == frame2) { 1.154 + is(sawFrame2Error, false, "Haven't seen error for frame1 yet"); 1.155 + sawFrame2Error = true; 1.156 + } else { 1.157 + ok(false, "Saw error from unknown window"); 1.158 + } 1.159 + 1.160 + is(sawFrame1Error, true, "Saw error for frame1"); 1.161 + is(sawFrame2Error, true, "Saw error for frame2"); 1.162 + 1.163 + // This will generate two MessageEvents, one for each window. 1.164 + sawFrame1Error = false; 1.165 + sawFrame2Error = false; 1.166 + 1.167 + data = { 1.168 + command: "error" 1.169 + }; 1.170 + frame1.postMessage(data, "*"); 1.171 + 1.172 + // First event. 1.173 + event = yield undefined; 1.174 + 1.175 + ok(event instanceof MessageEvent, "Got a MessageEvent"); 1.176 + is(event.data.type, "error", "Got an error message"); 1.177 + is(event.data.message, errorMessage, "Got correct error message"); 1.178 + is(event.data.filename, workerAbsoluteURL, "Got correct filename"); 1.179 + is(event.data.lineno, errorLineno, "Got correct lineno"); 1.180 + is(event.data.isErrorEvent, true, "Frame got an ErrorEvent"); 1.181 + if (event.source == frame1) { 1.182 + is(sawFrame1Error, false, "Haven't seen error for frame1 yet"); 1.183 + sawFrame1Error = true; 1.184 + } else if (event.source == frame2) { 1.185 + is(sawFrame2Error, false, "Haven't seen error for frame1 yet"); 1.186 + sawFrame2Error = true; 1.187 + } else { 1.188 + ok(false, "Saw error from unknown window"); 1.189 + } 1.190 + 1.191 + // Second event 1.192 + event = yield undefined; 1.193 + 1.194 + ok(event instanceof MessageEvent, "Got a MessageEvent"); 1.195 + is(event.data.type, "error", "Got an error message"); 1.196 + is(event.data.message, errorMessage, "Got correct error message"); 1.197 + is(event.data.filename, workerAbsoluteURL, "Got correct filename"); 1.198 + is(event.data.lineno, errorLineno, "Got correct lineno"); 1.199 + is(event.data.isErrorEvent, true, "Frame got an ErrorEvent"); 1.200 + if (event.source == frame1) { 1.201 + is(sawFrame1Error, false, "Haven't seen error for frame1 yet"); 1.202 + sawFrame1Error = true; 1.203 + } else if (event.source == frame2) { 1.204 + is(sawFrame2Error, false, "Haven't seen error for frame1 yet"); 1.205 + sawFrame2Error = true; 1.206 + } else { 1.207 + ok(false, "Saw error from unknown window"); 1.208 + } 1.209 + 1.210 + is(sawFrame1Error, true, "Saw error for frame1"); 1.211 + is(sawFrame2Error, true, "Saw error for frame2"); 1.212 + 1.213 + // Try a shared worker in a different origin. 1.214 + frame1 = document.getElementById("frame1"); 1.215 + frame1.src = "http://example.org" + basePath + frameRelativeURL; 1.216 + frame1.onload = sendToGenerator; 1.217 + yield undefined; 1.218 + 1.219 + frame1 = frame1.contentWindow; 1.220 + 1.221 + data = { 1.222 + command: "retrieve" 1.223 + }; 1.224 + frame1.postMessage(data, "*"); 1.225 + 1.226 + event = yield undefined; 1.227 + ok(event instanceof MessageEvent, "Got a MessageEvent"); 1.228 + is(event.source, frame1, "First window got the event"); 1.229 + is(event.data.type, "result", "Got a result message"); 1.230 + is(event.data.data, undefined, "No data stored yet"); 1.231 + 1.232 + frame2.postMessage(data, "*"); 1.233 + 1.234 + event = yield undefined; 1.235 + ok(event instanceof MessageEvent, "Got a MessageEvent"); 1.236 + is(event.source, frame2, "First window got the event"); 1.237 + is(event.data.type, "result", "Got a result message"); 1.238 + is(event.data.data, storedData, "Got stored data"); 1.239 + 1.240 + window.removeEventListener("message", sendToGenerator); 1.241 + 1.242 + SimpleTest.finish(); 1.243 + yield undefined; 1.244 + })(); 1.245 + 1.246 + let sendToGenerator = testGenerator.send.bind(testGenerator); 1.247 + 1.248 + </script> 1.249 + </head> 1.250 + <body onload="testGenerator.next();"> 1.251 + <iframe id="frame1"></iframe> 1.252 + <iframe id="frame2"></iframe> 1.253 + </body> 1.254 +</html>