multi_sharedWorker_sharedWorker.js (1447B)
1 /** 2 * Any copyright is dedicated to the Public Domain. 3 * http://creativecommons.org/publicdomain/zero/1.0/ 4 */ 5 "use strict"; 6 7 if (self.name != "FrameWorker") { 8 throw new Error("Bad worker name: " + self.name); 9 } 10 11 var registeredPorts = []; 12 var errorCount = 0; 13 var storedData; 14 15 self.onconnect = function (event) { 16 var port = event.ports[0]; 17 18 if (registeredPorts.length) { 19 let data = { 20 type: "connect", 21 }; 22 23 registeredPorts.forEach(function (registeredPort) { 24 registeredPort.postMessage(data); 25 }); 26 } 27 28 port.onmessage = function (msg) { 29 switch (msg.data.command) { 30 case "start": 31 break; 32 33 case "error": 34 throw new Error("Expected"); 35 36 case "store": 37 storedData = msg.data.data; 38 break; 39 40 case "retrieve": 41 var data = { 42 type: "result", 43 data: storedData, 44 }; 45 port.postMessage(data); 46 break; 47 48 default: 49 throw new Error("Unknown command '" + error.data.command + "'"); 50 } 51 }; 52 53 registeredPorts.push(port); 54 }; 55 56 self.onerror = function (message, filename, lineno) { 57 if (!errorCount++) { 58 var data = { 59 type: "worker-error", 60 message, 61 filename, 62 lineno, 63 }; 64 65 registeredPorts.forEach(function (registeredPort) { 66 registeredPort.postMessage(data); 67 }); 68 69 // Prevent the error from propagating the first time only. 70 return true; 71 } 72 return undefined; 73 };