0
Go to file
Tsuyoshi Horo 0589408e6e RendererSideContentDecoding: Ensure network service decodes SXGs
Signed Exchanges (SXG) must be parsed within the browser process. This
requires the network service to always decode the SXG first, handling
any `Content-Encoding` (like gzip) specified in the response headers
before forwarding the data.

The `URLRequest::client_side_content_decoding_enabled` flag allows
clients (like renderer process) to perform decoding themselves,
typically meaning the network service should skip decoding. This created
a conflict for SXG, where the network service might incorrectly skip
decoding if the flag was enabled.

This CL resolves the conflict by modifying the stream setup logic in
`URLRequestHttpJob::SetUpSourceStream`:
1. It now checks the `Content-Type` of the response.
2. If the type is `application/signed-exchange`, network-level decoding
   (via `FilterSourceStream`) is applied regardless of the
   `client_side_content_decoding_enabled` flag.
3. For all other content types, the
   `client_side_content_decoding_enabled` flag continues to determine
   whether the network service decodes or passes the encoded stream to
   the client.

To correctly inform clients about *which* encodings (if any) they need
to handle, this CL also introduces
`URLRequest::GetClientSideContentDecodingTypes`. This method reports the
list of encodings that were *actually* skipped by the network service
(i.e., only for non-SXG responses when the flag was enabled).
`URLLoader` is updated to use this method to populate
`URLResponseHead::client_side_content_decoding_types`.

A browser test (`SignedExchangeRequestHandlerBrowserTest.Compressed`)
is added using a compressed SXG (`.sxg.gz`) to ensure the network
service correctly decodes SXG payloads served with `Content-Encoding`.

Bug: 406313013, 391950057
Change-Id: Ic6efb534c540e6075ebe76b42b369a294f34ab76
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6399234
Commit-Queue: Tsuyoshi Horo <horo@chromium.org>
Reviewed-by: Kouhei Ueno <kouhei@chromium.org>
Reviewed-by: Adam Rice <ricea@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1439153}
2025-03-27 18:26:28 -07:00
2025-03-27 18:25:20 -07:00
2025-03-27 08:23:05 -07:00
2025-03-27 08:23:05 -07:00
2025-03-27 05:10:45 -07:00
2025-03-26 14:41:58 -07:00
2025-03-26 10:08:28 -07:00

Logo Chromium

Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.

The project's web site is https://www.chromium.org.

To check out the source code locally, don't use git clone! Instead, follow the instructions on how to get the code.

Documentation in the source is rooted in docs/README.md.

Learn how to Get Around the Chromium Source Code Directory Structure.

For historical reasons, there are some small top level directories. Now the guidance is that new top level directories are for product (e.g. Chrome, Android WebView, Ash). Even if these products have multiple executables, the code should be in subdirectories of the product.

If you found a bug, please file it at https://crbug.com/new.

Description
Chromium是一个开源浏览器项目,提供了一种安全、快速、稳定的方法来体验Web。该浏览器可以在多个平台上下载,包括Mac、Windows、Linux和ChromiumOS。项目原始地址: https://chromium.googlesource.com/chromium/src.git
https://www.mobibrw.com/gitea-mirrors/chromium/src.git
Readme BSD-3-Clause 89 GiB
Languages
C++ 74.4%
Java 8.2%
Objective-C++ 4.6%
TypeScript 4%
Python 2.5%
Other 6.1%