From 8fbf9b600d575873a9ed92126847e43b7333aa8e Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Fri, 22 Oct 2021 16:40:26 +0200 Subject: [PATCH] debt - use product service in more places (#135651) --- .../abstractExtensionManagementService.ts | 7 +++-- .../node/extensionManagementService.ts | 9 +++--- src/vs/platform/files/common/io.ts | 3 +- src/vs/platform/product/common/product.ts | 2 +- src/vs/server/remoteAgentEnvironmentImpl.ts | 31 ++++++++++--------- .../server/remoteExtensionHostAgentServer.ts | 20 ++++++------ src/vs/server/remoteTerminalChannel.ts | 7 +++-- src/vs/server/webClientServer.ts | 9 +++--- .../browser/workspace.contribution.ts | 7 +++-- .../workspace/browser/workspaceTrustEditor.ts | 7 +++-- .../common/webExtensionManagementService.ts | 4 ++- 11 files changed, 57 insertions(+), 49 deletions(-) diff --git a/src/vs/platform/extensionManagement/common/abstractExtensionManagementService.ts b/src/vs/platform/extensionManagement/common/abstractExtensionManagementService.ts index 345ce537df0..c1e22815ecd 100644 --- a/src/vs/platform/extensionManagement/common/abstractExtensionManagementService.ts +++ b/src/vs/platform/extensionManagement/common/abstractExtensionManagementService.ts @@ -19,7 +19,7 @@ import { import { areSameExtensions, ExtensionIdentifierWithVersion, getGalleryExtensionTelemetryData, getLocalExtensionTelemetryData, getMaliciousExtensionsSet } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; import { ExtensionType, IExtensionManifest } from 'vs/platform/extensions/common/extensions'; import { ILogService } from 'vs/platform/log/common/log'; -import product from 'vs/platform/product/common/product'; +import { IProductService } from 'vs/platform/product/common/productService'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; export const INSTALL_ERROR_VALIDATING = 'validating'; @@ -71,6 +71,7 @@ export abstract class AbstractExtensionManagementService extends Disposable impl @IExtensionGalleryService protected readonly galleryService: IExtensionGalleryService, @ITelemetryService protected readonly telemetryService: ITelemetryService, @ILogService protected readonly logService: ILogService, + @IProductService protected readonly productService: IProductService ) { super(); this._register(toDisposable(() => { @@ -93,7 +94,7 @@ export abstract class AbstractExtensionManagementService extends Disposable impl if (!await this.canInstall(extension)) { const targetPlatform = await this.getTargetPlatform(); - const error = new ExtensionManagementError(nls.localize('incompatible platform', "The '{0}' extension is not available in {1} for {2}.", extension.identifier.id, product.nameLong, TargetPlatformToString(targetPlatform)), INSTALL_ERROR_VALIDATING); + const error = new ExtensionManagementError(nls.localize('incompatible platform', "The '{0}' extension is not available in {1} for {2}.", extension.identifier.id, this.productService.nameLong, TargetPlatformToString(targetPlatform)), INSTALL_ERROR_VALIDATING); this.logService.error(`Cannot install extension.`, extension.identifier.id, error.message); reportTelemetry(this.telemetryService, 'extensionGallery:install', getGalleryExtensionTelemetryData(extension), undefined, error); throw error; @@ -389,7 +390,7 @@ export abstract class AbstractExtensionManagementService extends Disposable impl const compatibleExtension = await this.getCompatibleVersion(extension, fetchCompatibleVersion); if (!compatibleExtension) { - throw new ExtensionManagementError(nls.localize('notFoundCompatibleDependency', "Can't install '{0}' extension because it is not compatible with the current version of VS Code (version {1}).", extension.identifier.id, product.version), INSTALL_ERROR_INCOMPATIBLE); + throw new ExtensionManagementError(nls.localize('notFoundCompatibleDependency', "Can't install '{0}' extension because it is not compatible with the current version of VS Code (version {1}).", extension.identifier.id, this.productService.version), INSTALL_ERROR_INCOMPATIBLE); } return compatibleExtension; diff --git a/src/vs/platform/extensionManagement/node/extensionManagementService.ts b/src/vs/platform/extensionManagement/node/extensionManagementService.ts index ea2f48cf945..73600eca6af 100644 --- a/src/vs/platform/extensionManagement/node/extensionManagementService.ts +++ b/src/vs/platform/extensionManagement/node/extensionManagementService.ts @@ -36,7 +36,7 @@ import { isEngineValid } from 'vs/platform/extensions/common/extensionValidator' import { IFileService } from 'vs/platform/files/common/files'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { ILogService } from 'vs/platform/log/common/log'; -import product from 'vs/platform/product/common/product'; +import { IProductService } from 'vs/platform/product/common/productService'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; const INSTALL_ERROR_UNSET_UNINSTALLED = 'unsetUninstalled'; @@ -62,8 +62,9 @@ export class ExtensionManagementService extends AbstractExtensionManagementServi @IDownloadService private downloadService: IDownloadService, @IInstantiationService instantiationService: IInstantiationService, @IFileService private readonly fileService: IFileService, + @IProductService productService: IProductService ) { - super(galleryService, telemetryService, logService); + super(galleryService, telemetryService, logService, productService); const extensionLifecycle = this._register(instantiationService.createInstance(ExtensionsLifecycle)); this.extensionsScanner = this._register(instantiationService.createInstance(ExtensionsScanner, extension => extensionLifecycle.postUninstall(extension))); this.manifestCache = this._register(new ExtensionsManifestCache(environmentService, this)); @@ -139,8 +140,8 @@ export class ExtensionManagementService extends AbstractExtensionManagementServi const downloadLocation = await this.downloadVsix(vsix); const manifest = await getManifest(path.resolve(downloadLocation.fsPath)); - if (manifest.engines && manifest.engines.vscode && !isEngineValid(manifest.engines.vscode, product.version, product.date)) { - throw new Error(nls.localize('incompatible', "Unable to install extension '{0}' as it is not compatible with VS Code '{1}'.", getGalleryExtensionId(manifest.publisher, manifest.name), product.version)); + if (manifest.engines && manifest.engines.vscode && !isEngineValid(manifest.engines.vscode, this.productService.version, this.productService.date)) { + throw new Error(nls.localize('incompatible', "Unable to install extension '{0}' as it is not compatible with VS Code '{1}'.", getGalleryExtensionId(manifest.publisher, manifest.name), this.productService.version)); } return this.installExtension(manifest, downloadLocation, options); diff --git a/src/vs/platform/files/common/io.ts b/src/vs/platform/files/common/io.ts index 9d7ea456682..657c0723a3f 100644 --- a/src/vs/platform/files/common/io.ts +++ b/src/vs/platform/files/common/io.ts @@ -10,7 +10,6 @@ import { IDataTransformer, IErrorTransformer, WriteableStream } from 'vs/base/co import { URI } from 'vs/base/common/uri'; import { localize } from 'vs/nls'; import { createFileSystemProviderError, ensureFileSystemProviderError, FileReadStreamOptions, FileSystemProviderErrorCode, IFileSystemProviderWithOpenReadWriteCloseCapability } from 'vs/platform/files/common/files'; -import product from 'vs/platform/product/common/product'; export interface ICreateReadStreamOptions extends FileReadStreamOptions { @@ -128,7 +127,7 @@ function throwIfTooLarge(totalBytesRead: number, options: ICreateReadStreamOptio // Return early if file is too large to load and we have configured limits if (options?.limits) { if (typeof options.limits.memory === 'number' && totalBytesRead > options.limits.memory) { - throw createFileSystemProviderError(localize('fileTooLargeForHeapError', "To open a file of this size, you need to restart and allow {0} to use more memory", product.nameShort), FileSystemProviderErrorCode.FileExceedsMemoryLimit); + throw createFileSystemProviderError(localize('fileTooLargeForHeapError', "To open a file of this size, you need to restart and allow to use more memory"), FileSystemProviderErrorCode.FileExceedsMemoryLimit); } if (typeof options.limits.size === 'number' && totalBytesRead > options.limits.size) { diff --git a/src/vs/platform/product/common/product.ts b/src/vs/platform/product/common/product.ts index 624aa90e7bb..5e38d350fad 100644 --- a/src/vs/platform/product/common/product.ts +++ b/src/vs/platform/product/common/product.ts @@ -57,7 +57,7 @@ else { // Running out of sources if (Object.keys(product).length === 0) { Object.assign(product, { - version: '1.61.0-dev', + version: '1.62.0-dev', nameShort: 'Code - OSS Dev', nameLong: 'Code - OSS Dev', applicationName: 'code-oss', diff --git a/src/vs/server/remoteAgentEnvironmentImpl.ts b/src/vs/server/remoteAgentEnvironmentImpl.ts index 555acb825ab..fe2a992dc40 100644 --- a/src/vs/server/remoteAgentEnvironmentImpl.ts +++ b/src/vs/server/remoteAgentEnvironmentImpl.ts @@ -12,7 +12,6 @@ import { IRemoteAgentEnvironmentDTO, IGetEnvironmentDataArguments, IScanExtensio import * as nls from 'vs/nls'; import { FileAccess, Schemas } from 'vs/base/common/network'; import { IServerEnvironmentService } from 'vs/server/serverEnvironmentService'; -import product from 'vs/platform/product/common/product'; import { ExtensionScanner, ExtensionScannerInput, IExtensionResolver, IExtensionReference } from 'vs/workbench/services/extensions/node/extensionPoints'; import { IServerChannel } from 'vs/base/parts/ipc/common/ipc'; import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; @@ -32,6 +31,7 @@ import { IExtensionManagementCLIService } from 'vs/platform/extensionManagement/ import { cwd } from 'vs/base/common/process'; import { IRemoteTelemetryService } from 'vs/server/remoteTelemetryService'; import { Promises } from 'vs/base/node/pfs'; +import { IProductService } from 'vs/platform/product/common/productService'; let _SystemExtensionsRoot: string | null = null; function getSystemExtensionsRoot(): string { @@ -61,7 +61,8 @@ export class RemoteAgentEnvironmentChannel implements IServerChannel { extensionManagementCLIService: IExtensionManagementCLIService, private readonly logService: ILogService, private readonly telemetryService: IRemoteTelemetryService, - private readonly telemetryAppender: ITelemetryAppender | null + private readonly telemetryAppender: ITelemetryAppender | null, + private readonly productService: IProductService ) { this._logger = new class implements ILog { public error(source: string, message: string): void { @@ -414,9 +415,9 @@ export class RemoteAgentEnvironmentChannel implements IServerChannel { const extDescsP = extensionDevelopmentPaths.map(extDevPath => { return ExtensionScanner.scanOneOrMultipleExtensions( new ExtensionScannerInput( - product.version, - product.date, - product.commit, + this.productService.version, + this.productService.date, + this.productService.commit, language, true, // dev mode extDevPath, @@ -439,9 +440,9 @@ export class RemoteAgentEnvironmentChannel implements IServerChannel { } private _scanBuiltinExtensions(language: string, translations: Translations): Promise { - const version = product.version; - const commit = product.commit; - const date = product.date; + const version = this.productService.version; + const commit = this.productService.commit; + const date = this.productService.date; const devMode = !!process.env['VSCODE_DEV']; const input = new ExtensionScannerInput(version, date, commit, language, devMode, getSystemExtensionsRoot(), true, false, translations); @@ -459,7 +460,7 @@ export class RemoteAgentEnvironmentChannel implements IServerChannel { } } - const builtInExtensions = Promise.resolve(product.builtInExtensions || []); + const builtInExtensions = Promise.resolve(this.productService.builtInExtensions || []); const input = new ExtensionScannerInput(version, date, commit, language, devMode, getExtraDevSystemExtensionsRoot(), true, false, {}); const extraBuiltinExtensions = builtInExtensions @@ -475,9 +476,9 @@ export class RemoteAgentEnvironmentChannel implements IServerChannel { private _scanInstalledExtensions(language: string, translations: Translations): Promise { const devMode = !!process.env['VSCODE_DEV']; const input = new ExtensionScannerInput( - product.version, - product.date, - product.commit, + this.productService.version, + this.productService.date, + this.productService.commit, language, devMode, this.environmentService.extensionsPath!, @@ -492,9 +493,9 @@ export class RemoteAgentEnvironmentChannel implements IServerChannel { private _scanSingleExtension(extensionPath: string, isBuiltin: boolean, language: string, translations: Translations): Promise { const devMode = !!process.env['VSCODE_DEV']; const input = new ExtensionScannerInput( - product.version, - product.date, - product.commit, + this.productService.version, + this.productService.date, + this.productService.commit, language, devMode, extensionPath, diff --git a/src/vs/server/remoteExtensionHostAgentServer.ts b/src/vs/server/remoteExtensionHostAgentServer.ts index 574fc216313..d5227a0ddff 100644 --- a/src/vs/server/remoteExtensionHostAgentServer.ts +++ b/src/vs/server/remoteExtensionHostAgentServer.ts @@ -229,7 +229,7 @@ export class RemoteExtensionHostAgentServer extends Disposable { const logService = getOrCreateSpdLogService(this._environmentService); logService.trace(`Remote configuration data at ${REMOTE_DATA_FOLDER}`); logService.trace('process arguments:', this._environmentService.args); - const serverGreeting = product.serverGreeting.join('\n'); + const serverGreeting = _productService.serverGreeting.join('\n'); if (serverGreeting) { logService.info(`\n\n${serverGreeting}\n\n`); } @@ -242,7 +242,7 @@ export class RemoteExtensionHostAgentServer extends Disposable { this._allReconnectionTokens = new Set(); if (hasWebClient) { - this._webClientServer = new WebClientServer(this._connectionToken, this._environmentService, this._logService); + this._webClientServer = new WebClientServer(this._connectionToken, this._environmentService, this._logService, this._productService); } else { this._webClientServer = null; } @@ -281,16 +281,16 @@ export class RemoteExtensionHostAgentServer extends Disposable { services.set(IRequestService, new SyncDescriptor(RequestService)); let appInsightsAppender: ITelemetryAppender = NullAppender; - if (!this._environmentService.args['disable-telemetry'] && product.enableTelemetry) { - if (product.aiConfig && product.aiConfig.asimovKey) { - appInsightsAppender = new AppInsightsAppender(eventPrefix, null, product.aiConfig.asimovKey); + if (!this._environmentService.args['disable-telemetry'] && this._productService.enableTelemetry) { + if (this._productService.aiConfig && this._productService.aiConfig.asimovKey) { + appInsightsAppender = new AppInsightsAppender(eventPrefix, null, this._productService.aiConfig.asimovKey); this._register(toDisposable(() => appInsightsAppender!.flush())); // Ensure the AI appender is disposed so that it flushes remaining data } const machineId = await getMachineId(); const config: ITelemetryServiceConfig = { appenders: [appInsightsAppender], - commonProperties: resolveCommonProperties(fileService, release(), hostname(), process.arch, product.commit, product.version + '-remote', machineId, product.msftInternalDomains, this._environmentService.installSourcePath, 'remoteAgent'), + commonProperties: resolveCommonProperties(fileService, release(), hostname(), process.arch, this._productService.commit, this._productService.version + '-remote', machineId, this._productService.msftInternalDomains, this._environmentService.installSourcePath, 'remoteAgent'), piiPaths: [this._environmentService.appRoot] }; @@ -323,10 +323,10 @@ export class RemoteExtensionHostAgentServer extends Disposable { services.set(IPtyService, ptyService); return instantiationService.invokeFunction(accessor => { - const remoteExtensionEnvironmentChannel = new RemoteAgentEnvironmentChannel(this._connectionToken, this._environmentService, extensionManagementCLIService, this._logService, accessor.get(IRemoteTelemetryService), appInsightsAppender); + const remoteExtensionEnvironmentChannel = new RemoteAgentEnvironmentChannel(this._connectionToken, this._environmentService, extensionManagementCLIService, this._logService, accessor.get(IRemoteTelemetryService), appInsightsAppender, this._productService); this._socketServer.registerChannel('remoteextensionsenvironment', remoteExtensionEnvironmentChannel); - this._socketServer.registerChannel(REMOTE_TERMINAL_CHANNEL_NAME, new RemoteTerminalChannel(this._environmentService, this._logService, ptyService)); + this._socketServer.registerChannel(REMOTE_TERMINAL_CHANNEL_NAME, new RemoteTerminalChannel(this._environmentService, this._logService, ptyService, this._productService)); const remoteFileSystemChannel = new RemoteAgentFileSystemProviderChannel(this._logService, this._environmentService); this._socketServer.registerChannel(REMOTE_FILE_SYSTEM_CHANNEL_NAME, remoteFileSystemChannel); @@ -375,7 +375,7 @@ export class RemoteExtensionHostAgentServer extends Disposable { // Version if (pathname === '/version') { res.writeHead(200, { 'Content-Type': 'text/plain' }); - return res.end(product.commit || ''); + return res.end(this._productService.commit || ''); } // Delay shutdown @@ -628,7 +628,7 @@ export class RemoteExtensionHostAgentServer extends Disposable { } const rendererCommit = msg2.commit; - const myCommit = product.commit; + const myCommit = this._productService.commit; if (rendererCommit && myCommit) { // Running in the built version where commits are defined if (rendererCommit !== myCommit) { diff --git a/src/vs/server/remoteTerminalChannel.ts b/src/vs/server/remoteTerminalChannel.ts index ac57503e81f..dec98015031 100644 --- a/src/vs/server/remoteTerminalChannel.ts +++ b/src/vs/server/remoteTerminalChannel.ts @@ -14,7 +14,6 @@ import { IURITransformer } from 'vs/base/common/uriIpc'; import { IServerChannel } from 'vs/base/parts/ipc/common/ipc'; import { createRandomIPCHandle } from 'vs/base/parts/ipc/node/ipc.net'; import { ILogService } from 'vs/platform/log/common/log'; -import product from 'vs/platform/product/common/product'; import { RemoteAgentConnectionContext } from 'vs/platform/remote/common/remoteAgentEnvironment'; import { IPtyService, IShellLaunchConfig, ITerminalProfile, ITerminalsLayoutInfo } from 'vs/platform/terminal/common/terminal'; import { IGetTerminalLayoutInfoArgs, ISetTerminalLayoutInfoArgs } from 'vs/platform/terminal/common/terminalProcess'; @@ -29,6 +28,7 @@ import * as terminalEnvironment from 'vs/workbench/contrib/terminal/common/termi import { AbstractVariableResolverService } from 'vs/workbench/services/configurationResolver/common/variableResolver'; import { buildUserEnvironment } from 'vs/server/extensionHostConnection'; import { IServerEnvironmentService } from 'vs/server/serverEnvironmentService'; +import { IProductService } from 'vs/platform/product/common/productService'; class CustomVariableResolver extends AbstractVariableResolverService { constructor( @@ -88,7 +88,8 @@ export class RemoteTerminalChannel extends Disposable implements IServerChannel< constructor( private readonly _environmentService: IServerEnvironmentService, private readonly _logService: ILogService, - private readonly _ptyService: IPtyService + private readonly _ptyService: IPtyService, + private readonly _productService: IProductService ) { super(); } @@ -216,7 +217,7 @@ export class RemoteTerminalChannel extends Disposable implements IServerChannel< shellLaunchConfig, envFromConfig, variableResolver, - product.version, + this._productService.version, args.configuration['terminal.integrated.detectLocale'], baseEnv ); diff --git a/src/vs/server/webClientServer.ts b/src/vs/server/webClientServer.ts index 06c0b23c6d9..703446e6f6f 100644 --- a/src/vs/server/webClientServer.ts +++ b/src/vs/server/webClientServer.ts @@ -15,12 +15,12 @@ import { isLinux } from 'vs/base/common/platform'; import { URI, UriComponents } from 'vs/base/common/uri'; import { createRemoteURITransformer } from 'vs/server/remoteUriTransformer'; import { ILogService } from 'vs/platform/log/common/log'; -import product from 'vs/platform/product/common/product'; import { IServerEnvironmentService } from 'vs/server/serverEnvironmentService'; import { extname, dirname, join, normalize } from 'vs/base/common/path'; import { FileAccess } from 'vs/base/common/network'; import { generateUuid } from 'vs/base/common/uuid'; import { cwd } from 'vs/base/common/process'; +import { IProductService } from 'vs/platform/product/common/productService'; const textMimeType = { '.html': 'text/html', @@ -80,7 +80,8 @@ export class WebClientServer { constructor( private readonly _connectionToken: string, private readonly _environmentService: IServerEnvironmentService, - private readonly _logService: ILogService + private readonly _logService: ILogService, + private readonly _productService: IProductService ) { } async handle(req: http.IncomingMessage, res: http.ServerResponse, parsedUrl: url.UrlWithParsedQuery): Promise { @@ -211,7 +212,7 @@ export class WebClientServer { 'media-src \'none\';', `script-src 'self' 'unsafe-eval' ${this._getScriptCspHashes(data).join(' ')} 'sha256-cb2sg39EJV8ABaSNFfWu/ou8o1xVXYK7jp90oZ9vpcg=' http://${remoteAuthority};`, // the sha is the same as in src/vs/workbench/services/extensions/worker/httpWebWorkerExtensionHostIframe.html 'child-src \'self\';', - `frame-src 'self' https://*.vscode-webview.net ${product.webEndpointUrl || ''} data:;`, + `frame-src 'self' https://*.vscode-webview.net ${this._productService.webEndpointUrl || ''} data:;`, 'worker-src \'self\' data:;', 'style-src \'self\' \'unsafe-inline\';', 'connect-src \'self\' ws: wss: https:;', @@ -327,7 +328,7 @@ export class WebClientServer { }); // add to map of known callbacks - this._mapCallbackUriToRequestId.set(requestId, URI.from({ scheme: vscodeScheme || product.urlProtocol, authority: vscodeAuthority, path: vscodePath, query, fragment: vscodeFragment }).toJSON()); + this._mapCallbackUriToRequestId.set(requestId, URI.from({ scheme: vscodeScheme || this._productService.urlProtocol, authority: vscodeAuthority, path: vscodePath, query, fragment: vscodeFragment }).toJSON()); return serveFile(this._logService, req, res, FileAccess.asFileUri('vs/code/browser/workbench/callback.html', require).fsPath, { 'Content-Type': 'text/html' }); } diff --git a/src/vs/workbench/contrib/workspace/browser/workspace.contribution.ts b/src/vs/workbench/contrib/workspace/browser/workspace.contribution.ts index 540e1442198..f25edfa64a9 100644 --- a/src/vs/workbench/contrib/workspace/browser/workspace.contribution.ts +++ b/src/vs/workbench/contrib/workspace/browser/workspace.contribution.ts @@ -35,7 +35,6 @@ import { isWeb } from 'vs/base/common/platform'; import { IsWebContext } from 'vs/platform/contextkey/common/contextkeys'; import { dirname, resolve } from 'vs/base/common/path'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import product from 'vs/platform/product/common/product'; import { IMarkdownString, MarkdownString } from 'vs/base/common/htmlContent'; import { ISingleFolderWorkspaceIdentifier, isSingleFolderWorkspaceIdentifier, toWorkspaceIdentifier } from 'vs/platform/workspaces/common/workspaces'; import { STATUS_BAR_PROMINENT_ITEM_BACKGROUND, STATUS_BAR_PROMINENT_ITEM_FOREGROUND } from 'vs/workbench/common/theme'; @@ -49,6 +48,7 @@ import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/ import { WORKSPACE_TRUST_SETTING_TAG } from 'vs/workbench/contrib/preferences/common/preferences'; import { IPreferencesService } from 'vs/workbench/services/preferences/common/preferences'; import { ILabelService } from 'vs/platform/label/common/label'; +import { IProductService } from 'vs/platform/product/common/productService'; const BANNER_RESTRICTED_MODE = 'workbench.banner.restrictedMode'; const STARTUP_PROMPT_SHOWN_KEY = 'workspace.trust.startupPrompt.shown'; @@ -242,6 +242,7 @@ export class WorkspaceTrustUXHandler extends Disposable implements IWorkbenchCon @IBannerService private readonly bannerService: IBannerService, @ILabelService private readonly labelService: ILabelService, @IHostService private readonly hostService: IHostService, + @IProductService private readonly productService: IProductService ) { super(); @@ -432,8 +433,8 @@ export class WorkspaceTrustUXHandler extends Disposable implements IWorkbenchCon { label: localize('dontTrustOption', "No, I don't trust the authors"), sublabel: isSingleFolderWorkspace ? localize('dontTrustFolderOptionDescription', "Browse folder in restricted mode") : localize('dontTrustWorkspaceOptionDescription', "Browse workspace in restricted mode") }, [ !isSingleFolderWorkspace ? - localize('workspaceStartupTrustDetails', "{0} provides features that may automatically execute files in this workspace.", product.nameShort) : - localize('folderStartupTrustDetails', "{0} provides features that may automatically execute files in this folder.", product.nameShort), + localize('workspaceStartupTrustDetails', "{0} provides features that may automatically execute files in this workspace.", this.productService.nameShort) : + localize('folderStartupTrustDetails', "{0} provides features that may automatically execute files in this folder.", this.productService.nameShort), localize('startupTrustRequestLearnMore', "If you don't trust the authors of these files, we recommend to continue in restricted mode as the files may be malicious. See [our docs](https://aka.ms/vscode-workspace-trust) to learn more."), `\`${this.labelService.getWorkspaceLabel(workspaceIdentifier, { verbose: true })}\``, ], diff --git a/src/vs/workbench/contrib/workspace/browser/workspaceTrustEditor.ts b/src/vs/workbench/contrib/workspace/browser/workspaceTrustEditor.ts index 7904a5e4a5b..ef8c830be94 100644 --- a/src/vs/workbench/contrib/workspace/browser/workspaceTrustEditor.ts +++ b/src/vs/workbench/contrib/workspace/browser/workspaceTrustEditor.ts @@ -29,7 +29,6 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti import { ILabelService } from 'vs/platform/label/common/label'; import { WorkbenchTable } from 'vs/platform/list/browser/listService'; import { Link } from 'vs/platform/opener/browser/link'; -import product from 'vs/platform/product/common/product'; import { Registry } from 'vs/platform/registry/common/platform'; import { isVirtualResource, isVirtualWorkspace } from 'vs/platform/remote/common/remoteHosts'; import { IStorageService } from 'vs/platform/storage/common/storage'; @@ -55,6 +54,7 @@ import { getExtensionDependencies } from 'vs/platform/extensionManagement/common import { EnablementState, IWorkbenchExtensionEnablementService } from 'vs/workbench/services/extensionManagement/common/extensionManagement'; import { posix } from 'vs/base/common/path'; import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; +import { IProductService } from 'vs/platform/product/common/productService'; export const shieldIcon = registerCodicon('workspace-trust-icon', Codicon.shield); @@ -666,7 +666,8 @@ export class WorkspaceTrustEditor extends EditorPane { @IContextMenuService private readonly contextMenuService: IContextMenuService, @IWorkspaceTrustManagementService private readonly workspaceTrustManagementService: IWorkspaceTrustManagementService, @IWorkbenchConfigurationService private readonly configurationService: IWorkbenchConfigurationService, - @IWorkbenchExtensionEnablementService private readonly extensionEnablementService: IWorkbenchExtensionEnablementService + @IWorkbenchExtensionEnablementService private readonly extensionEnablementService: IWorkbenchExtensionEnablementService, + @IProductService private readonly productService: IProductService ) { super(WorkspaceTrustEditor.ID, telemetryService, themeService, storageService); } protected createEditor(parent: HTMLElement): void { @@ -825,7 +826,7 @@ export class WorkspaceTrustEditor extends EditorPane { const headerDescriptionText = append(this.headerDescription, $('div')); headerDescriptionText.innerText = isWorkspaceTrusted ? localize('trustedDescription', "All features are enabled because trust has been granted to the workspace.") : - localize('untrustedDescription', "{0} is in a restricted mode intended for safe code browsing.", product.nameShort); + localize('untrustedDescription', "{0} is in a restricted mode intended for safe code browsing.", this.productService.nameShort); const headerDescriptionActions = append(this.headerDescription, $('div')); const headerDescriptionActionsText = localize({ key: 'workspaceTrustEditorHeaderActions', comment: ['Please ensure the markdown link syntax is not broken up with whitespace [text block](link block)'] }, "[Configure your settings]({0}) or [learn more](https://aka.ms/vscode-workspace-trust).", `command:workbench.trust.configure`); diff --git a/src/vs/workbench/services/extensionManagement/common/webExtensionManagementService.ts b/src/vs/workbench/services/extensionManagement/common/webExtensionManagementService.ts index ea970daef24..7dfd08bcfc3 100644 --- a/src/vs/workbench/services/extensionManagement/common/webExtensionManagementService.ts +++ b/src/vs/workbench/services/extensionManagement/common/webExtensionManagementService.ts @@ -13,6 +13,7 @@ import { CancellationToken } from 'vs/base/common/cancellation'; import { AbstractExtensionManagementService, AbstractExtensionTask, IInstallExtensionTask, IUninstallExtensionTask, UninstallExtensionTaskOptions } from 'vs/platform/extensionManagement/common/abstractExtensionManagementService'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { IExtensionManifestPropertiesService } from 'vs/workbench/services/extensions/common/extensionManifestPropertiesService'; +import { IProductService } from 'vs/platform/product/common/productService'; type Metadata = Partial; @@ -26,8 +27,9 @@ export class WebExtensionManagementService extends AbstractExtensionManagementSe @ILogService logService: ILogService, @IWebExtensionsScannerService private readonly webExtensionsScannerService: IWebExtensionsScannerService, @IExtensionManifestPropertiesService private readonly extensionManifestPropertiesService: IExtensionManifestPropertiesService, + @IProductService productService: IProductService ) { - super(extensionGalleryService, telemetryService, logService); + super(extensionGalleryService, telemetryService, logService, productService); } async getTargetPlatform(): Promise { -- GitLab