mirror of
				https://github.com/microsoft/playwright.git
				synced 2025-06-26 21:40:17 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			65 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| 
 | |
| const { Helper } = ChromeUtils.import('chrome://juggler/content/Helper.js');
 | |
| const { initialize } = ChromeUtils.import('chrome://juggler/content/content/main.js');
 | |
| 
 | |
| const Ci = Components.interfaces;
 | |
| const helper = new Helper();
 | |
| 
 | |
| let sameProcessInstanceNumber = 0;
 | |
| 
 | |
| class JugglerFrameChild extends JSWindowActorChild {
 | |
|   constructor() {
 | |
|     super();
 | |
| 
 | |
|     this._eventListeners = [];
 | |
|   }
 | |
| 
 | |
|   handleEvent(aEvent) {
 | |
|     if (this._agents && aEvent.type === 'DOMWillOpenModalDialog') {
 | |
|       this._agents.channel.pause();
 | |
|       return;
 | |
|     }
 | |
|     if (this._agents && aEvent.type === 'DOMModalDialogClosed') {
 | |
|       this._agents.channel.resumeSoon();
 | |
|       return;
 | |
|     }
 | |
|     if (this._agents && aEvent.target === this.document)
 | |
|       this._agents.pageAgent.onWindowEvent(aEvent);
 | |
|     if (this._agents && aEvent.target === this.document)
 | |
|       this._agents.frameTree.onWindowEvent(aEvent);
 | |
|   }
 | |
| 
 | |
|   actorCreated() {
 | |
|     this.actorName = `content::${this.browsingContext.browserId}/${this.browsingContext.id}/${++sameProcessInstanceNumber}`;
 | |
| 
 | |
|     this._eventListeners.push(helper.addEventListener(this.contentWindow, 'load', event => {
 | |
|       this._agents?.pageAgent.onWindowEvent(event);
 | |
|     }));
 | |
| 
 | |
|     if (this.document.documentURI.startsWith('moz-extension://'))
 | |
|       return;
 | |
|     this._agents = initialize(this.browsingContext, this.docShell, this);
 | |
|   }
 | |
| 
 | |
|   _dispose() {
 | |
|     helper.removeListeners(this._eventListeners);
 | |
|     // We do not cleanup since agents are shared for all frames in the process.
 | |
| 
 | |
|     // TODO: restore the cleanup.
 | |
|     // Reset transport so that all messages will be pending and will not throw any errors.
 | |
|     // this._channel.resetTransport();
 | |
|     // this._agents.pageAgent.dispose();
 | |
|     // this._agents.frameTree.dispose();
 | |
|     // this._agents = undefined;
 | |
|   }
 | |
| 
 | |
|   didDestroy() {
 | |
|     this._dispose();
 | |
|   }
 | |
| 
 | |
|   receiveMessage() { }
 | |
| }
 | |
| 
 | |
| var EXPORTED_SYMBOLS = ['JugglerFrameChild'];
 | 
