From 3f3b6e40e3f85b61c49755beb43c2c94fba8fc32 Mon Sep 17 00:00:00 2001 From: DongHyun Song Date: Thu, 3 Nov 2022 14:45:47 +0900 Subject: [PATCH] [Service] Support bi-direction message-port From the bundle data, if there is the information of actual remote port, then it make RemoteMessagePort object for the 2nd parameter of message- port callback. Related chromium-efl patch: https://review.tizen.org/gerrit/#/c/platform/framework/web/chromium-efl/+/283803/ Change-Id: I4236b5e50c265ababf9550ea2ae278ea51c23a69 Signed-off-by: DongHyun Song --- wrt_app/service/device_api_router.ts | 36 ++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/wrt_app/service/device_api_router.ts b/wrt_app/service/device_api_router.ts index c00692e4..16cfa9ec 100644 --- a/wrt_app/service/device_api_router.ts +++ b/wrt_app/service/device_api_router.ts @@ -441,13 +441,45 @@ export class DeviceAPIRouter { }); } + const makeMessagePort = (portName: string, isTrusted: boolean) => { + const messagePort = this.funcRequestLocalMessagePort(portName); + return { + messagePortName: portName, + isTrusted, + addMessagePortListener: (listener: any) => { + const listenerWrapper = (message: any) => { + let remoteAppId = ''; + let remotePort = ''; + message.forEach((bundle: any) => { + if (bundle.key === 'org_remote_app_id') { + remoteAppId = bundle.value; + } else if (bundle.key === 'org_remote_port') { + remotePort = bundle.value; + } + }); + message = message.filter((bundle: any) => { + return !bundle.key.includes('org_remote'); + }); + let remoteMessagePort = null; + if (remoteAppId && remotePort) + remoteMessagePort = global.tizen.messageport.requestRemoteMessagePort(remoteAppId, remotePort); + return listener(message, remoteMessagePort); + } + return messagePort.addMessagePortListener(listenerWrapper); + }, + removeMessagePortListener: (watchId: any) => { + return messagePort.removeMessagePortListener(watchId); + } + } + } + global.tizen.messageport.requestLocalMessagePort = (portName: string) => { registerMessagePort('requestLocalMessagePort', portName); - return this.funcRequestLocalMessagePort(portName); + return makeMessagePort(portName, false); } global.tizen.messageport.requestTrustedLocalMessagePort = (portName: string) => { registerMessagePort('requestTrustedLocalMessagePort', portName); - return this.funcRequestLocalMessagePort(portName); + return makeMessagePort(portName, true); } global.tizen.messageport.requestTrustedRemoteMessagePort = (appId: string, portName: string) => { return { -- 2.34.1