|
|
|
|
@@ -14,7 +14,7 @@ import { URI } from 'vs/base/common/uri';
|
|
|
|
|
import { ProxyChannel, StaticRouter } from 'vs/base/parts/ipc/common/ipc';
|
|
|
|
|
import { Server as MessagePortServer } from 'vs/base/parts/ipc/electron-browser/ipc.mp';
|
|
|
|
|
import { CodeCacheCleaner } from 'vs/code/electron-browser/sharedProcess/contrib/codeCacheCleaner';
|
|
|
|
|
import { DeprecatedExtensionsCleaner } from 'vs/code/electron-browser/sharedProcess/contrib/deprecatedExtensionsCleaner';
|
|
|
|
|
import { ExtensionsCleaner } from 'vs/code/electron-browser/sharedProcess/contrib/extensionsCleaner';
|
|
|
|
|
import { LanguagePackCachedDataCleaner } from 'vs/code/electron-browser/sharedProcess/contrib/languagePackCachedDataCleaner';
|
|
|
|
|
import { LocalizationsUpdater } from 'vs/code/electron-browser/sharedProcess/contrib/localizationsUpdater';
|
|
|
|
|
import { LogsDataCleaner } from 'vs/code/electron-browser/sharedProcess/contrib/logsDataCleaner';
|
|
|
|
|
@@ -28,7 +28,7 @@ import { DiagnosticsService } from 'vs/platform/diagnostics/node/diagnosticsServ
|
|
|
|
|
import { IDownloadService } from 'vs/platform/download/common/download';
|
|
|
|
|
import { DownloadService } from 'vs/platform/download/common/downloadService';
|
|
|
|
|
import { INativeEnvironmentService } from 'vs/platform/environment/common/environment';
|
|
|
|
|
import { NativeEnvironmentService } from 'vs/platform/environment/node/environmentService';
|
|
|
|
|
import { SharedProcessEnvironmentService } from 'vs/platform/sharedProcess/node/sharedProcessEnvironmentService';
|
|
|
|
|
import { GlobalExtensionEnablementService } from 'vs/platform/extensionManagement/common/extensionEnablementService';
|
|
|
|
|
import { ExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionGalleryService';
|
|
|
|
|
import { IExtensionGalleryService, IExtensionManagementService, IExtensionTipsService, IGlobalExtensionEnablementService } from 'vs/platform/extensionManagement/common/extensionManagement';
|
|
|
|
|
@@ -63,38 +63,43 @@ import { ICustomEndpointTelemetryService, ITelemetryService } from 'vs/platform/
|
|
|
|
|
import { TelemetryAppenderChannel } from 'vs/platform/telemetry/common/telemetryIpc';
|
|
|
|
|
import { TelemetryLogAppender } from 'vs/platform/telemetry/common/telemetryLogAppender';
|
|
|
|
|
import { TelemetryService } from 'vs/platform/telemetry/common/telemetryService';
|
|
|
|
|
import { supportsTelemetry, ITelemetryAppender, NullAppender, NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils';
|
|
|
|
|
import { supportsTelemetry, ITelemetryAppender, NullAppender, NullTelemetryService, getPiiPathsFromEnvironment } from 'vs/platform/telemetry/common/telemetryUtils';
|
|
|
|
|
import { AppInsightsAppender } from 'vs/platform/telemetry/node/appInsightsAppender';
|
|
|
|
|
import { CustomEndpointTelemetryService } from 'vs/platform/telemetry/node/customEndpointTelemetryService';
|
|
|
|
|
import { LocalReconnectConstants, TerminalIpcChannels, TerminalSettingId } from 'vs/platform/terminal/common/terminal';
|
|
|
|
|
import { ILocalPtyService } from 'vs/platform/terminal/electron-sandbox/terminal';
|
|
|
|
|
import { PtyHostService } from 'vs/platform/terminal/node/ptyHostService';
|
|
|
|
|
import { ExtensionsStorageSyncService, IExtensionsStorageSyncService } from 'vs/platform/userDataSync/common/extensionsStorageSync';
|
|
|
|
|
import { ExtensionStorageService, IExtensionStorageService } from 'vs/platform/extensionManagement/common/extensionStorage';
|
|
|
|
|
import { IgnoredExtensionsManagementService, IIgnoredExtensionsManagementService } from 'vs/platform/userDataSync/common/ignoredExtensions';
|
|
|
|
|
import { UserDataAutoSyncEnablementService } from 'vs/platform/userDataSync/common/userDataAutoSyncService';
|
|
|
|
|
import { IUserDataAutoSyncEnablementService, IUserDataSyncBackupStoreService, IUserDataSyncLogService, IUserDataSyncResourceEnablementService, IUserDataSyncService, IUserDataSyncStoreManagementService, IUserDataSyncStoreService, IUserDataSyncUtilService, registerConfiguration as registerUserDataSyncConfiguration } from 'vs/platform/userDataSync/common/userDataSync';
|
|
|
|
|
import { IUserDataSyncBackupStoreService, IUserDataSyncLogService, IUserDataSyncEnablementService, IUserDataSyncService, IUserDataSyncStoreManagementService, IUserDataSyncStoreService, IUserDataSyncUtilService, registerConfiguration as registerUserDataSyncConfiguration } from 'vs/platform/userDataSync/common/userDataSync';
|
|
|
|
|
import { IUserDataSyncAccountService, UserDataSyncAccountService } from 'vs/platform/userDataSync/common/userDataSyncAccount';
|
|
|
|
|
import { UserDataSyncBackupStoreService } from 'vs/platform/userDataSync/common/userDataSyncBackupStoreService';
|
|
|
|
|
import { UserDataAutoSyncChannel, UserDataSyncAccountServiceChannel, UserDataSyncMachinesServiceChannel, UserDataSyncStoreManagementServiceChannel, UserDataSyncUtilServiceClient } from 'vs/platform/userDataSync/common/userDataSyncIpc';
|
|
|
|
|
import { UserDataSyncLogService } from 'vs/platform/userDataSync/common/userDataSyncLog';
|
|
|
|
|
import { IUserDataSyncMachinesService, UserDataSyncMachinesService } from 'vs/platform/userDataSync/common/userDataSyncMachines';
|
|
|
|
|
import { UserDataSyncResourceEnablementService } from 'vs/platform/userDataSync/common/userDataSyncResourceEnablementService';
|
|
|
|
|
import { UserDataSyncEnablementService } from 'vs/platform/userDataSync/common/userDataSyncEnablementService';
|
|
|
|
|
import { UserDataSyncService } from 'vs/platform/userDataSync/common/userDataSyncService';
|
|
|
|
|
import { UserDataSyncChannel } from 'vs/platform/userDataSync/common/userDataSyncServiceIpc';
|
|
|
|
|
import { UserDataSyncStoreManagementService, UserDataSyncStoreService } from 'vs/platform/userDataSync/common/userDataSyncStoreService';
|
|
|
|
|
import { UserDataAutoSyncService } from 'vs/platform/userDataSync/electron-sandbox/userDataAutoSyncService';
|
|
|
|
|
import { ActiveWindowManager } from 'vs/platform/windows/node/windowTracker';
|
|
|
|
|
import { IExtensionHostStarter, ipcExtensionHostStarterChannelName } from 'vs/platform/extensions/common/extensionHostStarter';
|
|
|
|
|
import { ExtensionHostStarter } from 'vs/platform/extensions/node/extensionHostStarter';
|
|
|
|
|
import { ISignService } from 'vs/platform/sign/common/sign';
|
|
|
|
|
import { SignService } from 'vs/platform/sign/node/signService';
|
|
|
|
|
import { ISharedTunnelsService } from 'vs/platform/remote/common/tunnel';
|
|
|
|
|
import { SharedTunnelsService } from 'vs/platform/remote/node/tunnelService';
|
|
|
|
|
import { ISharedTunnelsService } from 'vs/platform/tunnel/common/tunnel';
|
|
|
|
|
import { SharedTunnelsService } from 'vs/platform/tunnel/node/tunnelService';
|
|
|
|
|
import { ipcSharedProcessTunnelChannelName, ISharedProcessTunnelService } from 'vs/platform/remote/common/sharedProcessTunnelService';
|
|
|
|
|
import { SharedProcessTunnelService } from 'vs/platform/remote/node/sharedProcessTunnelService';
|
|
|
|
|
import { SharedProcessTunnelService } from 'vs/platform/tunnel/node/sharedProcessTunnelService';
|
|
|
|
|
import { ipcSharedProcessWorkerChannelName, ISharedProcessWorkerConfiguration, ISharedProcessWorkerService } from 'vs/platform/sharedProcess/common/sharedProcessWorkerService';
|
|
|
|
|
import { SharedProcessWorkerService } from 'vs/platform/sharedProcess/electron-browser/sharedProcessWorkerService';
|
|
|
|
|
import { IUserConfigurationFileService, UserConfigurationFileServiceId } from 'vs/platform/configuration/common/userConfigurationFileService';
|
|
|
|
|
import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity';
|
|
|
|
|
import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService';
|
|
|
|
|
import { isLinux } from 'vs/base/common/platform';
|
|
|
|
|
import { FileUserDataProvider } from 'vs/platform/userData/common/fileUserDataProvider';
|
|
|
|
|
import { DiskFileSystemProviderClient, LOCAL_FILE_SYSTEM_CHANNEL_NAME } from 'vs/platform/files/common/diskFileSystemProviderClient';
|
|
|
|
|
import { InspectProfilingService as V8InspectProfilingService } from 'vs/platform/profiling/node/profilingService';
|
|
|
|
|
import { IV8InspectProfilingService } from 'vs/platform/profiling/common/profiling';
|
|
|
|
|
import { IExtensionsScannerService } from 'vs/platform/extensionManagement/common/extensionsScannerService';
|
|
|
|
|
import { ExtensionsScannerService } from 'vs/platform/extensionManagement/node/extensionsScannerService';
|
|
|
|
|
|
|
|
|
|
class SharedProcessMain extends Disposable {
|
|
|
|
|
|
|
|
|
|
@@ -159,7 +164,7 @@ class SharedProcessMain extends Disposable {
|
|
|
|
|
instantiationService.createInstance(StorageDataCleaner, this.configuration.backupWorkspacesPath),
|
|
|
|
|
instantiationService.createInstance(LogsDataCleaner),
|
|
|
|
|
instantiationService.createInstance(LocalizationsUpdater),
|
|
|
|
|
instantiationService.createInstance(DeprecatedExtensionsCleaner)
|
|
|
|
|
instantiationService.createInstance(ExtensionsCleaner)
|
|
|
|
|
));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -176,7 +181,7 @@ class SharedProcessMain extends Disposable {
|
|
|
|
|
services.set(IMainProcessService, mainProcessService);
|
|
|
|
|
|
|
|
|
|
// Environment
|
|
|
|
|
const environmentService = new NativeEnvironmentService(this.configuration.args, productService);
|
|
|
|
|
const environmentService = new SharedProcessEnvironmentService(this.configuration.args, productService);
|
|
|
|
|
services.set(INativeEnvironmentService, environmentService);
|
|
|
|
|
|
|
|
|
|
// Logger
|
|
|
|
|
@@ -204,6 +209,18 @@ class SharedProcessMain extends Disposable {
|
|
|
|
|
const diskFileSystemProvider = this._register(new DiskFileSystemProvider(logService));
|
|
|
|
|
fileService.registerProvider(Schemas.file, diskFileSystemProvider);
|
|
|
|
|
|
|
|
|
|
const userDataFileSystemProvider = this._register(new FileUserDataProvider(
|
|
|
|
|
Schemas.file,
|
|
|
|
|
// Specifically for user data, use the disk file system provider
|
|
|
|
|
// from the main process to enable atomic read/write operations.
|
|
|
|
|
// Since user data can change very frequently across multiple
|
|
|
|
|
// processes, we want a single process handling these operations.
|
|
|
|
|
this._register(new DiskFileSystemProviderClient(mainProcessService.getChannel(LOCAL_FILE_SYSTEM_CHANNEL_NAME), { pathCaseSensitive: isLinux })),
|
|
|
|
|
Schemas.vscodeUserData,
|
|
|
|
|
logService
|
|
|
|
|
));
|
|
|
|
|
fileService.registerProvider(Schemas.vscodeUserData, userDataFileSystemProvider);
|
|
|
|
|
|
|
|
|
|
// Configuration
|
|
|
|
|
const configurationService = this._register(new ConfigurationService(environmentService.settingsResource, fileService));
|
|
|
|
|
services.set(IConfigurationService, configurationService);
|
|
|
|
|
@@ -219,8 +236,8 @@ class SharedProcessMain extends Disposable {
|
|
|
|
|
storageService.initialize()
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
// User Configuration File
|
|
|
|
|
services.set(IUserConfigurationFileService, ProxyChannel.toService<IUserConfigurationFileService>(mainProcessService.getChannel(UserConfigurationFileServiceId)));
|
|
|
|
|
// URI Identity
|
|
|
|
|
services.set(IUriIdentityService, new UriIdentityService(fileService));
|
|
|
|
|
|
|
|
|
|
// Request
|
|
|
|
|
services.set(IRequestService, new SyncDescriptor(RequestService));
|
|
|
|
|
@@ -228,6 +245,9 @@ class SharedProcessMain extends Disposable {
|
|
|
|
|
// Checksum
|
|
|
|
|
services.set(IChecksumService, new SyncDescriptor(ChecksumService));
|
|
|
|
|
|
|
|
|
|
// V8 Inspect profiler
|
|
|
|
|
services.set(IV8InspectProfilingService, new SyncDescriptor(V8InspectProfilingService));
|
|
|
|
|
|
|
|
|
|
// Native Host
|
|
|
|
|
const nativeHostService = ProxyChannel.toService<INativeHostService>(mainProcessService.getChannel('nativeHost'), { context: this.configuration.windowId });
|
|
|
|
|
services.set(INativeHostService, nativeHostService);
|
|
|
|
|
@@ -246,7 +266,7 @@ class SharedProcessMain extends Disposable {
|
|
|
|
|
if (supportsTelemetry(productService, environmentService)) {
|
|
|
|
|
const logAppender = new TelemetryLogAppender(loggerService, environmentService);
|
|
|
|
|
appenders.push(logAppender);
|
|
|
|
|
const { appRoot, extensionsPath, installSourcePath } = environmentService;
|
|
|
|
|
const { installSourcePath } = environmentService;
|
|
|
|
|
|
|
|
|
|
// Application Insights
|
|
|
|
|
if (productService.aiConfig && productService.aiConfig.asimovKey) {
|
|
|
|
|
@@ -259,8 +279,8 @@ class SharedProcessMain extends Disposable {
|
|
|
|
|
appenders,
|
|
|
|
|
commonProperties: resolveCommonProperties(fileService, release(), hostname(), process.arch, productService.commit, productService.version, this.configuration.machineId, productService.msftInternalDomains, installSourcePath),
|
|
|
|
|
sendErrorTelemetry: true,
|
|
|
|
|
piiPaths: [appRoot, extensionsPath]
|
|
|
|
|
}, configurationService);
|
|
|
|
|
piiPaths: getPiiPathsFromEnvironment(environmentService),
|
|
|
|
|
}, configurationService, productService);
|
|
|
|
|
} else {
|
|
|
|
|
telemetryService = NullTelemetryService;
|
|
|
|
|
const nullAppender = NullAppender;
|
|
|
|
|
@@ -271,10 +291,11 @@ class SharedProcessMain extends Disposable {
|
|
|
|
|
services.set(ITelemetryService, telemetryService);
|
|
|
|
|
|
|
|
|
|
// Custom Endpoint Telemetry
|
|
|
|
|
const customEndpointTelemetryService = new CustomEndpointTelemetryService(configurationService, telemetryService, loggerService, environmentService);
|
|
|
|
|
const customEndpointTelemetryService = new CustomEndpointTelemetryService(configurationService, telemetryService, loggerService, environmentService, productService);
|
|
|
|
|
services.set(ICustomEndpointTelemetryService, customEndpointTelemetryService);
|
|
|
|
|
|
|
|
|
|
// Extension Management
|
|
|
|
|
services.set(IExtensionsScannerService, new SyncDescriptor(ExtensionsScannerService));
|
|
|
|
|
services.set(IExtensionManagementService, new SyncDescriptor(ExtensionManagementService));
|
|
|
|
|
|
|
|
|
|
// Extension Gallery
|
|
|
|
|
@@ -295,13 +316,12 @@ class SharedProcessMain extends Disposable {
|
|
|
|
|
services.set(IUserDataSyncUtilService, new UserDataSyncUtilServiceClient(this.server.getChannel('userDataSyncUtil', client => client.ctx !== 'main')));
|
|
|
|
|
services.set(IGlobalExtensionEnablementService, new SyncDescriptor(GlobalExtensionEnablementService));
|
|
|
|
|
services.set(IIgnoredExtensionsManagementService, new SyncDescriptor(IgnoredExtensionsManagementService));
|
|
|
|
|
services.set(IExtensionsStorageSyncService, new SyncDescriptor(ExtensionsStorageSyncService));
|
|
|
|
|
services.set(IExtensionStorageService, new SyncDescriptor(ExtensionStorageService));
|
|
|
|
|
services.set(IUserDataSyncStoreManagementService, new SyncDescriptor(UserDataSyncStoreManagementService));
|
|
|
|
|
services.set(IUserDataSyncStoreService, new SyncDescriptor(UserDataSyncStoreService));
|
|
|
|
|
services.set(IUserDataSyncMachinesService, new SyncDescriptor(UserDataSyncMachinesService));
|
|
|
|
|
services.set(IUserDataSyncBackupStoreService, new SyncDescriptor(UserDataSyncBackupStoreService));
|
|
|
|
|
services.set(IUserDataAutoSyncEnablementService, new SyncDescriptor(UserDataAutoSyncEnablementService));
|
|
|
|
|
services.set(IUserDataSyncResourceEnablementService, new SyncDescriptor(UserDataSyncResourceEnablementService));
|
|
|
|
|
services.set(IUserDataSyncEnablementService, new SyncDescriptor(UserDataSyncEnablementService));
|
|
|
|
|
services.set(IUserDataSyncService, new SyncDescriptor(UserDataSyncService));
|
|
|
|
|
|
|
|
|
|
const ptyHostService = new PtyHostService({
|
|
|
|
|
@@ -311,17 +331,13 @@ class SharedProcessMain extends Disposable {
|
|
|
|
|
},
|
|
|
|
|
configurationService,
|
|
|
|
|
environmentService,
|
|
|
|
|
logService,
|
|
|
|
|
telemetryService
|
|
|
|
|
logService
|
|
|
|
|
);
|
|
|
|
|
await ptyHostService.initialize();
|
|
|
|
|
ptyHostService.initialize();
|
|
|
|
|
|
|
|
|
|
// Terminal
|
|
|
|
|
services.set(ILocalPtyService, this._register(ptyHostService));
|
|
|
|
|
|
|
|
|
|
// Extension Host
|
|
|
|
|
services.set(IExtensionHostStarter, this._register(new ExtensionHostStarter(logService)));
|
|
|
|
|
|
|
|
|
|
// Signing
|
|
|
|
|
services.set(ISignService, new SyncDescriptor(SignService));
|
|
|
|
|
|
|
|
|
|
@@ -354,6 +370,10 @@ class SharedProcessMain extends Disposable {
|
|
|
|
|
const checksumChannel = ProxyChannel.fromService(accessor.get(IChecksumService));
|
|
|
|
|
this.server.registerChannel('checksum', checksumChannel);
|
|
|
|
|
|
|
|
|
|
// Profiling
|
|
|
|
|
const profilingChannel = ProxyChannel.fromService(accessor.get(IV8InspectProfilingService));
|
|
|
|
|
this.server.registerChannel('v8InspectProfiling', profilingChannel);
|
|
|
|
|
|
|
|
|
|
// Settings Sync
|
|
|
|
|
const userDataSyncMachineChannel = new UserDataSyncMachinesServiceChannel(accessor.get(IUserDataSyncMachinesService));
|
|
|
|
|
this.server.registerChannel('userDataSyncMachines', userDataSyncMachineChannel);
|
|
|
|
|
@@ -380,10 +400,6 @@ class SharedProcessMain extends Disposable {
|
|
|
|
|
const localPtyChannel = ProxyChannel.fromService(localPtyService);
|
|
|
|
|
this.server.registerChannel(TerminalIpcChannels.LocalPty, localPtyChannel);
|
|
|
|
|
|
|
|
|
|
// Extension Host
|
|
|
|
|
const extensionHostStarterChannel = ProxyChannel.fromService(accessor.get(IExtensionHostStarter));
|
|
|
|
|
this.server.registerChannel(ipcExtensionHostStarterChannelName, extensionHostStarterChannel);
|
|
|
|
|
|
|
|
|
|
// Tunnel
|
|
|
|
|
const sharedProcessTunnelChannel = ProxyChannel.fromService(accessor.get(ISharedProcessTunnelService));
|
|
|
|
|
this.server.registerChannel(ipcSharedProcessTunnelChannelName, sharedProcessTunnelChannel);
|
|
|
|
|
|