| 
									
										
										
										
											2015-01-16 18:58:27 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Contains the code executed in the sandboxed frame under web-browser | 
					
						
							|  |  |  |  *  | 
					
						
							|  |  |  |  * Creates a Web-Worker inside the frame, sets up the communication | 
					
						
							|  |  |  |  * between the worker and the parent window | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var scripts = document.getElementsByTagName('script'); | 
					
						
							|  |  |  | var __jailed__path__ = scripts[scripts.length-1].src | 
					
						
							|  |  |  |     .split('?')[0] | 
					
						
							|  |  |  |     .split('/') | 
					
						
							|  |  |  |     .slice(0, -1) | 
					
						
							|  |  |  |     .join('/')+'/'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // creating worker as a blob enables import of local files
 | 
					
						
							|  |  |  | var blobCode = [ | 
					
						
							|  |  |  |   ' self.addEventListener("message", function(m){          ', | 
					
						
							|  |  |  |   '     if (m.data.type == "initImport") {                 ', | 
					
						
							|  |  |  |   '         importScripts(m.data.url);                     ', | 
					
						
							|  |  |  |   '         self.postMessage({type: "initialized"});       ', | 
					
						
							|  |  |  |   '     }                                                  ', | 
					
						
							|  |  |  |   ' });                                                    ' | 
					
						
							|  |  |  | ].join('\n'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-06 14:06:10 -04:00
										 |  |  | var blobUrl; | 
					
						
							|  |  |  | try { | 
					
						
							|  |  |  |   blobUrl = new Blob([blobCode], {type: 'application/javascript'}); | 
					
						
							|  |  |  | } catch (e) { | 
					
						
							|  |  |  |   window.BlobBuilder = window.BlobBuilder | 
					
						
							|  |  |  |     || window.WebKitBlobBuilder | 
					
						
							|  |  |  |     || window.MozBlobBuilder; | 
					
						
							|  |  |  |   blobUrl = new BlobBuilder(); | 
					
						
							|  |  |  |   blobUrl.append(blobCode); | 
					
						
							|  |  |  |   blobUrl = blobUrl.getBlob(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var worker = new Worker(URL.createObjectURL(blobUrl)); | 
					
						
							| 
									
										
										
										
											2015-01-16 18:58:27 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | // telling worker to load _pluginWeb.js (see blob code above)
 | 
					
						
							|  |  |  | worker.postMessage({ | 
					
						
							|  |  |  |     type: 'initImport', | 
					
						
							|  |  |  |     url: __jailed__path__ + '_pluginWeb.js' | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // forwarding messages between the worker and parent window
 | 
					
						
							|  |  |  | worker.addEventListener('message', function(m) { | 
					
						
							|  |  |  |     parent.postMessage(m.data, '*'); | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | window.addEventListener('message', function(m) { | 
					
						
							|  |  |  |     worker.postMessage(m.data); | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | 
 |