diff --git a/src/vs/workbench/api/browser/mainThreadExtensionService.ts b/src/vs/workbench/api/browser/mainThreadExtensionService.ts index e0b3986200de218a1e9419296a38cbfb48f03663..5d0132e29898476304c962856f2f9bc778f6153c 100644 --- a/src/vs/workbench/api/browser/mainThreadExtensionService.ts +++ b/src/vs/workbench/api/browser/mainThreadExtensionService.ts @@ -50,7 +50,7 @@ export class MainThreadExtensionService implements MainThreadExtensionServiceSha $activateExtension(extensionId: ExtensionIdentifier, reason: ExtensionActivationReason): Promise { return this._extensionService._activateById(extensionId, reason); } - $onWillActivateExtension(extensionId: ExtensionIdentifier): void { + async $onWillActivateExtension(extensionId: ExtensionIdentifier): Promise { this._extensionService._onWillActivateExtension(extensionId); } $onDidActivateExtension(extensionId: ExtensionIdentifier, codeLoadingTime: number, activateCallTime: number, activateResolvedTime: number, activationReason: ExtensionActivationReason): void { diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index 3106330c6b5f7d25122c23a3fb2df8830ba7032a..d8c45c2afbfdd975bfc835ab19f3a76781d27931 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -830,7 +830,7 @@ export interface MainThreadTaskShape extends IDisposable { export interface MainThreadExtensionServiceShape extends IDisposable { $activateExtension(extensionId: ExtensionIdentifier, reason: ExtensionActivationReason): Promise; - $onWillActivateExtension(extensionId: ExtensionIdentifier): void; + $onWillActivateExtension(extensionId: ExtensionIdentifier): Promise; $onDidActivateExtension(extensionId: ExtensionIdentifier, codeLoadingTime: number, activateCallTime: number, activateResolvedTime: number, activationReason: ExtensionActivationReason): void; $onExtensionActivationError(extensionId: ExtensionIdentifier, error: ExtensionActivationError): Promise; $onExtensionRuntimeError(extensionId: ExtensionIdentifier, error: SerializedError): void; diff --git a/src/vs/workbench/api/common/extHostExtensionService.ts b/src/vs/workbench/api/common/extHostExtensionService.ts index 33b062b329ccbe43af558661fbf23f0bda599acf..53d3612cc5d7cfcf36cebb48d95f2e53a110a872 100644 --- a/src/vs/workbench/api/common/extHostExtensionService.ts +++ b/src/vs/workbench/api/common/extHostExtensionService.ts @@ -303,8 +303,15 @@ export abstract class AbstractExtHostExtensionService extends Disposable impleme // --- impl - private _activateExtension(extensionDescription: IExtensionDescription, reason: ExtensionActivationReason): Promise { - this._mainThreadExtensionsProxy.$onWillActivateExtension(extensionDescription.identifier); + private async _activateExtension(extensionDescription: IExtensionDescription, reason: ExtensionActivationReason): Promise { + if (!this._initData.remote.isRemote) { + // local extension host process + await this._mainThreadExtensionsProxy.$onWillActivateExtension(extensionDescription.identifier); + } else { + // remote extension host process + // do not wait for renderer confirmation + this._mainThreadExtensionsProxy.$onWillActivateExtension(extensionDescription.identifier); + } return this._doActivateExtension(extensionDescription, reason).then((activatedExtension) => { const activationTimes = activatedExtension.activationTimes; this._mainThreadExtensionsProxy.$onDidActivateExtension(extensionDescription.identifier, activationTimes.codeLoadingTime, activationTimes.activateCallTime, activationTimes.activateResolvedTime, reason);