@@ -7,7 +7,7 @@ import { FindInPageOptions, OnBeforeRequestDetails, OnHeadersReceivedDetails, Re
77import { addClass , addDisposableListener } from 'vs/base/browser/dom' ;
88import { Emitter , Event } from 'vs/base/common/event' ;
99import { once } from 'vs/base/common/functional' ;
10- import { Disposable } from 'vs/base/common/lifecycle' ;
10+ import { Disposable , toDisposable } from 'vs/base/common/lifecycle' ;
1111import { isMacintosh } from 'vs/base/common/platform' ;
1212import { URI } from 'vs/base/common/uri' ;
1313import * as modes from 'vs/editor/common/modes' ;
@@ -53,6 +53,9 @@ class WebviewTagHandle extends Disposable {
5353 const contents = this . webContents ;
5454 if ( contents ) {
5555 this . _onFirstLoad . fire ( contents ) ;
56+ this . _register ( toDisposable ( ( ) => {
57+ contents . removeAllListeners ( ) ;
58+ } ) ) ;
5659 }
5760 } ) ) ) ;
5861 }
@@ -70,7 +73,6 @@ class WebviewTagHandle extends Disposable {
7073 this . _webContents = this . webview . getWebContents ( ) ;
7174 return this . _webContents ;
7275 }
73-
7476}
7577
7678type OnBeforeRequestDelegate = ( details : OnBeforeRequestDetails ) => Promise < Response | undefined > ;
@@ -143,19 +145,17 @@ class WebviewProtocolProvider extends Disposable {
143145
144146class WebviewPortMappingProvider extends Disposable {
145147
146- private readonly _manager : WebviewPortMappingManager ;
147-
148148 constructor (
149149 session : WebviewSession ,
150150 getExtensionLocation : ( ) => URI | undefined ,
151151 mappings : ( ) => ReadonlyArray < modes . IWebviewPortMapping > ,
152152 tunnelService : ITunnelService ,
153153 ) {
154154 super ( ) ;
155- this . _manager = this . _register ( new WebviewPortMappingManager ( getExtensionLocation , mappings , tunnelService ) ) ;
155+ const manager = this . _register ( new WebviewPortMappingManager ( getExtensionLocation , mappings , tunnelService ) ) ;
156156
157157 session . onBeforeRequest ( async details => {
158- const redirect = await this . _manager . getRedirect ( details . url ) ;
158+ const redirect = await manager . getRedirect ( details . url ) ;
159159 return redirect ? { redirectURL : redirect } : undefined ;
160160 } ) ;
161161 }
@@ -290,8 +290,7 @@ export class ElectronWebviewBasedWebview extends Disposable implements Webview,
290290 } ) ) ;
291291 } ) ;
292292
293- const webviewAndContents = new WebviewTagHandle ( this . _webview ) ;
294-
293+ const webviewAndContents = this . _register ( new WebviewTagHandle ( this . _webview ) ) ;
295294 const session = this . _register ( new WebviewSession ( webviewAndContents ) ) ;
296295
297296 this . _register ( new WebviewProtocolProvider (
@@ -421,9 +420,7 @@ export class ElectronWebviewBasedWebview extends Disposable implements Webview,
421420
422421 dispose ( ) : void {
423422 if ( this . _webview ) {
424- if ( this . _webview . parentElement ) {
425- this . _webview . parentElement . removeChild ( this . _webview ) ;
426- }
423+ this . _webview . remove ( ) ;
427424 this . _webview = undefined ;
428425 }
429426
0 commit comments