@@ -26,14 +26,15 @@ import { IWebExtensionsScannerService, IWorkbenchExtensionEnablementService, IWo
2626import { IWebWorkerExtensionHostDataProvider , IWebWorkerExtensionHostInitData , WebWorkerExtensionHost } from 'vs/workbench/services/extensions/browser/webWorkerExtensionHost' ;
2727import { FetchFileSystemProvider } from 'vs/workbench/services/extensions/browser/webWorkerFileSystemProvider' ;
2828import { AbstractExtensionService , IExtensionHostFactory , ResolvedExtensions , checkEnabledAndProposedAPI } from 'vs/workbench/services/extensions/common/abstractExtensionService' ;
29+ import { ExtensionDescriptionRegistrySnapshot } from 'vs/workbench/services/extensions/common/extensionDescriptionRegistry' ;
2930import { ExtensionHostKind , ExtensionRunningPreference , IExtensionHostKindPicker , extensionHostKindToString , extensionRunningPreferenceToString } from 'vs/workbench/services/extensions/common/extensionHostKind' ;
3031import { IExtensionManifestPropertiesService } from 'vs/workbench/services/extensions/common/extensionManifestPropertiesService' ;
3132import { ExtensionRunningLocation } from 'vs/workbench/services/extensions/common/extensionRunningLocation' ;
3233import { ExtensionRunningLocationTracker , filterExtensionDescriptions } from 'vs/workbench/services/extensions/common/extensionRunningLocationTracker' ;
33- import { ExtensionHostStartup , IExtensionHost , IExtensionService , toExtensionDescription } from 'vs/workbench/services/extensions/common/extensions' ;
34+ import { ExtensionHostExtensions , ExtensionHostStartup , IExtensionHost , IExtensionService , toExtensionDescription } from 'vs/workbench/services/extensions/common/extensions' ;
3435import { ExtensionsProposedApi } from 'vs/workbench/services/extensions/common/extensionsProposedApi' ;
3536import { dedupExtensions } from 'vs/workbench/services/extensions/common/extensionsUtil' ;
36- import { IRemoteExtensionHostDataProvider , RemoteExtensionHost } from 'vs/workbench/services/extensions/common/remoteExtensionHost' ;
37+ import { IRemoteExtensionHostDataProvider , IRemoteExtensionHostInitData , RemoteExtensionHost } from 'vs/workbench/services/extensions/common/remoteExtensionHost' ;
3738import { ILifecycleService , LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle' ;
3839import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService' ;
3940import { IRemoteExplorerService } from 'vs/workbench/services/remote/common/remoteExplorerService' ;
@@ -70,7 +71,7 @@ export class ExtensionService extends AbstractExtensionService implements IExten
7071 const extensionHostFactory = new BrowserExtensionHostFactory (
7172 extensionsProposedApi ,
7273 ( ) => this . _scanWebExtensions ( ) ,
73- ( ) => this . _getExtensions ( ) ,
74+ ( ) => this . _getExtensionRegistrySnapshotWhenReady ( ) ,
7475 instantiationService ,
7576 remoteAgentService ,
7677 remoteAuthorityResolverService ,
@@ -216,7 +217,7 @@ class BrowserExtensionHostFactory implements IExtensionHostFactory {
216217 constructor (
217218 private readonly _extensionsProposedApi : ExtensionsProposedApi ,
218219 private readonly _scanWebExtensions : ( ) => Promise < IExtensionDescription [ ] > ,
219- private readonly _getExtensions : ( ) => Promise < IExtensionDescription [ ] > ,
220+ private readonly _getExtensionRegistrySnapshotWhenReady : ( ) => Promise < ExtensionDescriptionRegistrySnapshot > ,
220221 @IInstantiationService private readonly _instantiationService : IInstantiationService ,
221222 @IRemoteAgentService private readonly _remoteAgentService : IRemoteAgentService ,
222223 @IRemoteAuthorityResolverService private readonly _remoteAuthorityResolverService : IRemoteAuthorityResolverService ,
@@ -255,18 +256,14 @@ class BrowserExtensionHostFactory implements IExtensionHostFactory {
255256 const localExtensions = checkEnabledAndProposedAPI ( this . _logService , this . _extensionEnablementService , this . _extensionsProposedApi , await this . _scanWebExtensions ( ) , /* ignore workspace trust */ true ) ;
256257 const runningLocation = runningLocations . computeRunningLocation ( localExtensions , [ ] , false ) ;
257258 const myExtensions = filterExtensionDescriptions ( localExtensions , runningLocation , extRunningLocation => desiredRunningLocation . equals ( extRunningLocation ) ) ;
258- return {
259- allExtensions : localExtensions ,
260- myExtensions : myExtensions . map ( extension => extension . identifier )
261- } ;
259+ const extensions = new ExtensionHostExtensions ( 0 , localExtensions , myExtensions . map ( extension => extension . identifier ) ) ;
260+ return { extensions } ;
262261 } else {
263262 // restart case
264- const allExtensions = await this . _getExtensions ( ) ;
265- const myExtensions = runningLocations . filterByRunningLocation ( allExtensions , desiredRunningLocation ) ;
266- return {
267- allExtensions : allExtensions ,
268- myExtensions : myExtensions . map ( extension => extension . identifier )
269- } ;
263+ const snapshot = await this . _getExtensionRegistrySnapshotWhenReady ( ) ;
264+ const myExtensions = runningLocations . filterByRunningLocation ( snapshot . extensions , desiredRunningLocation ) ;
265+ const extensions = new ExtensionHostExtensions ( snapshot . versionId , snapshot . extensions , myExtensions . map ( extension => extension . identifier ) ) ;
266+ return { extensions } ;
270267 }
271268 }
272269 } ;
@@ -275,28 +272,26 @@ class BrowserExtensionHostFactory implements IExtensionHostFactory {
275272 private _createRemoteExtensionHostDataProvider ( runningLocations : ExtensionRunningLocationTracker , remoteAuthority : string ) : IRemoteExtensionHostDataProvider {
276273 return {
277274 remoteAuthority : remoteAuthority ,
278- getInitData : async ( ) => {
279- const allExtensions = await this . _getExtensions ( ) ;
275+ getInitData : async ( ) : Promise < IRemoteExtensionHostInitData > => {
276+ const snapshot = await this . _getExtensionRegistrySnapshotWhenReady ( ) ;
280277
281278 const remoteEnv = await this . _remoteAgentService . getEnvironment ( ) ;
282279 if ( ! remoteEnv ) {
283280 throw new Error ( 'Cannot provide init data for remote extension host!' ) ;
284281 }
285282
286- const myExtensions = runningLocations . filterByExtensionHostKind ( allExtensions , ExtensionHostKind . Remote ) ;
283+ const myExtensions = runningLocations . filterByExtensionHostKind ( snapshot . extensions , ExtensionHostKind . Remote ) ;
284+ const extensions = new ExtensionHostExtensions ( snapshot . versionId , snapshot . extensions , myExtensions . map ( extension => extension . identifier ) ) ;
287285
288- const initData = {
286+ return {
289287 connectionData : this . _remoteAuthorityResolverService . getConnectionData ( remoteAuthority ) ,
290288 pid : remoteEnv . pid ,
291289 appRoot : remoteEnv . appRoot ,
292290 extensionHostLogsPath : remoteEnv . extensionHostLogsPath ,
293291 globalStorageHome : remoteEnv . globalStorageHome ,
294292 workspaceStorageHome : remoteEnv . workspaceStorageHome ,
295- allExtensions : allExtensions ,
296- myExtensions : myExtensions . map ( extension => extension . identifier ) ,
293+ extensions,
297294 } ;
298-
299- return initData ;
300295 }
301296 } ;
302297 }
0 commit comments