From 8283078f9305d1c4dec90179fbba5dede1ef3432 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Mon, 23 Sep 2019 11:44:16 -0700 Subject: [PATCH] Make sure window's opener service resolves uris instead of automatically resolving all uris --- src/vs/editor/browser/services/openerService.ts | 9 ++++----- src/vs/workbench/electron-browser/window.ts | 7 ++++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/vs/editor/browser/services/openerService.ts b/src/vs/editor/browser/services/openerService.ts index 759811e6091..52b38930401 100644 --- a/src/vs/editor/browser/services/openerService.ts +++ b/src/vs/editor/browser/services/openerService.ts @@ -58,18 +58,16 @@ export class OpenerService extends Disposable implements IOpenerService { } } - const { resolved } = await this.resolveExternalUri(resource, options); - // check with contributed openers for (const opener of this._openers.toArray()) { - const handled = await opener.open(resolved, options); + const handled = await opener.open(resource, options); if (handled) { return true; } } // use default openers - return this._doOpen(resolved, options); + return this._doOpen(resource, options); } public async resolveExternalUri(resource: URI, options?: { readonly allowTunneling?: boolean }): Promise<{ resolved: URI, dispose(): void }> { @@ -138,7 +136,8 @@ export class OpenerService extends Disposable implements IOpenerService { } private async _doOpenExternal(resource: URI, options: OpenOptions | undefined): Promise { - dom.windowOpenNoOpener(encodeURI(resource.toString(true))); + const { resolved } = await this.resolveExternalUri(resource, options); + dom.windowOpenNoOpener(encodeURI(resolved.toString(true))); return Promise.resolve(true); } diff --git a/src/vs/workbench/electron-browser/window.ts b/src/vs/workbench/electron-browser/window.ts index 5f812e80d94..7231a7e2ecf 100644 --- a/src/vs/workbench/electron-browser/window.ts +++ b/src/vs/workbench/electron-browser/window.ts @@ -425,10 +425,11 @@ export class ElectronWindow extends Disposable { // we handle this resource by delegating the opening to // the main process to prevent window focus issues. if (this.shouldOpenExternal(resource, options)) { - const success = await this.windowsService.openExternal(encodeURI(resource.toString(true))); - if (!success && resource.scheme === Schemas.file) { + const { resolved } = await this.openerService.resolveExternalUri(resource); + const success = await this.windowsService.openExternal(encodeURI(resolved.toString(true))); + if (!success && resolved.scheme === Schemas.file) { // if opening failed, and this is a file, we can still try to reveal it - await this.electronService.showItemInFolder(resource.fsPath); + await this.electronService.showItemInFolder(resolved.fsPath); } return true; -- GitLab