ipc api: MessagePort.start() needs to be called, so events start flowing

This commit is contained in:
Joao Moreno
2022-01-14 14:09:13 +01:00
parent 9d80929066
commit 8a928f98ea
2 changed files with 17 additions and 3 deletions

View File

@@ -102,6 +102,7 @@ export interface MessagePortLike {
postMessage(message: any, transfer?: any[]): void;
addEventListener(type: 'message', listener: (e: any) => any): void;
removeEventListener(type: 'message', listener: (e: any) => any): void;
start(): void;
}
export interface IInitData {

View File

@@ -424,6 +424,7 @@ export abstract class AbstractExtHostExtensionService extends Disposable impleme
const that = this;
let extension: vscode.Extension<any> | undefined;
let messagePassingProtocol: vscode.MessagePassingProtocol | undefined;
const messagePort = isProposedApiEnabled(extensionDescription, 'ipc')
? this._initData.messagePorts?.get(ExtensionIdentifier.toKey(extensionDescription.identifier))
: undefined;
@@ -454,9 +455,21 @@ export abstract class AbstractExtHostExtensionService extends Disposable impleme
return that.extensionRuntime;
},
get environmentVariableCollection() { return that._extHostTerminalService.getEnvironmentVariableCollection(extensionDescription); },
messagePassingProtocol: messagePort && {
onDidReceiveMessage: Event.fromDOMEventEmitter(messagePort, 'message', e => e.data),
postMessage: messagePort.postMessage.bind(messagePort) as any
get messagePassingProtocol() {
if (!messagePassingProtocol) {
if (!messagePort) {
return undefined;
}
const onDidReceiveMessage = Event.buffer(Event.fromDOMEventEmitter(messagePort, 'message', e => e.data));
messagePort.start();
messagePassingProtocol = {
onDidReceiveMessage,
postMessage: messagePort.postMessage.bind(messagePort) as any
};
}
return messagePassingProtocol;
}
});
});