- From: Domenic Denicola <notifications@github.com>
- Date: Fri, 19 Feb 2021 13:42:56 -0800
- To: whatwg/fetch <fetch@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/fetch/pull/1172/review/594590967@github.com>
@domenic approved this pull request.
LGTM with editorial suggestions
> +algorithm <var>processBodyChunk</var>, an algorithm <var>processEndOfBody</var>, an algorithm
+<var>processBodyError</var>, and an optional null, <a for=/>parallel queue</a>, or
+<a for=/>global object</a> <var>taskDestination</var> (default null), run these steps.
+<var>processBodyChunk</var> must be an algorithm accepting a <a for=/>byte sequence</a>.
+<var>processEndOfBody</var> must be an algorithm accepting no arguments. <var>processBodyError</var>
+must be an algorithm accepting an exception.
+
+<ol>
+ <li><p>If <var>taskDestination</var> is null, then set <var>taskDestination</var> to the result of
+ <a>starting a new parallel queue</a>.
+
+ <li>
+ <p>Let <var>reader</var> be the result of <a for=ReadableStream>getting a reader</a> for
+ <var>body</var>'s <a for=body>stream</a>.
+
+ <p class=note>This operation ought not to throw an exception.
out not to -> will not?
> + <dl>
+ <dt><a for="read request">chunk steps</a>, given <var>chunk</var>
+ <dd>
+ <ol>
+ <li><p>Let <var>continueAlgorithm</var> be null.
+
+ <li><p>If <var>chunk</var> is not a {{Uint8Array}} object, then set
+ <var>continueAlgorithm</var> to this step: run <var>processBodyError</var> given a
+ {{TypeError}}.
+
+ <li>
+ <p>Otherwise:
+
+ <ol>
+ <li><p>Let <var>bytes</var> be a <a lt="get a copy of the buffer source">copy of</a>
+ <var>chunk</var>.
Maybe note that this copy can often be elided if the user agent is working on its own streams, or e.g. a stream supplied from a service worker where the copy has already been made while crossing the realm boundary? I dunno, maybe not worth it...
> @@ -3241,9 +3226,11 @@ an optional algorithm <dfn export for=fetch id=process-response><var>processResp
optional algorithm
<dfn export for=fetch id=process-response-end-of-body oldids=process-response-end-of-file><var>processResponseEndOfBody</var></dfn>,
and an optional boolean <dfn export for=fetch><var>useParallelQueue</var></dfn> (default false), run
-the steps below. If given, <var>processRequestBody</var> and <var>processRequestEndOfBody</var> must
-be an algorithm accepting a <a for=/>request</a>; <var>processResponse</var> and
-<var>processResponseEndOfBody</var> must be an algorithm accepting a <a for=/>response</a>.
+the steps below. If given, <var>processRequestBody</var> must be an algorithm accepting an integer.
"an integer representing the number of bytes transmitted"? I had to click around a lot to figure out what this was for.
> @@ -3241,9 +3226,11 @@ an optional algorithm <dfn export for=fetch id=process-response><var>processResp
optional algorithm
<dfn export for=fetch id=process-response-end-of-body oldids=process-response-end-of-file><var>processResponseEndOfBody</var></dfn>,
and an optional boolean <dfn export for=fetch><var>useParallelQueue</var></dfn> (default false), run
-the steps below. If given, <var>processRequestBody</var> and <var>processRequestEndOfBody</var> must
-be an algorithm accepting a <a for=/>request</a>; <var>processResponse</var> and
-<var>processResponseEndOfBody</var> must be an algorithm accepting a <a for=/>response</a>.
+the steps below. If given, <var>processRequestBody</var> must be an algorithm accepting an integer.
+If given, <var>processRequestEndOfBody</var> must be an algorithm accepting no arguments.
+<var>processResponse</var> must be an algorithm accepting a <a for=/>response</a>.
"If given" for both of these
> @@ -3284,15 +3271,9 @@ the request.
<a for="fetch params">process response end-of-body</a> is <var>processResponseEndOfBody</var>, and
<a for="fetch params">task destination</a> is <var>taskDestination</var>.
- <li>
- <p>If <var>request</var>'s <a for=request>body</a> is a <a for=/>byte sequence</a>, then:
-
- <ol>
- <li><p>Let <var>body</var> and <var ignore>ignoreType</var> be the result of
- <a for=BodyInit>safely extracting</a> <var>request</var>'s <a for=request>body</a>.
-
- <li><p>Set <var>request</var>'s <a for=request>body</a> to <var>body</var>.
- </ol>
+ <li><p>If <var>request</var>'s <a for=request>body</a> is a <a for=/>byte sequence</a>, then set
+ <var>request</var>'s <a for=request>body</a> to the first return value of
"the first return value" seems pretty unusual; why not just "the result of"? Here and below.
>
<ol>
- <li><p>Set <var>request</var>'s <a>done flag</a>.
+ <li><p>Let <var>processBody</var> given <var>nullOrFailureOrBytes</var> be this step: run
+ <var>fetchParams</var>'s <a for="fetch params">process response end-of-body</a> given
+ <var>response</var> and <var>nullOrFailureOrBytes</var>.
+
+ <li><p>Let <var>processBodyError</var> be to run <var>processBody</var> given failure.
Although this is clever, I think it'd be easier to understand if it directly called to the output algorithm, i.e.
> Let _processBodyError_ be this step: run _fetchParam_'s process response end-of-body given _response_ and failure.
>
- <li><p>If <var>fetchParams</var>'s <a for="fetch params">process response end-of-body</a> is
- non-null, then run <var>fetchParams</var>'s
- <a for="fetch params">process response end-of-body</a> given <var>response</var>.
+ <li><p>If <var>response</var>'s <a for=response>body</a> is null, then <a>queue a fetch task</a>
+ to <var>processBody</var> given null, with <var>fetchParams</var>'s
```suggestion
to run <var>processBody</var> given null, with <var>fetchParams</var>'s
```
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/whatwg/fetch/pull/1172#pullrequestreview-594590967
Received on Friday, 19 February 2021 21:43:10 UTC