Thu, 22 Jan 2015 13:21:57 +0100
Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6
1 /**
2 * Any copyright is dedicated to the Public Domain.
3 * http://creativecommons.org/publicdomain/zero/1.0/
4 */
5 "use strict";
7 if (self.name != "FrameWorker") {
8 throw new Error("Bad worker name: " + self.name);
9 }
11 var registeredPorts = [];
12 var errorCount = 0;
13 var storedData;
15 self.onconnect = function(event) {
16 var port = event.ports[0];
18 if (registeredPorts.length) {
19 var data = {
20 type: "connect"
21 };
23 registeredPorts.forEach(function(registeredPort) {
24 registeredPort.postMessage(data);
25 });
26 }
28 port.onmessage = function(event) {
29 switch (event.data.command) {
30 case "start":
31 break;
33 case "error":
34 throw new Error("Expected");
36 case "store":
37 storedData = event.data.data;
38 break;
40 case "retrieve":
41 var data = {
42 type: "result",
43 data: storedData
44 };
45 port.postMessage(data);
46 break;
48 default:
49 throw new Error("Unknown command '" + error.data.command + "'");
50 }
51 };
53 registeredPorts.push(port);
54 };
56 self.onerror = function(message, filename, lineno) {
57 if (!errorCount++) {
58 var data = {
59 type: "worker-error",
60 message: message,
61 filename: filename,
62 lineno: lineno
63 };
65 registeredPorts.forEach(function (registeredPort) {
66 registeredPort.postMessage(data);
67 });
69 // Prevent the error from propagating the first time only.
70 return true;
71 }
72 };