mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 810099 - B2G MMS: support onretrieving event. r=vyang
This commit is contained in:
parent
06935a6eed
commit
d75d680f5b
@ -762,6 +762,7 @@ GK_ATOM(onpopupshowing, "onpopupshowing")
|
||||
GK_ATOM(onpopupshown, "onpopupshown")
|
||||
GK_ATOM(onreadystatechange, "onreadystatechange")
|
||||
GK_ATOM(onreceived, "onreceived")
|
||||
GK_ATOM(onretrieving, "onretrieving")
|
||||
GK_ATOM(onRequest, "onRequest")
|
||||
GK_ATOM(onreset, "onreset")
|
||||
GK_ATOM(onresuming, "onresuming")
|
||||
|
@ -8,6 +8,7 @@ namespace dom {
|
||||
namespace mobilemessage {
|
||||
|
||||
const char* kSmsReceivedObserverTopic = "sms-received";
|
||||
const char* kSmsRetrievingObserverTopic = "sms-retrieving";
|
||||
const char* kSmsSendingObserverTopic = "sms-sending";
|
||||
const char* kSmsSentObserverTopic = "sms-sent";
|
||||
const char* kSmsFailedObserverTopic = "sms-failed";
|
||||
|
@ -12,6 +12,7 @@ namespace mobilemessage {
|
||||
|
||||
// Defined in the .cpp.
|
||||
extern const char* kSmsReceivedObserverTopic;
|
||||
extern const char* kSmsRetrievingObserverTopic;
|
||||
extern const char* kSmsSendingObserverTopic;
|
||||
extern const char* kSmsSentObserverTopic;
|
||||
extern const char* kSmsFailedObserverTopic;
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "DOMCursor.h"
|
||||
|
||||
#define RECEIVED_EVENT_NAME NS_LITERAL_STRING("received")
|
||||
#define RETRIEVING_EVENT_NAME NS_LITERAL_STRING("retrieving")
|
||||
#define SENDING_EVENT_NAME NS_LITERAL_STRING("sending")
|
||||
#define SENT_EVENT_NAME NS_LITERAL_STRING("sent")
|
||||
#define FAILED_EVENT_NAME NS_LITERAL_STRING("failed")
|
||||
@ -53,6 +54,7 @@ NS_IMPL_ADDREF_INHERITED(MobileMessageManager, nsDOMEventTargetHelper)
|
||||
NS_IMPL_RELEASE_INHERITED(MobileMessageManager, nsDOMEventTargetHelper)
|
||||
|
||||
NS_IMPL_EVENT_HANDLER(MobileMessageManager, received)
|
||||
NS_IMPL_EVENT_HANDLER(MobileMessageManager, retrieving)
|
||||
NS_IMPL_EVENT_HANDLER(MobileMessageManager, sending)
|
||||
NS_IMPL_EVENT_HANDLER(MobileMessageManager, sent)
|
||||
NS_IMPL_EVENT_HANDLER(MobileMessageManager, failed)
|
||||
@ -71,6 +73,7 @@ MobileMessageManager::Init(nsPIDOMWindow *aWindow)
|
||||
}
|
||||
|
||||
obs->AddObserver(this, kSmsReceivedObserverTopic, false);
|
||||
obs->AddObserver(this, kSmsRetrievingObserverTopic, false);
|
||||
obs->AddObserver(this, kSmsSendingObserverTopic, false);
|
||||
obs->AddObserver(this, kSmsSentObserverTopic, false);
|
||||
obs->AddObserver(this, kSmsFailedObserverTopic, false);
|
||||
@ -88,6 +91,7 @@ MobileMessageManager::Shutdown()
|
||||
}
|
||||
|
||||
obs->RemoveObserver(this, kSmsReceivedObserverTopic);
|
||||
obs->RemoveObserver(this, kSmsRetrievingObserverTopic);
|
||||
obs->RemoveObserver(this, kSmsSendingObserverTopic);
|
||||
obs->RemoveObserver(this, kSmsSentObserverTopic);
|
||||
obs->RemoveObserver(this, kSmsFailedObserverTopic);
|
||||
@ -433,6 +437,10 @@ MobileMessageManager::Observe(nsISupports* aSubject, const char* aTopic,
|
||||
return DispatchTrustedSmsEventToSelf(aTopic, RECEIVED_EVENT_NAME, aSubject);
|
||||
}
|
||||
|
||||
if (!strcmp(aTopic, kSmsRetrievingObserverTopic)) {
|
||||
return DispatchTrustedSmsEventToSelf(aTopic, RETRIEVING_EVENT_NAME, aSubject);
|
||||
}
|
||||
|
||||
if (!strcmp(aTopic, kSmsSendingObserverTopic)) {
|
||||
return DispatchTrustedSmsEventToSelf(aTopic, SENDING_EVENT_NAME, aSubject);
|
||||
}
|
||||
|
@ -88,6 +88,8 @@ sync protocol PSms {
|
||||
child:
|
||||
NotifyReceivedMessage(MobileMessageData aMessageData);
|
||||
|
||||
NotifyRetrievingMessage(MobileMessageData aMessageData);
|
||||
|
||||
NotifySendingMessage(MobileMessageData aMessageData);
|
||||
|
||||
NotifySentMessage(MobileMessageData aMessageData);
|
||||
|
@ -68,6 +68,13 @@ SmsChild::RecvNotifyReceivedMessage(const MobileMessageData& aData)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
SmsChild::RecvNotifyRetrievingMessage(const MobileMessageData& aData)
|
||||
{
|
||||
NotifyObserversWithMobileMessage(kSmsRetrievingObserverTopic, aData);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
SmsChild::RecvNotifySendingMessage(const MobileMessageData& aData)
|
||||
{
|
||||
|
@ -37,6 +37,9 @@ protected:
|
||||
virtual bool
|
||||
RecvNotifyReceivedMessage(const MobileMessageData& aMessage) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool
|
||||
RecvNotifyRetrievingMessage(const MobileMessageData& aMessage) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool
|
||||
RecvNotifySendingMessage(const MobileMessageData& aMessage) MOZ_OVERRIDE;
|
||||
|
||||
|
@ -145,6 +145,7 @@ SmsParent::SmsParent()
|
||||
}
|
||||
|
||||
obs->AddObserver(this, kSmsReceivedObserverTopic, false);
|
||||
obs->AddObserver(this, kSmsRetrievingObserverTopic, false);
|
||||
obs->AddObserver(this, kSmsSendingObserverTopic, false);
|
||||
obs->AddObserver(this, kSmsSentObserverTopic, false);
|
||||
obs->AddObserver(this, kSmsFailedObserverTopic, false);
|
||||
@ -161,6 +162,7 @@ SmsParent::ActorDestroy(ActorDestroyReason why)
|
||||
}
|
||||
|
||||
obs->RemoveObserver(this, kSmsReceivedObserverTopic);
|
||||
obs->RemoveObserver(this, kSmsRetrievingObserverTopic);
|
||||
obs->RemoveObserver(this, kSmsSendingObserverTopic);
|
||||
obs->RemoveObserver(this, kSmsSentObserverTopic);
|
||||
obs->RemoveObserver(this, kSmsFailedObserverTopic);
|
||||
@ -183,6 +185,17 @@ SmsParent::Observe(nsISupports* aSubject, const char* aTopic,
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
if (!strcmp(aTopic, kSmsRetrievingObserverTopic)) {
|
||||
MobileMessageData msgData;
|
||||
if (!GetMobileMessageDataFromMessage(aSubject, msgData)) {
|
||||
NS_ERROR("Got a 'sms-retrieving' topic without a valid message!");
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
unused << SendNotifyRetrievingMessage(msgData);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
if (!strcmp(aTopic, kSmsSendingObserverTopic)) {
|
||||
MobileMessageData msgData;
|
||||
if (!GetMobileMessageDataFromMessage(aSubject, msgData)) {
|
||||
|
@ -28,6 +28,7 @@ const kSmsSendingObserverTopic = "sms-sending";
|
||||
const kSmsSentObserverTopic = "sms-sent";
|
||||
const kSmsFailedObserverTopic = "sms-failed";
|
||||
const kSmsReceivedObserverTopic = "sms-received";
|
||||
const kSmsRetrievingObserverTopic = "sms-retrieving";
|
||||
|
||||
const kNetworkInterfaceStateChangedTopic = "network-interface-state-changed";
|
||||
const kXpcomShutdownObserverTopic = "xpcom-shutdown";
|
||||
@ -1039,18 +1040,20 @@ MmsService.prototype = {
|
||||
},
|
||||
|
||||
/**
|
||||
* @param contentLocation
|
||||
* @param aContentLocation
|
||||
* X-Mms-Content-Location of the message.
|
||||
* @param callback [optional]
|
||||
* @param aCallback [optional]
|
||||
* A callback function that takes two arguments: one for X-Mms-Status,
|
||||
* the other parsed MMS message.
|
||||
* @param aDomMessage
|
||||
* The nsIDOMMozMmsMessage object.
|
||||
*/
|
||||
retrieveMessage: function retrieveMessage(contentLocation, callback) {
|
||||
// TODO: bug 810099 - support onretrieving event
|
||||
// TODO: bug 809832 - support customizable max incoming/outgoing message size.
|
||||
retrieveMessage: function retrieveMessage(aContentLocation, aCallback, aDomMessage) {
|
||||
// Notifying observers an MMS message is retrieving.
|
||||
Services.obs.notifyObservers(aDomMessage, kSmsRetrievingObserverTopic, null);
|
||||
|
||||
let transaction = new RetrieveTransaction(contentLocation);
|
||||
transaction.run(callback);
|
||||
let transaction = new RetrieveTransaction(aContentLocation);
|
||||
transaction.run(aCallback);
|
||||
},
|
||||
|
||||
/**
|
||||
@ -1275,7 +1278,8 @@ MmsService.prototype = {
|
||||
.saveReceivedMessage(savableMessage,
|
||||
this.saveReceivedMessageCallback.bind(this,
|
||||
retrievalMode,
|
||||
savableMessage));
|
||||
savableMessage),
|
||||
domMessage);
|
||||
}).bind(this));
|
||||
},
|
||||
|
||||
|
@ -1272,10 +1272,11 @@ MobileMessageDatabaseService.prototype = {
|
||||
|
||||
getMessageRecordByTransactionId: function getMessageRecordByTransactionId(aTransactionId, aCallback) {
|
||||
if (DEBUG) debug("Retrieving message with transaction ID " + aTransactionId);
|
||||
let self = this;
|
||||
this.newTxn(READ_ONLY, function (error, txn, messageStore) {
|
||||
if (error) {
|
||||
if (DEBUG) debug(error);
|
||||
aCallback.notify(Ci.nsIMobileMessageCallback.INTERNAL_ERROR, null);
|
||||
aCallback.notify(Ci.nsIMobileMessageCallback.INTERNAL_ERROR, null, null);
|
||||
return;
|
||||
}
|
||||
let request = messageStore.index("transactionId").get(aTransactionId);
|
||||
@ -1285,10 +1286,13 @@ MobileMessageDatabaseService.prototype = {
|
||||
let messageRecord = request.result;
|
||||
if (!messageRecord) {
|
||||
if (DEBUG) debug("Transaction ID " + aTransactionId + " not found");
|
||||
aCallback.notify(Ci.nsIMobileMessageCallback.NOT_FOUND_ERROR, null);
|
||||
aCallback.notify(Ci.nsIMobileMessageCallback.NOT_FOUND_ERROR, null, null);
|
||||
return;
|
||||
}
|
||||
aCallback.notify(Ci.nsIMobileMessageCallback.SUCCESS_NO_ERROR, messageRecord);
|
||||
// In this case, we don't need a dom message. Just pass null to the
|
||||
// third argument.
|
||||
aCallback.notify(Ci.nsIMobileMessageCallback.SUCCESS_NO_ERROR,
|
||||
messageRecord, null);
|
||||
};
|
||||
|
||||
txn.onerror = function onerror(event) {
|
||||
@ -1296,17 +1300,18 @@ MobileMessageDatabaseService.prototype = {
|
||||
if (event.target)
|
||||
debug("Caught error on transaction", event.target.errorCode);
|
||||
}
|
||||
aCallback.notify(Ci.nsIMobileMessageCallback.INTERNAL_ERROR, null);
|
||||
aCallback.notify(Ci.nsIMobileMessageCallback.INTERNAL_ERROR, null, null);
|
||||
};
|
||||
});
|
||||
},
|
||||
|
||||
getMessageRecordById: function getMessageRecordById(aMessageId, aCallback) {
|
||||
if (DEBUG) debug("Retrieving message with ID " + aMessageId);
|
||||
let self = this;
|
||||
this.newTxn(READ_ONLY, function (error, txn, messageStore) {
|
||||
if (error) {
|
||||
if (DEBUG) debug(error);
|
||||
aCallback.notify(Ci.nsIMobileMessageCallback.INTERNAL_ERROR, null);
|
||||
aCallback.notify(Ci.nsIMobileMessageCallback.INTERNAL_ERROR, null, null);
|
||||
return;
|
||||
}
|
||||
let request = messageStore.mozGetAll(aMessageId);
|
||||
@ -1315,13 +1320,13 @@ MobileMessageDatabaseService.prototype = {
|
||||
if (DEBUG) debug("Transaction " + txn + " completed.");
|
||||
if (request.result.length > 1) {
|
||||
if (DEBUG) debug("Got too many results for id " + aMessageId);
|
||||
aCallback.notify(Ci.nsIMobileMessageCallback.UNKNOWN_ERROR, null);
|
||||
aCallback.notify(Ci.nsIMobileMessageCallback.UNKNOWN_ERROR, null, null);
|
||||
return;
|
||||
}
|
||||
let messageRecord = request.result[0];
|
||||
if (!messageRecord) {
|
||||
if (DEBUG) debug("Message ID " + aMessageId + " not found");
|
||||
aCallback.notify(Ci.nsIMobileMessageCallback.NOT_FOUND_ERROR, null);
|
||||
aCallback.notify(Ci.nsIMobileMessageCallback.NOT_FOUND_ERROR, null, null);
|
||||
return;
|
||||
}
|
||||
if (messageRecord.id != aMessageId) {
|
||||
@ -1329,10 +1334,12 @@ MobileMessageDatabaseService.prototype = {
|
||||
debug("Requested message ID (" + aMessageId + ") is " +
|
||||
"different from the one we got");
|
||||
}
|
||||
aCallback.notify(Ci.nsIMobileMessageCallback.UNKNOWN_ERROR, null);
|
||||
aCallback.notify(Ci.nsIMobileMessageCallback.UNKNOWN_ERROR, null, null);
|
||||
return;
|
||||
}
|
||||
aCallback.notify(Ci.nsIMobileMessageCallback.SUCCESS_NO_ERROR, messageRecord);
|
||||
let domMessage = self.createDomMessageFromRecord(messageRecord);
|
||||
aCallback.notify(Ci.nsIMobileMessageCallback.SUCCESS_NO_ERROR,
|
||||
messageRecord, domMessage);
|
||||
};
|
||||
|
||||
txn.onerror = function onerror(event) {
|
||||
@ -1341,7 +1348,7 @@ MobileMessageDatabaseService.prototype = {
|
||||
debug("Caught error on transaction", event.target.errorCode);
|
||||
}
|
||||
}
|
||||
aCallback.notify(Ci.nsIMobileMessageCallback.INTERNAL_ERROR, null);
|
||||
aCallback.notify(Ci.nsIMobileMessageCallback.INTERNAL_ERROR, null, null);
|
||||
};
|
||||
});
|
||||
},
|
||||
@ -1352,12 +1359,10 @@ MobileMessageDatabaseService.prototype = {
|
||||
|
||||
getMessage: function getMessage(aMessageId, aRequest) {
|
||||
if (DEBUG) debug("Retrieving message with ID " + aMessageId);
|
||||
let self = this;
|
||||
let notifyCallback = {
|
||||
notify: function notify(aRv, aMessageRecord) {
|
||||
notify: function notify(aRv, aMessageRecord, aDomMessage) {
|
||||
if (Ci.nsIMobileMessageCallback.SUCCESS_NO_ERROR == aRv) {
|
||||
let domMessage = self.createDomMessageFromRecord(aMessageRecord);
|
||||
aRequest.notifyMessageGot(domMessage);
|
||||
aRequest.notifyMessageGot(aDomMessage);
|
||||
return;
|
||||
}
|
||||
aRequest.notifyGetMessageFailed(aRv, null);
|
||||
|
Loading…
Reference in New Issue
Block a user