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 { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';
7
>
import { IExtensionManifest, ExtensionUntrustedWorkspaceSupportType, ExtensionVirtualWorkspaceSupportType, IExtensionIdentifier, ALL_EXTENSION_KINDS, ExtensionIdentifierMap, IExtensionContributions } from '../../../../platform/extensions/common/extensions.js';
8
>
import { ExtensionKind } from '../../../../platform/environment/common/environment.js';
9
>
import { ExtensionsRegistry } from './extensionsRegistry.js';
10
>
import { getGalleryExtensionId } from '../../../../platform/extensionManagement/common/extensionManagementUtil.js';
11
>
import { isNonEmptyArray } from '../../../../base/common/arrays.js';
12
>
import { IProductService } from '../../../../platform/product/common/productService.js';
13
>
import { createDecorator } from '../../../../platform/instantiation/common/instantiation.js';
14
>
import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js';
15
>
import { ExtensionUntrustedWorkspaceSupport } from '../../../../base/common/product.js';
16
>
import { Disposable } from '../../../../base/common/lifecycle.js';
17
>
import { WORKSPACE_TRUST_EXTENSION_SUPPORT } from '../../workspaces/common/workspaceTrust.js';
18
>
import { isBoolean } from '../../../../base/common/types.js';
19
>
import { IWorkspaceTrustEnablementService } from '../../../../platform/workspace/common/workspaceTrust.js';
20
>
import { ILogService } from '../../../../platform/log/common/log.js';
21
>
import { isWeb } from '../../../../base/common/platform.js';
22
>
23
>
export const IExtensionManifestPropertiesService = createDecorator<IExtensionManifestPropertiesService>('extensionManifestPropertiesService');
24
>
25
>
export const EXTENSIONS_SUPPORT_AGENTS_WINDOW = 'extensions.supportAgentsWindow';
26
>
27
>
const SESSIONS_WINDOW_ALLOWED_CONTRIBUTION_POINTS: ReadonlySet<keyof IExtensionContributions> = new Set([
28
>
'themes',
29
>
'iconThemes',
30
>
'productIconThemes',
31
>
'colors',
32
>
'keybindings',
33
>
'jsonValidation',
34
>
'jsonValidationRegistry',
35
>
'localizations',
36
>
'grammars',
37
>
'languages',
38
>
]);
39
>
40
>
export interface IExtensionManifestPropertiesService {
41
>
readonly _serviceBrand: undefined;
42
>
43
>
prefersExecuteOnUI(manifest: IExtensionManifest): boolean;
44
>
prefersExecuteOnWorkspace(manifest: IExtensionManifest): boolean;
45
>
prefersExecuteOnWeb(manifest: IExtensionManifest): boolean;
46
>
47
>
canExecuteOnUI(manifest: IExtensionManifest): boolean;
48
>
canExecuteOnWorkspace(manifest: IExtensionManifest): boolean;
49
>
canExecuteOnWeb(manifest: IExtensionManifest): boolean;
50
>
canExecuteOnSessionsWindow(manifest: IExtensionManifest): boolean;
51
>
52
>
getExtensionKind(manifest: IExtensionManifest): ExtensionKind[];
53
>
getUserConfiguredExtensionKind(extensionIdentifier: IExtensionIdentifier): ExtensionKind[] | undefined;
54
>
getExtensionUntrustedWorkspaceSupportType(manifest: IExtensionManifest): ExtensionUntrustedWorkspaceSupportType;
55
>
getExtensionVirtualWorkspaceSupportType(manifest: IExtensionManifest): ExtensionVirtualWorkspaceSupportType;
56
>
}
57
>
58
>
export class ExtensionManifestPropertiesService extends Disposable implements IExtensionManifestPropertiesService {
59
>
60
>
readonly _serviceBrand: undefined;
61
>
62
>
private _extensionPointExtensionKindsMap: Map<string, ExtensionKind[]> | null = null;
63
>
private _productExtensionKindsMap: ExtensionIdentifierMap<ExtensionKind[]> | null = null;
64
>
private _configuredExtensionKindsMap: ExtensionIdentifierMap<ExtensionKind | ExtensionKind[]> | null = null;
65
>
66
>
private _productVirtualWorkspaceSupportMap: ExtensionIdentifierMap<{ default?: boolean; override?: boolean }> | null = null;
67
>
private _configuredVirtualWorkspaceSupportMap: ExtensionIdentifierMap<boolean> | null = null;
68
>
private _configuredSessionsWindowSupportMap: ExtensionIdentifierMap<boolean> | null = null;
69
>
70
>
private readonly _configuredExtensionWorkspaceTrustRequestMap: ExtensionIdentifierMap<{ supported: ExtensionUntrustedWorkspaceSupportType; version?: string }>;
71
>
private readonly _productExtensionWorkspaceTrustRequestMap: Map<string, ExtensionUntrustedWorkspaceSupport>;
72
>
73
>
constructor(
74
@IProductService private readonly productService: IProductService,
75
@IConfigurationService private readonly configurationService: IConfigurationService,