- From: Domenic Denicola <notifications@github.com>
- Date: Thu, 24 Aug 2017 19:36:19 +0000 (UTC)
- To: whatwg/fetch <fetch@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/fetch/pull/523/review/58483055@github.com>
domenic commented on this pull request. > @@ -1782,11 +1806,8 @@ from a {{ReadableStream}} object with <var>reader</var>, run these steps: </ol> <p>To <dfn export for=ReadableStream id=concept-cancel-readablestream>cancel</dfn> a -{{ReadableStream}} object with <var>reader</var> and <var>reason</var>, return the result of calling -<a abstract-op>ReadableStreamCancel</a>(<var>reader</var>, <var>reason</var>). - -<p class="note no-backref">Because the reader grants exclusive access, the actual mechanism of how Why remove this? > </ol> + <li><p>If fetch is <a for=fetch>terminated</a>, providing a <var>reason</var>, then return a Maybe this would be clearer by adding an additional step, "Let _reason_ be the provided termination reason". Or, in an inline version: "If fetch is terminated, then let _reason_ be the provided termination reason, and do X with _reason_." > - <li><p>Let <var>cancel</var> be an action that - <a lt=terminated for=fetch>terminates</a> the ongoing fetch with reason - <i>end-user abort</i>. + <li><p>Let <var>cancel</var> be an action that <a lt=terminated for=fetch>terminates</a> the + ongoing fetch with reason <i>fatal</i>. Closing a tab is not what's in play here. This is about the user calling .cancel() on a stream they are reading. Or, because it goes through the same JS API, the browser calling https://fetch.spec.whatwg.org/branch-snapshots/cancelation/#concept-cancel-readablestream . That is called by https://fetch.spec.whatwg.org/branch-snapshots/cancelation/#abort-fetch , in fact. So this is saying that any fetch which is aborted through an AbortController will [manifest to XHR](https://xhr.spec.whatwg.org/#handle-errors) not as an abort, but instead as a network error with (I believe) no events fired. I don't think this is right, in short. > - <li><p>Let <var>codings</var> be the result of <a>extracting header list values</a> given - `<code>Content-Encoding</code>` and <var>response</var>'s <a for=response>header list</a>. + <ol> + <li><p>let <var>bytes</var> be the transmitted bytes. Uppercase > - <li><p>If <var>stream</var> is <a for=ReadableStream>readable</a>, - <a abstract-op>error</a> <var>stream</var> with a - <code>TypeError</code>. + <li><p>Otherwise, if the bytes transmission for <var>response</var>'s message body is done + normally and <var>stream</var> is <a for=ReadableStream>readable</a>, then + <a abstract-op>close</a> <var>stream</var> and abort these steps. abort these steps -> break > <li> <p>Run these substeps <a>in parallel</a>: <ol> <li> - <p>Whenever one or more bytes are transmitted from <var>response</var>'s message body, let - <var>bytes</var> be the transmitted bytes and run these subsubsteps: - <!-- XXX xref message body --> + <p>While true, breaking if fetch <a for=fetch lt=terminated>terminates</a>, providing a + <var>reason</var>: If this loop terminates due to reaching the end of the stream, the next step (step 2) still assumes reason exists, which it does not. In fact, all of steps 2-5 seem wrong if the body successfully finishes uploading. > @@ -4950,12 +5049,23 @@ constructor must run these steps: to <var>method</var>. </ol> + <li><p>If <var>init</var>'s <code>signal</code> member is present, then set <var>signal</var> to + it. So, if you do `const r = new Request(otherRequest, { })` then otherRequest's signal will control aborting `r`. But if you do `const r = new Request(otherRequest, { signal })`, then `signal` will control aborting `r`, and `otherRequest` will have no impact at all. Is that correct? Is that what's tested? -- 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/523#pullrequestreview-58483055
Received on Thursday, 24 August 2017 19:36:44 UTC