Closed
Bug 850140
Opened 12 years ago
Closed 11 years ago
B2G MMS: implement MmsService.handleDeliveryIndication() to handle delivery report
Categories
(Core :: DOM: Device Interfaces, defect)
Tracking
()
Tracking | Status | |
---|---|---|
firefox26 | --- | fixed |
People
(Reporter: airpingu, Assigned: airpingu)
References
Details
(Keywords: dev-doc-needed, Whiteboard: RN6/14 [fixed-in-birch])
Attachments
(3 files, 6 obsolete files)
(deleted),
patch
|
vicamo
:
review+
|
Details | Diff | Splinter Review |
(deleted),
patch
|
vicamo
:
review+
|
Details | Diff | Splinter Review |
(deleted),
patch
|
vicamo
:
review-
|
Details | Diff | Splinter Review |
This is not a critical issue because it doesn't block any MMS user stories so far. In the future, two things we need to do here:
1. Use gMobileMessageDatabaseService.setMessageDelivery() to reset the delivery status to "success" or "error" for a specific receiver.
2. Fire "mms-delivery-success" or "mms-delivery-error" observer topics to MobileMessageManager.
Assignee | ||
Comment 1•12 years ago
|
||
For this moment, I'm wondering do we really need to do the delivery report after sending MMS. Let PM decide this.
blocking-b2g: --- → leo?
Comment 2•12 years ago
|
||
(In reply to Gene Lian [:gene] from comment #1)
> For this moment, I'm wondering do we really need to do the delivery report
> after sending MMS. Let PM decide this.
It is important for feature parity between SMS and MMS. Why would SMS have that but not MMS?
Assignee | ||
Comment 3•12 years ago
|
||
(In reply to Mounir Lamouri (:mounir) from comment #2)
> It is important for feature parity between SMS and MMS. Why would SMS have
> that but not MMS?
Yes, I agree with you! I just don't see any MMS story addressing this. If we used to have a similar SMS story, then we should implement this as well.
Assignee | ||
Comment 4•12 years ago
|
||
This one also blocks the DOM APIs because we need to notify the Gaia about the delivery reports through the following events in nsIDOMMozMobileMessageManager:
[implicit_jscontext] attribute jsval ondeliverysuccess;
[implicit_jscontext] attribute jsval ondeliveryerror;
Blocks: b2g-mms-dom-api
Comment 6•12 years ago
|
||
(In reply to Gene Lian [:gene] from comment #5)
> Also need to be IPC'ed.
We don't really have to depend on IPC to land this bug. Any reasons?
Assignee | ||
Comment 7•12 years ago
|
||
(In reply to Vicamo Yang [:vicamo][:vyang] from comment #6)
> (In reply to Gene Lian [:gene] from comment #5)
> > Also need to be IPC'ed.
>
> We don't really have to depend on IPC to land this bug. Any reasons?
Don't we need to fire delivery-success or delivery-error observer topics from parent?
Comment 8•12 years ago
|
||
(In reply to Gene Lian [:gene] from comment #7)
> Don't we need to fire delivery-success or delivery-error observer topics
> from parent?
Sorry, it seems I misunderstood you. This bug blocks bug 847744.
Assignee | ||
Updated•12 years ago
|
Keywords: dev-doc-needed
Assignee | ||
Comment 10•12 years ago
|
||
(In reply to Chris Lee [:clee] from comment #9)
> Kev, do we require delivery report for MMS? Thanks.
If this one is indeed required, I'll come back to work on this ASAP. Btw, another similar MMS feature should be discussed as well. That is, *MMS Read Report* addressed at Bug 852863, which is a bit different from Delivery Report.
Comment 11•12 years ago
|
||
There's a user story for when messages fail to be sent, is there a reason why this wouldn't be used? I don't see it as a blocking issue, but as a matter of course I'd expect there to be an acknowledgement of when it has been sent in order to satisfy the criteria of letting the user know if the delivery is unsuccessful. This seems like something that should be there.
Flags: needinfo?(kev)
Comment 12•12 years ago
|
||
Plus-ing, but for the future we can provide a reference to a user story as rationale? We do have a list of them somewhere, correct?
blocking-b2g: leo? → leo+
Comment 13•12 years ago
|
||
(In reply to Lucas Adamski from comment #12)
> Plus-ing, but for the future we can provide a reference to a user story as
> rationale? We do have a list of them somewhere, correct?
Yes, we do have a full list of all v1.1 users stories.
Comment 14•12 years ago
|
||
After discussing with Lucas, this bug isn't in current user story. Remove it from Leo+ list.
blocking-b2g: leo+ → ---
Updated•12 years ago
|
No longer blocks: b2g-mms-dom-api, 847744
Comment 15•12 years ago
|
||
(In reply to Kev Needham [:kev] from comment #11)
> There's a user story for when messages fail to be sent, is there a reason
> why this wouldn't be used? I don't see it as a blocking issue, but as a
> matter of course I'd expect there to be an acknowledgement of when it has
> been sent in order to satisfy the criteria of letting the user know if the
> delivery is unsuccessful. This seems like something that should be there.
This is not sufficient to *block* on this feature at this point. Unless a carrier or OEM is demanding it's required, we should not include.
NI? on Moz Product and TEF Product to sign off on *not* including this feature.
Flags: needinfo?(ffos-product)
Updated•12 years ago
|
Flags: needinfo?(dcoloma)
Comment 16•12 years ago
|
||
Is this about including a setting in the UI to allow the users to require a delivery report?
Flags: needinfo?(dcoloma) → needinfo?(dietrich)
Updated•11 years ago
|
Whiteboard: RN5/29
Updated•11 years ago
|
Whiteboard: RN5/29 → RN6/14
Comment 17•11 years ago
|
||
Per comment #10 and #16, stating an assumption that this bug is not a read/delivery report, which is a status indicator of when a sent message is successfully delivered to a handset after being submitted to the network (similar to an email read receipt).
While there are no blocking requirements (e.g the device ship for 1.1 would not be held) the mandatory requirements that must be fulfilled in a follow-on version for handling sent messages and displaying delivery status are as follows, and should be added as a blocker for 1.2 if they cannot be included in 1.1:
- Display of a list of messages and the status for them when the Outbox folder is open. Messages will be listed in a chronological order, showing the newest on the top. Messages show the intended recipients.
- Support of a graphical indication (e.g. icon) on the screen to the user when the sending is carried out in the background.
- In this folder the options for the user are:
-- “send message, when selected”
-- “delete message, when selected”
-- “Send all messages”
- The Outbox folder is used to temporary store the message prior to being sent. Each message, after is being composed and the “send” option is chosen, will be moved into the Outbox folder.
- After the terminal has sent the message successfully to the network the message will no longer appear in the Outbox but instead be shown in the „sent“ folder and a pop up displayed.
- In the same fashion, when a user chooses to re-send or forward a message, the message is moved to the Outbox folder after the “send” button is pushed.
- After the user has selected “send” and the phone has placed the message in the Outbox, the UI of the phone will be freed and the full functionality of the phone will be available to the user.
- The Outbox will retain its state even though the phone boots itself or is turned off by the user.
- Retry schema must attempt 4 or 5 retries. Recommended 4 retries with retry at following Iintervals-1 minute,5 minutes,10 minutes, 30 minutes.
- STOP resending after the fourth or fifth retry(as per retry schema). The user gets informed about the failure with a warning message.
- If the error is considered permanent the retry schema will stop and a splash screen is shown to the user.
- Status of the messages in the Outbox are:
-- Status outbox message: Sending: a connection is being made for the message to be sent
-- Status outbox message: Resending: a previous sending has failed; the phone will try to send the message again after a time-out period; User is able to choose “send” action which will restart the sending immediately.
-- Status outbox message: Failed: the maximum number of sending attempts has been reached and the sending has been failed; when a message turns into a “Failed” status, the UI will pop-up a notification inform the user about the failure.
-- Background sending: The background process to send the MMS to the Relay/Server starts immediately after initiating ‘send’.
- If the sending of the message fails the customer has to be informed of the failing, then the message will be marked as failed in the Outbox.
Flags: needinfo?(ffos-product)
Comment 18•11 years ago
|
||
Re comment #16, we already have that, for SMS. This would also apply that setting for MMS.
Per comment #17, not blocking on this for now. Not ideal, but we need to reduce feature scope, and can ship this improvement in the next release, so koi+.
blocking-b2g: --- → koi+
Flags: needinfo?(dietrich)
Assignee | ||
Comment 19•11 years ago
|
||
I'll upload my patch tomorrow.
Assignee | ||
Comment 20•11 years ago
|
||
Attachment #773917 -
Flags: review?(vyang)
Attachment #773917 -
Flags: review?(ctai)
Assignee | ||
Comment 21•11 years ago
|
||
Attachment #773918 -
Flags: review?(vyang)
Attachment #773918 -
Flags: review?(ctai)
Assignee | ||
Updated•11 years ago
|
Attachment #773917 -
Flags: review?(vyang)
Attachment #773917 -
Flags: review?(ctai)
Assignee | ||
Updated•11 years ago
|
Attachment #773918 -
Flags: review?(vyang)
Attachment #773918 -
Flags: review?(ctai)
Assignee | ||
Comment 22•11 years ago
|
||
Attachment #773917 -
Attachment is obsolete: true
Attachment #774509 -
Flags: review?(vyang)
Attachment #774509 -
Flags: review?(ctai)
Assignee | ||
Comment 23•11 years ago
|
||
Attachment #773918 -
Attachment is obsolete: true
Attachment #774510 -
Flags: review?(vyang)
Attachment #774510 -
Flags: review?(ctai)
Comment 24•11 years ago
|
||
Comment on attachment 774509 [details] [diff] [review]
Part 1, provide and correct DB functions
Review of attachment 774509 [details] [diff] [review]:
-----------------------------------------------------------------
::: dom/mobilemessage/interfaces/nsIRilMobileMessageDatabaseService.idl
@@ +69,5 @@
> * |aReceiver| DOMString: the phone number of receiver (for MMS; can be null).
> * |aDelivery| DOMString: the new delivery value to update (can be null).
> * |aDeliveryStatus| DOMString: the new delivery status to update (can be null).
> * |aCallback| nsIRilMobileMessageDatabaseCallback: an optional callback.
> + * |aEnvelopeId| DOMString: to indentify the MMS for the delivery report.
For one time I can't really map this variable to MMS specs. It should be "Message-ID" header field but that conflicts with "aMessageId" above. Please have the same description as you have for |getMessageRecordByEnvelopeId|.
@@ +76,5 @@
> in DOMString aReceiver,
> in DOMString aDelivery,
> in DOMString aDeliveryStatus,
> + [optional] in nsIRilMobileMessageDatabaseCallback aCallback,
> + [optional] in DOMString aEnvelopeId);
Why not just make it null-able like aReceiver/aDelivery/aDeliveryStatus do?
Attachment #774509 -
Flags: review?(vyang) → review+
Comment 25•11 years ago
|
||
Comment on attachment 774510 [details] [diff] [review]
Part 2, handle delivery report
Review of attachment 774510 [details] [diff] [review]:
-----------------------------------------------------------------
I'm also worry about separating an operation to a get and a set query. Maybe we should have a |setMessageDeliveryById()| and a |setMessageDeliveryByEnvelopeId()|.
::: dom/mobilemessage/src/ril/MmsService.js
@@ +1524,5 @@
> + debug("handleDeliveryIndication: got delivery report" +
> + JSON.stringify(aMsg));
> + }
> +
> + let headers = aMsg.headers;
trailing ws.
@@ +1529,5 @@
> + if (!headers || !headers["message-id"] || !headers["x-mms-status"] ||
> + !headers.to || !headers.to.address) {
> + if (DEBUG) debug("The delivery report is incomplete. Fail to update.");
> + return;
> + }
We have checked these mandatory fields in PDU helpers.
@@ +1544,5 @@
> + if (!normalizedAddress) {
> + if (DEBUG) debug("Normalized address is not valid. Return.");
> + return;
> + }
> + let parsedAddress = PhoneNumberUtils.parseWithMCC(normalizedAddress, null);
Please don't do phone number specific parsing/matching outside MobileMessageDatabaseService. Instead, just feed |headers.to.address| to the |setMessageDelivery()| call as the second argument.
@@ +1570,5 @@
> + }
> +
> + for (let i = 0; i < aMessageRecord.receivers.length; i++) {
> + let receiver = aMessageRecord.receivers[i];
> + let normalizedReceiver = PhoneNumberUtils.normalize(receiver, false);
The whole for-loop should be moved into database service.
@@ +1714,5 @@
> message["timestamp"] = Date.now();
> message["receivers"] = receivers;
> + try {
> + message["deliveryStatusRequested"] =
> + Services.prefs.getBoolPref("dom.sms.requestStatusReport");
SMS & MMS are quite different thing. I think we should have an independent setting for MMS here.
Attachment #774510 -
Flags: review?(vyang)
Comment 26•11 years ago
|
||
Comment on attachment 774509 [details] [diff] [review]
Part 1, provide and correct DB functions
Review of attachment 774509 [details] [diff] [review]:
-----------------------------------------------------------------
::: dom/mobilemessage/interfaces/nsIRilMobileMessageDatabaseService.idl
@@ +100,5 @@
> + * |aCallback| nsIRilMobileMessageDatabaseRecordCallback: a callback which
> + * takes result flag and message record as parameters.
> + */
> + void getMessageRecordByEnvelopeId(in DOMString aEnvelopeId,
> + in nsIRilMobileMessageDatabaseRecordCallback aCallback);
Second thought, please have a |setMessageDeliveryByEnvelopeId| instead.
Attachment #774509 -
Flags: review+
Assignee | ||
Comment 29•11 years ago
|
||
Attachment #774509 -
Attachment is obsolete: true
Attachment #774509 -
Flags: review?(ctai)
Attachment #783619 -
Flags: review?(vyang)
Assignee | ||
Comment 30•11 years ago
|
||
Attachment #774510 -
Attachment is obsolete: true
Attachment #774510 -
Flags: review?(ctai)
Attachment #783620 -
Flags: review?(vyang)
Comment 31•11 years ago
|
||
Comment on attachment 783619 [details] [diff] [review]
Part 1, provide and correct DB functions, V2
Review of attachment 783619 [details] [diff] [review]:
-----------------------------------------------------------------
::: dom/mobilemessage/src/ril/MobileMessageDatabaseService.js
@@ +780,5 @@
> + messageStore.deleteIndex("envelopeId");
> + }
> +
> + // Create new "envelopeId" indexes.
> + messageStore.createIndex("envelopeId", "envelopeIdIndex", { unique: true });
We do save all MMS header fields since bug 845643, so I think we could set "envelopeIdIndex" values for existing outgoing MMS messages by reading their |messageRecord.headers["message-id"]|.
@@ +1364,5 @@
> + getRequest = messageStore.index("envelopeId").get(id);
> + } else {
> + if (DEBUG) debug("ID type: " + type + " is invalid");
> + notifyResult(Cr.NS_ERROR_FAILURE);
> + return;
|updateMessageDeliveryById| is now an internal function. There can't be an |else| case.
Attachment #783619 -
Flags: review?(vyang)
Comment 32•11 years ago
|
||
Comment on attachment 783620 [details] [diff] [review]
Part 2, handle delivery report, V2
Review of attachment 783620 [details] [diff] [review]:
-----------------------------------------------------------------
::: dom/mobilemessage/src/ril/MmsService.js
@@ +1533,5 @@
> + }
> +
> + let headers = aMsg.headers;
> + let envelopeId = headers["message-id"];
> + let address = headers.to ? headers.to.address : null;
|headers.to| is a mandatory field in M-Delivery.ind PDU. You can skip checking here.
@@ +1543,5 @@
> +
> + if (!address) {
> + if (DEBUG) debug("Address is invalid to update. Return.");
> + return;
> + }
ditto.
@@ +1554,5 @@
> + } else if (mmsStatus === MMS.MMS_PDU_STATUS_DEFERRED) {
> + deliverStatus = DELIVERY_STATUS_MANUAL;
> + } else {
> + if (DEBUG) debug("MMS status is invalid to update");
> + return;
From OMA-TS-MMS_ENC-V1_3-20110913-A subclause 9.3 "X-Mms-Status", in the M-Delivery.ind the X-Mms-Status could be MMS.MMS_PDU_STATUS_{EXPIRED,RETRIEVED,REJECTED,DEFERRED,UNRECOGNIZED,INDETERMINATE,FORWARDED,UNREACHABLE}.
From bug 760065 attachment 732217 [details], we have delivery status values "success", "pending", "error" for sent messages with delivery status requisition, and "not-applicable" for those without delivery status requisition.
So, I think we should have:
"success": RETRIEVED
"error": EXPIRED, REJECTED, UNRECOGNIZED, UNREACHABLE
"pending": DEFERRED
"not-applicable": INDETERMINATE
(ignored): FORWARDED or anything else.
@@ +1570,5 @@
> +
> + // Notifying observers the delivery status is updated.
> + Services.obs.notifyObservers(aDomMessage,
> + deliverStatus === DELIVERY_STATUS_SUCCESS ?
> + kSmsDeliverySuccessObserverTopic : kSmsDeliveryErrorObserverTopic,
Per offline discuss, let's notify kSmsDeliverySuccessObserverTopic only on DELIVERY_STATUS_SUCCESS and kSmsDeliveryErrorObserverTopic only on DELIVERY_STATUS_REJECTED.
Attachment #783620 -
Flags: review?(vyang)
Assignee | ||
Comment 33•11 years ago
|
||
Attachment #783619 -
Attachment is obsolete: true
Attachment #784315 -
Flags: review?(vyang)
Assignee | ||
Comment 34•11 years ago
|
||
Attachment #783620 -
Attachment is obsolete: true
Attachment #784316 -
Flags: review?(vyang)
Comment 35•11 years ago
|
||
Comment on attachment 784315 [details] [diff] [review]
Part 1, provide and correct DB functions, V3
Review of attachment 784315 [details] [diff] [review]:
-----------------------------------------------------------------
Thanks :)
Attachment #784315 -
Flags: review?(vyang) → review+
Comment 36•11 years ago
|
||
Comment on attachment 784316 [details] [diff] [review]
Part 2, handle delivery report, V3
Review of attachment 784316 [details] [diff] [review]:
-----------------------------------------------------------------
::: dom/mobilemessage/src/gonk/MmsService.js
@@ +1608,5 @@
> + return;
> + }
> +
> + // Notifying observers the delivery status is updated.
> + Services.obs.notifyObservers(aDomMessage, topic, null);
trailing ws.
Attachment #784316 -
Flags: review?(vyang) → review+
Assignee | ||
Comment 37•11 years ago
|
||
https://hg.mozilla.org/projects/birch/rev/0b43cdc93764
https://hg.mozilla.org/projects/birch/rev/c95c169d959e
Whiteboard: RN6/14 → RN6/14 [fixed-in-birch]
Comment 38•11 years ago
|
||
https://hg.mozilla.org/mozilla-central/rev/0b43cdc93764
https://hg.mozilla.org/mozilla-central/rev/c95c169d959e
Status: NEW → RESOLVED
Closed: 11 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla25
Assignee | ||
Comment 39•11 years ago
|
||
Please see bug 876746, comment #10. Gaia is hoping to merge SMS/MMS into one entry for delivery report.
Attachment #786200 -
Flags: review?(vyang)
Comment 40•11 years ago
|
||
Comment on attachment 786200 [details] [diff] [review]
Part 3, new setting key
Review of attachment 786200 [details] [diff] [review]:
-----------------------------------------------------------------
Just like what we had discussed, MMS is quite different from SMS. We provide two different keys so that content page may choose what fits it best. Whether or not should MMS Delivery Indication be tied to SMS-DELIVER-REPORT is a policy to be decided in Gaia, not Gecko. We don't commit policies into Gecko. We commit only mechanisms.
Attachment #786200 -
Flags: review?(vyang) → review-
Updated•11 years ago
|
status-firefox26:
--- → fixed
You need to log in
before you can comment on or make changes to this bug.
Description
•