15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Track the number of clients for this worker - tests can use this to ensure
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// that shared workers are actually shared, not distinct.
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var num_clients = 0;
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if (!self.postMessage) {
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This is a shared worker - mimic dedicated worker APIs
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  onconnect = function(event) {
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    num_clients++;
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    event.ports[0].onmessage = function(e) {
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      self.postMessage = function(msg) {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        event.ports[0].postMessage(msg);
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      };
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      self.onmessage(e);
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} else {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  num_clients++;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)onmessage = function(evt) {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (evt.data == "ping")
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    postMessage("pong");
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else if (evt.data == "auth")
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    importScripts("/auth-basic");
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else if (evt.data == "close")
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    close();
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else if (/eval.+/.test(evt.data)) {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    try {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      postMessage(eval(evt.data.substr(5)));
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } catch (ex) {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      postMessage(ex);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
34