Revert "[Messaging] Privilege checks moved to JS."
authorPiotr Kosko <p.kosko@samsung.com>
Wed, 4 Nov 2015 13:30:17 +0000 (14:30 +0100)
committerPiotr Kosko <p.kosko@samsung.com>
Mon, 7 Dec 2015 09:32:08 +0000 (10:32 +0100)
This reverts commit 5610b88186d4cf0f5d9a149cbe6ac5e10768866a.

Also applied:
  [Messaging] Refactored to use NativeManager instead of NativeBridge
  Ie5263f22be139722b2bec86fc7d3b0dacebd19bb

[Verification] Code compiles without errors. Unable to run TCT for SMS, MMS and email.

Change-Id: Iea5a6331ab8432ef672757212bb7480034f3774e
Signed-off-by: Piotr Kosko <p.kosko@samsung.com>
src/messaging/callback_user_data.cc
src/messaging/callback_user_data.h
src/messaging/conversations_change_callback.cc
src/messaging/folders_change_callback.cc
src/messaging/messages_change_callback.cc
src/messaging/messaging_api.js
src/messaging/messaging_instance.cc
src/messaging/messaging_manager.cc
src/messaging/messaging_manager.h
src/messaging/messaging_util.cc
src/messaging/messaging_util.h

index ae1cf0b39f404ec45a575c5363c244be1a6b9f36..4816ce6c80fadee9300e6b8800e097f286969fc5 100755 (executable)
 #include "messaging/callback_user_data.h"
 
 #include "common/logger.h"
+#include "common/tools.h"
+
+using common::tools::ReportSuccess;
+using common::tools::ReportError;
 
 namespace extension {
 namespace messaging {
@@ -28,8 +32,10 @@ CallbackUserData::CallbackUserData(PostQueue& queue, long cid, bool keep /* = fa
       queue_(queue),
       result_(common::ErrorCode::NO_ERROR) {
   LoggerD("Entered");
-  AddJsonData(JSON_CALLBACK_ID, picojson::value(static_cast<double>(cid_)));
-  AddJsonData(JSON_CALLBACK_KEEP, picojson::value(keep));
+  if (!keep) {
+    // this is not listener, add callbackId
+    AddJsonData(JSON_CALLBACK_ID, picojson::value(static_cast<double>(cid_)));
+  }
 }
 
 CallbackUserData::~CallbackUserData() {
@@ -43,20 +49,18 @@ bool CallbackUserData::IsError() const {
 
 void CallbackUserData::SetError(const common::PlatformResult& error) {
   LoggerD("Entered");
-
   // keep only the first error
   if (!IsError()) {
+    ReportError(error, &obj_);
     result_ = error;
-    SetAction(JSON_CALLBACK_ERROR, error.ToJSON());
   }
 }
 
 void CallbackUserData::SetSuccess(const picojson::value& data /* = picojson::value()*/) {
   LoggerD("Entered");
-
   // do not allow to overwrite the error
   if (!IsError()) {
-    SetAction(JSON_CALLBACK_SUCCCESS, data);
+    ReportSuccess(data, obj_);
   }
 }
 
@@ -64,7 +68,12 @@ void CallbackUserData::SetAction(const char* action, const picojson::value& data
   LoggerD("Entered");
 
   AddJsonData(JSON_ACTION, picojson::value(action));
-  AddJsonData(JSON_DATA, data);
+  // ReportSuccess cannot be used here, update of this field is necessary (this is a special case)
+  AddJsonData(JSON_RESULT, data);
+}
+
+void CallbackUserData::SetListenerId(const char* id) {
+  AddJsonData(JSON_LISTENER_ID, picojson::value(id));
 }
 
 void CallbackUserData::AddToQueue() {
index 5b62e2bef7aef69c92ca77982aa75a7e357b8875..6f72c83e614203204ab324130deabb966b7af31a 100755 (executable)
@@ -35,6 +35,7 @@ class CallbackUserData {
   void SetError(const common::PlatformResult& error);
   void SetSuccess(const picojson::value& data = picojson::value());
   void SetAction(const char* action, const picojson::value& data);
+  void SetListenerId(const char* id);
 
   void AddToQueue();
   void Post();
index d98308f45a068e7e36728b73d978de83d47aafd7..95d75f31df0f3f0c2445b40949ea050da9d1714f 100755 (executable)
@@ -50,6 +50,7 @@ ConversationsChangeCallback::ConversationsChangeCallback(
         m_is_act(true)
 {
     LoggerD("Entered");
+    m_callback_data.SetListenerId("ConversationsChangeListener");
 }
 
 ConversationsChangeCallback::~ConversationsChangeCallback()
index 1998e5521c352cc4ea8cb53a363f8f62319a3c50..adb821eabd54d4339aa948187fec5bb12bcefd9f 100755 (executable)
@@ -38,6 +38,7 @@ FoldersChangeCallback::FoldersChangeCallback(
     m_is_act(true)
 {
     LoggerD("Entered");
+    m_callback_data.SetListenerId("FoldersChangeListener");
 }
 
 FoldersChangeCallback::~FoldersChangeCallback()
index e2fcdb6e5736687fadb3c770c3825d95f909dcc1..c95e22e79333cc5e583adf0ba0682ec4724cb230 100755 (executable)
@@ -59,6 +59,7 @@ MessagesChangeCallback::MessagesChangeCallback(
         m_is_act(true)
 {
     LoggerD("Entered");
+    m_callback_data.SetListenerId("MessagesChangeListener");
 }
 
 MessagesChangeCallback::~MessagesChangeCallback()
index 984e60eea5cb8c3038901cc5badc9969564ba5ae..dbae2b48f2f5da11960d61591b7ebea249169eb5 100755 (executable)
@@ -17,7 +17,7 @@
 var validator_ = xwalk.utils.validator;
 var types_ = validator_.Types;
 var T_ = xwalk.utils.type;
-var bridge = xwalk.utils.NativeBridge(extension, true);
+var native = new xwalk.utils.NativeManager(extension);
 
 function throwException_(err) {
     throw new WebAPIException(err.code, err.name, err.message);
@@ -388,16 +388,16 @@ function Message(type, data) {
         {
             get: function () {
                 if (_internal.id) {
-                    return bridge.sync({
-                        cmd: 'Message_messageStatus',
-                        args: {
-                            id: _internal.id,
-                            type: _internal.type
-                        }
-                    });
-                } else {
-                    return '';
+                  var callArgs = {
+                      id: _internal.id,
+                      type: _internal.type
+                  };
+                  var result = native.callSync('Message_messageStatus', callArgs);
+                  if (native.isSuccess(result)) {
+                    return native.getResultObject(result);
+                  }
                 }
+                return '';
             },
             set: function (value) {return;},
             enumerable: true
@@ -679,29 +679,25 @@ Messaging.prototype.getMessageServices = function () {
         {name: 'errorCallback', type: types_.FUNCTION, optional: true, nullable: true}
     ]);
 
-    bridge.async({
-        cmd: 'Messaging_getMessageServices',
-        args: {
-            messageServiceType: args.messageServiceType
-        }
-    }).then({
-        success: function (data) {
-            var servicesArr = [];
-            data.forEach(function(e){
-                servicesArr.push(new MessageService(e));
-            });
-            args.successCallback.call(null, servicesArr);
-        },
-        error: function (e) {
-            if (args.errorCallback) {
-                args.errorCallback.call(
-                    null,
-                    new WebAPIException(e.error)
-                )
-            }
-        }
-    });
+    var callArgs = {messageServiceType: args.messageServiceType};
+    var callback = function(result) {
+      if (native.isFailure(result)) {
+        native.callIfPossible(args.errorCallback, native.getErrorObject(result));
+      } else {
+        var data = native.getResultObject(result);
+        var servicesArr = [];
+        data.forEach(function(e){
+            servicesArr.push(new MessageService(e));
+        });
+        args.successCallback(servicesArr);
+      }
+    };
+    var result = native.call('Messaging_getMessageServices', callArgs, callback);
+    if (native.isFailure(result)) {
+      throw native.getErrorObject(result);
+    }
 }
+
 function MessageStorage(){};
 function MessageService(data) {
     propertyFactory_(this, 'id', data.id, Property.E);
@@ -711,8 +707,6 @@ function MessageService(data) {
 };
 
 MessageService.prototype.sendMessage = function () {
-    xwalk.utils.checkPrivilegeAccess(xwalk.utils.privilege.MESSAGING_WRITE);
-
     var args = validator_.validateArgs(arguments, [
         {name: 'message', type: types_.PLATFORM_OBJECT, values: tizen.Message},
         {name: 'successCallback', type: types_.FUNCTION, optional: true, nullable: true},
@@ -721,47 +715,40 @@ MessageService.prototype.sendMessage = function () {
     ]);
 
     if (args.message.type != this.type) {
-        throw new tizen.WebAPIException(tizen.WebAPIException.TYPE_MISMATCH_ERR);
+        throw new WebAPIException(WebAPIException.TYPE_MISMATCH_ERR);
     }
 
     var self = this;
-    bridge.async({
-        cmd: 'MessageService_sendMessage',
-        args: {
-            message: args.message,
-            simIndex: args.simIndex || 1,
-            serviceId: self.id
-        }
-    }).then({
-        success: function (data) {
-            var message = data.message;
-            if (message) {
-                var body = message.body;
-                if (body) {
-                    updateInternal_(args.message.body, body)
-                    delete message.body;
-                }
-                updateInternal_(args.message, message);
-            }
 
-            if (args.successCallback) {
-                args.successCallback.call(null, data.recipients);
-            }
-        },
-        error: function (e) {
-            if (args.errorCallback) {
-                args.errorCallback.call(
-                    null,
-                    new WebAPIException(e.error)
-                )
+    var callArgs = {
+        message: args.message,
+        simIndex: args.simIndex || 1,
+        serviceId: self.id
+    };
+    var callback = function(result) {
+      if (native.isFailure(result)) {
+        native.callIfPossible(args.errorCallback, native.getErrorObject(result));
+      } else {
+        var data = native.getResultObject(result);
+        var message = data.message;
+        if (message) {
+            var body = message.body;
+            if (body) {
+                updateInternal_(args.message.body, body)
+                delete message.body;
             }
+            updateInternal_(args.message, message);
         }
-    });
+        native.callIfPossible(args.successCallback, data.recipients);
+      }
+    };
+    var result = native.call('MessageService_sendMessage', callArgs, callback);
+    if (native.isFailure(result)) {
+      throw native.getErrorObject(result);
+    }
 };
 
 MessageService.prototype.loadMessageBody = function () {
-    xwalk.utils.checkPrivilegeAccess(xwalk.utils.privilege.MESSAGING_WRITE);
-
     var args = validator_.validateArgs(arguments, [
         {name: 'message', type: types_.PLATFORM_OBJECT, values: tizen.Message},
         {name: 'successCallback', type: types_.FUNCTION},
@@ -769,42 +756,38 @@ MessageService.prototype.loadMessageBody = function () {
     ]);
 
     if (args.message.type != this.type) {
-        throw new tizen.WebAPIException(tizen.WebAPIException.TYPE_MISMATCH_ERR);
+        throw new WebAPIException(WebAPIException.TYPE_MISMATCH_ERR);
     }
 
     var self = this;
 
-    bridge.async({
-        cmd: 'MessageService_loadMessageBody',
-        args: {
-            message: args.message,
-            serviceId: self.id
-        }
-    }).then({
-        success: function (data) {
-            var body = data.messageBody;
-            if (body) {
-                updateInternal_(args.message.body, body)
-            }
+    var callArgs = {
+        message: args.message,
+        serviceId: self.id
+    };
 
-            args.successCallback.call(
-                null,
-                args.message
-            );
-        },
-        error: function (e) {
-            if (args.errorCallback) {
-                args.errorCallback.call(
-                    null,
-                    new WebAPIException(e.error)
-                )
-            }
+    var callback = function(result) {
+      if (native.isFailure(result)) {
+        native.callIfPossible(args.errorCallback, native.getErrorObject(result));
+      } else {
+        var data = native.getResultObject(result);
+        var body = data.messageBody;
+        if (body) {
+          updateInternal_(args.message.body, body)
         }
-    });
+
+        args.successCallback(args.message);
+      }
+    };
+
+    var result = native.call('MessageService_loadMessageBody', callArgs, callback);
+
+    if (native.isFailure(result)) {
+      throw native.getErrorObject(result);
+    }
+
 };
 MessageService.prototype.loadMessageAttachment = function () {
-    xwalk.utils.checkPrivilegeAccess(xwalk.utils.privilege.MESSAGING_WRITE);
-
     var args = validator_.validateArgs(arguments, [
         {name: 'attachment', type: types_.PLATFORM_OBJECT, values: MessageAttachment},
         {name: 'successCallback', type: types_.FUNCTION},
@@ -818,43 +801,34 @@ MessageService.prototype.loadMessageAttachment = function () {
         messageAttachmentsLoaded[args.attachment.id] = true;
     }
 
-    bridge.async({
-        cmd: 'MessageService_loadMessageAttachment',
-        args: {
-            attachment: args.attachment,
-            serviceId: self.id
-        }
-    }).then({
-        success: function (data) {
-            if (args.successCallback) {
-                var messageAttachment = data.messageAttachment;
-                if (messageAttachment) {
-                    updateInternal_(args.attachment, messageAttachment);
-                }
+    var callArgs = {
+        attachment: args.attachment,
+        serviceId: self.id
+    };
 
-                args.successCallback.call(
-                    null,
-                    args.attachment
-                );
-            }
-        },
-        error: function (e) {
-            if (firstCall) {
-                messageAttachmentsLoaded[args.attachment.id] = false;
-            }
-            if (args.errorCallback) {
-                args.errorCallback.call(
-                    null,
-                    new WebAPIException(e.error)
-                )
-            }
+    var callback = function(result) {
+      if (native.isFailure(result)) {
+        native.callIfPossible(args.errorCallback, native.getErrorObject(result));
+      } else {
+        var data = native.getResultObject(result);
+        var messageAttachment = data.messageAttachment;
+        if (messageAttachment) {
+          updateInternal_(args.attachment, messageAttachment);
         }
-    });
+
+        args.successCallback(args.attachment);
+      }
+    };
+
+    var result = native.call('MessageService_loadMessageAttachment', callArgs, callback);
+
+    if (native.isFailure(result)) {
+      throw native.getErrorObject(result);
+    }
+
 };
 
 MessageService.prototype.sync = function () {
-    xwalk.utils.checkPrivilegeAccess(xwalk.utils.privilege.MESSAGING_WRITE);
-
     var args = validator_.validateArgs(arguments, [
         {name: 'successCallback', type: types_.FUNCTION, optional: true, nullable: true},
         {name: 'errorCallback', type: types_.FUNCTION, optional: true, nullable: true},
@@ -862,37 +836,30 @@ MessageService.prototype.sync = function () {
     ]);
 
     var self = this;
-    var cid = bridge.listener({
-        success: function () {
-            if (args.successCallback) {
-                args.successCallback.call(null);
-            }
-        },
-        error: function (e) {
-            if (args.errorCallback) {
-                args.errorCallback.call(
-                    null,
-                    new WebAPIException(e.error)
-                )
-            }
-        }
-    });
 
-    var result = bridge.sync({
-        cmd: 'MessageService_sync',
-        cid: cid,
-        args: {
-            id: self.id,
-            limit: args.limit || null
-        }
-    });
+    var callArgs = {
+        id: self.id,
+        limit: args.limit || null
+    };
 
-    return result;
+    var callback = function(result) {
+      if (native.isFailure(result)) {
+        native.callIfPossible(args.errorCallback, native.getErrorObject(result));
+      } else {
+        native.callIfPossible(args.successCallback);
+      }
+    };
+
+    var result = native.call('MessageService_sync', callArgs, callback);
+
+    if (native.isFailure(result)) {
+      throw native.getErrorObject(result);
+    }
+
+    return native.getResultObject(result);
 };
 
 MessageService.prototype.syncFolder = function () {
-    xwalk.utils.checkPrivilegeAccess(xwalk.utils.privilege.MESSAGING_WRITE);
-
     var args = validator_.validateArgs(arguments, [
         {name: 'folder', type: types_.PLATFORM_OBJECT, values: MessageFolder},
         {name: 'successCallback', type: types_.FUNCTION, optional: true, nullable: true},
@@ -901,33 +868,29 @@ MessageService.prototype.syncFolder = function () {
     ]);
 
     var self = this;
-    var cid = bridge.listener({
-        success: function () {
-            if (args.successCallback) {
-                args.successCallback.call(null);
-            }
-        },
-        error: function (e) {
-            if (args.errorCallback) {
-                args.errorCallback.call(
-                    null,
-                    new WebAPIException(e.error)
-                )
-            }
-        }
-    });
 
-    var result = bridge.sync({
-        cmd: 'MessageService_syncFolder',
-        cid: cid,
-        args: {
-            id: self.id,
-            folder: args.folder,
-            limit: args.limit || null
-        }
-    });
+    var callArgs = {
+        id: self.id,
+        folder: args.folder,
+        limit: args.limit || null
+    };
+
+    var callback = function(result) {
+      if (native.isFailure(result)) {
+        native.callIfPossible(args.errorCallback, native.getErrorObject(result));
+      } else {
+        native.callIfPossible(args.successCallback);
+      }
+    };
+
+    var result = native.call('MessageService_syncFolder', callArgs, callback);
+
+    if (native.isFailure(result)) {
+      throw native.getErrorObject(result);
+    }
+
+    return native.getResultObject(result);
 
-    return result;
 };
 
 MessageService.prototype.stopSync = function () {
@@ -936,13 +899,14 @@ MessageService.prototype.stopSync = function () {
     ]);
 
     var self = this;
-    bridge.sync({
-        cmd: 'MessageService_stopSync',
-        args: {
-            id: self.id,
-            opId: args.opId
-        }
-    });
+    var callArgs = {
+        id: self.id,
+        opId: args.opId
+    };
+    var result = native.callSync('MessageService_stopSync', callArgs);
+    if (native.isFailure(result)) {
+        throw native.getErrorObject(result);
+    }
 };
 
 function MessageStorage(service) {
@@ -950,8 +914,6 @@ function MessageStorage(service) {
 };
 
 MessageStorage.prototype.addDraftMessage = function () {
-    xwalk.utils.checkPrivilegeAccess(xwalk.utils.privilege.MESSAGING_WRITE);
-
     var args = validator_.validateArgs(arguments, [
         {name: 'message', type: types_.PLATFORM_OBJECT, values: tizen.Message},
         {name: 'successCallback', type: types_.FUNCTION, optional: true, nullable: true},
@@ -959,52 +921,45 @@ MessageStorage.prototype.addDraftMessage = function () {
     ]);
 
     if (args.message.type != this.service.type) {
-        throw new tizen.WebAPIException(tizen.WebAPIException.TYPE_MISMATCH_ERR);
+        throw new WebAPIException(WebAPIException.TYPE_MISMATCH_ERR);
     }
 
     var self = this;
-    bridge.async({
-        cmd: 'MessageStorage_addDraftMessage',
-        args: {
-            message: args.message,
-            serviceId: self.service.id
-        }
-    }).then({
-        success: function (data) {
-            var message = data.message;
-            if (message) {
-                var body = message.body;
-                if (body) {
-                    updateInternal_(args.message.body, body)
-                    delete message.body;
-                }
-                var attachments = message.attachments;
-                if (attachments) {
-                    for (var i = 0; i < attachments.length; i++) {
-                        messageAttachmentsLoaded[attachments[i].id] = true;
-                    }
-                }
-                updateInternal_(args.message, message);
-            }
 
-            if (args.successCallback) {
-                args.successCallback.call(null);
+    var callArgs = {
+        message: args.message,
+        serviceId: self.service.id
+    };
+    var callback = function(result) {
+      if (native.isFailure(result)) {
+        native.callIfPossible(args.errorCallback, native.getErrorObject(result));
+      } else {
+        var data = native.getResultObject(result);
+        var message = data.message;
+        if (message) {
+            var body = message.body;
+            if (body) {
+                updateInternal_(args.message.body, body)
+                delete message.body;
             }
-        },
-        error: function (e) {
-            if (args.errorCallback) {
-                args.errorCallback.call(
-                    null,
-                    new WebAPIException(e.error)
-                )
+            var attachments = message.attachments;
+            if (attachments) {
+                for (var i = 0; i < attachments.length; i++) {
+                    messageAttachmentsLoaded[attachments[i].id] = true;
+                }
             }
+            updateInternal_(args.message, message);
         }
-    });
+        native.callIfPossible(args.successCallback, data.recipients);
+      }
+    };
+    var result = native.call('MessageStorage_addDraftMessage', callArgs, callback);
+    if (native.isFailure(result)) {
+      throw native.getErrorObject(result);
+    }
 };
 
 MessageStorage.prototype.findMessages = function () {
-    xwalk.utils.checkPrivilegeAccess(xwalk.utils.privilege.MESSAGING_READ);
-
     var args = validator_.validateArgs(arguments, [
         {
             name: 'filter',
@@ -1021,38 +976,33 @@ MessageStorage.prototype.findMessages = function () {
 
     var self = this;
 
-    bridge.async({
-        cmd: 'MessageStorage_findMessages',
-        args: {
-            filter: addTypeToFilter_(args.filter) || null,
-            sort: args.sort || null,
-            limit: args.limit || null,
-            offset: args.offset || null,
-            serviceId: self.service.id,
-            type: self.service.type
-        }
-    }).then({
-        success: function (data) {
-            var messages = [];
-            data.forEach(function (el) {
-                messages.push(new tizen.Message(el.type, new MessageInit_(el)));
-            });
-            args.successCallback.call(null, messages);
-        },
-        error: function (e) {
-            if (args.errorCallback) {
-                args.errorCallback.call(
-                    null,
-                    new WebAPIException(e.error)
-                )
-            }
-        }
-    });
+    var callArgs = {
+        filter: addTypeToFilter_(args.filter) || null,
+        sort: args.sort || null,
+        limit: args.limit || null,
+        offset: args.offset || null,
+        serviceId: self.service.id,
+        type: self.service.type
+    };
+    var callback = function(result) {
+      if (native.isFailure(result)) {
+        native.callIfPossible(args.errorCallback, native.getErrorObject(result));
+      } else {
+        var data = native.getResultObject(result);
+        var messages = [];
+        data.forEach(function (el) {
+            messages.push(new tizen.Message(el.type, new MessageInit_(el)));
+        });
+        native.callIfPossible(args.successCallback, messages);
+      }
+    };
+    var result = native.call('MessageStorage_findMessages', callArgs, callback);
+    if (native.isFailure(result)) {
+      throw native.getErrorObject(result);
+    }
 };
 
 MessageStorage.prototype.removeMessages = function () {
-    xwalk.utils.checkPrivilegeAccess(xwalk.utils.privilege.MESSAGING_WRITE);
-
     var args = validator_.validateArgs(arguments, [
         {name: 'messages', type: types_.ARRAY, values: Message},
         {name: 'successCallback', type: types_.FUNCTION, optional: true, nullable: true},
@@ -1063,37 +1013,29 @@ MessageStorage.prototype.removeMessages = function () {
 
     args.messages.forEach(function(msg) {
         if (msg.type != self.service.type) {
-            throw new tizen.WebAPIException(tizen.WebAPIException.TYPE_MISMATCH_ERR);
+            throw new WebAPIException(WebAPIException.TYPE_MISMATCH_ERR);
         }
     });
 
-    bridge.async({
-        cmd: 'MessageStorage_removeMessages',
-        args: {
-            messages: args.messages,
-            serviceId: self.service.id,
-            type: self.service.type
-        }
-    }).then({
-        success: function () {
-            if (args.successCallback) {
-                args.successCallback.call(null);
-            }
-        },
-        error: function (e) {
-            if (args.errorCallback) {
-                args.errorCallback.call(
-                    null,
-                    new WebAPIException(e.error)
-                )
-            }
-        }
-    });
+    var callArgs = {
+        messages: args.messages,
+        serviceId: self.service.id,
+        type: self.service.type
+    };
+    var callback = function(result) {
+      if (native.isFailure(result)) {
+        native.callIfPossible(args.errorCallback, native.getErrorObject(result));
+      } else {
+        native.callIfPossible(args.successCallback);
+      }
+    };
+    var result = native.call('MessageStorage_removeMessages', callArgs, callback);
+    if (native.isFailure(result)) {
+      throw native.getErrorObject(result);
+    }
 };
 
 MessageStorage.prototype.updateMessages = function () {
-    xwalk.utils.checkPrivilegeAccess(xwalk.utils.privilege.MESSAGING_WRITE);
-
     var args = validator_.validateArgs(arguments, [
         {name: 'messages', type: types_.ARRAY, values: Message},
         {name: 'successCallback', type: types_.FUNCTION, optional: true, nullable: true},
@@ -1104,59 +1046,52 @@ MessageStorage.prototype.updateMessages = function () {
 
     args.messages.forEach(function(msg) {
         if (msg.type != self.service.type) {
-            throw new tizen.WebAPIException(tizen.WebAPIException.TYPE_MISMATCH_ERR);
+            throw new WebAPIException(WebAPIException.TYPE_MISMATCH_ERR);
         }
     });
 
-    bridge.async({
-        cmd: 'MessageStorage_updateMessages',
-        args: {
-            messages: args.messages,
-            serviceId: self.service.id
-        }
-    }).then({
-        success: function (data) {
-            var originals = {},
-                    i = args.messages.length,
-                    m;
-            while (i--) {
-                m = args.messages[i];
-                if (m.id) {
-                    originals[m.id] = m;
-                }
-            }
-
-            i = data.length;
-            while (i--) {
-                m = data[i];
-                if (originals[m.oldId]) {
-                    var body = m.body;
-                    if (body) {
-                        updateInternal_(originals[m.oldId].body, body)
-                        delete m.body;
-                    }
-                    updateInternal_(originals[m.oldId], m);
-                }
-            }
-
-            if (args.successCallback) {
-                args.successCallback.call(null);
-            }
-        },
-        error: function (e) {
-            if (args.errorCallback) {
-                args.errorCallback.call(
-                    null,
-                    new WebAPIException(e.error)
-                )
+    var callArgs = {
+        messages: args.messages,
+        serviceId: self.service.id
+    };
+    var callback = function(result) {
+      if (native.isFailure(result)) {
+        native.callIfPossible(args.errorCallback, native.getErrorObject(result));
+      } else {
+        var data = native.getResultObject(result);
+        var originals = {},
+        i = args.messages.length,
+        m;
+        while (i--) {
+          m = args.messages[i];
+          if (m.id) {
+            originals[m.id] = m;
+          }
+        }
+
+        i = data.length;
+        while (i--) {
+          m = data[i];
+          if (originals[m.oldId]) {
+            var body = m.body;
+            if (body) {
+              updateInternal_(originals[m.oldId].body, body)
+              delete m.body;
             }
+            updateInternal_(originals[m.oldId], m);
+          }
         }
-    });
+
+        native.callIfPossible(args.successCallback);
+      }
+    };
+    var result = native.call('MessageStorage_updateMessages', callArgs, callback);
+    if (native.isFailure(result)) {
+      throw native.getErrorObject(result);
+    }
 };
 
 MessageStorage.prototype.findConversations = function () {
-    xwalk.utils.checkPrivilegeAccess(xwalk.utils.privilege.MESSAGING_READ);
-
     var args = validator_.validateArgs(arguments, [
         {
             name: 'filter',
@@ -1173,37 +1108,32 @@ MessageStorage.prototype.findConversations = function () {
 
     var self = this;
 
-    bridge.async({
-        cmd: 'MessageStorage_findConversations',
-        args: {
-            filter: addTypeToFilter_(args.filter),
-            sort: args.sort || null,
-            limit: args.limit || null,
-            offset: args.offset || null,
-            serviceId: self.service.id
-        }
-    }).then({
-        success: function (data) {
-            var conversations = [];
-            data.forEach(function (el) {
-                conversations.push(new MessageConversation(el));
-            });
-            args.successCallback.call(null, conversations);
-        },
-        error: function (e) {
-            if (args.errorCallback) {
-                args.errorCallback.call(
-                    null,
-                    new WebAPIException(e.error)
-                )
-            }
-        }
-    });
+    var callArgs = {
+        filter: addTypeToFilter_(args.filter),
+        sort: args.sort || null,
+        limit: args.limit || null,
+        offset: args.offset || null,
+        serviceId: self.service.id
+    };
+    var callback = function(result) {
+      if (native.isFailure(result)) {
+        native.callIfPossible(args.errorCallback, native.getErrorObject(result));
+      } else {
+        var data = native.getResultObject(result);
+        var conversations = [];
+        data.forEach(function (el) {
+            conversations.push(new MessageConversation(el));
+        });
+        args.successCallback(conversations);
+      }
+    };
+    var result = native.call('MessageStorage_findConversations', callArgs, callback);
+    if (native.isFailure(result)) {
+      throw native.getErrorObject(result);
+    }
 };
 
 MessageStorage.prototype.removeConversations = function () {
-    xwalk.utils.checkPrivilegeAccess(xwalk.utils.privilege.MESSAGING_WRITE);
-
     var args = validator_.validateArgs(arguments, [
         {name: 'conversations', type: types_.ARRAY},
         {name: 'successCallback', type: types_.FUNCTION, optional: true, nullable: true},
@@ -1218,33 +1148,25 @@ MessageStorage.prototype.removeConversations = function () {
 
     var self = this;
 
-    bridge.async({
-        cmd: 'MessageStorage_removeConversations',
-        args: {
-            conversations: args.conversations,
-            serviceId: self.service.id,
-            type: self.service.type
-        }
-    }).then({
-        success: function () {
-            if (args.successCallback) {
-                args.successCallback.call(null);
-            }
-        },
-        error: function (e) {
-            if (args.errorCallback) {
-                args.errorCallback.call(
-                    null,
-                    new WebAPIException(e.error)
-                )
-            }
-        }
-    });
+    var callArgs = {
+        conversations: args.conversations,
+        serviceId: self.service.id,
+        type: self.service.type
+    };
+    var callback = function(result) {
+      if (native.isFailure(result)) {
+        native.callIfPossible(args.errorCallback, native.getErrorObject(result));
+      } else {
+        native.callIfPossible(args.successCallback);
+      }
+    };
+    var result = native.call('MessageStorage_removeConversations', callArgs, callback);
+    if (native.isFailure(result)) {
+      throw native.getErrorObject(result);
+    }
 };
 
 MessageStorage.prototype.findFolders = function () {
-    xwalk.utils.checkPrivilegeAccess(xwalk.utils.privilege.MESSAGING_READ);
-
     var args = validator_.validateArgs(arguments, [
         {
             name: 'filter',
@@ -1257,38 +1179,77 @@ MessageStorage.prototype.findFolders = function () {
 
     var self = this;
 
-    bridge.async({
-        cmd: 'MessageStorage_findFolders',
-        args: {
-            filter: addTypeToFilter_(args.filter),
-            sort: args.sort || null,
-            limit: args.limit || null,
-            offset: args.offset || null,
-            serviceId: self.service.id
-        }
-    }).then({
-        success: function (data) {
-            var folders = [];
-            data.forEach(function (el) {
-                folders.push(new MessageFolder(el));
-            });
-            args.successCallback.call(null, folders);
-        },
-        error: function (e) {
-            if (args.errorCallback) {
-                args.errorCallback.call(
-                    null,
-                    new WebAPIException(e.error)
-                )
-            }
-        }
+    var callArgs = {
+        filter: addTypeToFilter_(args.filter),
+        sort: args.sort || null,
+        limit: args.limit || null,
+        offset: args.offset || null,
+        serviceId: self.service.id
+    };
+    var callback = function(result) {
+      if (native.isFailure(result)) {
+        native.callIfPossible(args.errorCallback, native.getErrorObject(result));
+      } else {
+        var data = native.getResultObject(result);
+        var folders = [];
+        data.forEach(function (el) {
+            folders.push(new MessageFolder(el));
+        });
+        args.successCallback(folders);
+      }
+    };
+    var result = native.call('MessageStorage_findFolders', callArgs, callback);
+    if (native.isFailure(result)) {
+      throw native.getErrorObject(result);
+    }
+};
+
+function pushMessage(messages, el) {
+  messages.push(new tizen.Message(el.type, new MessageInit_(el)));
+};
+
+function pushConversation(conversations, el) {
+  conversations.push(new MessageConversation(el));
+};
+
+function pushFolder(folders, el) {
+  folders.push(new MessageFolder(el));
+};
+
+function getListenerFunction(listenerMap, pushMethod) {
+  return function(msg) {
+    var action = msg.action;
+    var data = native.getResultObject(msg);
+    var messages = [];
+    data.forEach(function (el) {
+      pushMethod(messages, el);
     });
+
+    for (var key in listenerMap) {
+      if (listenerMap.hasOwnProperty(key)) {
+        native.callIfPossible(listenerMap[key][action], messages);
+      }
+    }
+  }
 };
 
-MessageStorage.prototype.addMessagesChangeListener = function () {
-    xwalk.utils.checkPrivilegeAccess(xwalk.utils.privilege.MESSAGING_READ);
+var MESSAGES_CHANGE_LISTENER = 'MessagesChangeListener';
+var MessagesChangeListeners = {};
+native.addListener(MESSAGES_CHANGE_LISTENER,
+    getListenerFunction(MessagesChangeListeners, pushMessage));
 
-    var args = validator_.validateArgs(arguments, [
+var CONVERSATIONS_CHANGE_LISTENER = 'ConversationsChangeListener';
+var ConversationsChangeListeners = {};
+native.addListener(CONVERSATIONS_CHANGE_LISTENER,
+    getListenerFunction(ConversationsChangeListeners, pushConversation));
+
+var FOLDERS_CHANGE_LISTENER = 'FoldersChangeListener';
+var FoldersChangeListeners = {};
+native.addListener(FOLDERS_CHANGE_LISTENER,
+    getListenerFunction(FoldersChangeListeners, pushFolder));
+
+MessageStorage.prototype.addMessagesChangeListener = function () {
+     var args = validator_.validateArgs(arguments, [
         {name: 'messagesChangeCallback', type: types_.LISTENER,
                 values: ['messagesadded', 'messagesupdated', 'messagesremoved']},
         {
@@ -1302,52 +1263,21 @@ MessageStorage.prototype.addMessagesChangeListener = function () {
 
     var self = this;
 
-    var cid = bridge.listener({
-        messagesadded: function (data) {
-            if (args.messagesChangeCallback.messagesadded) {
-                var messages = [];
-                data.forEach(function (el) {
-                    messages.push(new tizen.Message(el.type, new MessageInit_(el)));
-                });
-                args.messagesChangeCallback.messagesadded.call(null, messages);
-            }
-        },
-        messagesupdated: function (data) {
-            if (args.messagesChangeCallback.messagesupdated) {
-                var messages = [];
-                data.forEach(function (el) {
-                    messages.push(new tizen.Message(el.type, new MessageInit_(el)));
-                });
-                args.messagesChangeCallback.messagesupdated.call(null, messages);
-            }
-        },
-        messagesremoved: function (data) {
-            if (args.messagesChangeCallback.messagesremoved) {
-                var messages = [];
-                data.forEach(function (el) {
-                    messages.push(new tizen.Message(el.type, new MessageInit_(el)));
-                });
-                args.messagesChangeCallback.messagesremoved.call(null, messages);
-            }
-        }
-    });
-
-    var result = bridge.sync({
-        cmd: 'MessageStorage_addMessagesChangeListener',
-        cid: cid,
-        args: {
-            filter: args.filter ? addTypeToFilter_(args.filter) : null,
-            serviceId: self.service.id
-        }
-    });
-
-    bridge.attach(cid, 'watchId', result);
-    return result;
+    var callArgs = {
+        filter: args.filter ? addTypeToFilter_(args.filter) : null,
+        serviceId: self.service.id
+    };
+    var result = native.callSync('MessageStorage_addMessagesChangeListener', callArgs);
+    if (native.isFailure(result)) {
+      throw native.getErrorObject(result);
+    } else {
+      var opId = native.getResultObject(result);
+      MessagesChangeListeners[opId] = args.messagesChangeCallback;
+      return opId;
+    }
 };
 
 MessageStorage.prototype.addConversationsChangeListener = function () {
-    xwalk.utils.checkPrivilegeAccess(xwalk.utils.privilege.MESSAGING_READ);
-
     var args = validator_.validateArgs(arguments, [
         {name: 'conversationsChangeCallback', type: types_.LISTENER,
                 values: ['conversationsadded', 'conversationsupdated', 'conversationsremoved']},
@@ -1362,52 +1292,21 @@ MessageStorage.prototype.addConversationsChangeListener = function () {
 
     var self = this;
 
-    var cid = bridge.listener({
-        conversationsadded: function (data) {
-            if (args.conversationsChangeCallback.conversationsadded) {
-                var conversations = [];
-                data.forEach(function (el) {
-                    conversations.push(new MessageConversation(el));
-                });
-                args.conversationsChangeCallback.conversationsadded.call(null, conversations);
-            }
-        },
-        conversationsupdated: function (data) {
-            if (args.conversationsChangeCallback.conversationsupdated) {
-                var conversations = [];
-                data.forEach(function (el) {
-                   conversations.push(new MessageConversation(el));
-                });
-                args.conversationsChangeCallback.conversationsupdated.call(null, conversations);
-            }
-        },
-        conversationsremoved: function (data) {
-            if (args.conversationsChangeCallback.conversationsremoved) {
-                var conversations = [];
-                data.forEach(function (el) {
-                    conversations.push(new MessageConversation(el));
-                });
-                args.conversationsChangeCallback.conversationsremoved.call(null, conversations);
-            }
-        }
-    });
-
-    var result = bridge.sync({
-        cmd: 'MessageStorage_addConversationsChangeListener',
-        cid: cid,
-        args: {
-            filter: args.filter ? addTypeToFilter_(args.filter) : null,
-            serviceId: self.service.id
-        }
-    });
-
-    bridge.attach(cid, 'watchId', result);
-    return result;
+    var callArgs = {
+        filter: args.filter ? addTypeToFilter_(args.filter) : null,
+        serviceId: self.service.id
+    };
+    var result = native.callSync('MessageStorage_addConversationsChangeListener', callArgs);
+    if (native.isFailure(result)) {
+      throw native.getErrorObject(result);
+    } else {
+      var opId = native.getResultObject(result);
+      ConversationsChangeListeners[opId] = args.conversationsChangeCallback;
+      return opId;
+    }
 };
 
 MessageStorage.prototype.addFoldersChangeListener = function () {
-    xwalk.utils.checkPrivilegeAccess(xwalk.utils.privilege.MESSAGING_READ);
-
     var args = validator_.validateArgs(arguments, [
         {name: 'foldersChangeCallback', type: types_.LISTENER,
                 values: ['foldersadded', 'foldersupdated', 'foldersremoved']},
@@ -1422,70 +1321,43 @@ MessageStorage.prototype.addFoldersChangeListener = function () {
 
     var self = this;
 
-    var cid = bridge.listener({
-        foldersadded: function (data) {
-            if (args.foldersChangeCallback.foldersadded) {
-                var folders = [];
-                data.forEach(function (el) {
-                    folders.push(new MessageFolder(el));
-                });
-                args.foldersChangeCallback.foldersadded.call(null, folders);
-            }
-        },
-        foldersupdated: function (data) {
-            if (args.foldersChangeCallback.foldersupdated) {
-                var folders = [];
-                data.forEach(function (el) {
-                    folders.push(new MessageFolder(el));
-                });
-                args.foldersChangeCallback.foldersupdated.call(null, folders);
-            }
-        },
-        foldersremoved: function (data) {
-            if (args.foldersChangeCallback.foldersremoved) {
-                var folders = [];
-                data.forEach(function (el) {
-                    folders.push(new MessageFolder(el));
-                });
-                args.foldersChangeCallback.foldersremoved.call(null, folders);
-            }
-        }
-    });
-
-    var result = bridge.sync({
-        cmd: 'MessageStorage_addFoldersChangeListener',
-        cid: cid,
-        args: {
-            filter: args.filter ? addTypeToFilter_(args.filter) : null,
-            serviceId: self.service.id
-        }
-    });
-
-    bridge.attach(cid, 'watchId', result);
-    return result;
+    var callArgs = {
+        filter: args.filter ? addTypeToFilter_(args.filter) : null,
+        serviceId: self.service.id
+    };
+    var result = native.callSync('MessageStorage_addFoldersChangeListener', callArgs);
+    if (native.isFailure(result)) {
+      throw native.getErrorObject(result);
+    } else {
+      var opId = native.getResultObject(result);
+      FoldersChangeListeners[opId] = args.foldersChangeCallback;
+      return opId;
+    }
 };
 
 MessageStorage.prototype.removeChangeListener = function () {
-    xwalk.utils.checkPrivilegeAccess(xwalk.utils.privilege.MESSAGING_READ);
-
     var args = validator_.validateArgs(arguments, [
         {name: 'watchId', type: types_.LONG}
     ]);
 
     var self = this;
 
-    var result = bridge.sync({
-        cmd: 'MessageStorage_removeChangeListener',
-        args: {
-            watchId: args.watchId,
-            serviceId: self.service.id
-        }
-    });
-
-    bridge.find('watchId', args.watchId).forEach(function (e) {
-        bridge.remove(e.id);
-    });
-    return result;
+    var callArgs = {
+        watchId: args.watchId,
+        serviceId: self.service.id
+    };
+    var result = native.callSync('MessageStorage_removeChangeListener', callArgs);
+    if (native.isFailure(result)) {
+      throw native.getErrorObject(result);
+    } else {
+      if (MessagesChangeListeners.hasOwnProperty(args.watchId)) {
+        delete MessagesChangeListeners[args.watchId];
+      } else if (ConversationsChangeListeners.hasOwnProperty(args.watchId)) {
+        delete ConversationsChangeListeners[args.watchId];
+      } else if (FoldersChangeListeners.hasOwnProperty(args.watchId)) {
+        delete FoldersChangeListeners[args.watchId];
+      }
+    }
 };
 
 function MessageConversation(data) {
index b8c7df4b9d43168693090311cab7f945896e2ad7..9d6b204878e05b58cfd66710c773682bb3bf2fc2 100755 (executable)
@@ -21,6 +21,7 @@
 #include <system_info.h>
 
 #include "common/logger.h"
+#include "common/tools.h"
 
 #include "MsgCommon/AbstractFilter.h"
 #include "messages_change_callback.h"
@@ -37,6 +38,7 @@
 #include "email_manager.h"
 
 using common::ErrorCode;
+using common::TypeMismatchException;
 using common::PlatformResult;
 
 namespace extension {
@@ -118,6 +120,10 @@ auto getServiceIdFromJSON = [](picojson::object& data) -> int {
     }
 };
 
+const std::string kPrivilegeMessagingRead  = "http://tizen.org/privilege/messaging.read";
+const std::string kPrivilegeMessagingWrite = "http://tizen.org/privilege/messaging.write";
+
+const long kDumbCallbackId= -1;
 }
 
 MessagingInstance::MessagingInstance():
@@ -128,7 +134,7 @@ MessagingInstance::MessagingInstance():
     using std::placeholders::_1;
     using std::placeholders::_2;
     #define REGISTER_ASYNC(c,x) \
-      RegisterHandler(c, std::bind(&MessagingInstance::x, this, _1, _2));
+      RegisterSyncHandler(c, std::bind(&MessagingInstance::x, this, _1, _2));
       REGISTER_ASYNC(FUN_GET_MESSAGE_SERVICES, GetMessageServices);
       REGISTER_ASYNC(FUN_MESSAGE_SERVICE_SEND_MESSAGE, MessageServiceSendMessage);
       REGISTER_ASYNC(FUN_MESSAGE_SERVICE_LOAD_MESSAGE_BODY, MessageServiceLoadMessageBody);
@@ -159,11 +165,8 @@ MessagingInstance::~MessagingInstance()
     LoggerD("Entered");
 }
 
-#define POST_AND_RETURN(ret, json, obj, action) \
-    picojson::object args; \
-    LogAndReportError(ret, &args); \
-    obj[JSON_DATA] = picojson::value(args); \
-    obj[JSON_ACTION] = picojson::value(action); \
+#define POST_AND_RETURN(ret, json, obj) \
+    LogAndReportError(ret, &obj); \
     queue_.addAndResolve( \
             obj.at(JSON_CALLBACK_ID).get<double>(), \
             PostPriority::HIGH, \
@@ -171,19 +174,21 @@ MessagingInstance::~MessagingInstance()
     ); \
     return;
 
+#define CHECK_EXIST(args, name, out) \
+    if (!args.contains(name)) {\
+      std::string message = std::string(name) + " is required argument";\
+      LogAndReportError(PlatformResult(ErrorCode::TYPE_MISMATCH_ERR, message), &out);\
+      return;\
+    }
+
 void MessagingInstance::GetMessageServices(const picojson::value& args,
                                            picojson::object& out)
 {
   LoggerD("Entered");
 
-  if (!args.contains(JSON_DATA) || !args.contains(JSON_CALLBACK_ID) ||
-      !args.get(JSON_CALLBACK_ID).is<double>()) {
-    LoggerE("json is incorrect - missing required member");
-    return;
-  }
+  CHECK_EXIST(args, JSON_CALLBACK_ID, out);
 
-  picojson::value data = args.get(JSON_DATA);
-  picojson::value serviceTag = data.get<picojson::object>().
+  picojson::value serviceTag = args.get<picojson::object>().
       at(GET_MESSAGE_SERVICES_ARGS_MESSAGE_SERVICE_TYPE);
   const double callbackId = args.get(JSON_CALLBACK_ID).get<double>();
   // above values should be validated in js
@@ -195,13 +200,10 @@ void MessagingInstance::MessageServiceSendMessage(const picojson::value& args,
 {
     LoggerD("Entered");
 
-    if (!args.contains(JSON_DATA) || !args.contains(JSON_CALLBACK_ID) ||
-        !args.get(JSON_CALLBACK_ID).is<double>()) {
-      LoggerE("json is incorrect - missing required member");
-      return;
-    }
+    CHECK_PRIVILEGE_ACCESS(kPrivilegeMessagingWrite, &out);
+    CHECK_EXIST(args, JSON_CALLBACK_ID, out);
 
-    picojson::object data = args.get(JSON_DATA).get<picojson::object>();
+    picojson::object data = args.get<picojson::object>();
     picojson::value v_message = data.at(SEND_MESSAGE_ARGS_MESSAGE);
     const double callbackId = args.get(JSON_CALLBACK_ID).get<double>();
 
@@ -212,7 +214,7 @@ void MessagingInstance::MessageServiceSendMessage(const picojson::value& args,
     std::shared_ptr<Message> message;
     PlatformResult ret = MessagingUtil::jsonToMessage(v_message, &message);
     if (ret.IsError()) {
-      POST_AND_RETURN(ret, json, obj, JSON_CALLBACK_ERROR)
+      POST_AND_RETURN(ret, json, obj)
     }
 
     MessageRecipientsCallbackData* callback = new MessageRecipientsCallbackData(queue_, callbackId);
@@ -233,7 +235,7 @@ void MessagingInstance::MessageServiceSendMessage(const picojson::value& args,
         delete callback;
         callback = nullptr;
         POST_AND_RETURN(PlatformResult(ErrorCode::UNKNOWN_ERR, "set sim index failed"),
-                        json, obj, JSON_CALLBACK_ERROR)
+                        json, obj)
       }
     } else {
       LoggerD("cell_support is false");
@@ -244,7 +246,7 @@ void MessagingInstance::MessageServiceSendMessage(const picojson::value& args,
 
     ret = service->sendMessage(callback);
     if (!ret) {
-      POST_AND_RETURN(ret, json, obj, JSON_CALLBACK_ERROR)
+      POST_AND_RETURN(ret, json, obj)
     }
 }
 
@@ -253,13 +255,10 @@ void MessagingInstance::MessageServiceLoadMessageBody(const picojson::value& arg
 {
     LoggerD("Entered");
 
-    if (!args.contains(JSON_DATA) || !args.contains(JSON_CALLBACK_ID) ||
-        !args.get(JSON_CALLBACK_ID).is<double>()) {
-      LoggerE("json is incorrect - missing required member");
-      return;
-    }
+    CHECK_PRIVILEGE_ACCESS(kPrivilegeMessagingWrite, &out);
+    CHECK_EXIST(args, JSON_CALLBACK_ID, out);
 
-    picojson::object data = args.get(JSON_DATA).get<picojson::object>();
+    picojson::object data = args.get<picojson::object>();
 
     picojson::value json_message = data.at(ADD_DRAFT_MESSAGE_ARGS_MESSAGE);
     const double callbackId = args.get(JSON_CALLBACK_ID).get<double>();
@@ -271,7 +270,7 @@ void MessagingInstance::MessageServiceLoadMessageBody(const picojson::value& arg
     std::shared_ptr<Message> message;
     PlatformResult ret = MessagingUtil::jsonToMessage(json_message, &message);
     if (ret.IsError()) {
-      POST_AND_RETURN(ret, json, obj, JSON_CALLBACK_ERROR)
+      POST_AND_RETURN(ret, json, obj)
     }
 
     MessageBodyCallbackData* callback = new MessageBodyCallbackData(queue_, callbackId);
@@ -282,7 +281,7 @@ void MessagingInstance::MessageServiceLoadMessageBody(const picojson::value& arg
     auto service = manager_.getMessageService(getServiceIdFromJSON(data));
     ret = service->loadMessageBody(callback);
     if (ret.IsError()) {
-      POST_AND_RETURN(ret, json, obj, JSON_CALLBACK_ERROR)
+      POST_AND_RETURN(ret, json, obj)
     }
 }
 
@@ -291,13 +290,10 @@ void MessagingInstance::MessageServiceLoadMessageAttachment(const picojson::valu
 {
     LoggerD("Entered");
 
-    if (!args.contains(JSON_DATA) || !args.contains(JSON_CALLBACK_ID) ||
-        !args.get(JSON_CALLBACK_ID).is<double>()) {
-      LoggerE("json is incorrect - missing required member");
-      return;
-    }
+    CHECK_PRIVILEGE_ACCESS(kPrivilegeMessagingWrite, &out);
+    CHECK_EXIST(args, JSON_CALLBACK_ID, out);
 
-    picojson::object data = args.get(JSON_DATA).get<picojson::object>();
+    picojson::object data = args.get<picojson::object>();
     picojson::value attachment = data.at(LOAD_MESSAGE_ATTACHMENT_ARGS_ATTACHMENT);
     const double callbackId = args.get(JSON_CALLBACK_ID).get<double>();
 
@@ -311,7 +307,7 @@ void MessagingInstance::MessageServiceLoadMessageAttachment(const picojson::valu
       auto json = std::shared_ptr<picojson::value>(new picojson::value(picojson::object()));
       picojson::object& obj = json->get<picojson::object>();
       obj[JSON_CALLBACK_ID] = picojson::value(callbackId);
-      POST_AND_RETURN(result, json, obj, JSON_CALLBACK_ERROR)
+      POST_AND_RETURN(result, json, obj)
     }
 }
 
@@ -320,13 +316,10 @@ void MessagingInstance::MessageServiceSync(const picojson::value& args,
 {
     LoggerD("Entered");
 
-    if (!args.contains(JSON_DATA) || !args.contains(JSON_CALLBACK_ID) ||
-        !args.get(JSON_CALLBACK_ID).is<double>()) {
-      LoggerE("json is incorrect - missing required member");
-      return;
-    }
+    CHECK_PRIVILEGE_ACCESS(kPrivilegeMessagingWrite, &out);
+    CHECK_EXIST(args, JSON_CALLBACK_ID, out);
 
-    picojson::object data = args.get(JSON_DATA).get<picojson::object>();
+    picojson::object data = args.get<picojson::object>();
     picojson::value v_id = data.at(SYNC_ARGS_ID);
     picojson::value v_limit = data.at(SYNC_ARGS_LIMIT);
     const double callbackId = args.get(JSON_CALLBACK_ID).get<double>();
@@ -365,13 +358,10 @@ void MessagingInstance::MessageServiceSyncFolder(const picojson::value& args,
 {
     LoggerD("Entered");
 
-    if (!args.contains(JSON_DATA) || !args.contains(JSON_CALLBACK_ID) ||
-        !args.get(JSON_CALLBACK_ID).is<double>()) {
-      LoggerE("json is incorrect - missing required member");
-      return;
-    }
+    CHECK_PRIVILEGE_ACCESS(kPrivilegeMessagingWrite, &out);
+    CHECK_EXIST(args, JSON_CALLBACK_ID, out);
 
-    picojson::object data = args.get(JSON_DATA).get<picojson::object>();
+    picojson::object data = args.get<picojson::object>();
     picojson::value v_id = data.at(SYNC_FOLDER_ARGS_ID);
     picojson::value v_folder = data.at(SYNC_FOLDER_ARGS_FOLDER);
     picojson::value v_limit = data.at(SYNC_FOLDER_ARGS_LIMIT);
@@ -411,14 +401,9 @@ void MessagingInstance::MessageServiceStopSync(const picojson::value& args,
         picojson::object& out)
 {
     LoggerD("Entered");
+    CHECK_EXIST(args, JSON_CALLBACK_ID, out);
 
-    if (!args.contains(JSON_DATA) || !args.contains(JSON_CALLBACK_ID) ||
-        !args.get(JSON_CALLBACK_ID).is<double>()) {
-      LoggerE("json is incorrect - missing required member");
-      return;
-    }
-
-    picojson::object data = args.get(JSON_DATA).get<picojson::object>();
+    picojson::object data = args.get<picojson::object>();
 
     if (data.find(STOP_SYNC_ARGS_ID) != data.end()) {
         picojson::value v_id = data.at(STOP_SYNC_ARGS_ID);
@@ -456,13 +441,10 @@ void MessagingInstance::MessageStorageAddDraft(const picojson::value& args,
 {
     LoggerD("Entered");
 
-    if (!args.contains(JSON_DATA) || !args.contains(JSON_CALLBACK_ID) ||
-        !args.get(JSON_CALLBACK_ID).is<double>()) {
-      LoggerE("json is incorrect - missing required member");
-      return;
-    }
+    CHECK_PRIVILEGE_ACCESS(kPrivilegeMessagingWrite, &out);
+    CHECK_EXIST(args, JSON_CALLBACK_ID, out);
 
-    picojson::object data = args.get(JSON_DATA).get<picojson::object>();
+    picojson::object data = args.get<picojson::object>();
     picojson::value v_message = data.at(ADD_DRAFT_MESSAGE_ARGS_MESSAGE);
     const double callbackId = args.get(JSON_CALLBACK_ID).get<double>();
 
@@ -473,7 +455,7 @@ void MessagingInstance::MessageStorageAddDraft(const picojson::value& args,
     std::shared_ptr<Message> message;
     PlatformResult ret = MessagingUtil::jsonToMessage(v_message, &message);
     if (ret.IsError()) {
-      POST_AND_RETURN(ret, json, obj, JSON_CALLBACK_ERROR)
+      POST_AND_RETURN(ret, json, obj)
     }
 
     MessageCallbackUserData* callback = new MessageCallbackUserData(queue_, callbackId);
@@ -492,13 +474,10 @@ void MessagingInstance::MessageStorageFindMessages(const picojson::value& args,
 {
     LoggerD("Entered");
 
-    if (!args.contains(JSON_DATA) || !args.contains(JSON_CALLBACK_ID) ||
-        !args.get(JSON_CALLBACK_ID).is<double>()) {
-      LoggerE("json is incorrect - missing required member");
-      return;
-    }
+    CHECK_PRIVILEGE_ACCESS(kPrivilegeMessagingRead, &out);
+    CHECK_EXIST(args, JSON_CALLBACK_ID, out);
 
-    picojson::object data = args.get(JSON_DATA).get<picojson::object>();
+    picojson::object data = args.get<picojson::object>();
     const double callbackId = args.get(JSON_CALLBACK_ID).get<double>();
 
     auto json = std::shared_ptr<picojson::value>(new picojson::value(picojson::object()));
@@ -508,7 +487,7 @@ void MessagingInstance::MessageStorageFindMessages(const picojson::value& args,
     AbstractFilterPtr filter;
     PlatformResult ret = MessagingUtil::jsonToAbstractFilter(data, &filter);
     if (ret.IsError()) {
-      POST_AND_RETURN(ret, json, obj, JSON_CALLBACK_ERROR)
+      POST_AND_RETURN(ret, json, obj)
     }
     auto sortMode = MessagingUtil::jsonToSortMode(data);
 
@@ -537,13 +516,10 @@ void MessagingInstance::MessageStorageRemoveMessages(const picojson::value& args
 {
     LoggerD("Entered");
 
-    if (!args.contains(JSON_DATA) || !args.contains(JSON_CALLBACK_ID) ||
-        !args.get(JSON_CALLBACK_ID).is<double>()) {
-      LoggerE("json is incorrect - missing required member");
-      return;
-    }
+    CHECK_PRIVILEGE_ACCESS(kPrivilegeMessagingWrite, &out);
+    CHECK_EXIST(args, JSON_CALLBACK_ID, out);
 
-    picojson::object data = args.get(JSON_DATA).get<picojson::object>();
+    picojson::object data = args.get<picojson::object>();
     picojson::array messages = data.at(REMOVE_MESSAGES_ARGS_MESSAGES).get<picojson::array>();
     const double callbackId = args.get(JSON_CALLBACK_ID).get<double>();
 
@@ -570,13 +546,10 @@ void MessagingInstance::MessageStorageUpdateMessages(const picojson::value& args
 {
     LoggerD("Entered");
 
-    if (!args.contains(JSON_DATA) || !args.contains(JSON_CALLBACK_ID) ||
-        !args.get(JSON_CALLBACK_ID).is<double>()) {
-      LoggerE("json is incorrect - missing required member");
-      return;
-    }
+    CHECK_PRIVILEGE_ACCESS(kPrivilegeMessagingWrite, &out);
+    CHECK_EXIST(args, JSON_CALLBACK_ID, out);
 
-    picojson::object data = args.get(JSON_DATA).get<picojson::object>();
+    picojson::object data = args.get<picojson::object>();
     picojson::value pico_messages = data.at(UPDATE_MESSAGES_ARGS_MESSAGES);
     auto pico_array = pico_messages.get<picojson::array>();
     const double callbackId = args.get(JSON_CALLBACK_ID).get<double>();
@@ -602,13 +575,10 @@ void MessagingInstance::MessageStorageFindConversations(const picojson::value& a
 {
     LoggerD("Entered");
 
-    if (!args.contains(JSON_DATA) || !args.contains(JSON_CALLBACK_ID) ||
-        !args.get(JSON_CALLBACK_ID).is<double>()) {
-      LoggerE("json is incorrect - missing required member");
-      return;
-    }
+    CHECK_PRIVILEGE_ACCESS(kPrivilegeMessagingRead, &out);
+    CHECK_EXIST(args, JSON_CALLBACK_ID, out);
 
-    picojson::object data = args.get(JSON_DATA).get<picojson::object>();
+    picojson::object data = args.get<picojson::object>();
     const double callbackId = args.get(JSON_CALLBACK_ID).get<double>();
 
     auto json = std::shared_ptr<picojson::value>(new picojson::value(picojson::object()));
@@ -618,7 +588,7 @@ void MessagingInstance::MessageStorageFindConversations(const picojson::value& a
     AbstractFilterPtr filter;
     PlatformResult ret = MessagingUtil::jsonToAbstractFilter(data, &filter);
     if (ret.IsError()) {
-      POST_AND_RETURN(ret, json, obj, JSON_CALLBACK_ERROR)
+      POST_AND_RETURN(ret, json, obj)
     }
     auto sortMode = MessagingUtil::jsonToSortMode(data);
     long limit = static_cast<long>
@@ -645,13 +615,10 @@ void MessagingInstance::MessageStorageRemoveConversations(const picojson::value&
 {
     LoggerD("Entered");
 
-    if (!args.contains(JSON_DATA) || !args.contains(JSON_CALLBACK_ID) ||
-        !args.get(JSON_CALLBACK_ID).is<double>()) {
-      LoggerE("json is incorrect - missing required member");
-      return;
-    }
+    CHECK_PRIVILEGE_ACCESS(kPrivilegeMessagingWrite, &out);
+    CHECK_EXIST(args, JSON_CALLBACK_ID, out);
 
-    picojson::object data = args.get(JSON_DATA).get<picojson::object>();
+    picojson::object data = args.get<picojson::object>();
     picojson::array conversations = data.at(REMOVE_CONVERSATIONS_ARGS_CONVERSATIONS).get<picojson::array>();
     const double callbackId = args.get(JSON_CALLBACK_ID).get<double>();
 
@@ -667,7 +634,7 @@ void MessagingInstance::MessageStorageRemoveConversations(const picojson::value&
       ret = MessagingUtil::jsonToMessageConversation(*it, &conversation);
       if (ret.IsError()) {
         delete callback;
-        POST_AND_RETURN(ret, json, obj, JSON_CALLBACK_ERROR)
+        POST_AND_RETURN(ret, json, obj)
       }
       callback->addConversation(conversation);
     }
@@ -683,13 +650,10 @@ void MessagingInstance::MessageStorageFindFolders(const picojson::value& args,
 {
     LoggerD("Entered");
 
-    if (!args.contains(JSON_DATA) || !args.contains(JSON_CALLBACK_ID) ||
-        !args.get(JSON_CALLBACK_ID).is<double>()) {
-      LoggerE("json is incorrect - missing required member");
-      return;
-    }
+    CHECK_PRIVILEGE_ACCESS(kPrivilegeMessagingRead, &out);
+    CHECK_EXIST(args, JSON_CALLBACK_ID, out);
 
-    picojson::object data = args.get(JSON_DATA).get<picojson::object>();
+    picojson::object data = args.get<picojson::object>();
     const double callbackId = args.get(JSON_CALLBACK_ID).get<double>();
 
     auto json = std::shared_ptr<picojson::value>(new picojson::value(picojson::object()));
@@ -699,7 +663,7 @@ void MessagingInstance::MessageStorageFindFolders(const picojson::value& args,
     AbstractFilterPtr filter;
     PlatformResult ret = MessagingUtil::jsonToAbstractFilter(data, &filter);
     if (ret.IsError()) {
-      POST_AND_RETURN(ret, json, obj, JSON_CALLBACK_ERROR)
+      POST_AND_RETURN(ret, json, obj)
     }
 
     FoldersCallbackData* callback = new FoldersCallbackData(queue_, callbackId);
@@ -715,23 +679,15 @@ void MessagingInstance::MessageStorageAddMessagesChangeListener(const picojson::
 {
     LoggerD("Entered");
 
-    if (!args.contains(JSON_DATA) || !args.contains(JSON_CALLBACK_ID) ||
-        !args.get(JSON_CALLBACK_ID).is<double>()) {
-      LoggerE("json is incorrect - missing required member");
-      return;
-    }
-
-    picojson::object data = args.get(JSON_DATA).get<picojson::object>();
-    const double callbackId = args.get(JSON_CALLBACK_ID).get<double>();
+    CHECK_PRIVILEGE_ACCESS(kPrivilegeMessagingRead, &out);
 
-    auto json = std::shared_ptr<picojson::value>(new picojson::value(picojson::object()));
-    picojson::object& obj = json->get<picojson::object>();
-    obj[JSON_CALLBACK_ID] = picojson::value(callbackId);
+    picojson::object data = args.get<picojson::object>();
 
     AbstractFilterPtr filter;
     PlatformResult ret = MessagingUtil::jsonToAbstractFilter(data, &filter);
     if (ret.IsError()) {
-      POST_AND_RETURN(ret, json, obj, JSON_CALLBACK_ERROR)
+      ReportError(ret, &out);
+      return;
     }
 
     int serviceId = getServiceIdFromJSON(data);
@@ -739,7 +695,7 @@ void MessagingInstance::MessageStorageAddMessagesChangeListener(const picojson::
     auto service = manager_.getMessageService(serviceId);
 
     std::shared_ptr<MessagesChangeCallback> callback(new MessagesChangeCallback(
-        static_cast<long>(callbackId), serviceId, service->getMsgServiceType(),queue_));
+        kDumbCallbackId, serviceId, service->getMsgServiceType(),queue_));
 
     callback->setFilter(filter);
 
@@ -754,23 +710,15 @@ void MessagingInstance::MessageStorageAddConversationsChangeListener(const picoj
 {
     LoggerD("Entered");
 
-    if (!args.contains(JSON_DATA) || !args.contains(JSON_CALLBACK_ID) ||
-        !args.get(JSON_CALLBACK_ID).is<double>()) {
-      LoggerE("json is incorrect - missing required member");
-      return;
-    }
+    CHECK_PRIVILEGE_ACCESS(kPrivilegeMessagingRead, &out);
 
-    picojson::object data = args.get(JSON_DATA).get<picojson::object>();
-    const double callbackId = args.get(JSON_CALLBACK_ID).get<double>();
-
-    auto json = std::shared_ptr<picojson::value>(new picojson::value(picojson::object()));
-    picojson::object& obj = json->get<picojson::object>();
-    obj[JSON_CALLBACK_ID] = picojson::value(callbackId);
+    picojson::object data = args.get<picojson::object>();
 
     AbstractFilterPtr filter;
     PlatformResult ret = MessagingUtil::jsonToAbstractFilter(data, &filter);
     if (ret.IsError()) {
-      POST_AND_RETURN(ret, json, obj, JSON_CALLBACK_ERROR)
+      ReportError(ret, &out);
+      return;
     }
 
     int serviceId = getServiceIdFromJSON(data);
@@ -778,7 +726,7 @@ void MessagingInstance::MessageStorageAddConversationsChangeListener(const picoj
     auto service = manager_.getMessageService(serviceId);
 
     std::shared_ptr<ConversationsChangeCallback> callback(new ConversationsChangeCallback(
-        static_cast<long>(callbackId), serviceId, service->getMsgServiceType(), queue_));
+        static_cast<long>(-1), serviceId, service->getMsgServiceType(), queue_));
 
     callback->setFilter(filter);
 
@@ -793,23 +741,15 @@ void MessagingInstance::MessageStorageAddFolderChangeListener(const picojson::va
 {
     LoggerD("Entered");
 
-    if (!args.contains(JSON_DATA) || !args.contains(JSON_CALLBACK_ID) ||
-        !args.get(JSON_CALLBACK_ID).is<double>()) {
-      LoggerE("json is incorrect - missing required member");
-      return;
-    }
+    CHECK_PRIVILEGE_ACCESS(kPrivilegeMessagingRead, &out);
 
-    picojson::object data = args.get(JSON_DATA).get<picojson::object>();
-    const double callbackId = args.get(JSON_CALLBACK_ID).get<double>();
-
-    auto json = std::shared_ptr<picojson::value>(new picojson::value(picojson::object()));
-    picojson::object& obj = json->get<picojson::object>();
-    obj[JSON_CALLBACK_ID] = picojson::value(callbackId);
+    picojson::object data = args.get<picojson::object>();
 
     AbstractFilterPtr filter;
     PlatformResult ret = MessagingUtil::jsonToAbstractFilter(data, &filter);
     if (ret.IsError()) {
-      POST_AND_RETURN(ret, json, obj, JSON_CALLBACK_ERROR)
+      ReportError(ret, &out);
+      return;
     }
 
     int serviceId = getServiceIdFromJSON(data);
@@ -817,7 +757,7 @@ void MessagingInstance::MessageStorageAddFolderChangeListener(const picojson::va
     auto service = manager_.getMessageService(serviceId);
 
     std::shared_ptr<FoldersChangeCallback> callback(new FoldersChangeCallback(
-        static_cast<long>(callbackId), serviceId, service->getMsgServiceType(), queue_));
+        static_cast<long>(-1), serviceId, service->getMsgServiceType(), queue_));
 
     callback->setFilter(filter);
 
@@ -832,12 +772,9 @@ void MessagingInstance::MessageStorageRemoveChangeListener(const picojson::value
 {
     LoggerD("Entered");
 
-    if (!args.contains(JSON_DATA)) {
-      LoggerE("json is incorrect - missing required member");
-      return;
-    }
+    CHECK_PRIVILEGE_ACCESS(kPrivilegeMessagingRead, &out);
 
-    picojson::object data = args.get(JSON_DATA).get<picojson::object>();
+    picojson::object data = args.get<picojson::object>();
     const long watchId = static_cast<long>(
             data.at(REMOVE_CHANGE_LISTENER_ARGS_WATCHID).get<double>());
 
@@ -852,13 +789,7 @@ void MessagingInstance::MessageGetMessageStatus(const picojson::value& args,
 {
     LoggerD("Entered");
 
-    if (!args.contains(JSON_DATA)) {
-      LoggerE("json is incorrect - missing required member");
-      ReportSuccess(picojson::value(""), out);
-      return;
-    }
-
-    picojson::object data = args.get(JSON_DATA).get<picojson::object>();
+    picojson::object data = args.get<picojson::object>();
     const int id = stoi(data.at("id").get<std::string>());
     const std::string& type = data.at("type").get<std::string>();
 
index f4bc602a3a787294b4f18d186ed2cb1bbcdd669a..a1e0e1b2c7920d7648fb6aa1d791839bc81a5f67 100755 (executable)
@@ -28,6 +28,7 @@
 #include "common/picojson.h"
 #include "common/platform_exception.h"
 #include "common/task-queue.h"
+#include "common/tools.h"
 
 #include "messaging_instance.h"
 #include "short_message_manager.h"
@@ -35,6 +36,8 @@
 
 using common::ErrorCode;
 using common::PlatformResult;
+using common::tools::ReportSuccess;
+using common::tools::ReportError;
 
 namespace extension {
 namespace messaging {
@@ -106,7 +109,8 @@ static void* getMsgServicesThread(const std::shared_ptr<MsgManagerCallbackData>&
   picojson::object& obj = response->get<picojson::object>();
   MessageType type = MessageType::UNDEFINED;
 
-  auto platform_result = MessagingUtil::stringToMessageType(response->get(JSON_DATA).get<std::string>(), &type);
+  auto platform_result = MessagingUtil::stringToMessageType(user_data->type, &type);
+  //after extraction of input data, remove it
 
   if (platform_result) {
     switch (type) {
@@ -127,8 +131,7 @@ static void* getMsgServicesThread(const std::shared_ptr<MsgManagerCallbackData>&
 
             picojson::array array;
             array.push_back(picojson::value(service->toPicoJS()));
-            obj[JSON_DATA] = picojson::value(array);
-            obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS);
+            ReportSuccess(picojson::value(array), obj);
 
             // service is stored, so it cannot be deleted
             service = nullptr;
@@ -153,8 +156,7 @@ static void* getMsgServicesThread(const std::shared_ptr<MsgManagerCallbackData>&
 
             picojson::array array;
             array.push_back(picojson::value(service->toPicoJS()));
-            obj[JSON_DATA] = picojson::value(array);
-            obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS);
+            ReportSuccess(picojson::value(array), obj);
 
             // service is stored, so it cannot be deleted
             service = nullptr;
@@ -221,8 +223,7 @@ static void* getMsgServicesThread(const std::shared_ptr<MsgManagerCallbackData>&
                               response.push_back(picojson::value(service->toPicoJS()));
                               email_services.insert(std::pair<int, MessageService*>(service->getMsgServiceId(), service));
                             });
-              obj[JSON_DATA] = picojson::value(response);
-              obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS);
+              ReportSuccess(picojson::value(response), obj);
             }
           }
         }
@@ -236,8 +237,7 @@ static void* getMsgServicesThread(const std::shared_ptr<MsgManagerCallbackData>&
 
   if (!platform_result) {
     LoggerE("Unknown error");
-    obj[JSON_DATA] = platform_result.ToJSON();
-    obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_ERROR);
+    ReportError(platform_result, &obj);
   }
 
   return nullptr;
@@ -250,9 +250,9 @@ void MessagingManager::getMessageServices(const std::string& type, double callba
     auto json = std::shared_ptr<picojson::value>(new picojson::value(picojson::object()));
     picojson::object& obj = json->get<picojson::object>();
     obj[JSON_CALLBACK_ID] = picojson::value(callbackId);
-    obj[JSON_DATA] = picojson::value(type);
 
     auto user_data = std::shared_ptr<MsgManagerCallbackData>(new MsgManagerCallbackData(instance_));
+    user_data->type = type;
     user_data->json = json;
     user_data->services_map = &m_email_services;
     user_data->sms_service = &m_sms_service;
index 4f26b62e8db0a1c552e9bbacf5d316092f167453..68e1ddb5a265a505ee5e3091c990b826b23932f3 100755 (executable)
@@ -32,6 +32,7 @@ class MessagingInstance;
 class MsgManagerCallbackData {
 public:
     explicit MsgManagerCallbackData(MessagingInstance& instance_);
+    std::string type;
     std::shared_ptr<picojson::value> json;
     std::map<int, MessageService*>* services_map;
     std::pair<int, MessageService*>* sms_service;
index ebe68bf4a5df85402e147befa590917141d2e746..31e037dd501eb5ecd3c5016bdf508ab80a35343c 100755 (executable)
@@ -45,20 +45,14 @@ namespace extension {
 namespace messaging {
 using namespace common;
 
+const char* JSON_LISTENER_ID = "listenerId";
+const char* JSON_CALLBACK_ID = "callbackId";
 const char* JSON_ACTION = "action";
-const char* JSON_CALLBACK_ID = "cid";
-const char* JSON_CALLBACK_SUCCCESS = "success";
-const char* JSON_CALLBACK_ERROR = "error";
-const char* JSON_CALLBACK_PROGRESS = "progress";
-const char* JSON_CALLBACK_KEEP = "keep";
-const char* JSON_DATA = "args";
+const char* JSON_RESULT = "result";
 const char* JSON_DATA_MESSAGE = "message";
 const char* JSON_DATA_MESSAGE_BODY = "messageBody";
 const char* JSON_DATA_MESSAGE_ATTACHMENT = "messageAttachment";
 const char* JSON_DATA_RECIPIENTS = "recipients";
-const char* JSON_ERROR_MESSAGE = "message";
-const char* JSON_ERROR_NAME = "name";
-const char* JSON_ERROR_CODE = "code";
 
 const char* MESSAGE_ATTRIBUTE_ID = "id";
 const char* MESSAGE_ATTRIBUTE_OLD_ID = "oldId";
index cbd8bcd8e17373a761a0be94f7e67959513f64f7..136a5ebf53107a83268eda24593a99b71ce51d5f 100644 (file)
 namespace extension {
 namespace messaging {
 
-extern const char* JSON_ACTION;
+extern const char* JSON_LISTENER_ID;
 extern const char* JSON_CALLBACK_ID;
-extern const char* JSON_CALLBACK_SUCCCESS;
-extern const char* JSON_CALLBACK_ERROR;
-extern const char* JSON_CALLBACK_PROGRESS;
-extern const char* JSON_CALLBACK_KEEP;
-extern const char* JSON_DATA;
+extern const char* JSON_ACTION;
+extern const char* JSON_RESULT;
 extern const char* JSON_DATA_MESSAGE;
 extern const char* JSON_DATA_MESSAGE_BODY;
 extern const char* JSON_DATA_MESSAGE_ATTACHMENT;
 extern const char* JSON_DATA_RECIPIENTS;
-extern const char* JSON_ERROR_MESSAGE;
-extern const char* JSON_ERROR_NAME;
-extern const char* JSON_ERROR_CODE;
 
 extern const char* MESSAGE_ATTRIBUTE_ID;
 extern const char* MESSAGE_ATTRIBUTE_CONVERSATION_ID;