From 0cf90525531a33f52cb19adb44b1c22ccf639e62 Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Wed, 30 Jun 2021 18:43:27 +0200 Subject: [PATCH] do not encode request url --- .../common/webExtensionsScannerService.ts | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/vs/workbench/services/extensionManagement/common/webExtensionsScannerService.ts b/src/vs/workbench/services/extensionManagement/common/webExtensionsScannerService.ts index 00a33c0f2bf..cb714e3f597 100644 --- a/src/vs/workbench/services/extensionManagement/common/webExtensionsScannerService.ts +++ b/src/vs/workbench/services/extensionManagement/common/webExtensionsScannerService.ts @@ -10,7 +10,7 @@ import { isWeb } from 'vs/base/common/platform'; import { registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { joinPath } from 'vs/base/common/resources'; import { URI, UriComponents } from 'vs/base/common/uri'; -import { IFileService } from 'vs/platform/files/common/files'; +import { FileOperationError, FileOperationResult, IFileService } from 'vs/platform/files/common/files'; import { Queue } from 'vs/base/common/async'; import { VSBuffer } from 'vs/base/common/buffer'; import { asText, isSuccess, IRequestService } from 'vs/platform/request/common/request'; @@ -286,7 +286,7 @@ export class WebExtensionsScannerService extends Disposable implements IWebExten async scanExtensionManifest(extensionLocation: URI): Promise { const packageJSONUri = joinPath(extensionLocation, 'package.json'); - const context = await this.requestService.request({ type: 'GET', url: packageJSONUri.toString() }, CancellationToken.None); + const context = await this.requestService.request({ type: 'GET', url: this.toRequestUrl(packageJSONUri) }, CancellationToken.None); if (isSuccess(context)) { const content = await asText(context); if (content) { @@ -375,8 +375,8 @@ export class WebExtensionsScannerService extends Disposable implements IWebExten const packageNLSUri: URI = joinPath(extensionLocation, 'package.nls.json'); const [packageJSONResult, packageNLSResult] = await Promise.allSettled([ - this.requestService.request({ type: 'GET', url: packageJSONUri.toString() }, CancellationToken.None), - this.requestService.request({ type: 'GET', url: packageNLSUri.toString() }, CancellationToken.None), + this.requestService.request({ type: 'GET', url: this.toRequestUrl(packageJSONUri) }, CancellationToken.None), + this.requestService.request({ type: 'GET', url: this.toRequestUrl(packageNLSUri) }, CancellationToken.None), ]); if (packageJSONResult.status === 'rejected' || !isSuccess(packageJSONResult.value)) { @@ -405,7 +405,7 @@ export class WebExtensionsScannerService extends Disposable implements IWebExten } private async toScannedExtension(webExtension: IWebExtension, isBuiltin: boolean): Promise { - const context = await this.requestService.request({ type: 'GET', url: joinPath(webExtension.location, 'package.json').toString() }, CancellationToken.None); + const context = await this.requestService.request({ type: 'GET', url: this.toRequestUrl(joinPath(webExtension.location, 'package.json')) }, CancellationToken.None); if (!isSuccess(context)) { throw new Error(`Error while fetching package.json for extension '${webExtension.identifier.id}'. Server returned ${context.res.statusCode}`); } @@ -433,7 +433,7 @@ export class WebExtensionsScannerService extends Disposable implements IWebExten private async translateManifest(manifest: IExtensionManifest, nlsURL: URI): Promise { try { - const context = await this.requestService.request({ type: 'GET', url: nlsURL.toString() }, CancellationToken.None); + const context = await this.requestService.request({ type: 'GET', url: this.toRequestUrl(nlsURL) }, CancellationToken.None); if (isSuccess(context)) { const content = await asText(context); if (content) { @@ -487,7 +487,9 @@ export class WebExtensionsScannerService extends Disposable implements IWebExten return webExtensions; } catch (error) { /* Ignore */ - this.logService.error(error); + if ((error).fileOperationResult !== FileOperationResult.FILE_NOT_FOUND) { + this.logService.error(error); + } } return []; }); @@ -521,6 +523,10 @@ export class WebExtensionsScannerService extends Disposable implements IWebExten return resourceQueue; } + private toRequestUrl(uri: URI): string { + return uri.toString(true /* skip encoding the uri */); + } + } registerSingleton(IWebExtensionsScannerService, WebExtensionsScannerService);