forked from mirrors/gecko-dev
		
	 ae436f55ec
			
		
	
	
		ae436f55ec
		
	
	
	
	
		
			
			This is slightly complicated by the fact that the editor code wants to be able to set this from the content process, so we really need separate BrowsingContext and WindowContext flags, the latter of which can be set by the owning process. Differential Revision: https://phabricator.services.mozilla.com/D114899
		
			
				
	
	
		
			44 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| var EXPORTED_SYMBOLS = ["AllowJavascriptChild"];
 | |
| 
 | |
| 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;
 | |
|   }
 | |
| }
 |