
The RendererSideContentDecoding feature allows the network service to skip decoding response bodies (e.g., handling `Content-Encoding: gzip`), delegating this task to the client, typically the renderer process. This is activated by setting the `client_side_content_decoding_enabled` flag on the `ResourceRequest`. However, enabling this feature for navigation requests caused issues. Not all navigation responses are sent to a renderer process. For instance, a response with a `Content-Disposition: attachment` header triggers a download. If the network service skips decoding for such a response, the user would incorrectly download the raw, encoded file (e.g., the gzipped data) instead of the decoded content. Determining within the network service whether a navigation response will ultimately lead to a download is complex (See `content::download_utils::MustDownload()` method). Therefore, this CL takes a simpler, more robust approach: it disables the `RendererSideContentDecoding` feature entirely for navigation requests. This is achieved by removing the logic that sets the `client_side_content_decoding_enabled` flag within `CreateResourceRequestForNavigation`. As a result, the network service will now always handle content decoding for navigation responses. This guarantees that the correct, decoded content is consistently provided, whether the response is intended for rendering or triggers a download. A browser test (`DownloadContentTest.CompressedResponseWithContentDisposition`) has been added to verify this fix. It ensures that navigating to a URL that serves content with both `Content-Encoding: gzip` and `Content-Disposition: attachment` results in a correctly decoded downloaded file. Bug: 391950057 Change-Id: I2e8bc9fb6d1c3fe3124662f62e7b403b7e1e182c Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6399553 Reviewed-by: Adam Rice <ricea@chromium.org> Reviewed-by: Min Qin <qinmin@chromium.org> Commit-Queue: Tsuyoshi Horo <horo@chromium.org> Cr-Commit-Position: refs/heads/main@{#1439161}
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.