test_multi_sharedWorker.html (8909B)
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"; 13 14 const basePath = 15 location.pathname.substring(0, 16 location.pathname.lastIndexOf("/") + 1); 17 const baseURL = location.origin + basePath; 18 19 const frameRelativeURL = "multi_sharedWorker_frame.html"; 20 const frameAbsoluteURL = baseURL + frameRelativeURL; 21 const workerAbsoluteURL = 22 baseURL + "multi_sharedWorker_sharedWorker.js"; 23 24 const storedData = "0123456789abcdefghijklmnopqrstuvwxyz"; 25 const errorMessage = "Error: Expected"; 26 const errorLineno = 34; 27 28 let testGenerator = (function*() { 29 SimpleTest.waitForExplicitFinish(); 30 31 window.addEventListener("message", function(event) { 32 if (typeof(event.data) == "string") { 33 info(event.data); 34 } else { 35 sendToGenerator(event); 36 } 37 }); 38 39 let frame1 = document.getElementById("frame1"); 40 frame1.src = frameRelativeURL; 41 frame1.onload = sendToGenerator; 42 43 yield undefined; 44 45 frame1 = frame1.contentWindow; 46 47 let frame2 = document.getElementById("frame2"); 48 frame2.src = frameAbsoluteURL; 49 frame2.onload = sendToGenerator; 50 51 yield undefined; 52 53 frame2 = frame2.contentWindow; 54 55 let data = { 56 command: "start" 57 }; 58 59 frame1.postMessage(data, "*"); 60 frame2.postMessage(data, "*"); 61 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"); 66 67 data = { 68 command: "retrieve" 69 }; 70 frame1.postMessage(data, "*"); 71 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"); 77 78 frame2.postMessage(data, "*"); 79 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"); 85 86 data = { 87 command: "store", 88 data: storedData 89 }; 90 frame2.postMessage(data, "*"); 91 92 data = { 93 command: "retrieve" 94 }; 95 frame1.postMessage(data, "*"); 96 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"); 102 103 // This will generate two MessageEvents, one for each window. 104 let sawFrame1Error = false; 105 let sawFrame2Error = false; 106 107 data = { 108 command: "error" 109 }; 110 frame1.postMessage(data, "*"); 111 112 // First event. 113 event = yield undefined; 114 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"); 128 } 129 130 // Second event 131 event = yield undefined; 132 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"); 146 } 147 148 is(sawFrame1Error, true, "Saw error for frame1"); 149 is(sawFrame2Error, true, "Saw error for frame2"); 150 151 // This will generate two MessageEvents, one for each window. 152 sawFrame1Error = false; 153 sawFrame2Error = false; 154 155 data = { 156 command: "error" 157 }; 158 frame1.postMessage(data, "*"); 159 160 // First event. 161 event = yield undefined; 162 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"); 177 } 178 179 // Second event 180 event = yield undefined; 181 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"); 196 } 197 198 is(sawFrame1Error, true, "Saw error for frame1"); 199 is(sawFrame2Error, true, "Saw error for frame2"); 200 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; 206 207 frame1 = frame1.contentWindow; 208 209 data = { 210 command: "retrieve" 211 }; 212 frame1.postMessage(data, "*"); 213 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"); 219 220 frame2.postMessage(data, "*"); 221 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"); 227 228 window.removeEventListener("message", sendToGenerator); 229 230 SimpleTest.finish(); 231 })(); 232 233 let sendToGenerator = testGenerator.next.bind(testGenerator); 234 235 </script> 236 </head> 237 <body onload="testGenerator.next();"> 238 <iframe id="frame1"></iframe> 239 <iframe id="frame2"></iframe> 240 </body> 241 </html>