diff --git a/src/vs/workbench/api/browser/mainThreadWebviewViews.ts b/src/vs/workbench/api/browser/mainThreadWebviewViews.ts index ef417bf044c..e935efed7ac 100644 --- a/src/vs/workbench/api/browser/mainThreadWebviewViews.ts +++ b/src/vs/workbench/api/browser/mainThreadWebviewViews.ts @@ -5,7 +5,7 @@ import { CancellationToken } from 'vs/base/common/cancellation'; import { onUnexpectedError } from 'vs/base/common/errors'; -import { Disposable, dispose, IDisposable } from 'vs/base/common/lifecycle'; +import { Disposable, DisposableMap } from 'vs/base/common/lifecycle'; import { MainThreadWebviews, reviveWebviewExtension } from 'vs/workbench/api/browser/mainThreadWebviews'; import * as extHostProtocol from 'vs/workbench/api/common/extHost.protocol'; import { IViewBadge } from 'vs/workbench/common/views'; @@ -17,8 +17,8 @@ export class MainThreadWebviewsViews extends Disposable implements extHostProtoc private readonly _proxy: extHostProtocol.ExtHostWebviewViewsShape; - private readonly _webviewViews = new Map(); - private readonly _webviewViewProviders = new Map(); + private readonly _webviewViews = this._register(new DisposableMap()); + private readonly _webviewViewProviders = this._register(new DisposableMap()); constructor( context: IExtHostContext, @@ -30,15 +30,6 @@ export class MainThreadWebviewsViews extends Disposable implements extHostProtoc this._proxy = context.getProxy(extHostProtocol.ExtHostContext.ExtHostWebviewViews); } - override dispose() { - super.dispose(); - - dispose(this._webviewViewProviders.values()); - this._webviewViewProviders.clear(); - - dispose(this._webviewViews.values()); - } - public $setWebviewViewTitle(handle: extHostProtocol.WebviewHandle, value: string | undefined): void { const webviewView = this.getWebviewView(handle); webviewView.title = value; @@ -98,7 +89,7 @@ export class MainThreadWebviewsViews extends Disposable implements extHostProtoc webviewView.onDispose(() => { this._proxy.$disposeWebviewView(handle); - this._webviewViews.delete(handle); + this._webviewViews.deleteAndDispose(handle); }); try { @@ -114,13 +105,11 @@ export class MainThreadWebviewsViews extends Disposable implements extHostProtoc } public $unregisterWebviewViewProvider(viewType: string): void { - const provider = this._webviewViewProviders.get(viewType); - if (!provider) { + if (!this._webviewViewProviders.has(viewType)) { throw new Error(`No view provider for ${viewType} registered`); } - provider.dispose(); - this._webviewViewProviders.delete(viewType); + this._webviewViewProviders.deleteAndDispose(viewType); } private getWebviewView(handle: string): WebviewView {