From: Lukasz Bardeli Date: Mon, 9 Apr 2018 10:36:28 +0000 (+0200) Subject: [MessagePort] Fix for using setMessageListener from utils_api.js X-Git-Tag: submit/tizen/20180416.022000~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=22c5d5c94adf5d4e1a3d855db5657fe8f0656e11;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [MessagePort] Fix for using setMessageListener from utils_api.js Remove setMessageListener from messageport_api.js and start using from utils_api.js [Verification] Code compiles without error. TCT passrate 100% Change-Id: I17ac80152694e25cb9203ff4815ef271553ddd62 Signed-off-by: Lukasz Bardeli --- diff --git a/src/messageport/messageport_api.js b/src/messageport/messageport_api.js index ab612f13..283521ad 100755 --- a/src/messageport/messageport_api.js +++ b/src/messageport/messageport_api.js @@ -14,24 +14,22 @@ * limitations under the License. */ -var JSON_ = xwalk.JSON; var validator_ = xwalk.utils.validator; var types_ = validator_.Types; var type_ = xwalk.utils.type; var converter_ = xwalk.utils.converter; -var privUtils_ = xwalk.utils; +var native_ = new xwalk.utils.NativeManager(extension); + +var LOCAL_MESSAGE_PORT_LISTENER_ID = 'LocalMessagePortListener'; var callbackId = 0; var callbacks = {}; var ports = []; -extension.setMessageListener(function(json) { - var msg = JSON_.parse(json); - var listeners = callbacks[msg['local_port_id']]; +function MessagePortChangeCallback(msg) { + var listeners = callbacks[msg['localPortId']]; var rmp; - privUtils_.log('Listeners length:' + listeners.length); - if (!msg.hasOwnProperty('remotePort')) rmp = null; else @@ -42,73 +40,12 @@ extension.setMessageListener(function(json) { func(msg.message, rmp); }, 0); } - -}); +} function nextCallbackId() { return callbackId++; } -var ExceptionMap = { - 'UnknownError' : WebAPIException.UNKNOWN_ERR, - 'TypeMismatchError' : WebAPIException.TYPE_MISMATCH_ERR, - 'InvalidValuesError' : WebAPIException.INVALID_VALUES_ERR, - 'IOError' : WebAPIException.IO_ERR, - 'ServiceNotAvailableError' : WebAPIException.SERVICE_NOT_AVAILABLE_ERR, - 'SecurityError' : WebAPIException.SECURITY_ERR, - 'NetworkError' : WebAPIException.NETWORK_ERR, - 'NotSupportedError' : WebAPIException.NOT_SUPPORTED_ERR, - 'NotFoundError' : WebAPIException.NOT_FOUND_ERR, - 'InvalidAccessError' : WebAPIException.INVALID_ACCESS_ERR, - 'AbortError' : WebAPIException.ABORT_ERR, - 'QuotaExceededError' : WebAPIException.QUOTA_EXCEEDED_ERR -}; - -function callNative(cmd, args) { - var json = {'cmd': cmd, 'args': args}; - var argjson = JSON_.stringify(json); - var resultString = extension.internal.sendSyncMessage(argjson); - var result = JSON_.parse(resultString); - - if (typeof result !== 'object') { - throw new WebAPIException(WebAPIException.UNKNOWN_ERR); - } - - if (result['status'] == 'success') { - if (result['result']) { - return result['result']; - } - return true; - } - else if (result['status'] == 'error') { - var err = result['error']; - if (err) { - if (ExceptionMap[err.name]) { - throw new WebAPIException(ExceptionMap[err.name], err.message); - } else { - throw new WebAPIException(WebAPIException.UNKNOWN_ERR, err.message); - } - } - return false; - } -} - - -function callNativeWithCallback(cmd, args, callback) { - if (callback) { - var id = nextCallbackId(); - args['callbackId'] = id; - callbacks[id] = callback; - } - - return callNative(cmd, args); -} - -function SetReadOnlyProperty(obj, n, v) { - Object.defineProperty(obj, n, {value: v, writable: false}); -} - - function MessagePortManager() { // constructor of MessagePortManager } @@ -124,22 +61,20 @@ MessagePortManager.prototype.requestLocalMessagePort = function(localMessagePort 'Port name cannot be empty.'); } - var localPortId; + var localPortId; // TODO remove var nativeParam = { 'localMessagePortName': args.localMessagePortName }; - try { - - localPortId = callNative('MessagePortManager_requestLocalMessagePort', nativeParam); + var result = native_.callSync('MessagePortManager_requestLocalMessagePort', nativeParam); - } catch (e) { - throw e; + if (native_.isSuccess(result)) { + var returnObject = new LocalMessagePort(args.localMessagePortName, false); + ports[nativeParam.localMessagePortName] = native_.getResultObject(result); + } else { + throw native_.getErrorObject(result); } - var returnObject = new LocalMessagePort(args.localMessagePortName, false); - ports[nativeParam.localMessagePortName] = localPortId; - return returnObject; }; @@ -157,17 +92,15 @@ MessagePortManager.prototype.requestTrustedLocalMessagePort = function(localMess 'localMessagePortName': args.localMessagePortName }; - try { - - var localPortId = callNative('MessagePortManager_requestTrustedLocalMessagePort', nativeParam); + var result = native_.callSync('MessagePortManager_requestTrustedLocalMessagePort', nativeParam); - } catch (e) { - throw e; + if (native_.isSuccess(result)) { + var returnObject = new LocalMessagePort(args.localMessagePortName, true); + ports[nativeParam.localMessagePortName] = native_.getResultObject(result); + } else { + throw native_.getErrorObject(result); } - var returnObject = new LocalMessagePort(args.localMessagePortName, true); - ports[nativeParam.localMessagePortName] = localPortId; - return returnObject; }; @@ -183,12 +116,10 @@ MessagePortManager.prototype.requestRemoteMessagePort = 'remoteMessagePortName': args.remoteMessagePortName }; - try { - - var syncResult = callNative('MessagePortManager_requestRemoteMessagePort', nativeParam); + var result = native_.callSync('MessagePortManager_requestRemoteMessagePort', nativeParam); - } catch (e) { - throw e; + if (native_.isFailure(result)) { + throw native_.getErrorObject(result); } var returnObject = new RemoteMessagePort(args.remoteMessagePortName, args.appId, false); @@ -208,12 +139,10 @@ MessagePortManager.prototype.requestTrustedRemoteMessagePort = 'remoteMessagePortName': args.remoteMessagePortName }; - try { + var result = native_.callSync('MessagePortManager_requestTrustedRemoteMessagePort', nativeParam); - var syncResult = callNative('MessagePortManager_requestTrustedRemoteMessagePort', nativeParam); - - } catch (e) { - throw e; + if (native_.isFailure(result)) { + throw native_.getErrorObject(result); } var returnObject = new RemoteMessagePort(args.remoteMessagePortName, args.appId, true); @@ -235,6 +164,8 @@ LocalMessagePort.prototype.addMessagePortListener = function(listener) { {'name' : 'listener', 'type': types_.FUNCTION, 'nullable': false} ]); + native_.addListener(LOCAL_MESSAGE_PORT_LISTENER_ID, MessagePortChangeCallback); + var portId = ports[this.messagePortName]; if (!callbacks.hasOwnProperty(portId)) callbacks[portId] = []; @@ -251,22 +182,22 @@ LocalMessagePort.prototype.removeMessagePortListener = function(watchId) { {'name' : 'watchId', 'type': types_.LONG, 'nullable': false, 'optional': false } ]); - var to_delete; + var toDelete; var listeners = callbacks[ports[this.messagePortName]]; for (var i = 0, j = listeners.length; i < j; i++) { - var listener_id = listeners[i][1]; - if (watchId == listener_id) { - to_delete = i; + var listenerId = listeners[i][1]; + if (watchId == listenerId) { + toDelete = i; break; } } - if (typeof to_delete === 'undefined') + if (typeof toDelete === 'undefined') throw new WebAPIException(WebAPIException.NOT_FOUND_ERR, 'The port of the target application is not found.'); - listeners.splice(to_delete, 1); + listeners.splice(toDelete, 1); }; @@ -295,10 +226,10 @@ RemoteMessagePort.prototype.sendMessage = function() { 'nullable' : true, 'values' : LocalMessagePort } ]); - var filtered_data = new Array(args.data.length); - var unique_data_key = {}; - var data_length = args.data.length; - for (var i = 0; i < data_length; i++) { + var filteredData = new Array(args.data.length); + var uniqueDataKey = {}; + var dataLength = args.data.length; + for (var i = 0; i < dataLength; i++) { if (!args.data[i].hasOwnProperty('key')) { throw new WebAPIException(WebAPIException.INVALID_VALUES_ERR, 'MessagePortDataItem should contain \'key\' property.'); @@ -308,13 +239,13 @@ RemoteMessagePort.prototype.sendMessage = function() { throw new WebAPIException(WebAPIException.INVALID_VALUES_ERR, 'Property \'key\' should not be empty.'); } - if (true === unique_data_key[key]) { + if (true === uniqueDataKey[key]) { throw new WebAPIException(WebAPIException.INVALID_VALUES_ERR, 'Property \'key\' should not be duplicated.'); } var value = args.data[i].value; if (type_.isString(value)) { - filtered_data[i] = { key: key, value: value, valueType: 'stringValueType'}; + filteredData[i] = { key: key, value: value, valueType: 'stringValueType'}; } else if(type_.isArray(value)) { var arrayMember = value[0]; if(type_.isString(arrayMember)) { @@ -324,13 +255,13 @@ RemoteMessagePort.prototype.sendMessage = function() { 'Invalid array value'); } } - filtered_data[i] = { key: key, value: value, valueType: 'stringArrayValueType'}; + filteredData[i] = { key: key, value: value, valueType: 'stringArrayValueType'}; } else if(!type_.isArray(arrayMember)) { if (!_isOctet(value)) { throw new WebAPIException(WebAPIException.INVALID_VALUES_ERR, 'Data is not octet array'); } - filtered_data[i] = { key: key, value: value, valueType: 'byteStreamValueType'}; + filteredData[i] = { key: key, value: value, valueType: 'byteStreamValueType'}; } else { for(var j=0;j backward compatibility - filtered_data[i] = { key: key, value: converter_.toString(value), valueType: 'stringValueType'}; + filteredData[i] = { key: key, value: converter_.toString(value), valueType: 'stringValueType'}; } - unique_data_key[key] = true; + uniqueDataKey[key] = true; } var nativeParam = { 'appId': this.appId, 'messagePortName': this.messagePortName, - 'data': filtered_data, + 'data': filteredData, 'trusted': this.isTrusted, - 'local_port_id': args.localMessagePort ? ports[args.localMessagePort.messagePortName] : -1 + 'localPortId': args.localMessagePort ? ports[args.localMessagePort.messagePortName] : -1 }; - var syncResult = callNative('RemoteMessagePort_sendMessage', nativeParam); + var result = native_.callSync('RemoteMessagePort_sendMessage', nativeParam); + + if (native_.isFailure(result)) { + throw native_.getErrorObject(result); + } }; exports = new MessagePortManager(); diff --git a/src/messageport/messageport_instance.cc b/src/messageport/messageport_instance.cc index bbca9b96..4b342d46 100644 --- a/src/messageport/messageport_instance.cc +++ b/src/messageport/messageport_instance.cc @@ -163,7 +163,8 @@ static void OnReceiveLocalMessage(int local_port_id, const char* remote_app_id, picojson::value::object o; picojson::value::array data; - o["local_port_id"] = picojson::value(static_cast(local_port_id)); + o["listenerId"] = picojson::value("LocalMessagePortListener"); + o["localPortId"] = picojson::value(static_cast(local_port_id)); if (remote_port) { o["remoteAppId"] = picojson::value(remote_app_id); @@ -347,7 +348,7 @@ void MessageportInstance::RemoteMessagePortSendmessage(const picojson::value& ar const std::string& message_port_name = args.get("messagePortName").get(); std::vector data = args.get("data").get(); - long local_port_id = static_cast(args.get("local_port_id").get()); + long local_port_id = static_cast(args.get("localPortId").get()); bool trusted = args.get("trusted").get(); int result;