diff --git a/dom/sms/interfaces/nsIDOMSmsManager.idl b/dom/sms/interfaces/nsIDOMSmsManager.idl index 0598269c0d3e..6a851a9a7028 100644 --- a/dom/sms/interfaces/nsIDOMSmsManager.idl +++ b/dom/sms/interfaces/nsIDOMSmsManager.idl @@ -37,8 +37,9 @@ #include "nsIDOMEventTarget.idl" interface nsIDOMEventListener; +interface nsIDOMMozSmsRequest; -[scriptable, function, uuid(1b40f025-33b0-4a95-b7b1-89857bfb8d7c)] +[scriptable, function, uuid(8bebc119-845c-4ae1-96e7-7b7ee970485b)] interface nsIDOMMozSmsManager : nsIDOMEventTarget { unsigned short getNumberOfMessagesForText(in DOMString text); @@ -49,6 +50,8 @@ interface nsIDOMMozSmsManager : nsIDOMEventTarget // An array of SmsRequest objects otherwise. jsval send(in jsval number, in DOMString message); + [binaryname(GetMessageMoz)] nsIDOMMozSmsRequest getMessage(in long id); + attribute nsIDOMEventListener onreceived; attribute nsIDOMEventListener onsent; attribute nsIDOMEventListener ondelivered; diff --git a/dom/sms/interfaces/nsISmsDatabaseService.idl b/dom/sms/interfaces/nsISmsDatabaseService.idl index f5b7f5122c26..e817b28d4d62 100644 --- a/dom/sms/interfaces/nsISmsDatabaseService.idl +++ b/dom/sms/interfaces/nsISmsDatabaseService.idl @@ -38,14 +38,16 @@ %{C++ #define SMS_DATABASE_SERVICE_CID \ -{ 0x1cb004a0, 0xe003, 0x48b9, \ -{ 0x9f, 0xd6, 0xe9, 0x1f, 0xbb, 0xb1, 0x97, 0x89 } } +{ 0xa33977ef, 0x1a16, 0x473a, \ +{ 0x86, 0x62, 0x44, 0x10, 0xfe, 0xf3, 0xf1, 0x2b } } #define SMS_DATABASE_SERVICE_CONTRACTID "@mozilla.org/sms/smsdatabaseservice;1" %} -[scriptable, function, uuid(ab23f736-f545-4fcd-a298-3d6e2b380042)] +[scriptable, function, uuid(f1ff6e13-d49f-4b38-8697-8e45be49f1e7)] interface nsISmsDatabaseService : nsISupports { // Takes some information required to save the message and returns its id. long saveSentMessage(in DOMString aReceiver, in DOMString aBody, in unsigned long long aDate); + + [binaryname(GetMessageMoz)] void getMessage(in long messageId, in long requestId, [optional] in unsigned long long processId); }; diff --git a/dom/sms/src/SmsManager.cpp b/dom/sms/src/SmsManager.cpp index e134cdc70c14..be6eead63788 100644 --- a/dom/sms/src/SmsManager.cpp +++ b/dom/sms/src/SmsManager.cpp @@ -47,6 +47,7 @@ #include "SmsRequestManager.h" #include "nsJSUtils.h" #include "nsContentUtils.h" +#include "nsISmsDatabaseService.h" /** * We have to use macros here because our leak analysis tool things we are @@ -210,6 +211,22 @@ SmsManager::Send(const jsval& aNumber, const nsAString& aMessage, jsval* aReturn return NS_OK; } +NS_IMETHODIMP +SmsManager::GetMessageMoz(PRInt32 aId, nsIDOMMozSmsRequest** aRequest) +{ + int requestId = + SmsRequestManager::GetInstance()->CreateRequest(mOwner, mScriptContext, aRequest); + NS_ASSERTION(*aRequest, "The request object must have been created!"); + + nsCOMPtr smsDBService = + do_GetService(SMS_DATABASE_SERVICE_CONTRACTID); + NS_ENSURE_TRUE(smsDBService, NS_ERROR_FAILURE); + + smsDBService->GetMessageMoz(aId, requestId, 0); + + return NS_OK; +} + NS_IMPL_EVENT_HANDLER(SmsManager, received) NS_IMPL_EVENT_HANDLER(SmsManager, sent) NS_IMPL_EVENT_HANDLER(SmsManager, delivered) diff --git a/dom/sms/src/android/SmsDatabaseService.cpp b/dom/sms/src/android/SmsDatabaseService.cpp index 0f46c3f32414..9d8819997b3c 100644 --- a/dom/sms/src/android/SmsDatabaseService.cpp +++ b/dom/sms/src/android/SmsDatabaseService.cpp @@ -59,6 +59,14 @@ SmsDatabaseService::SaveSentMessage(const nsAString& aReceiver, return NS_OK; } +NS_IMETHODIMP +SmsDatabaseService::GetMessageMoz(PRInt32 aMessageId, PRInt32 aRequestId, + PRUint64 aProcessId) +{ + // TODO: implement + return NS_OK; +} + } // namespace sms } // namespace dom } // namespace mozilla diff --git a/dom/sms/src/fallback/SmsDatabaseService.cpp b/dom/sms/src/fallback/SmsDatabaseService.cpp index c6d0a3dfddae..6567efaf02d6 100644 --- a/dom/sms/src/fallback/SmsDatabaseService.cpp +++ b/dom/sms/src/fallback/SmsDatabaseService.cpp @@ -53,6 +53,14 @@ SmsDatabaseService::SaveSentMessage(const nsAString& aReceiver, return NS_OK; } +NS_IMETHODIMP +SmsDatabaseService::GetMessageMoz(PRInt32 aMessageId, PRInt32 aRequestId, + PRUint64 aProcessId) +{ + NS_ERROR("We should not be here!"); + return NS_OK; +} + } // namespace sms } // namespace dom } // namespace mozilla diff --git a/dom/sms/src/ipc/PSms.ipdl b/dom/sms/src/ipc/PSms.ipdl index 904a423b3350..501ae8acd2a8 100644 --- a/dom/sms/src/ipc/PSms.ipdl +++ b/dom/sms/src/ipc/PSms.ipdl @@ -84,6 +84,8 @@ parent: sync SaveSentMessage(nsString aReceiver, nsString aBody, PRUint64 aDate) returns (PRInt32 aId); + GetMessage(PRInt32 aMessageId, PRInt32 aRequestId, PRUint64 aProcessId); + __delete__(); }; diff --git a/dom/sms/src/ipc/SmsIPCService.cpp b/dom/sms/src/ipc/SmsIPCService.cpp index 9ecef3e5f2aa..0c6c5232a49b 100644 --- a/dom/sms/src/ipc/SmsIPCService.cpp +++ b/dom/sms/src/ipc/SmsIPCService.cpp @@ -117,6 +117,15 @@ SmsIPCService::SaveSentMessage(const nsAString& aReceiver, return NS_OK; } +NS_IMETHODIMP +SmsIPCService::GetMessageMoz(PRInt32 aMessageId, PRInt32 aRequestId, + PRUint64 aProcessId) +{ + GetSmsChild()->SendGetMessage(aMessageId, aRequestId, + ContentChild::GetSingleton()->GetID()); + return NS_OK; +} + } // namespace sms } // namespace dom } // namespace mozilla diff --git a/dom/sms/src/ipc/SmsParent.cpp b/dom/sms/src/ipc/SmsParent.cpp index 89aa6dcbb5fd..3943752f177a 100644 --- a/dom/sms/src/ipc/SmsParent.cpp +++ b/dom/sms/src/ipc/SmsParent.cpp @@ -192,6 +192,18 @@ SmsParent::RecvSaveSentMessage(const nsString& aRecipient, return true; } +bool +SmsParent::RecvGetMessage(const PRInt32& aMessageId, const PRInt32& aRequestId, + const PRUint64& aProcessId) +{ + nsCOMPtr smsDBService = + do_GetService(SMS_DATABASE_SERVICE_CONTRACTID); + NS_ENSURE_TRUE(smsDBService, true); + + smsDBService->GetMessageMoz(aMessageId, aRequestId, aProcessId); + return true; +} + } // namespace sms } // namespace dom } // namespace mozilla diff --git a/dom/sms/src/ipc/SmsParent.h b/dom/sms/src/ipc/SmsParent.h index a02b0857caab..30ea98b763e4 100644 --- a/dom/sms/src/ipc/SmsParent.h +++ b/dom/sms/src/ipc/SmsParent.h @@ -60,6 +60,7 @@ public: NS_OVERRIDE virtual bool RecvGetNumberOfMessagesForText(const nsString& aText, PRUint16* aResult); NS_OVERRIDE virtual bool RecvSendMessage(const nsString& aNumber, const nsString& aMessage, const PRInt32& aRequestId, const PRUint64& aProcessId); NS_OVERRIDE virtual bool RecvSaveSentMessage(const nsString& aRecipient, const nsString& aBody, const PRUint64& aDate, PRInt32* aId); + NS_OVERRIDE virtual bool RecvGetMessage(const PRInt32& aMessageId, const PRInt32& aRequestId, const PRUint64& aProcessId); protected: virtual void ActorDestroy(ActorDestroyReason why);