diff --git a/index.bs b/index.bs index 0f28ebd..448be27 100644 --- a/index.bs +++ b/index.bs @@ -65,6 +65,9 @@ spec: url text: url; for:/ type: interface text: URL +spec: fetch + type:interface + text:ReadableStream
@@ -215,7 +218,7 @@ which must be initially set to the state of the underlying storage, if any such underlying storage exists. Further normative definition of snapshot state can be found for {{File}}s. -+### The {{Blob/stream()}} method ### {#stream-method-algo} + +The stream() method, when invoked, must return +the result of calling [=get stream=] on the [=context object=]. + +### The {{Blob/text()}} method ### {#text-method-algo} + +The text() method, when invoked, must run these steps: + +1. Let |stream| be the result of calling [=get stream=] on the [=context object=]. +1. Let |reader| be the result of [=get a reader|getting a reader=] from |stream|. + If that threw an exception, return a new promise rejected with that exception. +1. Let |promise| be the result of [=read all bytes|reading all bytes=] from |stream| with |reader|. +1. Return the result of transforming |promise| by a fulfillment handler that returns the result of + running [=UTF-8 decode=] on its first argument. + +Note: This is different from the behavior of {{FileReader/readAsText()}} to align better +with the behavior of {{Body/text()|Fetch's text()}}. Specifically this method will always +use UTF-8 as encoding, while {{FileReader}} can use a different encoding depending on +the blob's type and passed in encoding name. + +### The {{Blob/arrayBuffer()}} method ### {#arraybuffer-method-algo} + +The arrayBuffer() method, when invoked, must run these steps: + +1. Let |stream| be the result of calling [=get stream=] on the [=context object=]. +1. Let |reader| be the result of [=get a reader|getting a reader=] from |stream|. + If that threw an exception, return a new promise rejected with that exception. +1. Let |promise| be the result of [=read all bytes|reading all bytes=] from |stream| with |reader|. +1. Return the result of transforming |promise| by a fulfillment handler that returns + a new {{ArrayBuffer}} whose contents are its first argument. +++ {{Blob}} objects are [=serializable objects=]. Their [=serialization steps=], given |value| and |serialized|, are: @@ -561,6 +569,38 @@ It must act as follows:[Constructor(optional sequence<BlobPart> blobParts, optional BlobPropertyBag options), Exposed=(Window,Worker), Serializable] @@ -228,6 +231,11 @@ interface Blob { Blob slice(optional [Clamp] long long start, optional [Clamp] long long end, optional DOMString contentType); + + // read from the Blob. + [NewObject] ReadableStream stream(); + [NewObject] Promise text(); + [NewObject] Promise arrayBuffer(); }; enum EndingType { "transparent", "native" }; @@ -238,7 +246,7 @@ dictionary BlobPropertyBag { }; typedef (BufferSource or Blob or USVString) BlobPart; -