From: Piotr Kosko
Date: Wed, 4 Nov 2015 13:30:17 +0000 (+0100)
Subject: Revert "[Messaging] Privilege checks moved to JS."
X-Git-Tag: submit/tizen_mobile/20151215.080542^2~6^2
X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f5c50c5c90b1fb509f6696860e092ab19ff1ef74;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git
Revert "[Messaging] Privilege checks moved to JS."
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
---
diff --git a/src/messaging/callback_user_data.cc b/src/messaging/callback_user_data.cc
index ae1cf0b3..4816ce6c 100755
--- a/src/messaging/callback_user_data.cc
+++ b/src/messaging/callback_user_data.cc
@@ -17,6 +17,10 @@
#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(cid_)));
- AddJsonData(JSON_CALLBACK_KEEP, picojson::value(keep));
+ if (!keep) {
+ // this is not listener, add callbackId
+ AddJsonData(JSON_CALLBACK_ID, picojson::value(static_cast(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() {
diff --git a/src/messaging/callback_user_data.h b/src/messaging/callback_user_data.h
index 5b62e2be..6f72c83e 100755
--- a/src/messaging/callback_user_data.h
+++ b/src/messaging/callback_user_data.h
@@ -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();
diff --git a/src/messaging/conversations_change_callback.cc b/src/messaging/conversations_change_callback.cc
index d98308f4..95d75f31 100755
--- a/src/messaging/conversations_change_callback.cc
+++ b/src/messaging/conversations_change_callback.cc
@@ -50,6 +50,7 @@ ConversationsChangeCallback::ConversationsChangeCallback(
m_is_act(true)
{
LoggerD("Entered");
+ m_callback_data.SetListenerId("ConversationsChangeListener");
}
ConversationsChangeCallback::~ConversationsChangeCallback()
diff --git a/src/messaging/folders_change_callback.cc b/src/messaging/folders_change_callback.cc
index 1998e552..adb821ea 100755
--- a/src/messaging/folders_change_callback.cc
+++ b/src/messaging/folders_change_callback.cc
@@ -38,6 +38,7 @@ FoldersChangeCallback::FoldersChangeCallback(
m_is_act(true)
{
LoggerD("Entered");
+ m_callback_data.SetListenerId("FoldersChangeListener");
}
FoldersChangeCallback::~FoldersChangeCallback()
diff --git a/src/messaging/messages_change_callback.cc b/src/messaging/messages_change_callback.cc
index e2fcdb6e..c95e22e7 100755
--- a/src/messaging/messages_change_callback.cc
+++ b/src/messaging/messages_change_callback.cc
@@ -59,6 +59,7 @@ MessagesChangeCallback::MessagesChangeCallback(
m_is_act(true)
{
LoggerD("Entered");
+ m_callback_data.SetListenerId("MessagesChangeListener");
}
MessagesChangeCallback::~MessagesChangeCallback()
diff --git a/src/messaging/messaging_api.js b/src/messaging/messaging_api.js
index 984e60ee..dbae2b48 100755
--- a/src/messaging/messaging_api.js
+++ b/src/messaging/messaging_api.js
@@ -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) {
diff --git a/src/messaging/messaging_instance.cc b/src/messaging/messaging_instance.cc
index b8c7df4b..9d6b2048 100755
--- a/src/messaging/messaging_instance.cc
+++ b/src/messaging/messaging_instance.cc
@@ -21,6 +21,7 @@
#include
#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(), \
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()) {
- 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::value serviceTag = args.get().
at(GET_MESSAGE_SERVICES_ARGS_MESSAGE_SERVICE_TYPE);
const double callbackId = args.get(JSON_CALLBACK_ID).get();
// 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()) {
- 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 data = args.get();
picojson::value v_message = data.at(SEND_MESSAGE_ARGS_MESSAGE);
const double callbackId = args.get(JSON_CALLBACK_ID).get();
@@ -212,7 +214,7 @@ void MessagingInstance::MessageServiceSendMessage(const picojson::value& args,
std::shared_ptr 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()) {
- 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 data = args.get();
picojson::value json_message = data.at(ADD_DRAFT_MESSAGE_ARGS_MESSAGE);
const double callbackId = args.get(JSON_CALLBACK_ID).get();
@@ -271,7 +270,7 @@ void MessagingInstance::MessageServiceLoadMessageBody(const picojson::value& arg
std::shared_ptr 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()) {
- 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 data = args.get();
picojson::value attachment = data.at(LOAD_MESSAGE_ATTACHMENT_ARGS_ATTACHMENT);
const double callbackId = args.get(JSON_CALLBACK_ID).get();
@@ -311,7 +307,7 @@ void MessagingInstance::MessageServiceLoadMessageAttachment(const picojson::valu
auto json = std::shared_ptr(new picojson::value(picojson::object()));
picojson::object& obj = json->get();
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()) {
- 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 data = args.get();
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();
@@ -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()) {
- 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 data = args.get();
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()) {
- LoggerE("json is incorrect - missing required member");
- return;
- }
-
- picojson::object data = args.get(JSON_DATA).get();
+ picojson::object data = args.get();
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()) {
- 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 data = args.get();
picojson::value v_message = data.at(ADD_DRAFT_MESSAGE_ARGS_MESSAGE);
const double callbackId = args.get(JSON_CALLBACK_ID).get();
@@ -473,7 +455,7 @@ void MessagingInstance::MessageStorageAddDraft(const picojson::value& args,
std::shared_ptr 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()) {
- 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 data = args.get();
const double callbackId = args.get(JSON_CALLBACK_ID).get();
auto json = std::shared_ptr(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()) {
- 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 data = args.get();
picojson::array messages = data.at(REMOVE_MESSAGES_ARGS_MESSAGES).get();
const double callbackId = args.get(JSON_CALLBACK_ID).get();
@@ -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()) {
- 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 data = args.get();
picojson::value pico_messages = data.at(UPDATE_MESSAGES_ARGS_MESSAGES);
auto pico_array = pico_messages.get();
const double callbackId = args.get(JSON_CALLBACK_ID).get();
@@ -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()) {
- 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 data = args.get();
const double callbackId = args.get(JSON_CALLBACK_ID).get();
auto json = std::shared_ptr(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
@@ -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()) {
- 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 data = args.get();
picojson::array conversations = data.at(REMOVE_CONVERSATIONS_ARGS_CONVERSATIONS).get();
const double callbackId = args.get(JSON_CALLBACK_ID).get();
@@ -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()) {
- 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 data = args.get();
const double callbackId = args.get(JSON_CALLBACK_ID).get();
auto json = std::shared_ptr(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()) {
- LoggerE("json is incorrect - missing required member");
- return;
- }
-
- picojson::object data = args.get(JSON_DATA).get();
- const double callbackId = args.get(JSON_CALLBACK_ID).get();
+ CHECK_PRIVILEGE_ACCESS(kPrivilegeMessagingRead, &out);
- auto json = std::shared_ptr(new picojson::value(picojson::object()));
- picojson::object& obj = json->get();
- obj[JSON_CALLBACK_ID] = picojson::value(callbackId);
+ picojson::object data = args.get();
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 callback(new MessagesChangeCallback(
- static_cast(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()) {
- LoggerE("json is incorrect - missing required member");
- return;
- }
+ CHECK_PRIVILEGE_ACCESS(kPrivilegeMessagingRead, &out);
- picojson::object data = args.get(JSON_DATA).get();
- const double callbackId = args.get(JSON_CALLBACK_ID).get();
-
- auto json = std::shared_ptr(new picojson::value(picojson::object()));
- picojson::object& obj = json->get();
- obj[JSON_CALLBACK_ID] = picojson::value(callbackId);
+ picojson::object data = args.get();
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 callback(new ConversationsChangeCallback(
- static_cast(callbackId), serviceId, service->getMsgServiceType(), queue_));
+ static_cast(-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()) {
- LoggerE("json is incorrect - missing required member");
- return;
- }
+ CHECK_PRIVILEGE_ACCESS(kPrivilegeMessagingRead, &out);
- picojson::object data = args.get(JSON_DATA).get();
- const double callbackId = args.get(JSON_CALLBACK_ID).get();
-
- auto json = std::shared_ptr(new picojson::value(picojson::object()));
- picojson::object& obj = json->get();
- obj[JSON_CALLBACK_ID] = picojson::value(callbackId);
+ picojson::object data = args.get();
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 callback(new FoldersChangeCallback(
- static_cast(callbackId), serviceId, service->getMsgServiceType(), queue_));
+ static_cast(-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 data = args.get();
const long watchId = static_cast(
data.at(REMOVE_CHANGE_LISTENER_ARGS_WATCHID).get());
@@ -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 data = args.get();
const int id = stoi(data.at("id").get());
const std::string& type = data.at("type").get();
diff --git a/src/messaging/messaging_manager.cc b/src/messaging/messaging_manager.cc
index f4bc602a..a1e0e1b2 100755
--- a/src/messaging/messaging_manager.cc
+++ b/src/messaging/messaging_manager.cc
@@ -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&
picojson::object& obj = response->get();
MessageType type = MessageType::UNDEFINED;
- auto platform_result = MessagingUtil::stringToMessageType(response->get(JSON_DATA).get(), &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&
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&
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&
response.push_back(picojson::value(service->toPicoJS()));
email_services.insert(std::pair(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&
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(new picojson::value(picojson::object()));
picojson::object& obj = json->get();
obj[JSON_CALLBACK_ID] = picojson::value(callbackId);
- obj[JSON_DATA] = picojson::value(type);
auto user_data = std::shared_ptr(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;
diff --git a/src/messaging/messaging_manager.h b/src/messaging/messaging_manager.h
index 4f26b62e..68e1ddb5 100755
--- a/src/messaging/messaging_manager.h
+++ b/src/messaging/messaging_manager.h
@@ -32,6 +32,7 @@ class MessagingInstance;
class MsgManagerCallbackData {
public:
explicit MsgManagerCallbackData(MessagingInstance& instance_);
+ std::string type;
std::shared_ptr json;
std::map* services_map;
std::pair* sms_service;
diff --git a/src/messaging/messaging_util.cc b/src/messaging/messaging_util.cc
index ebe68bf4..31e037dd 100755
--- a/src/messaging/messaging_util.cc
+++ b/src/messaging/messaging_util.cc
@@ -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";
diff --git a/src/messaging/messaging_util.h b/src/messaging/messaging_util.h
index cbd8bcd8..136a5ebf 100644
--- a/src/messaging/messaging_util.h
+++ b/src/messaging/messaging_util.h
@@ -38,20 +38,14 @@
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;