[MessagePort] Fix for using setMessageListener from utils_api.js 83/173083/5
authorLukasz Bardeli <l.bardeli@samsung.com>
Mon, 9 Apr 2018 10:36:28 +0000 (12:36 +0200)
committerLukasz Bardeli <l.bardeli@samsung.com>
Mon, 9 Apr 2018 10:36:28 +0000 (12:36 +0200)
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 <l.bardeli@samsung.com>
src/messageport/messageport_api.js
src/messageport/messageport_instance.cc

index ab612f1..283521a 100755 (executable)
  *    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<value.length;j++) {
           if (!_isOctet(value[j])) {
@@ -338,24 +269,28 @@ RemoteMessagePort.prototype.sendMessage = function() {
                 'Data is not octet array');
           }
         }
-        filtered_data[i] = { key: key, value: value, valueType: 'byteStreamArrayValueType'};
+        filteredData[i] = { key: key, value: value, valueType: 'byteStreamArrayValueType'};
       }
     } else {
       // convert any other value to string -> 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();
index bbca9b9..4b342d4 100644 (file)
@@ -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<double>(local_port_id));
+  o["listenerId"] = picojson::value("LocalMessagePortListener");
+  o["localPortId"] = picojson::value(static_cast<double>(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::string>();
   std::vector<picojson::value> data = args.get("data").get<picojson::array>();
 
-  long local_port_id = static_cast<long>(args.get("local_port_id").get<double>());
+  long local_port_id = static_cast<long>(args.get("localPortId").get<double>());
   bool trusted = args.get("trusted").get<bool>();
 
   int result;