diff --git a/src/vs/editor/browser/services/openerService.ts b/src/vs/editor/browser/services/openerService.ts index 1c4f38ef491..c175034f969 100644 --- a/src/vs/editor/browser/services/openerService.ts +++ b/src/vs/editor/browser/services/openerService.ts @@ -55,7 +55,7 @@ export class OpenerService implements IOpenerService { if (equalsIgnoreCase(scheme, Schemas.http) || equalsIgnoreCase(scheme, Schemas.https) || equalsIgnoreCase(scheme, Schemas.mailto)) { // open http or default mail application - dom.windowOpenNoOpener(resource.toString(true)); + dom.windowOpenNoOpener(encodeURI(resource.toString(true))); return Promise.resolve(true); } else if (equalsIgnoreCase(scheme, Schemas.command)) { diff --git a/src/vs/workbench/api/browser/mainThreadWindow.ts b/src/vs/workbench/api/browser/mainThreadWindow.ts index 4ba1a06ceb2..4c5b038c231 100644 --- a/src/vs/workbench/api/browser/mainThreadWindow.ts +++ b/src/vs/workbench/api/browser/mainThreadWindow.ts @@ -46,23 +46,20 @@ export class MainThreadWindow implements MainThreadWindowShape { } async $openUri(uriComponent: UriComponents, options: IOpenUriOptions): Promise { - const uri = URI.revive(uriComponent); + let uri = URI.revive(uriComponent); if (options.allowTunneling && !!this.environmentService.configuration.remoteAuthority) { if (uri.scheme === 'http' || uri.scheme === 'https') { const port = this.getLocalhostPort(uri); if (typeof port === 'number') { const tunnel = await this.getOrCreateTunnel(port); if (tunnel) { - const tunneledUrl = uri.toString().replace( - new RegExp(`^${uri.scheme}://localhost:${port}/`), - `${uri.scheme}://localhost:${tunnel.tunnelLocalPort}/`); - return this.windowsService.openExternal(tunneledUrl); + uri = uri.with({ authority: `localhost:${tunnel.tunnelLocalPort}` }); } } } } - return this.windowsService.openExternal(uri.toString(true)); + return this.windowsService.openExternal(encodeURI(uri.toString(true))); } private getLocalhostPort(uri: URI): number | undefined {