Hi,
Yesterday Kan-ru, HsinYi, Price and I had a meeting about merging
SMS/MMS webapi. We would like to give some results/proposal below and
your opinions are welcome.
The changes made are mainly renames of various types, and current SMS
implementation will mostly left untouched. The most significant change
should be retype and rename `SmsMessage.body` to a nsIDOMDocument-typed
attribute `contentDocument`, which will embrace both SMS and MMS content
and allow sharing underlying database and providing same API for user
applications dealing with SMS/MMS messages. The
`SmsService.createSmsMessage` is removed, use constructor of the new
message type instead.
For differences between previous WebMMS API proposal:
1. the two `send` function in MmsManager is unified as one.
2. {fetch,forward,cancel}Message APIs in MmsManager are obsoleted for now.
Note that DOMRequest transition is *NOT* covered in following diff,
although it's already in plan.
[Renames]
* nsIDOMMozNavigatorSms to nsIDOMMozNavigatorMessage
* nsIDOMMozSmsManager to nsIDOMMozMessageManager
* nsIDOMMozSmsMessage to nsIDOMMozMessage
* nsIDOMMozSmsRequest to nsIDOMMozMessageRequest
* nsIDOMMozSmsEvent to nsIDOMMozMessageEvent
* nsIDOMMozSmsFilter to nsIDOMMozMessageFilter
* nsIDOMMozSmsCursor to nsIDOMMozMessageCursor
* nsISmsRequestManager to nsIMessageRequestManager
* nsISmsDatabaseService to nsIMessageDatabaseService
* nsISmsService to nsIMessageService
[API Changes]
// Rename only
-interface nsIDOMMozNavigatorSms : nsISupports
+interface nsIDOMMozNavigatorMessage : nsISupports
{
// Rename only
- readonly attribute nsIDOMMozSmsManager mozSms;
+ readonly attribute nsIDOMMozMessageManager mozMessage;
};
// Rename only
-interface nsIDOMMozSmsCursor : nsISupports
+interface nsIDOMMozMessageCursor : nsISupports
{
// Rename only
- readonly attribute nsIDOMMozSmsMessage message;
+ readonly attribute nsIDOMMozMessage message;
void continue();
};
// Rename only
-interface nsIDOMMozSmsEvent : nsIDOMEvent
+interface nsIDOMMozMessageEvent : nsIDOMEvent
{
// Rename only
[binaryname(MessageMoz)]
- readonly attribute nsIDOMMozSmsMessage message;
+ readonly attribute nsIDOMMozMessage message;
};
// Rename only
-interface nsIDOMMozSmsFilter : nsISupports
+interface nsIDOMMozMessageFilter : nsISupports
{
...
};
-interface nsIDOMMozSmsManager : nsIDOMEventTarget
+interface nsIDOMMozMessageManager : nsIDOMEventTarget
{
unsigned short getNumberOfMessagesForText(in DOMString text);
// Send a message object instead of text string and always return an
// array of nsIDOMMozMessageRequest objects. The `number` parameter is
// removed and nsIDOMMozMessage.receiver will be referred to.
- jsval send(in jsval number,
- in DOMString message);
+ void send(in nsIDOMMozMessage message,
+ out unsigned long length,
+ [array, size_is(length), retval] out nsIDOMMozMessageRequest requests);
// Rename only
- [binaryname(GetMessageMoz)] nsIDOMMozSmsRequest getMessage(in long id);
+ [binaryname(GetMessageMoz)] nsIDOMMozMessageRequest getMessage(in long
id);
// Rename only
- nsIDOMMozSmsRequest delete(in jsval param);
+ nsIDOMMozMessageRequest delete(in jsval param);
// Rename only
- nsIDOMMozSmsRequest getMessages(in nsIDOMMozSmsFilter filter,
- in boolean reverse);
+ nsIDOMMozMessageRequest getMessages(in nsIDOMMozMessageFilter filter,
+ in boolean reverse);
...
};
// Constructor of nsIDOMMozMessage class.
+nsIDOMMozMessagensIDOMMozMessage(
+anyreceiver,
+Document document
+);
[Constructor]
-interface nsIDOMMozSmsMessage : nsISupports
+interface nsIDOMMozMessage : nsISupports
{
...
// Retype and rename message body attribute to a nsIDOMDocument-typed
// contentDocument attribute. The Content-Type of this attribute will be
// "text/plain" for SMS & text-based MMS, and "application/smil+xml" for
// SMIL-based MMS. Other values may also be possible.
- readonly attribute DOMString body;
+ readonly attribute nsIDOMDocument contentDocument;
// For MMS attachments
+ readonly attribute MessageAttachmentStorage attachments;
};
// New interface for message attachments access
+interface MessageAttachmentStorage
+{
+getter Blob getAttachment(DOMString name);
+setter creator void setAttachment(DOMString name, Blob attachment);
+deleter void deleteAttachment(DOMString name);
+}
// Rename only
-interface nsIDOMMozSmsRequest : nsIDOMEventTarget
+interface nsIDOMMozMessageRequest : nsIDOMEventTarget
{
...
};
-interface nsISmsDatabaseService : nsISupports
+interface nsIMessageDatabaseService : nsISupports
{
// Accept a nsIDOMMozMessage object instead of enumeration of all
// storable attributes.
- long saveReceivedMessage(in DOMString aSender,
- in DOMString aBody,
- in unsigned long long aDate);
+ long saveReceivedMessage(in nsIDOMMozMessage aMessage);
// Accept a nsIDOMMozMessage object instead of enumeration of all
// storable attributes.
- long saveSentMessage(in DOMString aReceiver,
- in DOMString aBody,
- in unsigned long long aDate);
+ long saveSentMessage(in nsIDOMMozMessage aMessage);
// Rename only
- void createMessageList(in nsIDOMMozSmsFilter filter,
+ void createMessageList(in nsIDOMMozMessageFilter filter,
in boolean reverse,
in long requestId,
[optional] in unsigned long long processId);
};
// Rename only
-interface nsISmsRequestManager : nsISupports
+interface nsIMessageRequestManager : nsISupports
{
// Rename only
- long createRequest(in nsIDOMMozSmsManager aManager,
- out nsIDOMMozSmsRequest aRequest);
+ long createRequest(in nsIDOMMozMessageManager aManager,
+ out nsIDOMMozMessageRequest aRequest);
// Rename only
- long addRequest(in nsIDOMMozSmsRequest aRequest);
+ long addRequest(in nsIDOMMozMessageRequest aRequest);
// Rename only
- void notifySmsSent(in long aRequestId,
- in nsIDOMMozSmsMessage aMessage);
+ void notifyMessageSent(in long aRequestId,
+ in nsIDOMMozMessage aMessage);
// Rename only
- void notifySmsSendFailed (in long aRequestId,
+ void notifyMessageSendFailed(in long aRequestId,
in long aError);
// Rename only
- void notifyGotSms(in long aRequestId,
- in nsIDOMMozSmsMessage aMessage);
+ void notifyGotMessage(in long aRequestId,
+ in nsIDOMMozMessage aMessage);
// Rename only
- void notifyGetSmsFailed (in long aRequestId,
+ void notifyGetMessageFailed(in long aRequestId,
in long aError);
// Rename only
- void notifySmsDeleted (in long aRequestId,
+ void notifyMessageDeleted(in long aRequestId,
in bool aDeleted);
// Rename only
- void notifySmsDeleteFailed (in long aRequestId,
+ void notifyMessageDeleteFailed(in long aRequestId,
in long aError);
// Rename only
void notifyCreateMessageList(in long aRequestId,
in long aListId,
- in nsIDOMMozSmsMessage aMessage);
+ in nsIDOMMozMessage aMessage);
// Rename only
void notifyGotNextMessage(in long aRequestId,
- in nsIDOMMozSmsMessage aMessage);
+ in nsIDOMMozMessage aMessage);
};
-interface nsISmsService : nsISupports
+interface nsIMessageService : nsISupports
{
boolean hasSupport();
unsigned short getNumberOfMessagesForText(in DOMString text);
// Send a message object instead of text string. The `number` parameter
// is removed and nsIDOMMozMessage.receiver will be referred to.
- void send(in DOMString number,
- in DOMString message,
+ void send(in nsIDOMMozMessage message,
in long requestId,
[optional] in unsigned long long processId);
// Removed. Use nsIDOMMozMessage's constructor instead.
[implicit_jscontext]
- nsIDOMMozSmsMessage createSmsMessage(in long id,
- in DOMString delivery,
- in DOMString sender,
- in DOMString receiver,
- in DOMString body,
- in jsval timestamp);
};
--
Vicamo Yang 楊有勝