Path: blob/main/src/vs/platform/extensionResourceLoader/browser/extensionResourceLoaderService.ts
3294 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { URI } from '../../../base/common/uri.js';6import { InstantiationType, registerSingleton } from '../../instantiation/common/extensions.js';7import { IFileService } from '../../files/common/files.js';8import { FileAccess, Schemas } from '../../../base/common/network.js';9import { IProductService } from '../../product/common/productService.js';10import { IStorageService } from '../../storage/common/storage.js';11import { IEnvironmentService } from '../../environment/common/environment.js';12import { ILogService } from '../../log/common/log.js';13import { IConfigurationService } from '../../configuration/common/configuration.js';14import { AbstractExtensionResourceLoaderService, IExtensionResourceLoaderService } from '../common/extensionResourceLoader.js';15import { IExtensionGalleryManifestService } from '../../extensionManagement/common/extensionGalleryManifest.js';1617class ExtensionResourceLoaderService extends AbstractExtensionResourceLoaderService {1819declare readonly _serviceBrand: undefined;2021constructor(22@IFileService fileService: IFileService,23@IStorageService storageService: IStorageService,24@IProductService productService: IProductService,25@IEnvironmentService environmentService: IEnvironmentService,26@IConfigurationService configurationService: IConfigurationService,27@IExtensionGalleryManifestService extensionGalleryManifestService: IExtensionGalleryManifestService,28@ILogService logService: ILogService,29) {30super(fileService, storageService, productService, environmentService, configurationService, extensionGalleryManifestService, logService);31}3233async readExtensionResource(uri: URI): Promise<string> {34uri = FileAccess.uriToBrowserUri(uri);3536if (uri.scheme !== Schemas.http && uri.scheme !== Schemas.https && uri.scheme !== Schemas.data) {37const result = await this._fileService.readFile(uri);38return result.value.toString();39}4041const requestInit: RequestInit = {};42if (await this.isExtensionGalleryResource(uri)) {43requestInit.headers = await this.getExtensionGalleryRequestHeaders();44requestInit.mode = 'cors'; /* set mode to cors so that above headers are always passed */45}4647const response = await fetch(uri.toString(true), requestInit);48if (response.status !== 200) {49this._logService.info(`Request to '${uri.toString(true)}' failed with status code ${response.status}`);50throw new Error(response.statusText);51}52return response.text();53}54}5556registerSingleton(IExtensionResourceLoaderService, ExtensionResourceLoaderService, InstantiationType.Delayed);575859