forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			41 lines
		
	
	
	
		
			1,018 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
	
		
			1,018 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| export class AllowJavascriptChild extends JSWindowActorChild {
 | |
|   async receiveMessage(msg) {
 | |
|     switch (msg.name) {
 | |
|       case "CheckScriptsAllowed":
 | |
|         return this.checkScriptsAllowed();
 | |
|       case "CheckFiredLoadEvent":
 | |
|         return this.contentWindow.wrappedJSObject.gFiredOnload;
 | |
|       case "CreateIframe":
 | |
|         return this.createIframe(msg.data.url);
 | |
|     }
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   handleEvent(event) {
 | |
|     if (event.type === "load") {
 | |
|       this.sendAsyncMessage("LoadFired");
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   checkScriptsAllowed() {
 | |
|     let win = this.contentWindow;
 | |
| 
 | |
|     win.wrappedJSObject.gFiredOnclick = false;
 | |
|     win.document.body.click();
 | |
|     return win.wrappedJSObject.gFiredOnclick;
 | |
|   }
 | |
| 
 | |
|   async createIframe(url) {
 | |
|     let doc = this.contentWindow.document;
 | |
| 
 | |
|     let iframe = doc.createElement("iframe");
 | |
|     iframe.src = url;
 | |
|     doc.body.appendChild(iframe);
 | |
| 
 | |
|     await new Promise(resolve => {
 | |
|       iframe.addEventListener("load", resolve, { once: true });
 | |
|     });
 | |
| 
 | |
|     return iframe.browsingContext;
 | |
|   }
 | |
| }
 | 
