forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			72 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * Any copyright is dedicated to the Public Domain.
 | |
|  * http://creativecommons.org/publicdomain/zero/1.0/
 | |
|  */
 | |
| "use strict";
 | |
| 
 | |
| if (self.name != "FrameWorker") {
 | |
|   throw new Error("Bad worker name: " + self.name);
 | |
| }
 | |
| 
 | |
| var registeredPorts = [];
 | |
| var errorCount = 0;
 | |
| var storedData;
 | |
| 
 | |
| self.onconnect = function(event) {
 | |
|   var port = event.ports[0];
 | |
| 
 | |
|   if (registeredPorts.length) {
 | |
|     var data = {
 | |
|       type: "connect"
 | |
|     };
 | |
| 
 | |
|     registeredPorts.forEach(function(registeredPort) {
 | |
|       registeredPort.postMessage(data);
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   port.onmessage = function(event) {
 | |
|     switch (event.data.command) {
 | |
|       case "start":
 | |
|         break;
 | |
| 
 | |
|       case "error":
 | |
|         throw new Error("Expected");
 | |
| 
 | |
|       case "store":
 | |
|         storedData = event.data.data;
 | |
|         break;
 | |
| 
 | |
|       case "retrieve":
 | |
|         var data = {
 | |
|           type: "result",
 | |
|           data: storedData
 | |
|         };
 | |
|         port.postMessage(data);
 | |
|         break;
 | |
| 
 | |
|       default:
 | |
|         throw new Error("Unknown command '" + error.data.command + "'");
 | |
|     }
 | |
|   };
 | |
| 
 | |
|   registeredPorts.push(port);
 | |
| };
 | |
| 
 | |
| self.onerror = function(message, filename, lineno) {
 | |
|   if (!errorCount++) {
 | |
|     var data = {
 | |
|       type: "worker-error",
 | |
|       message: message,
 | |
|       filename: filename,
 | |
|       lineno: lineno
 | |
|     };
 | |
| 
 | |
|     registeredPorts.forEach(function (registeredPort) {
 | |
|       registeredPort.postMessage(data);
 | |
|     });
 | |
| 
 | |
|     // Prevent the error from propagating the first time only.
 | |
|     return true;
 | |
|   }
 | |
| };
 | 
