dom/workers/test/test_multi_sharedWorker.html

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

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

mercurial