- From: Takeshi Yoshino <tyoshino@google.com>
- Date: Thu, 26 Sep 2013 13:17:41 +0900
- To: Aymeric Vitte <vitteaymeric@gmail.com>
- Cc: Isaac Schlueter <i@izs.me>, Jonas Sicking <jonas@sicking.cc>, Austin William Wright <aaa@bzfx.net>, Domenic Denicola <domenic@domenicdenicola.com>, "public-webapps@w3.org" <public-webapps@w3.org>
- Message-ID: <CAH9hSJbwYWcoqrTk+aipeosfK4cz3MFrjHzoC2hb1fr4NYv=AA@mail.gmail.com>
As we don't see any strong demand for flow control and sync read functionality, I've revised the proposal. Though we can separate state/error signaling from Stream and keep them done by each API (e.g. XHR) as Aymeric said, EoF signal still needs to be conveyed through Stream. ---- enum StreamReadType { "", "blob", "arraybuffer", "text" }; interface StreamConsumeResult { readonly attribute boolean eof; readonly any data; readonly unsigned long long size; }; [Constructor(optional DOMString mime)] interface Stream { readonly attribute DOMString type; // MIME type // Rejected on error. No more write op shouldn't be made. // // Fulfilled when the write completes. It doesn't guarantee that the written data has been // read out successfully. // // The contents of ArrayBufferView must not be modified until the promise is fulfilled. // // Fulfill may be delayed when the Stream considers itself to be full. // // write(), close() must not be called again until the Promise of the last write() is fulfilled. Promise<void> write((DOMString or ArrayBufferView or Blob)? data); void close(); attribute StreamReadType readType; attribute DOMString readEncoding; // read(), skip(), pipe() must not be called again until the Promise of the last read(), skip(), pipe() is fulfilled. // Rejected on error. No more read op shouldn't be made. // // If size is specified, // - if EoF: fulfilled with data up to EoF // - otherwise: fulfilled with data of size bytes // // If size is omitted, (all or part of) data available for read now will be returned. // // If readType is set to text, size of the result may be smaller than the value specified for the size argument. Promise<StreamConsumeResult> read(optional [Clamp] long long size); // Rejected on error. Fulfilled on completion. // // .data of result is not used. .size of result is the skipped amount. Promise<StreamConsumeResult> skip([Clamp] long long size); // .data is skipped size // Rejected on error. Fulfilled on completion. // // If size is omitted, transfer until EoF is encountered. // // .data of result is not used. .size of result is the size of data transferred. Promise<StreamConsumeResult> pipe(Stream destination, optional [Clamp] long long size); };
Received on Thursday, 26 September 2013 04:18:31 UTC