未验证 提交 8fbf9b60 编写于 作者: B Benjamin Pasero 提交者: GitHub

debt - use product service in more places (#135651)

上级 fac06c7a
......@@ -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;
......
......@@ -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);
......
......@@ -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) {
......
......@@ -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',
......
......@@ -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<IExtensionDescription[]> {
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<IExtensionDescription[]> {
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<IExtensionDescription | null> {
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,
......
......@@ -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<string>();
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) {
......
......@@ -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
);
......
......@@ -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<void> {
......@@ -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' });
}
......
......@@ -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 })}\``,
],
......
......@@ -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`);
......
......@@ -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<IGalleryMetadata & { isMachineScoped: boolean; }>;
......@@ -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<TargetPlatform> {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册