From 6ab4075f60c32956d60792ca3da1107e6d5f2075 Mon Sep 17 00:00:00 2001 From: Phil Ringnalda Date: Tue, 22 Jan 2013 21:02:58 -0800 Subject: [PATCH] Back out 30b9fbf49c01:c7fc23428c3b (bug 823010) for being rotted by 8 hours --HG-- extra : rebase_source : 0dde2f719d4963113b578d07a17a8001fb4e0f63 --- .../interfaces/nsIRilSmsDatabaseService.idl | 28 +-- dom/sms/src/ril/SmsDatabaseService.js | 101 ++------ dom/sms/tests/marionette/test_getmessage.js | 36 +-- dom/sms/tests/marionette/test_incoming.js | 11 +- .../tests/marionette/test_incoming_delete.js | 17 +- .../marionette/test_incoming_multipart.js | 15 +- dom/sms/tests/marionette/test_outgoing.js | 4 +- .../tests/marionette/test_outgoing_delete.js | 16 +- dom/system/gonk/RadioInterfaceLayer.js | 222 +++++++++--------- dom/system/gonk/ril_consts.js | 5 - dom/system/gonk/ril_worker.js | 35 +-- 11 files changed, 190 insertions(+), 300 deletions(-) diff --git a/dom/sms/interfaces/nsIRilSmsDatabaseService.idl b/dom/sms/interfaces/nsIRilSmsDatabaseService.idl index 41b74572f0de..85e875216f52 100644 --- a/dom/sms/interfaces/nsIRilSmsDatabaseService.idl +++ b/dom/sms/interfaces/nsIRilSmsDatabaseService.idl @@ -2,32 +2,12 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include "nsISupports.idl" #include "nsISmsDatabaseService.idl" -interface nsIDOMMozSmsMessage; - -[scriptable, function, uuid(04a08668-c020-469e-a1ad-8626c951ab2b)] -interface nsIRilSmsDatabaseCallback : nsISupports -{ - void notify(in nsresult aRv, in nsIDOMMozSmsMessage aSms); -}; - -[scriptable, uuid(8e2acd73-0332-4d16-82cc-ff5bac59d245)] +[scriptable, uuid(71d7dd4e-5489-4e58-a489-171200378c3c)] interface nsIRilSmsDatabaseService : nsISmsDatabaseService { - long saveReceivedMessage(in DOMString aSender, - in DOMString aBody, - in DOMString aMessageClass, - in unsigned long long aDate, - [optional] in nsIRilSmsDatabaseCallback aCallback); - long saveSendingMessage(in DOMString aReceiver, - in DOMString aBody, - in DOMString aDeliveryStatus, - in unsigned long long aDate, - [optional] in nsIRilSmsDatabaseCallback aCallback); - void setMessageDelivery(in long aMessageId, - in DOMString aDelivery, - in DOMString aDeliveryStatus, - [optional] in nsIRilSmsDatabaseCallback aCallback); + long saveReceivedMessage(in DOMString aSender, in DOMString aBody, in DOMString aMessageClass, in unsigned long long aDate); + long saveSendingMessage(in DOMString aReceiver, in DOMString aBody, in unsigned long long aDate); + void setMessageDelivery(in long aMessageId, in DOMString aDelivery, in DOMString aDeliveryStatus); }; diff --git a/dom/sms/src/ril/SmsDatabaseService.js b/dom/sms/src/ril/SmsDatabaseService.js index a37f65095e31..eef9b7a5d034 100644 --- a/dom/sms/src/ril/SmsDatabaseService.js +++ b/dom/sms/src/ril/SmsDatabaseService.js @@ -179,24 +179,24 @@ SmsDatabaseService.prototype = { self.upgradeSchema(objectStore); break; case 2: - if (DEBUG) debug("Upgrade to version 3. Fix existing entries."); + if (DEBUG) debug("Upgrade to version 3. Fix existing entries.") objectStore = event.target.transaction.objectStore(STORE_NAME); self.upgradeSchema2(objectStore); break; case 3: - if (DEBUG) debug("Upgrade to version 4. Add quick threads view."); + if (DEBUG) debug("Upgrade to version 4. Add quick threads view.") self.upgradeSchema3(db, event.target.transaction); break; case 4: - if (DEBUG) debug("Upgrade to version 5. Populate quick threads view."); + if (DEBUG) debug("Upgrade to version 5. Populate quick threads view.") self.upgradeSchema4(event.target.transaction); break; case 5: - if (DEBUG) debug("Upgrade to version 6. Use PhonenumberJS."); + if (DEBUG) debug("Upgrade to version 6. Use PhonenumberJS.") self.upgradeSchema5(event.target.transaction); break; case 6: - if (DEBUG) debug("Upgrade to version 7. Use multiple entry indexes."); + if (DEBUG) debug("Upgrade to version 7. Use multiple entry indexes.") self.upgradeSchema6(event.target.transaction); break; default: @@ -206,7 +206,7 @@ SmsDatabaseService.prototype = { } currentVersion++; } - }; + } request.onerror = function (event) { //TODO look at event.target.Code and change error constant accordingly callback("Error opening database!", null); @@ -298,7 +298,7 @@ SmsDatabaseService.prototype = { message.deliveryStatus = DELIVERY_STATUS_NOT_APPLICABLE; cursor.update(message); cursor.continue(); - }; + } }, upgradeSchema3: function upgradeSchema3(db, transaction) { @@ -358,10 +358,10 @@ SmsDatabaseService.prototype = { timestamp: message.timestamp, body: message.body, unreadCount: message.read ? 0 : 1 - }; + } } cursor.continue(); - }; + } }, upgradeSchema5: function upgradeSchema5(transaction) { @@ -410,7 +410,7 @@ SmsDatabaseService.prototype = { message.readIndex = [message.read, timestamp]; cursor.update(message); cursor.continue(); - }; + } }, createMessageFromRecord: function createMessageFromRecord(record) { @@ -499,14 +499,14 @@ SmsDatabaseService.prototype = { } smsRequest.notifyMessageListCreated(aMessageList.listId, sms); } - }; + } getRequest.onerror = function onerror(event) { if (DEBUG) { debug("notifyReadMessageListFailed - listId: " + aMessageList.listId + ", messageId: " + firstMessageId); } smsRequest.notifyReadMessageListFailed(Ci.nsISmsRequest.INTERNAL_ERROR); - }; + } }, /** @@ -647,41 +647,21 @@ SmsDatabaseService.prototype = { return false; }, - saveMessage: function saveMessage(message, callback) { + saveMessage: function saveMessage(message) { this.lastKey += 1; message.id = this.lastKey; if (DEBUG) debug("Going to store " + JSON.stringify(message)); - - let self = this; - function notifyResult(rv) { - if (!callback) { - return; - } - let sms = self.createMessageFromRecord(message); - callback.notify(rv, sms); - } - this.newTxn(READ_WRITE, function(error, txn, stores) { if (error) { - // TODO bug 832140 check event.target.errorCode - notifyResult(Cr.NS_ERROR_FAILURE); return; } - txn.oncomplete = function oncomplete(event) { - notifyResult(Cr.NS_OK); - }; - txn.onabort = function onabort(event) { - // TODO bug 832140 check event.target.errorCode - notifyResult(Cr.NS_ERROR_FAILURE); - }; - // First add to main objectStore. stores[0].put(message); let number = numberFromMessage(message); // Next update the other objectStore. - stores[1].get(number).onsuccess = function onsuccess(event) { + stores[1].get(number).onsuccess = function(event) { let mostRecentEntry = event.target.result; if (mostRecentEntry) { let needsUpdate = false; @@ -707,7 +687,7 @@ SmsDatabaseService.prototype = { id: message.id, unreadCount: message.read ? 0 : 1 }); } - }; + } }, [STORE_NAME, MOST_RECENT_STORE_NAME]); // We return the key that we expect to store in the db return message.id; @@ -718,11 +698,8 @@ SmsDatabaseService.prototype = { * nsIRilSmsDatabaseService API */ - saveReceivedMessage: function saveReceivedMessage( - aSender, aBody, aMessageClass, aDate, aCallback) { - let receiver = this.mRIL.rilContext.icc - ? this.mRIL.rilContext.icc.msisdn - : null; + saveReceivedMessage: function saveReceivedMessage(aSender, aBody, aMessageClass, aDate) { + let receiver = this.mRIL.rilContext.icc ? this.mRIL.rilContext.icc.msisdn : null; // Workaround an xpconnect issue with undefined string objects. // See bug 808220 @@ -759,14 +736,11 @@ SmsDatabaseService.prototype = { timestamp: aDate, read: FILTER_READ_UNREAD }; - return this.saveMessage(message, aCallback); + return this.saveMessage(message); }, - saveSendingMessage: function saveSendingMessage( - aReceiver, aBody, aDeliveryStatus, aDate, aCallback) { - let sender = this.mRIL.rilContext.icc - ? this.mRIL.rilContext.icc.msisdn - : null; + saveSendingMessage: function saveSendingMessage(aReceiver, aBody, aDate) { + let sender = this.mRIL.rilContext.icc ? this.mRIL.rilContext.icc.msisdn : null; // Workaround an xpconnect issue with undefined string objects. // See bug 808220 @@ -774,7 +748,7 @@ SmsDatabaseService.prototype = { sender = null; } - let receiver = aReceiver; + let receiver = aReceiver if (receiver) { let parsedNumber = PhoneNumberUtils.parse(receiver.toString()); receiver = (parsedNumber && parsedNumber.internationalNumber) @@ -795,7 +769,7 @@ SmsDatabaseService.prototype = { readIndex: [FILTER_READ_READ, aDate], delivery: DELIVERY_SENDING, - deliveryStatus: aDeliveryStatus, + deliveryStatus: DELIVERY_STATUS_PENDING, sender: sender, receiver: receiver, body: aBody, @@ -803,46 +777,23 @@ SmsDatabaseService.prototype = { timestamp: aDate, read: FILTER_READ_READ }; - return this.saveMessage(message, aCallback); + return this.saveMessage(message); }, - setMessageDelivery: function setMessageDelivery( - messageId, delivery, deliveryStatus, callback) { + setMessageDelivery: function setMessageDelivery(messageId, delivery, deliveryStatus) { if (DEBUG) { debug("Setting message " + messageId + " delivery to " + delivery + ", and deliveryStatus to " + deliveryStatus); } - - let self = this; - let message; - function notifyResult(rv) { - if (!callback) { - return; - } - let sms = null; - if (message) { - sms = self.createMessageFromRecord(message); - } - callback.notify(rv, sms); - } - this.newTxn(READ_WRITE, function (error, txn, store) { if (error) { - // TODO bug 832140 check event.target.errorCode - notifyResult(Cr.NS_ERROR_FAILURE); + if (DEBUG) debug(error); return; } - txn.oncomplete = function oncomplete(event) { - notifyResult(Cr.NS_OK); - }; - txn.onabort = function onabort(event) { - // TODO bug 832140 check event.target.errorCode - notifyResult(Cr.NS_ERROR_FAILURE); - }; let getRequest = store.get(messageId); getRequest.onsuccess = function onsuccess(event) { - message = event.target.result; + let message = event.target.result; if (!message) { if (DEBUG) debug("Message ID " + messageId + " not found"); return; diff --git a/dom/sms/tests/marionette/test_getmessage.js b/dom/sms/tests/marionette/test_getmessage.js index ad6649e08403..833ae763b5d6 100644 --- a/dom/sms/tests/marionette/test_getmessage.js +++ b/dom/sms/tests/marionette/test_getmessage.js @@ -6,17 +6,17 @@ MARIONETTE_TIMEOUT = 10000; SpecialPowers.setBoolPref("dom.sms.enabled", true); SpecialPowers.addPermission("sms", true, document); -const REMOTE = "5559997777"; -const REMOTE_FMT = "+15559997777"; // the normalized remote number -const EMU_FMT = "+15555215554"; // the emulator's number - let sms = window.navigator.mozSms; +let myNumber = "15555215554"; +let myNumberFormats = ["15555215554", "+15555215554"]; let inText = "Incoming SMS message. Mozilla Firefox OS!"; +let remoteNumber = "5559997777"; +let remoteNumberFormats = ["5559997777", "+15559997777"]; let outText = "Outgoing SMS message. Mozilla Firefox OS!"; let gotSmsOnsent = false; let gotReqOnsuccess = false; -let inSmsId = 0; -let outSmsId = 0; +let inSmsid = 0; +let outSmsid = 0; let inSmsTimeStamp; let outSmsTimeStamp; @@ -26,6 +26,10 @@ function verifyInitialState() { simulateIncomingSms(); } +function isIn(aVal, aArray, aMsg) { + ok(aArray.indexOf(aVal) >= 0, aMsg); +} + function simulateIncomingSms() { log("Simulating incoming SMS."); @@ -40,15 +44,15 @@ function simulateIncomingSms() { is(incomingSms.delivery, "received", "delivery"); is(incomingSms.deliveryStatus, "success", "deliveryStatus"); is(incomingSms.read, false, "read"); - is(incomingSms.receiver, EMU_FMT, "receiver"); - is(incomingSms.sender, REMOTE_FMT, "sender"); + is(incomingSms.receiver, null, "receiver"); + isIn(incomingSms.sender, remoteNumberFormats, "sender"); is(incomingSms.messageClass, "normal", "messageClass"); ok(incomingSms.timestamp instanceof Date, "timestamp is instanceof date"); inSmsTimeStamp = incomingSms.timestamp; sendSms(); }; // Simulate incoming sms sent from remoteNumber to our emulator - runEmulatorCmd("sms send " + REMOTE + " " + inText, function(result) { + runEmulatorCmd("sms send " + remoteNumber + " " + inText, function(result) { is(result[0], "OK", "emulator output"); }); } @@ -67,8 +71,8 @@ function sendSms() { is(sentSms.delivery, "sent", "delivery"); is(sentSms.deliveryStatus, "pending", "deliveryStatus"); is(sentSms.read, true, "read"); - is(sentSms.receiver, REMOTE_FMT, "receiver"); - is(sentSms.sender, EMU_FMT, "sender"); + isIn(sentSms.receiver, remoteNumberFormats, "receiver"); + is(sentSms.sender, null, "sender"); is(sentSms.messageClass, "normal", "messageClass"); ok(sentSms.timestamp instanceof Date, "timestamp is instanceof date"); outSmsTimeStamp = sentSms.timestamp; @@ -76,7 +80,7 @@ function sendSms() { if (gotSmsOnsent && gotReqOnsuccess) { getReceivedSms(); } }; - let requestRet = sms.send(REMOTE, outText); + let requestRet = sms.send(remoteNumber, outText); ok(requestRet, "smsrequest obj returned"); requestRet.onsuccess = function(event) { @@ -116,8 +120,8 @@ function getReceivedSms() { is(foundSms.delivery, "received", "delivery"); is(foundSms.deliveryStatus, "success", "deliveryStatus"); is(foundSms.read, false, "read"); - is(foundSms.receiver, EMU_FMT, "receiver"); - is(foundSms.sender, REMOTE_FMT, "sender"); + isIn(foundSms.receiver, myNumberFormats, "receiver"); + isIn(foundSms.sender, remoteNumberFormats, "sender"); is(foundSms.messageClass, "normal", "messageClass"); ok(foundSms.timestamp instanceof Date, "timestamp is instanceof date"); is(foundSms.timestamp.getTime(), inSmsTimeStamp.getTime(), "timestamp matches"); @@ -149,8 +153,8 @@ function getSentSms() { is(foundSms.delivery, "sent", "delivery"); is(foundSms.deliveryStatus, "pending", "deliveryStatus"); is(foundSms.read, true, "read"); - is(foundSms.receiver, REMOTE_FMT, "receiver"); - is(foundSms.sender, EMU_FMT, "sender"); + isIn(foundSms.receiver, remoteNumberFormats, "receiver"); + isIn(foundSms.sender, myNumberFormats, "sender"); is(foundSms.messageClass, "normal", "messageClass"); ok(foundSms.timestamp instanceof Date, "timestamp is instanceof date"); is(foundSms.timestamp.getTime(), outSmsTimeStamp.getTime(), "timestamp matches"); diff --git a/dom/sms/tests/marionette/test_incoming.js b/dom/sms/tests/marionette/test_incoming.js index 856de71120fe..18d640042521 100644 --- a/dom/sms/tests/marionette/test_incoming.js +++ b/dom/sms/tests/marionette/test_incoming.js @@ -6,16 +6,13 @@ MARIONETTE_TIMEOUT = 10000; SpecialPowers.setBoolPref("dom.sms.enabled", true); SpecialPowers.addPermission("sms", true, document); -const REMOTE = "5555552368"; -const SENDER = "+15555552368"; // the normalized remote number -const RECEIVER = "+15555215554"; // the emulator's number - let sms = window.navigator.mozSms; +let sender = "5555552368"; let body = "Hello SMS world!"; let now = Date.now(); let completed = false; -runEmulatorCmd("sms send " + REMOTE + " " + body, function(result) { +runEmulatorCmd("sms send " + sender + " " + body, function(result) { log("Sent fake SMS: " + result); is(result[0], "OK"); completed = true; @@ -29,8 +26,8 @@ sms.onreceived = function onreceived(event) { is(message.delivery, "received"); is(message.deliveryStatus, "success"); - is(message.sender, SENDER); - is(message.receiver, RECEIVER); + is(message.sender, sender); + is(message.receiver, null); is(message.body, body); is(message.messageClass, "normal"); ok(message.timestamp instanceof Date); diff --git a/dom/sms/tests/marionette/test_incoming_delete.js b/dom/sms/tests/marionette/test_incoming_delete.js index c76569691886..c8e54a0ff5bd 100644 --- a/dom/sms/tests/marionette/test_incoming_delete.js +++ b/dom/sms/tests/marionette/test_incoming_delete.js @@ -6,11 +6,8 @@ MARIONETTE_TIMEOUT = 10000; SpecialPowers.setBoolPref("dom.sms.enabled", true); SpecialPowers.addPermission("sms", true, document); -const REMOTE = "5555552368"; -const SENDER = "+15555552368"; // the normalized remote number -const RECEIVER = "+15555215554"; // the emulator's number - let sms = window.navigator.mozSms; +let fromNumber = "5551234567"; let msgText = "Mozilla Firefox OS!"; function verifyInitialState() { @@ -32,14 +29,14 @@ function simulateIncomingSms() { is(incomingSms.delivery, "received", "delivery"); is(incomingSms.deliveryStatus, "success", "deliveryStatus"); is(incomingSms.read, false, "read"); - is(incomingSms.receiver, RECEIVER, "receiver"); - is(incomingSms.sender, SENDER, "sender"); + is(incomingSms.receiver, null, "receiver"); + is(incomingSms.sender, fromNumber, "sender"); is(incomingSms.messageClass, "normal", "messageClass"); ok(incomingSms.timestamp instanceof Date, "timestamp is istanceof date"); verifySmsExists(incomingSms); }; - runEmulatorCmd("sms send " + REMOTE + " " + msgText, function(result) { + runEmulatorCmd("sms send " + fromNumber + " " + msgText, function(result) { is(result[0], "OK", "emulator output"); }); } @@ -55,12 +52,6 @@ function verifySmsExists(incomingSms) { let foundSms = event.target.result; is(foundSms.id, incomingSms.id, "found SMS id matches"); is(foundSms.body, msgText, "found SMS msg text matches"); - is(foundSms.delivery, "received", "delivery"); - is(foundSms.deliveryStatus, "success", "deliveryStatus"); - is(foundSms.read, false, "read"); - is(foundSms.receiver, RECEIVER, "receiver"); - is(foundSms.sender, SENDER, "sender"); - is(foundSms.messageClass, "normal", "messageClass"); log("Got SMS (id: " + foundSms.id + ") as expected."); deleteSms(incomingSms); }; diff --git a/dom/sms/tests/marionette/test_incoming_multipart.js b/dom/sms/tests/marionette/test_incoming_multipart.js index 326850b48992..e76eed98cf5c 100644 --- a/dom/sms/tests/marionette/test_incoming_multipart.js +++ b/dom/sms/tests/marionette/test_incoming_multipart.js @@ -6,10 +6,6 @@ MARIONETTE_TIMEOUT = 10000; SpecialPowers.setBoolPref("dom.sms.enabled", true); SpecialPowers.addPermission("sms", true, document); -const REMOTE = "5555552368"; -const SENDER = "+15555552368"; // the normalized remote number -const RECEIVER = "+15555215554"; // the emulator's number - let sms = window.navigator.mozSms; function verifyInitialState() { @@ -19,6 +15,7 @@ function verifyInitialState() { } function simulateIncomingSms() { + let fromNumber = "5551234567"; let msgText = ""; log("Simulating incoming SMS."); @@ -37,13 +34,13 @@ function simulateIncomingSms() { is(incomingSms.body, msgText, "msg body"); is(incomingSms.delivery, "received", "delivery"); is(incomingSms.read, false, "read"); - is(incomingSms.receiver, RECEIVER, "receiver"); - is(incomingSms.sender, SENDER, "sender"); + is(incomingSms.receiver, null, "receiver"); + is(incomingSms.sender, fromNumber, "sender"); ok(incomingSms.timestamp instanceof Date, "timestamp is istanceof date"); verifySmsExists(incomingSms); }; - runEmulatorCmd("sms send " + REMOTE + " " + msgText, function(result) { + runEmulatorCmd("sms send " + fromNumber + " " + msgText, function(result) { is(result[0], "OK", "emulator output"); }); } @@ -59,10 +56,6 @@ function verifySmsExists(incomingSms) { let foundSms = event.target.result; is(foundSms.id, incomingSms.id, "found SMS id matches"); is(foundSms.body, incomingSms.body, "found SMS msg text matches"); - is(foundSms.delivery, "received", "delivery"); - is(foundSms.read, false, "read"); - is(foundSms.receiver, RECEIVER, "receiver"); - is(foundSms.sender, SENDER, "sender"); log("Got SMS (id: " + foundSms.id + ") as expected."); deleteSms(incomingSms); }; diff --git a/dom/sms/tests/marionette/test_outgoing.js b/dom/sms/tests/marionette/test_outgoing.js index e924a703aa38..6ddaeb98f41f 100644 --- a/dom/sms/tests/marionette/test_outgoing.js +++ b/dom/sms/tests/marionette/test_outgoing.js @@ -7,8 +7,6 @@ SpecialPowers.setBoolPref("dom.sms.enabled", true); SpecialPowers.setBoolPref("dom.sms.strict7BitEncoding", false); SpecialPowers.addPermission("sms", true, document); -const SENDER = "+15555215554"; // the emulator's number - let sms = window.navigator.mozSms; const SHORT_BODY = "Hello SMS world!"; const LONG_BODY = "Let me not to the marriage of true minds\n" @@ -34,7 +32,7 @@ function checkMessage(message, delivery, body) { ok(message.id, "message.id"); is(message.delivery, delivery, "message.delivery"); is(message.deliveryStatus, "pending", "message.deliveryStatus"); - is(message.sender, SENDER, "message.sender"); + is(message.sender, null, "message.sender"); ok(message.receiver, "message.receiver"); is(message.body, body, "message.body"); is(message.messageClass, "normal", "message.messageClass"); diff --git a/dom/sms/tests/marionette/test_outgoing_delete.js b/dom/sms/tests/marionette/test_outgoing_delete.js index 75c9e5d5b7b6..75f3c5a7fd3f 100644 --- a/dom/sms/tests/marionette/test_outgoing_delete.js +++ b/dom/sms/tests/marionette/test_outgoing_delete.js @@ -6,11 +6,8 @@ MARIONETTE_TIMEOUT = 10000; SpecialPowers.setBoolPref("dom.sms.enabled", true); SpecialPowers.addPermission("sms", true, document); -const SENDER = "+15555215554"; // the emulator's number -const DEST = "5551117777"; -const RECEIVER = "+15551117777"; // normalized destination number - let sms = window.navigator.mozSms; +let destNumber = "5551117777"; let msgText = "Mozilla Firefox OS!"; let gotSmsOnsent = false; let gotReqOnsuccess = false; @@ -37,15 +34,15 @@ function sendSms() { is(sentSms.delivery, "sent", "delivery"); is(sentSms.deliveryStatus, "pending", "deliveryStatus"); is(sentSms.read, true, "read"); - is(sentSms.receiver, RECEIVER, "receiver"); - is(sentSms.sender, SENDER, "sender"); + is(sentSms.receiver, destNumber, "receiver"); + is(sentSms.sender, null, "sender"); is(sentSms.messageClass, "normal", "messageClass"); ok(sentSms.timestamp instanceof Date, "timestamp is istanceof date"); if (gotSmsOnsent && gotReqOnsuccess) { verifySmsExists(smsId); } }; - let requestRet = sms.send(DEST, msgText); + let requestRet = sms.send(destNumber, msgText); ok(requestRet, "smsrequest obj returned"); requestRet.onsuccess = function(event) { @@ -80,11 +77,6 @@ function verifySmsExists(smsId) { let foundSms = event.target.result; is(foundSms.id, smsId, "found SMS id matches"); is(foundSms.body, msgText, "found SMS msg text matches"); - is(foundSms.delivery, "sent", "delivery"); - is(foundSms.read, true, "read"); - is(foundSms.receiver, RECEIVER, "receiver"); - is(foundSms.sender, SENDER, "sender"); - is(foundSms.messageClass, "normal", "messageClass"); log("Got SMS (id: " + foundSms.id + ") as expected."); deleteSms(smsId); }; diff --git a/dom/system/gonk/RadioInterfaceLayer.js b/dom/system/gonk/RadioInterfaceLayer.js index 831bf9bff5cf..aec64dd04894 100644 --- a/dom/system/gonk/RadioInterfaceLayer.js +++ b/dom/system/gonk/RadioInterfaceLayer.js @@ -153,7 +153,7 @@ function convertRILCallState(state) { return nsIRadioInterfaceLayer.CALL_STATE_ALERTING; case RIL.CALL_STATE_INCOMING: case RIL.CALL_STATE_WAITING: - return nsIRadioInterfaceLayer.CALL_STATE_INCOMING; + return nsIRadioInterfaceLayer.CALL_STATE_INCOMING; case RIL.CALL_STATE_BUSY: return nsIRadioInterfaceLayer.CALL_STATE_BUSY; default: @@ -1108,13 +1108,13 @@ RadioInterfaceLayer.prototype = { debug("We haven't read completely the APN data from the " + "settings DB yet. Wait for that."); return; - } + } - // This check avoids data call connection if the radio is not ready - // yet after toggling off airplane mode. + // This check avoids data call connection if the radio is not ready + // yet after toggling off airplane mode. if (this.rilContext.radioState != RIL.GECKO_RADIOSTATE_READY) { debug("RIL is not ready for data connection: radio's not ready"); - return; + return; } // We only watch at "ril.data.enabled" flag changes for connecting or @@ -1380,57 +1380,34 @@ RadioInterfaceLayer.prototype = { return; } - let notifyReceived = function notifyReceived(rv, sms) { - let success = Components.isSuccessCode(rv); - - // Acknowledge the reception of the SMS. - message.rilMessageType = "ackSMS"; - if (!success) { - message.result = RIL.PDU_FCS_MEMORY_CAPACITY_EXCEEDED; - } - this.worker.postMessage(message); - - if (!success) { - // At this point we could send a message to content to notify the user - // that storing an incoming SMS failed, most likely due to a full disk. - debug("Could not store SMS " + message.id + ", error code " + rv); - return; - } - - gSystemMessenger.broadcastMessage("sms-received", { - id: message.id, - delivery: DOM_SMS_DELIVERY_RECEIVED, - deliveryStatus: RIL.GECKO_SMS_DELIVERY_STATUS_SUCCESS, - sender: message.sender || null, - receiver: message.receiver || null, - body: message.fullBody || null, - messageClass: message.messageClass, - timestamp: message.timestamp, - read: false - }); - Services.obs.notifyObservers(sms, kSmsReceivedObserverTopic, null); - }.bind(this); - + let id = -1; if (message.messageClass != RIL.GECKO_SMS_MESSAGE_CLASSES[RIL.PDU_DCS_MSG_CLASS_0]) { - message.id = gSmsDatabaseService.saveReceivedMessage( - message.sender || null, - message.fullBody || null, - message.messageClass, - message.timestamp, - notifyReceived); - } else { - message.id = -1; - let sms = gSmsService.createSmsMessage(message.id, - DOM_SMS_DELIVERY_RECEIVED, - RIL.GECKO_SMS_DELIVERY_STATUS_SUCCESS, - message.sender || null, - message.receiver || null, - message.fullBody || null, - message.messageClass, - message.timestamp, - false); - notifyReceived(Cr.NS_OK, sms); + id = gSmsDatabaseService.saveReceivedMessage(message.sender || null, + message.fullBody || null, + message.messageClass, + message.timestamp); } + let sms = gSmsService.createSmsMessage(id, + DOM_SMS_DELIVERY_RECEIVED, + RIL.GECKO_SMS_DELIVERY_STATUS_SUCCESS, + message.sender || null, + message.receiver || null, + message.fullBody || null, + message.messageClass, + message.timestamp, + false); + + gSystemMessenger.broadcastMessage("sms-received", + {id: id, + delivery: DOM_SMS_DELIVERY_RECEIVED, + deliveryStatus: RIL.GECKO_SMS_DELIVERY_STATUS_SUCCESS, + sender: message.sender || null, + receiver: message.receiver || null, + body: message.fullBody || null, + messageClass: message.messageClass, + timestamp: message.timestamp, + read: false}); + Services.obs.notifyObservers(sms, kSmsReceivedObserverTopic, null); }, /** @@ -1457,32 +1434,40 @@ RadioInterfaceLayer.prototype = { } gSmsDatabaseService.setMessageDelivery(options.sms.id, + DOM_SMS_DELIVERY_SENT, + options.sms.deliveryStatus); + + let sms = gSmsService.createSmsMessage(options.sms.id, DOM_SMS_DELIVERY_SENT, options.sms.deliveryStatus, - function notifyResult(rv, sms) { - //TODO bug 832140 handle !Components.isSuccessCode(rv) - gSystemMessenger.broadcastMessage("sms-sent", - {id: options.sms.id, - delivery: DOM_SMS_DELIVERY_SENT, - deliveryStatus: options.sms.deliveryStatus, - sender: message.sender || null, - receiver: options.sms.receiver, - body: options.sms.body, - messageClass: options.sms.messageClass, - timestamp: options.sms.timestamp, - read: true}); + null, + options.sms.receiver, + options.sms.body, + options.sms.messageClass, + options.sms.timestamp, + true); - if (!options.requestStatusReport) { - // No more used if STATUS-REPORT not requested. - delete this._sentSmsEnvelopes[message.envelopeId]; - } else { - options.sms = sms; - } + gSystemMessenger.broadcastMessage("sms-sent", + {id: options.sms.id, + delivery: DOM_SMS_DELIVERY_SENT, + deliveryStatus: options.sms.deliveryStatus, + sender: message.sender || null, + receiver: options.sms.receiver, + body: options.sms.body, + messageClass: options.sms.messageClass, + timestamp: options.sms.timestamp, + read: true}); - options.request.notifyMessageSent(sms); + if (!options.requestStatusReport) { + // No more used if STATUS-REPORT not requested. + delete this._sentSmsEnvelopes[message.envelopeId]; + } else { + options.sms = sms; + } - Services.obs.notifyObservers(sms, kSmsSentObserverTopic, null); - }.bind(this)); + options.request.notifyMessageSent(sms); + + Services.obs.notifyObservers(sms, kSmsSentObserverTopic, null); }, handleSmsDelivery: function handleSmsDelivery(message) { @@ -1495,15 +1480,23 @@ RadioInterfaceLayer.prototype = { delete this._sentSmsEnvelopes[message.envelopeId]; gSmsDatabaseService.setMessageDelivery(options.sms.id, + options.sms.delivery, + message.deliveryStatus); + + let sms = gSmsService.createSmsMessage(options.sms.id, options.sms.delivery, message.deliveryStatus, - function notifyResult(rv, sms) { - //TODO bug 832140 handle !Components.isSuccessCode(rv) - let topic = (message.deliveryStatus == RIL.GECKO_SMS_DELIVERY_STATUS_SUCCESS) - ? kSmsDeliverySuccessObserverTopic - : kSmsDeliveryErrorObserverTopic; - Services.obs.notifyObservers(sms, topic, null); - }); + null, + options.sms.receiver, + options.sms.body, + options.sms.messageClass, + options.sms.timestamp, + true); + + let topic = (message.deliveryStatus == RIL.GECKO_SMS_DELIVERY_STATUS_SUCCESS) + ? kSmsDeliverySuccessObserverTopic + : kSmsDeliveryErrorObserverTopic; + Services.obs.notifyObservers(sms, topic, null); }, handleSmsSendFailed: function handleSmsSendFailed(message) { @@ -1523,13 +1516,22 @@ RadioInterfaceLayer.prototype = { } gSmsDatabaseService.setMessageDelivery(options.sms.id, + DOM_SMS_DELIVERY_ERROR, + RIL.GECKO_SMS_DELIVERY_STATUS_ERROR); + + let sms = gSmsService.createSmsMessage(options.sms.id, DOM_SMS_DELIVERY_ERROR, RIL.GECKO_SMS_DELIVERY_STATUS_ERROR, - function notifyResult(rv, sms) { - //TODO bug 832140 handle !Components.isSuccessCode(rv) - options.request.notifySendMessageFailed(error); - Services.obs.notifyObservers(sms, kSmsFailedObserverTopic, null); - }); + null, + options.sms.receiver, + options.sms.body, + options.sms.messageClass, + options.sms.timestamp, + true); + + options.request.notifySendMessageFailed(error); + + Services.obs.notifyObservers(sms, kSmsFailedObserverTopic, null); }, /** @@ -1607,10 +1609,10 @@ RadioInterfaceLayer.prototype = { handleICCInfoChange: function handleICCInfoChange(message) { let oldIcc = this.rilContext.icc; this.rilContext.icc = message; - + let iccInfoChanged = !oldIcc || oldIcc.iccid != message.iccid || - oldIcc.mcc != message.mcc || + oldIcc.mcc != message.mcc || oldIcc.mnc != message.mnc || oldIcc.spn != message.spn || oldIcc.isDisplayNetworkNameRequired != message.isDisplayNetworkNameRequired || @@ -1737,7 +1739,7 @@ RadioInterfaceLayer.prototype = { // Flag to ignore any radio power change requests during We're changing // the radio power. _changingRadioPower: false, - + // Flag to determine whether we reject a waiting call directly or we // notify the UI of a waiting call. It corresponds to the // 'ril.callwaiting.enbled' setting from the UI. @@ -1836,9 +1838,9 @@ RadioInterfaceLayer.prototype = { this._radioEnabled = true; this._ensureRadioState(); - // Clean data call setting. + // Clean data call setting. this.dataCallSettings = {}; - this.dataCallSettings["enabled"] = false; + this.dataCallSettings["enabled"] = false; }, // nsIRadioWorker @@ -1903,7 +1905,7 @@ RadioInterfaceLayer.prototype = { this.worker.postMessage({rilMessageType: "rejectCall", callIndex: callIndex}); }, - + holdCall: function holdCall(callIndex) { this.worker.postMessage({rilMessageType: "holdCall", callIndex: callIndex}); @@ -2443,22 +2445,28 @@ RadioInterfaceLayer.prototype = { } let timestamp = Date.now(); + let id = gSmsDatabaseService.saveSendingMessage(number, message, timestamp); + let messageClass = RIL.GECKO_SMS_MESSAGE_CLASSES[RIL.PDU_DCS_MSG_CLASS_NORMAL]; let deliveryStatus = options.requestStatusReport ? RIL.GECKO_SMS_DELIVERY_STATUS_PENDING : RIL.GECKO_SMS_DELIVERY_STATUS_NOT_APPLICABLE; - let id = gSmsDatabaseService.saveSendingMessage(number, message, deliveryStatus, timestamp, - function notifyResult(rv, sms) { - //TODO bug 832140 handle !Components.isSuccessCode(rv) - Services.obs.notifyObservers(sms, kSmsSendingObserverTopic, null); + let sms = gSmsService.createSmsMessage(id, + DOM_SMS_DELIVERY_SENDING, + deliveryStatus, + null, + number, + message, + messageClass, + timestamp, + true); + Services.obs.notifyObservers(sms, kSmsSendingObserverTopic, null); - // Keep current SMS message info for sent/delivered notifications - options.envelopeId = this.createSmsEnvelope({ - request: request, - sms: sms, - requestStatusReport: options.requestStatusReport - }); - this.worker.postMessage(options); - }.bind(this)); + // Keep current SMS message info for sent/delivered notifications + options.envelopeId = this.createSmsEnvelope({request: request, + sms: sms, + requestStatusReport: options.requestStatusReport}); + + this.worker.postMessage(options); }, registerDataCallCallback: function registerDataCallCallback(callback) { @@ -2820,8 +2828,8 @@ RILNetworkInterface.prototype = { debug("Going to set up data connection with APN " + this.dataCallSettings["apn"]); this.mRIL.setupDataCall(RIL.DATACALL_RADIOTECHNOLOGY_GSM, - this.dataCallSettings["apn"], - this.dataCallSettings["user"], + this.dataCallSettings["apn"], + this.dataCallSettings["user"], this.dataCallSettings["passwd"], RIL.DATACALL_AUTH_PAP_OR_CHAP, "IP"); this.connecting = true; diff --git a/dom/system/gonk/ril_consts.js b/dom/system/gonk/ril_consts.js index c905ed4a1e66..37fc654b203c 100644 --- a/dom/system/gonk/ril_consts.js +++ b/dom/system/gonk/ril_consts.js @@ -1207,11 +1207,6 @@ this.PDU_FCS_USAT_BUSY = 0XD4; this.PDU_FCS_USIM_DATA_DOWNLOAD_ERROR = 0xD5; this.PDU_FCS_RESERVED = 0xE0; this.PDU_FCS_UNSPECIFIED = 0xFF; -// Special internal value that means we should not acknowledge an -// incoming text right away, but need to wait for other components -// (e.g. storage) to complete. This can be any value, so long it -// doesn't conflict with the PDU_FCS_* constants above. -this.MOZ_FCS_WAIT_FOR_EXPLICIT_ACK = 0x0F; // ST - Status // Bit 7..0 = 000xxxxx, short message transaction completed diff --git a/dom/system/gonk/ril_worker.js b/dom/system/gonk/ril_worker.js index 22859ff58789..c3bde411e59a 100644 --- a/dom/system/gonk/ril_worker.js +++ b/dom/system/gonk/ril_worker.js @@ -1713,19 +1713,6 @@ let RIL = { Buf.sendParcel(); }, - /** - * Acknowledge the receipt and handling of an SMS. - * - * @param success - * Boolean indicating whether the message was successfuly handled. - */ - ackSMS: function ackSMS(options) { - if (options.result == PDU_FCS_RESERVED) { - return; - } - this.acknowledgeSMS(options.result == PDU_FCS_OK, options.result); - }, - setCellBroadcastSearchList: function setCellBroadcastSearchList(options) { try { let str = options.searchListStr; @@ -3523,7 +3510,6 @@ let RIL = { // short message waiting.` ~ 3GPP TS 31.111 7.1.1.1 return PDU_FCS_RESERVED; } - // Fall through! // If the service "data download via SMS-PP" is not available in the // (U)SIM Service Table, ..., then the ME shall store the message in @@ -3563,18 +3549,14 @@ let RIL = { } if (message) { - message.result = PDU_FCS_OK; - if (message.messageClass == GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_2]) { - // `MS shall ensure that the message has been to the SMS data field in - // the (U)SIM before sending an ACK to the SC.` ~ 3GPP 23.038 clause 4 - message.result = PDU_FCS_RESERVED; - } message.rilMessageType = "sms-received"; this.sendDOMMessage(message); + } - // We will acknowledge receipt of the SMS after we try to store it - // in the database. - return MOZ_FCS_WAIT_FOR_EXPLICIT_ACK; + if (message && message.messageClass == GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_2]) { + // `MS shall ensure that the message has been to the SMS data field in + // the (U)SIM before sending an ACK to the SC.` ~ 3GPP 23.038 clause 4 + return PDU_FCS_RESERVED; } return PDU_FCS_OK; @@ -4982,11 +4964,10 @@ RIL[UNSOLICITED_RESPONSE_VOICE_NETWORK_STATE_CHANGED] = function UNSOLICITED_RES }; RIL[UNSOLICITED_RESPONSE_NEW_SMS] = function UNSOLICITED_RESPONSE_NEW_SMS(length) { let result = this._processSmsDeliver(length); - if (result == PDU_FCS_RESERVED || result == MOZ_FCS_WAIT_FOR_EXPLICIT_ACK) { - return; + if (result != PDU_FCS_RESERVED) { + // Not reserved FCS values, send ACK now. + this.acknowledgeSMS(result == PDU_FCS_OK, result); } - // Not reserved FCS values, send ACK now. - this.acknowledgeSMS(result == PDU_FCS_OK, result); }; RIL[UNSOLICITED_RESPONSE_NEW_SMS_STATUS_REPORT] = function UNSOLICITED_RESPONSE_NEW_SMS_STATUS_REPORT(length) { let result = this._processSmsStatusReport(length);