diff --git a/packages/plugin-ext/src/hosted/browser/hosted-plugin.ts b/packages/plugin-ext/src/hosted/browser/hosted-plugin.ts index df424168e1531..500d6f4b8d611 100644 --- a/packages/plugin-ext/src/hosted/browser/hosted-plugin.ts +++ b/packages/plugin-ext/src/hosted/browser/hosted-plugin.ts @@ -304,8 +304,6 @@ export class HostedPluginSupport { await this.startPlugins(contributionsByHost, toDisconnect); this.deferredDidStart.resolve(); - - this.restoreWebviews(); } /** @@ -757,7 +755,7 @@ export class HostedPluginSupport { return `${plugins} plugin${plugins === 1 ? '' : 's'}`; } - protected readonly webviewsToRestore = new Set(); + protected readonly webviewsToRestore = new Map(); protected readonly webviewRevivers = new Map Promise>(); registerWebviewReviver(viewType: string, reviver: (webview: WebviewWidget) => Promise): void { @@ -765,6 +763,10 @@ export class HostedPluginSupport { throw new Error(`Reviver for ${viewType} already registered`); } this.webviewRevivers.set(viewType, reviver); + + if (this.webviewsToRestore.has(viewType)) { + this.restoreWebview(this.webviewsToRestore.get(viewType) as WebviewWidget); + } } unregisterWebviewReviver(viewType: string): void { @@ -785,21 +787,14 @@ export class HostedPluginSupport { } protected preserveWebview(webview: WebviewWidget): void { - if (!this.webviewsToRestore.has(webview)) { - this.webviewsToRestore.add(webview); - webview.disposed.connect(() => this.webviewsToRestore.delete(webview)); - } - } - - protected restoreWebviews(): void { - for (const webview of this.webviewsToRestore) { - this.restoreWebview(webview); + if (!this.webviewsToRestore.has(webview.viewType)) { + this.activateByEvent(`onWebviewPanel:${webview.viewType}`); + this.webviewsToRestore.set(webview.viewType, webview); + webview.disposed.connect(() => this.webviewsToRestore.delete(webview.viewType)); } - this.webviewsToRestore.clear(); } protected async restoreWebview(webview: WebviewWidget): Promise { - await this.activateByEvent(`onWebviewPanel:${webview.viewType}`); const restore = this.webviewRevivers.get(webview.viewType); if (restore) { try {