From 954c5ae24fd490c87127c3bd43d3f30cf9f20ba3 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Tue, 20 Mar 2018 15:53:07 -0700 Subject: [PATCH] Don't set resource on webviews Fixes #46217 --- .../api/electron-browser/mainThreadWebview.ts | 2 +- .../update/electron-browser/releaseNotesEditor.ts | 3 +-- .../webview/electron-browser/webviewEditor.ts | 2 +- .../webview/electron-browser/webviewInput.ts | 15 ++++++++++----- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/vs/workbench/api/electron-browser/mainThreadWebview.ts b/src/vs/workbench/api/electron-browser/mainThreadWebview.ts index f5adf2d1f5b..c446bde4fd8 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadWebview.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadWebview.ts @@ -54,7 +54,7 @@ export class MainThreadWebviews implements MainThreadWebviewsShape { options: vscode.WebviewOptions, extensionFolderPath: string ): void { - const webviewInput = new WebviewInput(URI.parse('webview://' + handle), title, options, '', { + const webviewInput = new WebviewInput(title, options, '', { onMessage: message => this._proxy.$onMessage(handle, message), onDidChangePosition: position => this._proxy.$onDidChangePosition(handle, position), onDispose: () => { diff --git a/src/vs/workbench/parts/update/electron-browser/releaseNotesEditor.ts b/src/vs/workbench/parts/update/electron-browser/releaseNotesEditor.ts index 44f6a32151d..bf6f7c9feca 100644 --- a/src/vs/workbench/parts/update/electron-browser/releaseNotesEditor.ts +++ b/src/vs/workbench/parts/update/electron-browser/releaseNotesEditor.ts @@ -83,8 +83,7 @@ export class ReleaseNotesManager { this._editorService.openEditor(this._currentReleaseNotes, { preserveFocus: true }); } } else { - const uri = URI.parse('release-notes:' + version); - this._currentReleaseNotes = new WebviewInput(uri, title, { tryRestoreScrollPosition: true, enableFindWidget: true }, html, { + this._currentReleaseNotes = new WebviewInput(title, { tryRestoreScrollPosition: true, enableFindWidget: true }, html, { onDidClickLink: uri => this.onDidClickLink(uri), onDispose: () => { this._currentReleaseNotes = undefined; } }, this._partService); diff --git a/src/vs/workbench/parts/webview/electron-browser/webviewEditor.ts b/src/vs/workbench/parts/webview/electron-browser/webviewEditor.ts index be6570114a5..ddbd2bc080d 100644 --- a/src/vs/workbench/parts/webview/electron-browser/webviewEditor.ts +++ b/src/vs/workbench/parts/webview/electron-browser/webviewEditor.ts @@ -141,7 +141,7 @@ export class WebviewEditor extends BaseWebviewEditor { return undefined; } - if (this.input && this.input.getResource().fsPath !== input.getResource().fsPath) { + if (this.input) { (this.input as WebviewInput).releaseWebview(this); this._webview = undefined; this.webviewContent = undefined; diff --git a/src/vs/workbench/parts/webview/electron-browser/webviewInput.ts b/src/vs/workbench/parts/webview/electron-browser/webviewInput.ts index 25f4cb3cf31..0d925f614b7 100644 --- a/src/vs/workbench/parts/webview/electron-browser/webviewInput.ts +++ b/src/vs/workbench/parts/webview/electron-browser/webviewInput.ts @@ -28,7 +28,6 @@ export interface WebviewInputOptions extends vscode.WebviewOptions { export class WebviewInput extends EditorInput { private static handlePool = 0; - private readonly _resource: URI; private _name: string; private _options: WebviewInputOptions; private _html: string; @@ -43,7 +42,6 @@ export class WebviewInput extends EditorInput { public readonly extensionFolderPath: URI | undefined; constructor( - resource: URI, name: string, options: WebviewInputOptions, html: string, @@ -52,7 +50,6 @@ export class WebviewInput extends EditorInput { extensionFolderPath?: string ) { super(); - this._resource = resource; this._name = name; this._options = options; this._html = html; @@ -90,20 +87,28 @@ export class WebviewInput extends EditorInput { } public getResource(): URI { - return this._resource; + return null; } public getName(): string { return this._name; } + public getTitle() { + return this.getName(); + } + + public getDescription(): string { + return null; + } + public setName(value: string): void { this._name = value; this._onDidChangeLabel.fire(); } matches(other: IEditorInput): boolean { - return other && other instanceof WebviewInput && other.getResource().fsPath === this.getResource().fsPath; + return other && other === this; } public get position(): Position | undefined { -- GitLab