dom/workers/test/multi_sharedWorker_sharedWorker.js

changeset 0
6474c204b198
     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 +};

mercurial