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