From 2d3727b3b19538e149b51d6c3f857636076c1e94 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Tue, 10 Sep 2019 18:32:56 -0700 Subject: [PATCH] Push `editorResource` concept back into `CustomFileEditorInput` --- .../api/browser/mainThreadWebview.ts | 8 +++---- .../customEditor/browser/customEditorInput.ts | 22 ++++++++++++++----- .../browser/customEditorInputFactory.ts | 2 +- .../customEditor/browser/customEditors.ts | 2 +- .../webview/browser/webviewEditorInput.ts | 11 ++++------ .../webview/browser/webviewEditorService.ts | 2 +- 6 files changed, 27 insertions(+), 20 deletions(-) diff --git a/src/vs/workbench/api/browser/mainThreadWebview.ts b/src/vs/workbench/api/browser/mainThreadWebview.ts index 56d9c7399f0..c308d6f0788 100644 --- a/src/vs/workbench/api/browser/mainThreadWebview.ts +++ b/src/vs/workbench/api/browser/mainThreadWebview.ts @@ -99,7 +99,7 @@ export class MainThreadWebviews extends Disposable implements MainThreadWebviews // This should trigger the real reviver to be registered from the extension host side. this._register(_webviewEditorService.registerResolver({ canResolve: (webview: WebviewEditorInput) => { - if (!webview.webview.state && !webview.editorResource) { + if (!webview.webview.state && webview.getTypeId() === WebviewEditorInput.typeId) { // TODO: The typeid check is a workaround for the CustomFileEditorInput case return false; } @@ -252,16 +252,16 @@ export class MainThreadWebviews extends Disposable implements MainThreadWebviews this._editorProviders.set(viewType, this._webviewEditorService.registerResolver({ canResolve: (webviewEditorInput) => { - return !!webviewEditorInput.editorResource && webviewEditorInput.viewType === viewType; + return webviewEditorInput.getTypeId() !== WebviewEditorInput.typeId && webviewEditorInput.viewType === viewType; }, - resolveWebview: async (webview: WebviewEditorInput) => { + resolveWebview: async (webview) => { const handle = `resolved-${MainThreadWebviews.revivalPool++}`; this._webviewEditorInputs.add(handle, webview); this.hookupWebviewEventDelegate(handle, webview); try { await this._proxy.$resolveWebviewEditor( - webview.editorResource, + webview.getResource(), handle, viewType, webview.getTitle(), diff --git a/src/vs/workbench/contrib/customEditor/browser/customEditorInput.ts b/src/vs/workbench/contrib/customEditor/browser/customEditorInput.ts index c0ac282dc0f..5659024cbfb 100644 --- a/src/vs/workbench/contrib/customEditor/browser/customEditorInput.ts +++ b/src/vs/workbench/contrib/customEditor/browser/customEditorInput.ts @@ -20,6 +20,7 @@ export class CustomFileEditorInput extends WebviewEditorInput { private name?: string; private _hasResolved = false; + private readonly _editorResource: URI; constructor( resource: URI, @@ -33,12 +34,21 @@ export class CustomFileEditorInput extends WebviewEditorInput { @IExtensionService private readonly _extensionService: IExtensionService ) { - super(id, viewType, '', undefined, webview, resource); + super(id, viewType, '', undefined, webview); + this._editorResource = resource; + } + + public getTypeId(): string { + return CustomFileEditorInput.typeId; + } + + public getResource(): URI { + return this._editorResource; } getName(): string { if (!this.name) { - this.name = basename(this.labelService.getUriLabel(this.editorResource)); + this.name = basename(this.labelService.getUriLabel(this.getResource())); } return this.name; } @@ -46,7 +56,7 @@ export class CustomFileEditorInput extends WebviewEditorInput { matches(other: IEditorInput): boolean { return this === other || (other instanceof CustomFileEditorInput && this.viewType === other.viewType - && this.editorResource.toString() === other.editorResource.toString()); + && this.getResource().toString() === other.getResource().toString()); } @memoize @@ -56,15 +66,15 @@ export class CustomFileEditorInput extends WebviewEditorInput { @memoize private get mediumTitle(): string { - return this.labelService.getUriLabel(this.editorResource, { relative: true }); + return this.labelService.getUriLabel(this.getResource(), { relative: true }); } @memoize private get longTitle(): string { - return this.labelService.getUriLabel(this.editorResource); + return this.labelService.getUriLabel(this.getResource()); } - getTitle(verbosity: Verbosity): string { + getTitle(verbosity?: Verbosity): string { switch (verbosity) { case Verbosity.SHORT: return this.shortTitle; diff --git a/src/vs/workbench/contrib/customEditor/browser/customEditorInputFactory.ts b/src/vs/workbench/contrib/customEditor/browser/customEditorInputFactory.ts index 2fac7d62659..bcb570dbacb 100644 --- a/src/vs/workbench/contrib/customEditor/browser/customEditorInputFactory.ts +++ b/src/vs/workbench/contrib/customEditor/browser/customEditorInputFactory.ts @@ -25,7 +25,7 @@ export class CustomEditoInputFactory extends WebviewEditorInputFactory { public serialize(input: CustomFileEditorInput): string | undefined { const data = { ...this.toJson(input), - editorResource: input.editorResource.toJSON() + editorResource: input.getResource().toJSON() }; try { diff --git a/src/vs/workbench/contrib/customEditor/browser/customEditors.ts b/src/vs/workbench/contrib/customEditor/browser/customEditors.ts index b1bbbe4af07..a5af1108795 100644 --- a/src/vs/workbench/contrib/customEditor/browser/customEditors.ts +++ b/src/vs/workbench/contrib/customEditor/browser/customEditors.ts @@ -157,7 +157,7 @@ export class CustomEditorContribution implements IWorkbenchContribution { } for (const input of group.editors) { - if (input instanceof CustomFileEditorInput && input.editorResource.toString() === resource.toString()) { + if (input instanceof CustomFileEditorInput && input.getResource().toString() === resource.toString()) { return { override: group.openEditor(input, options).then(withNullAsUndefined) }; diff --git a/src/vs/workbench/contrib/webview/browser/webviewEditorInput.ts b/src/vs/workbench/contrib/webview/browser/webviewEditorInput.ts index 0fe7eb7010e..1b8ecebec3d 100644 --- a/src/vs/workbench/contrib/webview/browser/webviewEditorInput.ts +++ b/src/vs/workbench/contrib/webview/browser/webviewEditorInput.ts @@ -71,8 +71,7 @@ export class WebviewEditorInput extends EditorInput { readonly location: URI; readonly id: ExtensionIdentifier; }, - webview: Unowned, - public readonly editorResource: URI, + webview: Unowned ) { super(); @@ -89,8 +88,7 @@ export class WebviewEditorInput extends EditorInput { public getResource(): URI { return URI.from({ scheme: WebviewPanelResourceScheme, - path: `webview-panel/webview-${this.id}`, - query: this.editorResource ? encodeURIComponent(this.editorResource.toString(true)) : '' + path: `webview-panel/webview-${this.id}` }); } @@ -157,10 +155,9 @@ export class RevivedWebviewEditorInput extends WebviewEditorInput { readonly id: ExtensionIdentifier }, private readonly reviver: (input: WebviewEditorInput) => Promise, - webview: Unowned, - public readonly editorResource: URI, + webview: Unowned ) { - super(id, viewType, name, extension, webview, editorResource); + super(id, viewType, name, extension, webview); } public async resolve(): Promise { diff --git a/src/vs/workbench/contrib/webview/browser/webviewEditorService.ts b/src/vs/workbench/contrib/webview/browser/webviewEditorService.ts index 59a0126963d..08f83d5b475 100644 --- a/src/vs/workbench/contrib/webview/browser/webviewEditorService.ts +++ b/src/vs/workbench/contrib/webview/browser/webviewEditorService.ts @@ -208,7 +208,7 @@ export class WebviewEditorService implements IWebviewEditorService { const promise = new Promise(r => { resolve = r; }); this._revivalPool.add(webview, resolve!); return promise; - }, new UnownedDisposable(webview), null!/*TODO*/); + }, new UnownedDisposable(webview)); webviewInput.iconPath = iconPath; -- GitLab