Make sure we clean up disposed webview

This commit is contained in:
Matt Bierner
2018-02-28 15:27:27 -08:00
parent 7023d98882
commit 92a8e702b7

View File

@@ -136,30 +136,34 @@ export class ExtHostWebviews implements ExtHostWebviewsShape {
const webview = new ExtHostWebview(handle, this._proxy, uri, viewColumn, options);
this._webviews.set(handle, webview);
return this._webviews.get(handle);
return webview;
}
$onMessage(handle: WebviewHandle, message: any): void {
const webview = this._webviews.get(handle);
webview.onMessageEmitter.fire(message);
const webview = this.getWebview(handle);
if (webview) {
webview.onMessageEmitter.fire(message);
}
}
$onDidChangeActiveWeview(handle: WebviewHandle | undefined): void {
const webview = this._webviews.get(handle);
this._onDidChangeActiveWebview.fire(webview);
const webview = this.getWebview(handle);
if (webview) {
this._onDidChangeActiveWebview.fire(webview);
}
}
$onDidDisposeWeview(handle: WebviewHandle): Thenable<void> {
const webview = this._webviews.get(handle);
const webview = this.getWebview(handle);
if (webview) {
webview.onDisposeEmitter.fire();
this._webviews.delete(handle);
}
return Promise.resolve(void 0);
}
$onDidChangePosition(handle: WebviewHandle, newPosition: Position): void {
const webview = this._webviews.get(handle);
const webview = this.getWebview(handle);
if (webview) {
const newViewColumn = typeConverters.toViewColumn(newPosition);
if (webview.viewColumn !== newViewColumn) {
@@ -171,4 +175,8 @@ export class ExtHostWebviews implements ExtHostWebviewsShape {
private readonly _onDidChangeActiveWebview = new Emitter<ExtHostWebview | undefined>();
public readonly onDidChangeActiveWebview = this._onDidChangeActiveWebview.event;
private getWebview(handle: WebviewHandle) {
return this._webviews.get(handle);
}
}