diff --git a/src/vs/workbench/contrib/customEditor/browser/customEditorInputFactory.ts b/src/vs/workbench/contrib/customEditor/browser/customEditorInputFactory.ts index 6f038e2db5035204e6a6992e633cf75e944d9fa1..69441774645c328a5f4b18adafb47d0096167dad 100644 --- a/src/vs/workbench/contrib/customEditor/browser/customEditorInputFactory.ts +++ b/src/vs/workbench/contrib/customEditor/browser/customEditorInputFactory.ts @@ -41,7 +41,7 @@ export class CustomEditoInputFactory extends WebviewEditorInputFactory { ): CustomFileEditorInput { const data = this.fromJson(serializedEditorInput); const id = data.id || generateUuid(); - const webviewInput = this.webviewService.reviveWebview(id, data.viewType, data.title, data.iconPath, data.state, data.options, data.extensionLocation ? { + const webviewInput = this.webviewService.reviveWebview(id, data.viewType, data.title, data.iconPath, data.state, data.options, data.extensionLocation && data.extensionId ? { location: data.extensionLocation, id: data.extensionId } : undefined, data.group); diff --git a/src/vs/workbench/contrib/webview/browser/webviewEditorInputFactory.ts b/src/vs/workbench/contrib/webview/browser/webviewEditorInputFactory.ts index 288c2c9e5378fd1ba7cd4b62871d8784c8485d44..c1a2ec0501e3ac72e0f06c0c806d71ae1f0120bd 100644 --- a/src/vs/workbench/contrib/webview/browser/webviewEditorInputFactory.ts +++ b/src/vs/workbench/contrib/webview/browser/webviewEditorInputFactory.ts @@ -54,7 +54,7 @@ export class WebviewEditorInputFactory implements IEditorInputFactory { serializedEditorInput: string ): WebviewInput { const data = this.fromJson(serializedEditorInput); - return this._webviewService.reviveWebview(data.id || generateUuid(), data.viewType, data.title, data.iconPath, data.state, data.options, data.extensionLocation ? { + return this._webviewService.reviveWebview(data.id || generateUuid(), data.viewType, data.title, data.iconPath, data.state, data.options, data.extensionLocation && data.extensionId ? { location: data.extensionLocation, id: data.extensionId } : undefined, data.group); diff --git a/src/vs/workbench/contrib/webview/browser/webviewEditorService.ts b/src/vs/workbench/contrib/webview/browser/webviewEditorService.ts index 9ef763aa6e82352c1b2def1b98c5957c92aed26e..118eff43cd148cfb32777e47decf97f944018a4f 100644 --- a/src/vs/workbench/contrib/webview/browser/webviewEditorService.ts +++ b/src/vs/workbench/contrib/webview/browser/webviewEditorService.ts @@ -26,6 +26,27 @@ export interface ICreateWebViewShowOptions { preserveFocus: boolean; } +export interface WebviewInputOptions extends WebviewOptions, WebviewContentOptions { + readonly tryRestoreScrollPosition?: boolean; + readonly retainContextWhenHidden?: boolean; + readonly enableCommandUris?: boolean; +} + +export function areWebviewInputOptionsEqual(a: WebviewInputOptions, b: WebviewInputOptions): boolean { + return a.enableCommandUris === b.enableCommandUris + && a.enableFindWidget === b.enableFindWidget + && a.allowScripts === b.allowScripts + && a.retainContextWhenHidden === b.retainContextWhenHidden + && a.tryRestoreScrollPosition === b.tryRestoreScrollPosition + && equals(a.localResourceRoots, b.localResourceRoots, isEqual) + && equals(a.portMapping, b.portMapping, (a, b) => a.extensionHostPort === b.extensionHostPort && a.webviewPort === b.webviewPort); +} + +export interface WebviewExtensionDescription { + readonly location: URI; + readonly id: ExtensionIdentifier; +} + export interface IWebviewEditorService { _serviceBrand: undefined; @@ -35,10 +56,7 @@ export interface IWebviewEditorService { title: string, showOptions: ICreateWebViewShowOptions, options: WebviewInputOptions, - extension: undefined | { - location: URI, - id: ExtensionIdentifier - }, + extension: WebviewExtensionDescription | undefined, ): WebviewInput; reviveWebview( @@ -48,10 +66,7 @@ export interface IWebviewEditorService { iconPath: { light: URI, dark: URI } | undefined, state: any, options: WebviewInputOptions, - extension: undefined | { - readonly location: URI, - readonly id?: ExtensionIdentifier - }, + extension: WebviewExtensionDescription | undefined, group: number | undefined ): WebviewInput; @@ -84,22 +99,6 @@ export interface WebviewResolve { ): Promise; } -export interface WebviewInputOptions extends WebviewOptions, WebviewContentOptions { - readonly tryRestoreScrollPosition?: boolean; - readonly retainContextWhenHidden?: boolean; - readonly enableCommandUris?: boolean; -} - -export function areWebviewInputOptionsEqual(a: WebviewInputOptions, b: WebviewInputOptions): boolean { - return a.enableCommandUris === b.enableCommandUris - && a.enableFindWidget === b.enableFindWidget - && a.allowScripts === b.allowScripts - && a.retainContextWhenHidden === b.retainContextWhenHidden - && a.tryRestoreScrollPosition === b.tryRestoreScrollPosition - && equals(a.localResourceRoots, b.localResourceRoots, isEqual) - && equals(a.portMapping, b.portMapping, (a, b) => a.extensionHostPort === b.extensionHostPort && a.webviewPort === b.webviewPort); -} - function canRevive(reviver: WebviewResolve, webview: WebviewInput): boolean { if (webview.isDisposed()) { return false; @@ -143,10 +142,7 @@ export class WebviewEditorService implements IWebviewEditorService { title: string, showOptions: ICreateWebViewShowOptions, options: WebviewInputOptions, - extension: undefined | { - location: URI, - id: ExtensionIdentifier - }, + extension: WebviewExtensionDescription | undefined, ): WebviewInput { const webview = this.createWebiew(id, extension, options); @@ -188,10 +184,7 @@ export class WebviewEditorService implements IWebviewEditorService { iconPath: { light: URI, dark: URI } | undefined, state: any, options: WebviewInputOptions, - extension: undefined | { - readonly location: URI, - readonly id: ExtensionIdentifier - }, + extension: WebviewExtensionDescription | undefined, group: number | undefined, ): WebviewInput { const webview = this.createWebiew(id, extension, options); @@ -254,7 +247,7 @@ export class WebviewEditorService implements IWebviewEditorService { } } - private createWebiew(id: string, extension: { location: URI; id: ExtensionIdentifier; } | undefined, options: WebviewInputOptions) { + private createWebiew(id: string, extension: WebviewExtensionDescription | undefined, options: WebviewInputOptions) { const webview = this._webviewService.createWebviewEditorOverlay(id, { enableFindWidget: options.enableFindWidget, retainContextWhenHidden: options.retainContextWhenHidden