From 2964fcbb84651625bb16fd1b30a44fcaa27f0caf Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Thu, 14 Jan 2021 07:52:52 +0100 Subject: [PATCH] shared process - extract more cleanup helpers to contrib --- .../contrib/deprecatedExtensionsCleaner.ts | 25 +++++++++++++++++++ .../contrib/localizationsUpdater.ts | 23 +++++++++++++++++ .../sharedProcess/sharedProcessMain.ts | 18 ++++++------- src/vs/code/electron-main/sharedProcess.ts | 4 ++- .../extensions.contribution.ts | 4 +-- 5 files changed, 60 insertions(+), 14 deletions(-) create mode 100644 src/vs/code/electron-browser/sharedProcess/contrib/deprecatedExtensionsCleaner.ts create mode 100644 src/vs/code/electron-browser/sharedProcess/contrib/localizationsUpdater.ts diff --git a/src/vs/code/electron-browser/sharedProcess/contrib/deprecatedExtensionsCleaner.ts b/src/vs/code/electron-browser/sharedProcess/contrib/deprecatedExtensionsCleaner.ts new file mode 100644 index 00000000000..0ffa0870e95 --- /dev/null +++ b/src/vs/code/electron-browser/sharedProcess/contrib/deprecatedExtensionsCleaner.ts @@ -0,0 +1,25 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { Disposable } from 'vs/base/common/lifecycle'; +import { ExtensionManagementService } from 'vs/platform/extensionManagement/node/extensionManagementService'; +import { IExtensionManagementService } from 'vs/platform/extensionManagement/common/extensionManagement'; + +export class DeprecatedExtensionsCleaner extends Disposable { + + constructor( + @IExtensionManagementService private readonly extensionManagementService: ExtensionManagementService + ) { + super(); + + this._register(extensionManagementService); // TODO@sandy081 this seems fishy + + this.cleanUpDeprecatedExtensions(); + } + + private cleanUpDeprecatedExtensions(): void { + this.extensionManagementService.removeDeprecatedExtensions(); + } +} diff --git a/src/vs/code/electron-browser/sharedProcess/contrib/localizationsUpdater.ts b/src/vs/code/electron-browser/sharedProcess/contrib/localizationsUpdater.ts new file mode 100644 index 00000000000..6c9bfa8125a --- /dev/null +++ b/src/vs/code/electron-browser/sharedProcess/contrib/localizationsUpdater.ts @@ -0,0 +1,23 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { Disposable } from 'vs/base/common/lifecycle'; +import { ILocalizationsService } from 'vs/platform/localizations/common/localizations'; +import { LocalizationsService } from 'vs/platform/localizations/node/localizations'; + +export class LocalizationsUpdater extends Disposable { + + constructor( + @ILocalizationsService private readonly localizationsService: LocalizationsService + ) { + super(); + + this.updateLocalizations(); + } + + private updateLocalizations(): void { + this.localizationsService.update(); + } +} diff --git a/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts b/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts index a65090daa1d..272c5c21c92 100644 --- a/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts +++ b/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts @@ -73,6 +73,8 @@ import { IgnoredExtensionsManagementService, IIgnoredExtensionsManagementService import { ExtensionsStorageSyncService, IExtensionsStorageSyncService } from 'vs/platform/userDataSync/common/extensionsStorageSync'; import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { ISharedProcessConfiguration } from 'vs/platform/sharedProcess/node/sharedProcess'; +import { LocalizationsUpdater } from 'vs/code/electron-browser/sharedProcess/contrib/localizationsUpdater'; +import { DeprecatedExtensionsCleaner } from 'vs/code/electron-browser/sharedProcess/contrib/deprecatedExtensionsCleaner'; class MainProcessService implements IMainProcessService { @@ -125,21 +127,16 @@ class SharedProcessMain extends Disposable { // Channels this.initChannels(accessor); - - // Clean-up deprecated extensions - const extensionManagementService = this._register((accessor.get(IExtensionManagementService) as ExtensionManagementService)); - extensionManagementService.removeDeprecatedExtensions(); - - // Update localizations cache - (accessor.get(ILocalizationsService) as LocalizationsService).update(); }); - // Instantiate Clean-up helpers + // Instantiate Contributions this._register(combinedDisposable( new NodeCachedDataCleaner(this.configuration.nodeCachedDataDir), instantiationService.createInstance(LanguagePackCachedDataCleaner), instantiationService.createInstance(StorageDataCleaner, this.configuration.backupWorkspacesPath), - instantiationService.createInstance(LogsDataCleaner) + instantiationService.createInstance(LogsDataCleaner), + instantiationService.createInstance(LocalizationsUpdater), + instantiationService.createInstance(DeprecatedExtensionsCleaner) )); } @@ -158,6 +155,7 @@ class SharedProcessMain extends Disposable { this._register(new ConsoleLogService(this.configuration.logLevel)), this._register(new SpdLogService('sharedprocess', environmentService.logsPath, this.configuration.logLevel)) ])); + const logService = this._register(new FollowerLogService(loggerClient, multiplexLogger)); services.set(ILogService, logService); @@ -201,7 +199,7 @@ class SharedProcessMain extends Disposable { // Extension recommendations const activeWindowManager = new ActiveWindowManager(nativeHostService); const activeWindowRouter = new StaticRouter(ctx => activeWindowManager.getActiveClientId().then(id => ctx === id)); - services.set(IExtensionRecommendationNotificationService, new ExtensionRecommendationNotificationServiceChannelClient(this.server.getChannel('IExtensionRecommendationNotificationService', activeWindowRouter))); + services.set(IExtensionRecommendationNotificationService, new ExtensionRecommendationNotificationServiceChannelClient(this.server.getChannel('extensionRecommendationNotification', activeWindowRouter))); // Logger const loggerService = new LoggerService(logService, fileService); diff --git a/src/vs/code/electron-main/sharedProcess.ts b/src/vs/code/electron-main/sharedProcess.ts index 56e712e3bbd..b301adb15c1 100644 --- a/src/vs/code/electron-main/sharedProcess.ts +++ b/src/vs/code/electron-main/sharedProcess.ts @@ -50,7 +50,7 @@ export class SharedProcess extends Disposable implements ISharedProcess { } // Signal exit to shared process when shutting down - window.webContents.send('vscode:electron-main->shared-process=exit'); + window.webContents.send('vscode:electron-main->shared-process=exit'); // TODO verify call // Shut the shared process down when we are quitting // @@ -60,6 +60,7 @@ export class SharedProcess extends Disposable implements ISharedProcess { // if (this.windowCloseListener) { window.removeListener('close', this.windowCloseListener); + this.windowCloseListener = undefined; } // Electron seems to crash on Windows without this setTimeout :| @@ -116,6 +117,7 @@ export class SharedProcess extends Disposable implements ISharedProcess { logLevel: this.logService.getLevel() }; + // Load with config this.window.loadURL(FileAccess .asBrowserUri('vs/code/electron-browser/sharedProcess/sharedProcess.html', require) .with({ query: `config=${encodeURIComponent(JSON.stringify(config))}` }) diff --git a/src/vs/workbench/contrib/extensions/electron-browser/extensions.contribution.ts b/src/vs/workbench/contrib/extensions/electron-browser/extensions.contribution.ts index e1349a608a4..a92f4334ba0 100644 --- a/src/vs/workbench/contrib/extensions/electron-browser/extensions.contribution.ts +++ b/src/vs/workbench/contrib/extensions/electron-browser/extensions.contribution.ts @@ -21,7 +21,6 @@ import { ExtensionHostProfileService } from 'vs/workbench/contrib/extensions/ele import { RuntimeExtensionsInput } from 'vs/workbench/contrib/extensions/common/runtimeExtensionsInput'; import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; import { ExtensionsAutoProfiler } from 'vs/workbench/contrib/extensions/electron-browser/extensionsAutoProfiler'; -import { INativeWorkbenchEnvironmentService } from 'vs/workbench/services/environment/electron-sandbox/environmentService'; import { OpenExtensionsFolderAction } from 'vs/workbench/contrib/extensions/electron-sandbox/extensionsActions'; import { ExtensionsLabel } from 'vs/platform/extensionManagement/common/extensionManagement'; import { IExtensionRecommendationNotificationService } from 'vs/platform/extensionRecommendations/common/extensionRecommendations'; @@ -62,11 +61,10 @@ const actionRegistry = Registry.as(WorkbenchActionExte class ExtensionsContributions implements IWorkbenchContribution { constructor( - @INativeWorkbenchEnvironmentService environmentService: INativeWorkbenchEnvironmentService, @IExtensionRecommendationNotificationService extensionRecommendationNotificationService: IExtensionRecommendationNotificationService, @ISharedProcessService sharedProcessService: ISharedProcessService, ) { - sharedProcessService.registerChannel('IExtensionRecommendationNotificationService', new ExtensionRecommendationNotificationServiceChannel(extensionRecommendationNotificationService)); + sharedProcessService.registerChannel('extensionRecommendationNotification', new ExtensionRecommendationNotificationServiceChannel(extensionRecommendationNotificationService)); const openExtensionsFolderActionDescriptor = SyncActionDescriptor.from(OpenExtensionsFolderAction); actionRegistry.registerWorkbenchAction(openExtensionsFolderActionDescriptor, 'Extensions: Open Extensions Folder', ExtensionsLabel); }