diff --git a/dom/mobilemessage/src/ril/MobileMessageDatabaseService.js b/dom/mobilemessage/src/ril/MobileMessageDatabaseService.js index 8db26f49b54b..04e7d73dcc81 100644 --- a/dom/mobilemessage/src/ril/MobileMessageDatabaseService.js +++ b/dom/mobilemessage/src/ril/MobileMessageDatabaseService.js @@ -777,7 +777,7 @@ MobileMessageDatabaseService.prototype = { tres = tres.filter(function (element) { return qres.indexOf(element.id) != -1; }); - if (aContextIndex < 0) { + if (aContextIndex == null) { for (let i = 0; i < tres.length; i++) { this.onNextMessageInListGot(aMessageStore, aMessageList, tres[i].id); } @@ -1336,7 +1336,7 @@ MobileMessageDatabaseService.prototype = { } let self = this; - this.newTxn(READ_ONLY, function (error, txn, messageStore) { + this.newTxn(READ_ONLY, function (error, txn, stores) { if (error) { //TODO look at event.target.errorCode, pick appropriate error constant. if (DEBUG) debug("IDBRequest error " + error.target.errorCode); @@ -1344,6 +1344,9 @@ MobileMessageDatabaseService.prototype = { return; } + let messageStore = stores[0]; + let participantStore = stores[1]; + let messageList = { listId: -1, reverse: reverse, @@ -1363,6 +1366,7 @@ MobileMessageDatabaseService.prototype = { let singleFilterSuccessCb = function onsfsuccess(event) { if (messageList.stop) { + // Client called clearMessageList(). Return. return; } @@ -1379,10 +1383,11 @@ MobileMessageDatabaseService.prototype = { let singleFilterErrorCb = function onsferror(event) { if (messageList.stop) { + // Client called clearMessageList(). Return. return; } - if (DEBUG) debug("IDBRequest error " + event.target.errorCode); + if (DEBUG && event) debug("IDBRequest error " + event.target.errorCode); onNextMessageInListGotCb(-1); }; @@ -1396,6 +1401,7 @@ MobileMessageDatabaseService.prototype = { let multiFiltersSuccessCb = function onmfsuccess(contextIndex, event) { if (messageList.stop) { + // Client called clearMessageList(). Return. return; } @@ -1412,6 +1418,7 @@ MobileMessageDatabaseService.prototype = { let multiFiltersErrorCb = function onmferror(contextIndex, event) { if (messageList.stop) { + // Client called clearMessageList(). Return. return; } @@ -1449,17 +1456,19 @@ MobileMessageDatabaseService.prototype = { return messageStore.index(indexName).openKeyCursor(range, direction); }; - let createSimpleRangedRequest = function csrr(indexName, key) { + let createSimpleRangedRequest = function csrr(indexName, key, contextIndex) { let request = createRangedRequest(indexName, key); if (singleFilter) { request.onsuccess = singleFilterSuccessCb; request.onerror = singleFilterErrorCb; } else { - let contextIndex = numberOfContexts++; - messageList.contexts.push({ - processing: true, - results: [] - }); + if (contextIndex == null) { + contextIndex = numberOfContexts++; + messageList.contexts.push({ + processing: true, + results: [] + }); + } request.onsuccess = multiFiltersSuccessCb.bind(null, contextIndex); request.onerror = multiFiltersErrorCb.bind(null, contextIndex); } @@ -1476,17 +1485,37 @@ MobileMessageDatabaseService.prototype = { // match the values of filter.numbers if (filter.numbers) { if (DEBUG) debug("filter.numbers " + filter.numbers.join(", ")); - let multiNumbers = filter.numbers.length > 1; - if (!multiNumbers) { - createSimpleRangedRequest("number", filter.numbers[0]); - } else { - let contextIndex = -1; - if (!singleFilter) { - contextIndex = numberOfContexts++; - messageList.contexts.push({ - processing: true, - results: [] - }); + let contextIndex; + if (!singleFilter) { + contextIndex = numberOfContexts++; + messageList.contexts.push({ + processing: true, + results: [] + }); + } + self.findParticipantIdsByAddresses(participantStore, filter.numbers, + false, true, + function (participantIds) { + if (!participantIds || !participantIds.length) { + // Oops! No such participant at all. + + if (messageList.stop) { + // Client called clearMessageList(). Return. + return; + } + + if (singleFilter) { + onNextMessageInListGotCb(0); + } else { + multiFiltersGotCb(contextIndex, 0, 0); + } + return; + } + + if (participantIds.length == 1) { + createSimpleRangedRequest("participantIds", participantIds[0], + contextIndex); + return; } let multiNumbersGotCb = @@ -1495,6 +1524,7 @@ MobileMessageDatabaseService.prototype = { let multiNumbersSuccessCb = function onmnsuccess(queueIndex, event) { if (messageList.stop) { + // Client called clearMessageList(). Return. return; } @@ -1513,6 +1543,7 @@ MobileMessageDatabaseService.prototype = { let multiNumbersErrorCb = function onmnerror(queueIndex, event) { if (messageList.stop) { + // Client called clearMessageList(). Return. return; } @@ -1526,7 +1557,7 @@ MobileMessageDatabaseService.prototype = { results: [] }, { // For all numbers. - processing: filter.numbers.length, + processing: participantIds.length, results: [] }]; @@ -1545,12 +1576,13 @@ MobileMessageDatabaseService.prototype = { timeRequest.onsuccess = multiNumbersSuccessCb.bind(null, 0); timeRequest.onerror = multiNumbersErrorCb.bind(null, 0); - for (let i = 0; i < filter.numbers.length; i++) { - let request = createRangedRequest("number", filter.numbers[i]); + for (let i = 0; i < participantIds.length; i++) { + let request = createRangedRequest("participantIds", + participantIds[i]); request.onsuccess = multiNumbersSuccessCb.bind(null, 1); request.onerror = multiNumbersErrorCb.bind(null, 1); } - } + }); } // Retrieve the keys from the 'read' index that matches the value of @@ -1588,7 +1620,7 @@ MobileMessageDatabaseService.prototype = { } txn.onerror = singleFilterErrorCb; - }); + }, [MESSAGE_STORE_NAME, PARTICIPANT_STORE_NAME]); }, getNextMessageInList: function getNextMessageInList(listId, aRequest) { diff --git a/dom/mobilemessage/tests/marionette/test_filter_mixed.js b/dom/mobilemessage/tests/marionette/test_filter_mixed.js index 66a95803587c..8be418a6fc57 100644 --- a/dom/mobilemessage/tests/marionette/test_filter_mixed.js +++ b/dom/mobilemessage/tests/marionette/test_filter_mixed.js @@ -117,10 +117,10 @@ tasks.push(function populateMessages() { let count = 0; function sendMessage(iter) { - let request = sms.send("" + iter, "Nice to meet you"); + let request = sms.send("+1555531555" + iter, "Nice to meet you"); request.onsuccess = function onRequestSuccess(event) { sms.addEventListener("received", onReceived); - sendSmsToEmulator("" + iter, "Nice to meet you, too"); + sendSmsToEmulator("555541555" + iter, "Nice to meet you, too"); } request.onerror = function onRequestError(event) { tasks.finish(); @@ -157,9 +157,9 @@ tasks.push(function testDeliveryAndNumber() { log("Checking delivery == sent && number == 0"); let filter = new MozSmsFilter(); filter.delivery = "sent"; - filter.numbers = ["0"]; + filter.numbers = ["+15555315550"]; getAllMessages(function (messages) { - // Only { delivery: "sent", receiver: "0", read: true } + // Only { delivery: "sent", receiver: "+15555315550", read: true } is(messages.length, 1, "message count"); for (let i = 0; i < messages.length; i++) { let message = messages[i]; @@ -199,11 +199,11 @@ tasks.push(function testDeliveryAndRead() { filter.delivery = "received"; filter.read = true; getAllMessages(function (messages) { - // { delivery: "received", sender: "0", read: true }, - // { delivery: "received", sender: "2", read: true }, - // { delivery: "received", sender: "4", read: true }, - // { delivery: "received", sender: "6", read: true }, and - // { delivery: "received", sender: "8", read: true }, + // { delivery: "received", sender: "5555415550", read: true }, + // { delivery: "received", sender: "5555415552", read: true }, + // { delivery: "received", sender: "5555415554", read: true }, + // { delivery: "received", sender: "5555415556", read: true }, and + // { delivery: "received", sender: "5555415558", read: true }, is(messages.length, NUM_THREADS / 2, "message count"); for (let i = 0; i < messages.length; i++) { let message = messages[i]; @@ -237,12 +237,11 @@ tasks.push(function testDeliveryAndReadNotFound() { tasks.push(function testNumberAndRead() { log("Checking number == 0 && read == true"); let filter = new MozSmsFilter(); - filter.numbers = ["0"]; + filter.numbers = ["5555415550"]; filter.read = true; getAllMessages(function (messages) { - // { delivery: "sent", receiver: "0", read: true }, and - // { delivery: "received", sender: "0", read: true } - is(messages.length, 2, "message count"); + // { delivery: "received", sender: "5555415550", read: true } + is(messages.length, 1, "message count"); for (let i = 0; i < messages.length; i++) { let message = messages[i]; if (!((message.sender == filter.numbers[0]) @@ -278,13 +277,11 @@ tasks.push(function testNumberAndReadNotFound() { tasks.push(function testMultipleNumbers() { log("Checking number == 0 || number == 1"); let filter = new MozSmsFilter(); - filter.numbers = ["0", "1"]; + filter.numbers = ["5555415550", "5555415551"]; getAllMessages(function (messages) { - // { delivery: "sent", receiver: "0", read: true } - // { delivery: "received", sender: "0", read: true } - // { delivery: "sent", receiver: "1", read: true } - // { delivery: "received", sender: "1", read: false } - is(messages.length, 4, "message count"); + // { delivery: "received", sender: "5555415550", read: true } + // { delivery: "received", sender: "5555415551", read: false } + is(messages.length, 2, "message count"); for (let i = 0; i < messages.length; i++) { let message = messages[i]; if (!((message.sender == filter.numbers[0]) @@ -314,10 +311,10 @@ tasks.push(function testDeliveryAndMultipleNumbers() { log("Checking delivery == sent && (number == 0 || number == 1)"); let filter = new MozSmsFilter(); filter.delivery = "sent"; - filter.numbers = ["0", "1"]; + filter.numbers = ["+15555315550", "+15555315551"]; getAllMessages(function (messages) { - // { delivery: "sent", receiver: "0", read: true } - // { delivery: "sent", receiver: "1", read: true } + // { delivery: "sent", receiver: "+15555315550", read: true } + // { delivery: "sent", receiver: "+15555315551", read: true } is(messages.length, 2, "message count"); for (let i = 0; i < messages.length; i++) { let message = messages[i]; @@ -337,13 +334,12 @@ tasks.push(function testDeliveryAndMultipleNumbers() { tasks.push(function testMultipleNumbersAndRead() { log("Checking (number == 0 || number == 1) && read == true"); let filter = new MozSmsFilter(); - filter.numbers = ["0", "1"]; + filter.numbers = ["+15555315550", "5555415550"]; filter.read = true; getAllMessages(function (messages) { - // { delivery: "sent", receiver: "0", read: true } - // { delivery: "received", sender: "0", read: true } - // { delivery: "sent", receiver: "1", read: true } - is(messages.length, 3, "message count"); + // { delivery: "sent", receiver: "+15555315550", read: true } + // { delivery: "received", sender: "5555415550", read: true } + is(messages.length, 2, "message count"); for (let i = 0; i < messages.length; i++) { let message = messages[i]; is(message.read, filter.read, "message read"); @@ -359,6 +355,44 @@ tasks.push(function testMultipleNumbersAndRead() { }, filter); }); +tasks.push(function testNationalNumber() { + log("Checking number = 5555315550"); + let filter = new MozSmsFilter(); + filter.numbers = ["5555315550"]; + getAllMessages(function (messages) { + // { delivery: "sent", receiver: "+15555315550", read: true } + is(messages.length, 1, "message count"); + for (let i = 0; i < messages.length; i++) { + let message = messages[i]; + if (!((message.sender == "+15555315550") + || (message.receiver == "+15555315550"))) { + ok(false, "message sendor or receiver number"); + } + } + + tasks.next(); + }, filter); +}); + +tasks.push(function testInternationalNumber() { + log("Checking number = +15555415550"); + let filter = new MozSmsFilter(); + filter.numbers = ["+15555415550"]; + getAllMessages(function (messages) { + // { delivery: "received", sender: "5555415550", read: true } + is(messages.length, 1, "message count"); + for (let i = 0; i < messages.length; i++) { + let message = messages[i]; + if (!((message.sender == "5555415550") + || (message.receiver == "5555415550"))) { + ok(false, "message sendor or receiver number"); + } + } + + tasks.next(); + }, filter); +}); + tasks.push(deleteAllMessages); // WARNING: All tasks should be pushed before this!!! diff --git a/dom/mobilemessage/tests/marionette/test_getmessage.js b/dom/mobilemessage/tests/marionette/test_getmessage.js index ad6649e08403..eff9c4b5394a 100644 --- a/dom/mobilemessage/tests/marionette/test_getmessage.js +++ b/dom/mobilemessage/tests/marionette/test_getmessage.js @@ -6,9 +6,8 @@ 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 +const REMOTE = "5559997777"; // the remote number +const EMULATOR = "15555215554"; // the emulator's number let sms = window.navigator.mozSms; let inText = "Incoming SMS message. Mozilla Firefox OS!"; @@ -40,8 +39,8 @@ 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, EMULATOR, "receiver"); + is(incomingSms.sender, REMOTE, "sender"); is(incomingSms.messageClass, "normal", "messageClass"); ok(incomingSms.timestamp instanceof Date, "timestamp is instanceof date"); inSmsTimeStamp = incomingSms.timestamp; @@ -67,8 +66,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"); + is(sentSms.receiver, REMOTE, "receiver"); + is(sentSms.sender, EMULATOR, "sender"); is(sentSms.messageClass, "normal", "messageClass"); ok(sentSms.timestamp instanceof Date, "timestamp is instanceof date"); outSmsTimeStamp = sentSms.timestamp; @@ -116,8 +115,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"); + is(foundSms.receiver, EMULATOR, "receiver"); + is(foundSms.sender, REMOTE, "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 +148,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"); + is(foundSms.receiver, REMOTE, "receiver"); + is(foundSms.sender, EMULATOR, "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/mobilemessage/tests/marionette/test_incoming.js b/dom/mobilemessage/tests/marionette/test_incoming.js index 856de71120fe..512d305df987 100644 --- a/dom/mobilemessage/tests/marionette/test_incoming.js +++ b/dom/mobilemessage/tests/marionette/test_incoming.js @@ -6,16 +6,15 @@ 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 +const SENDER = "5555552368"; // the remote number +const RECEIVER = "15555215554"; // the emulator's number let sms = window.navigator.mozSms; 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; diff --git a/dom/mobilemessage/tests/marionette/test_incoming_delete.js b/dom/mobilemessage/tests/marionette/test_incoming_delete.js index c76569691886..501e9b53f14e 100644 --- a/dom/mobilemessage/tests/marionette/test_incoming_delete.js +++ b/dom/mobilemessage/tests/marionette/test_incoming_delete.js @@ -6,9 +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 +const SENDER = "5555552368"; // the remote number +const RECEIVER = "15555215554"; // the emulator's number let sms = window.navigator.mozSms; let msgText = "Mozilla Firefox OS!"; @@ -39,7 +38,7 @@ function simulateIncomingSms() { verifySmsExists(incomingSms); }; - runEmulatorCmd("sms send " + REMOTE + " " + msgText, function(result) { + runEmulatorCmd("sms send " + SENDER + " " + msgText, function(result) { is(result[0], "OK", "emulator output"); }); } diff --git a/dom/mobilemessage/tests/marionette/test_incoming_max_segments.js b/dom/mobilemessage/tests/marionette/test_incoming_max_segments.js index 3fc3054b37dc..2e5ee2a02fd9 100644 --- a/dom/mobilemessage/tests/marionette/test_incoming_max_segments.js +++ b/dom/mobilemessage/tests/marionette/test_incoming_max_segments.js @@ -11,9 +11,8 @@ let sms = window.navigator.mozSms; let maxCharsPerSms = 160; let maxSegments = 10; // 10 message segments concatenated into 1 multipart SMS -const REMOTE = "5551234567"; -const REMOTE_FMT = "+15551234567"; // the normalized remote number -const EMU_FMT = "+15555215554"; // the emulator's number +const REMOTE = "5551234567"; // the remote number +const EMULATOR = "15555215554"; // the emulator's number function verifyInitialState() { log("Verifying initial state."); @@ -41,8 +40,8 @@ function simulateIncomingSms() { is(incomingSms.body, msgText, "msg body"); is(incomingSms.delivery, "received", "delivery"); is(incomingSms.read, false, "read"); - is(incomingSms.receiver, EMU_FMT, "receiver"); - is(incomingSms.sender, REMOTE_FMT, "sender"); + is(incomingSms.receiver, EMULATOR, "receiver"); + is(incomingSms.sender, REMOTE, "sender"); ok(incomingSms.timestamp instanceof Date, "timestamp is instanceof date"); verifySmsExists(incomingSms); diff --git a/dom/mobilemessage/tests/marionette/test_incoming_multipart.js b/dom/mobilemessage/tests/marionette/test_incoming_multipart.js index 326850b48992..bf4342d2cb8c 100644 --- a/dom/mobilemessage/tests/marionette/test_incoming_multipart.js +++ b/dom/mobilemessage/tests/marionette/test_incoming_multipart.js @@ -6,9 +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 +const SENDER = "5555552368"; // the remote number +const RECEIVER = "15555215554"; // the emulator's number let sms = window.navigator.mozSms; @@ -43,7 +42,7 @@ function simulateIncomingSms() { verifySmsExists(incomingSms); }; - runEmulatorCmd("sms send " + REMOTE + " " + msgText, function(result) { + runEmulatorCmd("sms send " + SENDER + " " + msgText, function(result) { is(result[0], "OK", "emulator output"); }); } diff --git a/dom/mobilemessage/tests/marionette/test_outgoing.js b/dom/mobilemessage/tests/marionette/test_outgoing.js index a086a8f530f0..219cbc9a14f3 100644 --- a/dom/mobilemessage/tests/marionette/test_outgoing.js +++ b/dom/mobilemessage/tests/marionette/test_outgoing.js @@ -7,7 +7,7 @@ SpecialPowers.setBoolPref("dom.sms.enabled", true); SpecialPowers.setBoolPref("dom.sms.strict7BitEncoding", false); SpecialPowers.addPermission("sms", true, document); -const SENDER = "+15555215554"; // the emulator's number +const SENDER = "15555215554"; // the emulator's number let sms = window.navigator.mozSms; const SHORT_BODY = "Hello SMS world!"; diff --git a/dom/mobilemessage/tests/marionette/test_outgoing_delete.js b/dom/mobilemessage/tests/marionette/test_outgoing_delete.js index 75c9e5d5b7b6..604be7775aa2 100644 --- a/dom/mobilemessage/tests/marionette/test_outgoing_delete.js +++ b/dom/mobilemessage/tests/marionette/test_outgoing_delete.js @@ -6,9 +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 +const SENDER = "15555215554"; // the emulator's number +const RECEIVER = "5551117777"; // the destination number let sms = window.navigator.mozSms; let msgText = "Mozilla Firefox OS!"; @@ -45,7 +44,7 @@ function sendSms() { if (gotSmsOnsent && gotReqOnsuccess) { verifySmsExists(smsId); } }; - let requestRet = sms.send(DEST, msgText); + let requestRet = sms.send(RECEIVER, msgText); ok(requestRet, "smsrequest obj returned"); requestRet.onsuccess = function(event) {