Bug 833291 - Part 7/7: fix createMessageList(). r=hsinyi

This commit is contained in:
Vicamo Yang 2013-03-08 00:12:56 +08:00
parent a4cc55dcc5
commit 5d4c05d548
9 changed files with 145 additions and 85 deletions

View File

@ -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) {

View File

@ -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!!!

View File

@ -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");

View File

@ -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;

View File

@ -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");
});
}

View File

@ -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);

View File

@ -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");
});
}

View File

@ -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!";

View File

@ -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) {