Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/contrib/extensions/browser/extensionEnablementWorkspaceTrustTransitionParticipant.ts
3296 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { localize } from '../../../../nls.js';
7
import { Disposable } from '../../../../base/common/lifecycle.js';
8
import { IWorkspaceTrustEnablementService, IWorkspaceTrustManagementService, IWorkspaceTrustTransitionParticipant } from '../../../../platform/workspace/common/workspaceTrust.js';
9
import { IWorkbenchContribution } from '../../../common/contributions.js';
10
import { IWorkbenchEnvironmentService } from '../../../services/environment/common/environmentService.js';
11
import { IWorkbenchExtensionEnablementService } from '../../../services/extensionManagement/common/extensionManagement.js';
12
import { IExtensionService } from '../../../services/extensions/common/extensions.js';
13
import { IHostService } from '../../../services/host/browser/host.js';
14
15
export class ExtensionEnablementWorkspaceTrustTransitionParticipant extends Disposable implements IWorkbenchContribution {
16
constructor(
17
@IExtensionService extensionService: IExtensionService,
18
@IHostService hostService: IHostService,
19
@IWorkbenchEnvironmentService environmentService: IWorkbenchEnvironmentService,
20
@IWorkbenchExtensionEnablementService extensionEnablementService: IWorkbenchExtensionEnablementService,
21
@IWorkspaceTrustEnablementService workspaceTrustEnablementService: IWorkspaceTrustEnablementService,
22
@IWorkspaceTrustManagementService workspaceTrustManagementService: IWorkspaceTrustManagementService,
23
) {
24
super();
25
26
if (workspaceTrustEnablementService.isWorkspaceTrustEnabled()) {
27
// The extension enablement participant will be registered only after the
28
// workspace trust state has been initialized. There is no need to execute
29
// the participant as part of the initialization process, as the workspace
30
// trust state is initialized before starting the extension host.
31
workspaceTrustManagementService.workspaceTrustInitialized.then(() => {
32
const workspaceTrustTransitionParticipant = new class implements IWorkspaceTrustTransitionParticipant {
33
async participate(trusted: boolean): Promise<void> {
34
if (trusted) {
35
// Untrusted -> Trusted
36
await extensionEnablementService.updateExtensionsEnablementsWhenWorkspaceTrustChanges();
37
} else {
38
// Trusted -> Untrusted
39
if (environmentService.remoteAuthority) {
40
hostService.reload();
41
} else {
42
const stopped = await extensionService.stopExtensionHosts(localize('restartExtensionHost.reason', "Changing workspace trust"));
43
await extensionEnablementService.updateExtensionsEnablementsWhenWorkspaceTrustChanges();
44
if (stopped) {
45
extensionService.startExtensionHosts();
46
}
47
}
48
}
49
}
50
};
51
52
// Execute BEFORE the workspace trust transition completes
53
this._register(workspaceTrustManagementService.addWorkspaceTrustTransitionParticipant(workspaceTrustTransitionParticipant));
54
});
55
}
56
}
57
}
58
59