1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/workers/test/multi_sharedWorker_sharedWorker.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,72 @@ 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 +"use strict"; 1.9 + 1.10 +if (self.name != "FrameWorker") { 1.11 + throw new Error("Bad worker name: " + self.name); 1.12 +} 1.13 + 1.14 +var registeredPorts = []; 1.15 +var errorCount = 0; 1.16 +var storedData; 1.17 + 1.18 +self.onconnect = function(event) { 1.19 + var port = event.ports[0]; 1.20 + 1.21 + if (registeredPorts.length) { 1.22 + var data = { 1.23 + type: "connect" 1.24 + }; 1.25 + 1.26 + registeredPorts.forEach(function(registeredPort) { 1.27 + registeredPort.postMessage(data); 1.28 + }); 1.29 + } 1.30 + 1.31 + port.onmessage = function(event) { 1.32 + switch (event.data.command) { 1.33 + case "start": 1.34 + break; 1.35 + 1.36 + case "error": 1.37 + throw new Error("Expected"); 1.38 + 1.39 + case "store": 1.40 + storedData = event.data.data; 1.41 + break; 1.42 + 1.43 + case "retrieve": 1.44 + var data = { 1.45 + type: "result", 1.46 + data: storedData 1.47 + }; 1.48 + port.postMessage(data); 1.49 + break; 1.50 + 1.51 + default: 1.52 + throw new Error("Unknown command '" + error.data.command + "'"); 1.53 + } 1.54 + }; 1.55 + 1.56 + registeredPorts.push(port); 1.57 +}; 1.58 + 1.59 +self.onerror = function(message, filename, lineno) { 1.60 + if (!errorCount++) { 1.61 + var data = { 1.62 + type: "worker-error", 1.63 + message: message, 1.64 + filename: filename, 1.65 + lineno: lineno 1.66 + }; 1.67 + 1.68 + registeredPorts.forEach(function (registeredPort) { 1.69 + registeredPort.postMessage(data); 1.70 + }); 1.71 + 1.72 + // Prevent the error from propagating the first time only. 1.73 + return true; 1.74 + } 1.75 +};