Path: blob/main/src/vs/workbench/contrib/extensions/browser/extensionEnablementWorkspaceTrustTransitionParticipant.ts
3296 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 { localize } from '../../../../nls.js';6import { Disposable } from '../../../../base/common/lifecycle.js';7import { IWorkspaceTrustEnablementService, IWorkspaceTrustManagementService, IWorkspaceTrustTransitionParticipant } from '../../../../platform/workspace/common/workspaceTrust.js';8import { IWorkbenchContribution } from '../../../common/contributions.js';9import { IWorkbenchEnvironmentService } from '../../../services/environment/common/environmentService.js';10import { IWorkbenchExtensionEnablementService } from '../../../services/extensionManagement/common/extensionManagement.js';11import { IExtensionService } from '../../../services/extensions/common/extensions.js';12import { IHostService } from '../../../services/host/browser/host.js';1314export class ExtensionEnablementWorkspaceTrustTransitionParticipant extends Disposable implements IWorkbenchContribution {15constructor(16@IExtensionService extensionService: IExtensionService,17@IHostService hostService: IHostService,18@IWorkbenchEnvironmentService environmentService: IWorkbenchEnvironmentService,19@IWorkbenchExtensionEnablementService extensionEnablementService: IWorkbenchExtensionEnablementService,20@IWorkspaceTrustEnablementService workspaceTrustEnablementService: IWorkspaceTrustEnablementService,21@IWorkspaceTrustManagementService workspaceTrustManagementService: IWorkspaceTrustManagementService,22) {23super();2425if (workspaceTrustEnablementService.isWorkspaceTrustEnabled()) {26// The extension enablement participant will be registered only after the27// workspace trust state has been initialized. There is no need to execute28// the participant as part of the initialization process, as the workspace29// trust state is initialized before starting the extension host.30workspaceTrustManagementService.workspaceTrustInitialized.then(() => {31const workspaceTrustTransitionParticipant = new class implements IWorkspaceTrustTransitionParticipant {32async participate(trusted: boolean): Promise<void> {33if (trusted) {34// Untrusted -> Trusted35await extensionEnablementService.updateExtensionsEnablementsWhenWorkspaceTrustChanges();36} else {37// Trusted -> Untrusted38if (environmentService.remoteAuthority) {39hostService.reload();40} else {41const stopped = await extensionService.stopExtensionHosts(localize('restartExtensionHost.reason', "Changing workspace trust"));42await extensionEnablementService.updateExtensionsEnablementsWhenWorkspaceTrustChanges();43if (stopped) {44extensionService.startExtensionHosts();45}46}47}48}49};5051// Execute BEFORE the workspace trust transition completes52this._register(workspaceTrustManagementService.addWorkspaceTrustTransitionParticipant(workspaceTrustTransitionParticipant));53});54}55}56}575859