diff --git a/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.ts b/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.ts index 5616f8b3e667b..77bf57e0d867f 100644 --- a/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.ts +++ b/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.ts @@ -189,7 +189,7 @@ export class WebWorkerExtensionHost extends Disposable implements IExtensionHost // Send over message ports for extension API const messagePorts = this._environmentService.options?.messagePorts ?? new Map(); - iframe.contentWindow!.postMessage(messagePorts, '*', [...messagePorts.values()]); + iframe.contentWindow!.postMessage({ type: 'vscode.init', data: messagePorts }, '*', [...messagePorts.values()]); port.onmessage = (event) => { const { data } = event; diff --git a/src/vs/workbench/services/extensions/worker/extensionHostWorker.ts b/src/vs/workbench/services/extensions/worker/extensionHostWorker.ts index 8996ce43e355e..fa9703772a760 100644 --- a/src/vs/workbench/services/extensions/worker/extensionHostWorker.ts +++ b/src/vs/workbench/services/extensions/worker/extensionHostWorker.ts @@ -216,12 +216,25 @@ function connectToRenderer(protocol: IMessagePassingProtocol): Promise nativeClose(); +interface IInitMessage { + readonly type: 'vscode.init'; + readonly data: ReadonlyMap; +} + +function isInitMessage(a: any): a is IInitMessage { + return !!a && typeof a === 'object' && a.type === 'vscode.init' && a.data instanceof Map; +} + export function create(): { onmessage: (message: any) => void } { performance.mark(`code/extHost/willConnectToRenderer`); const res = new ExtensionWorker(); return { - onmessage(messagePorts: ReadonlyMap) { + onmessage(message: any) { + if (!isInitMessage(message)) { + return; // silently ignore foreign messages + } + connectToRenderer(res.protocol).then(data => { performance.mark(`code/extHost/didWaitForInitData`); const extHostMain = new ExtensionHostMain( @@ -229,7 +242,7 @@ export function create(): { onmessage: (message: any) => void } { data.initData, hostUtil, null, - messagePorts + message.data ); onTerminate = (reason: string) => extHostMain.terminate(reason);