Thanks for pointing out the specific spec algos.

> @ricea had suggested using an experiment, I assume because the use of fetch 
> is so widespread and changing the type of error that's thrown could have 
> consequences, even if it's the intended behavior. But I'll let him comment on 
> that himself if he has anything to add.

We have generally been recommending against gradual rollout in cases like this: 
https://chromium.googlesource.com/chromium/src/+/main/docs/flag_guarding_guidelines.md#prefer-waterfall-rollout-for-platform-changes.
 In short, an experimental rollout makes any breakage hard to track for 
developers because it won’t show up consistently. The usual approach would be 
to just ship normally via canary/dev/beta/stable and be ready to roll it back 
via finch if there are issues.

We shouldn’t do either without trying to understand the risk, though. What do 
you expect potential compatibility issues to look like for this? Do developers 
often have logic branching on specific abort values for these promises versus 
just logging them? Do we have Use Counters that could put a high bar on the 
risk, like a counter for how often already-completed fetches are aborted with a 
reason, or how often the Response methods are called for a fetch in this state?

From: Taylor Brandstetter <[email protected]>
Sent: Wednesday, August 12, 2026 2:30 PM
To: blink-dev <[email protected]>
Cc: Daniel Clark <[email protected]>; Chromestatus 
<[email protected]>; [email protected] <[email protected]>; 
Adam Rice <[email protected]>
Subject: Re: Intent to Ship: Fetch API: Forward reason from AbortController to 
fetch Response

You don't often get email from [email protected]<mailto:[email protected]>. 
Learn why this is important<https://aka.ms/LearnAboutSenderIdentification>
> Can you please give a more specific link into the part of the spec that 
> defines this behavior?

Sure thing; the body methods point to the steps for consuming a body: 
https://fetch.spec.whatwg.org/#concept-body-consume-body

Which point to the steps for fully reading a body: 
https://fetch.spec.whatwg.org/#body-fully-read

Which say to read all the bytes from the reader.

And regarding the reader, the main abort steps 
(https://fetch.spec.whatwg.org/#http-network-fetch) say:

  1.  If fetchParams is 
aborted<https://fetch.spec.whatwg.org/#fetch-params-aborted>, then:
     *   Set response’s aborted 
flag<https://fetch.spec.whatwg.org/#concept-response-aborted>.
     *   If stream is 
readable<https://streams.spec.whatwg.org/#readablestream-readable>, then 
error<https://streams.spec.whatwg.org/#readablestream-error> stream with the 
result of deserialize a serialized abort 
reason<https://fetch.spec.whatwg.org/#deserialize-a-serialized-abort-reason> 
given fetchParams’s 
controller<https://fetch.spec.whatwg.org/#fetch-params-controller>’s serialized 
abort 
reason<https://fetch.spec.whatwg.org/#fetch-controller-serialized-abort-reason> 
and an 
implementation-defined<https://infra.spec.whatwg.org/#implementation-defined> 
realm<https://tc39.es/ecma262/#realm>.
So, both the readable stream and all the body methods consuming it should be 
errored with the abort reason.

> Can you request a WebKit signal?
I didn't realize it was necessary just for filling a gap in the implementation, 
but the wide review 
documentation<https://www.chromium.org/blink/launching-features/wide-review/> 
does call this case out, so I will request a signal and update the feature 
later.

> I'm still unclear on which tests cover this change.

I called them out there; "response.X() rejects with abort reason if already 
aborted" (for each body method) and "Stream errors once aborted with abort 
reason". They fail on everything but Firefox (well except for the latter which 
doesn't run on Firefox); I'm assuming the dashboard wasn't updated when you 
responded but you can see the failures now.

> Can you say more about this roll out plan? This doesn't seem like the kind of 
> thing that would need to be rolled out gradually via experiment.

@ricea had suggested using an experiment, I assume because the use of fetch is 
so widespread and changing the type of error that's thrown could have 
consequences, even if it's the intended behavior. But I'll let him comment on 
that himself if he has anything to add.

> Lastly please request the other "Prepare to Ship" reviews in the chromestatus 
> entry (Privacy, WP Security, etc).

Will do. Thanks for your review, Dan.

On Monday, August 10, 2026 at 12:11:55 PM UTC-7 Dan Clark wrote:
> Specification
> https://fetch.spec.whatwg.org<https://fetch.spec.whatwg.org/>

Can you please give a more specific link into the part of the spec that defines 
this behavior?

> WebKit: No signal

Can you request a WebKit signal?

> Is this feature fully tested by 
> web-platform-tests<https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md>?
> Yes
> https://wpt.fyi/results/fetch/api/abort/general.any.html Specifically the 
> tests: * response.arrayBuffer() rejects with abort reason if already aborted 
> (and other response methods such as body()) * Stream errors once aborted with 
> abort reason. Underlying connection closed.

I'm still unclear on which tests cover this change. Looking at the test 
results<https://wpt.fyi/results/fetch/api/abort/general.any.html?label=master&product=chrome%5Bstable%5D&product=edge%5Bexperimental%5D&product=firefox%5Bexperimental%5D&product=safari%5Bexperimental%5D&aligned>
 all are already passing in Chrome Stable except for "Readable stream 
synchronously cancels with AbortError if aborted before reading" which doesn't 
seem to match this scenario.

> Rollout plan
> (RARE) Experiment users ramp up over time

Can you say more about this roll out plan? This doesn't seem like the kind of 
thing that would need to be rolled out gradually via experiment.

Lastly please request the other "Prepare to Ship" reviews in the chromestatus 
entry (Privacy, WP Security, etc).

Thanks,
Dan

On Wednesday, August 5, 2026 at 1:46:36 PM UTC-7 Chromestatus wrote:
Contact emails
[email protected]<mailto:[email protected]>
Specification
https://fetch.spec.whatwg.org<https://fetch.spec.whatwg.org/>
Summary
An AbortController can be passed into fetch to allow a request to be aborted; 
this is already supported see https://chromestatus.com/feature/5631483679080448 
When calling abort, you can optionally pass in an "abort reason", and the 
original fetch promise if it hasn't resolved should be rejected with that 
reason. This is already working as intended. *However*, if the fetch promise 
*has* resolved (after reading the header), but the body has not yet been fully 
read, this is also intended to propagate the abort reason to the Response 
methods such as Response.blob(), as well as the ReadableStream Response.body. 
This part is not currently working; the relevant Promises instead are rejected 
with generic AbortErrors. Firefox at least is compliant here but 
chromium/Edge/Safari are not.
Blink component
Blink>Network>FetchAPI<https://issues.chromium.org/issues?q=customfield1222907:%22Blink%3ENetwork%3EFetchAPI%22>
Web Feature ID
abortable-fetch<https://webstatus.dev/features/abortable-fetch>
Motivation
No information provided
Initial public proposal
No information provided
TAG review
No information provided
TAG review status
Not applicable
Goals for experimentation
None
Risks

Interoperability and Compatibility
No information provided

Gecko: Shipped/Shipping

WebKit: No signal

Web developers: No signals

Other signals:
WebView application risks

Does this intent deprecate or change behavior of existing APIs, such that it 
has potentially high risk for Android WebView-based applications?
No information provided

Debuggability
No information provided
Will this feature be supported on all six Blink platforms (Windows, Mac, Linux, 
ChromeOS, Android, and Android WebView)?
Yes
Is this feature fully tested by 
web-platform-tests<https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md>?
Yes
https://wpt.fyi/results/fetch/api/abort/general.any.html Specifically the 
tests: * response.arrayBuffer() rejects with abort reason if already aborted 
(and other response methods such as body()) * Stream errors once aborted with 
abort reason. Underlying connection closed.
Flag name on about://flags
No information provided
Finch feature name
ForwardReasonToFetchBodyAbort
Rollout plan
(RARE) Experiment users ramp up over time
Requires code in //chrome?
False
Tracking bug
https://issues.chromium.org/issues/502133195
Estimated milestones
Shipping on desktop
153
Shipping on Android
153
Shipping on WebView
153
Shipping on iOS
153

Anticipated spec changes

Open questions about a feature may be a source of future web compat or interop 
issues. Please list open issues (e.g. links to known github issues in the 
project for the feature specification) whose resolution may introduce web 
compat/interop risk (e.g., changing to naming or structure of the API in a 
non-backward-compatible way).
No information provided
Link to entry on the Chrome Platform Status
https://chromestatus.com/feature/5158507786665984?gate=6176253840326656
This intent message was generated by Chrome Platform 
Status<https://chromestatus.com/>.

-- 
You received this message because you are subscribed to the Google Groups 
"blink-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/DS0PR00MB2527F68D4E77B90AD4BDCCE8C5DA2%40DS0PR00MB2527.namprd00.prod.outlook.com.

Reply via email to