WebAPI/XHRBatch

From MozillaWiki
Jump to navigation Jump to search

XHRBatch API (DRAFT)

Goal

The goal of this API is to let data uploading/downloading can be performed without the APP staying in the memory during the transmission.

Status

Proposed API

interface nsIDOMNavigatorXHRBatch : EventTarget {
  Promise<IXHRBatch[]> getBatches();     // return submitted batches of the same origin.
  Promise<IXHRBatch[]> getAllBatches();  // return all submitted batches, not strict by the same origin if with the permission
}

[Constructor(DOMString name, DOMString description)]
interface XHRBatch : EventTarget {
  readonly attribute DOMString origin;
  readonly attribute DOMString name;
  readonly attribute DOMString description;

  // states
  const unsigned short NOTSUBMITTED = 0;  // This batch is still not submitted.
  const unsigned short WAITING = 1;       // This batch is submitted, but not in a transmission.
  const unsigned short SENDING = 2;       // This batch is in a transmission.
  const unsigned short COMPLETED = 3;     // All requests in this batch is completed or failed.
  const unsigned short DROPPED = 4;       // This batch is already removed from the user agent.
  readonly attribute unsigned short state;

  Promise<XMLHttpRequest> createXMLHttpRequest();
  /*
   * The batch is ready for a transmission and being known by the user agent.
   * This request can be failed for running out resources of the user agent.
   * As so, drop the old batches to release the resources.  The state is transited
   * from NOTSUBMITTED to WAITING.
   */
  Promise<boolean> submit();
  Promise<boolean> start();  // Start the transmission.  The state is transited from WAITING to SENDING.
  /*
   * Stop the transmission.
   * The state is transited from SENDING to WAITING once all requests are stopped.
   * If |force| is true, all requests are stopped immediately, or it will wait
   * until completed or failed for requests in sending.
   */
  Promise<boolean> stop(boolean force);
  Promise<boolean> drop();   // remove the batch from the user agent.
}

partial interface XMLHttpRequest {
   readonly attribute XHRBatch batch;  // The batch this request belonged to.
   Promise<boolean> addToBatch();      // Add this request to the batch belonged to.
   Promise<boolean> removeFromBatch(); // Remove this request from the batch belonged to.
}

Proposers

Thinker Li

Use Case

A user in camping takes video and pictures with the attached camera and would like to share it with friends through the YouTube and Flickr. He launch the YouTube or Flickr App and take the video or picture, writing down the title and description of his idea, and submitting it. The videos and pictures are queued. At his way home, he get WiFi access at a gas station, and he submit the batches of YouTube and Flickr to send out the all videos and pictures during his camping through the transmission manager App.