Thank you, Mike and Yoav!

I filed a standards position request with WebKit, and they are supportive
as well: https://github.com/WebKit/standards-positions/issues/194.

On Wed, May 31, 2023 at 9:33 PM Yoav Weiss <yoavwe...@chromium.org> wrote:

> Thanks for aligning with Firefox here!
>
> On Fri, May 26, 2023 at 5:32 AM Nidhi Jaju <nidhij...@chromium.org> wrote:
>
>> Contact emailsnidhij...@chromium.org
>>
>> ExplainerNone
>>
>> Specificationhttps://fetch.spec.whatwg.org/#http-network-fetch
>>
>> Summary
>>
>> Makes Response.body be a readable byte stream instead of a "default"
>> readable stream. This enables it to be used with bring-your-own-buffer
>> (BYOB) readers, reducing garbage collection overhead and copies.
>>
>> As mentioned in the Activation section below, we plan to ship the
>> ReadableStreamTeeCloneForBranch2 feature first, and then the FetchBYOB
>> feature later.
>> Blink componentBlink>Network>FetchAPI
>> <https://bugs.chromium.org/p/chromium/issues/list?q=component:Blink%3ENetwork%3EFetchAPI>
>>
>> TAG reviewNone
>>
>> TAG review statusNot applicable
>>
>> Risks
>>
>>
>> Interoperability and Compatibility
>>
>> Low risk because streams and fetch have already been standardized for a
>> long time. Other browsers have implemented other parts of the standard, and
>> Firefox has already shipped this behavior for many months and others will
>> most likely also adapt this feature as well soon.
>>
>>
>> *Gecko*: Shipped/Shipping (
>> https://github.com/whatwg/fetch/issues/267#issuecomment-1350303670)
>> Already shipped in Firefox in 2022.
>>
>> *WebKit*: Positive (https://github.com/whatwg/fetch/pull/1593) @annevk
>> from Apple approved the PR to update the spec with relevant changes and
>> expressed interest as an implementer on behalf of Apple.
>>
>> *Web developers*: No signals
>>
>> *Other signals*: Deno is also interested in, and somewhat shipped, this
>> behavior (https://github.com/denoland/deno/issues/17386).
>>
>> Activation
>>
>> Currently, to clone a body, we tee the body's stream, but teeing always
>> returns two "default" streams, where the chunks are not cloned for both
>> streams. Making Response.body into a byte stream, will mean that cloning it
>> will result in cloning the chunks for the second stream, which is different
>> behavior. In order to mitigate activation risks, we are splitting this
>> change into two releases. One where the default teeing behavior will also
>> start to clone for the second stream behind the
>> "ReadableStreamTeeCloneForBranch2" feature flag, and then make
>> Response.body a readable byte stream behind the "FetchBYOB" feature flag.
>>
>
> Can you help me understand what potential breakage (if any) may look like?
> How would these 2 behavior changes break developer expectations? What
> would code that breaks as a result of this look like?
>
The 2 changes are incremental, and will only break developer expectations
if there are websites that rely on the output of cloning a request/response
to have the same chunks as before or rely on modifying one of the chunks
changing the other one.

A code sample of where the behavior difference would be observable is:
const request = new Request("image.jpg");
fetch(request).then((response) => {
  const cloned_response = response.clone();

  const { value: value1 } = await response.getReader().read();
  const { value: value2 } = await cloned_response.getReader().read();

  if (value1 === value2) {
    console.log('old behavior');
  } else {
    console.log('new behavior');
  }
});

In both the old and the new behaviour, the contents of the Uint8Array are
the same, so it only makes a practical difference if a script modifies the
output.

(An explainer that outlined that would've been helpful, but inline
> explanations are fine as well)
>

>
>>
>>
>> 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?
>>
>>
>>
>> Debuggability
>>
>> No special support needed.
>>
>>
>> Will this feature be supported on all six Blink platforms (Windows, Mac,
>> Linux, Chrome OS, Android, and Android WebView)?Yes
>>
>> This feature will be purely implemented in Blink and so cross-platform
>> support is automatic.
>>
>>
>> Is this feature fully tested by web-platform-tests
>> <https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md>
>> ?Yes
>>
>> Flag nameReadableStreamTeeCloneForBranch2 and FetchBYOB
>>
>> Requires code in //chrome?False
>>
>> Tracking bughttps://bugs.chromium.org/p/chromium/issues/detail?id=1243329
>>
>> Estimated milestones
>> Shipping on desktop 116
>> Shipping on Android 116
>> Shipping on WebView 116
>>
>> 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).
>> None. The spec change for BYOB support for Fetch was already landed at
>> https://github.com/whatwg/fetch/pull/1593.
>>
>> Link to entry on the Chrome Platform Status
>> https://chromestatus.com/feature/5192003450568704
>>
>> Links to previous Intent discussionsIntent to prototype:
>> https://groups.google.com/a/chromium.org/g/blink-dev/c/Iyt6Ca9PiJQ/m/s_D7A0YwCgAJ
>>
>> --
>> 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 blink-dev+unsubscr...@chromium.org.
>> To view this discussion on the web visit
>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAMZNYANt%2BwCoAYOfh1Bj7EJrdTz3jkd%3D%3DAyeBv9f8P2Ccu1wkg%40mail.gmail.com
>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAMZNYANt%2BwCoAYOfh1Bj7EJrdTz3jkd%3D%3DAyeBv9f8P2Ccu1wkg%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>
>

-- 
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 blink-dev+unsubscr...@chromium.org.
To view this discussion on the web visit 
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAMZNYAMyLsv2_i3Efh3FkTXFcp-U6f56hvXc2EyEqu3gUq7Gug%40mail.gmail.com.

Reply via email to