From 27ce089693f470fa2cff1a3b0cba4b084f9df83c Mon Sep 17 00:00:00 2001 From: Mikhail Date: Tue, 30 Sep 2025 01:36:52 +0400 Subject: [PATCH] Add Accept header to chrome://brave-image loader (#31489) The PR adds `Accept: ` to chrome://brave-image requests. This will allow to use more optimized formats (i.e. WebP) when the backend supports it. --- browser/ui/webui/brave_sanitized_image_source.cc | 3 +++ .../ui/webui/brave_sanitized_image_source_unittest.cc | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/browser/ui/webui/brave_sanitized_image_source.cc b/browser/ui/webui/brave_sanitized_image_source.cc index 592a2723895..c8bff79f730 100644 --- a/browser/ui/webui/brave_sanitized_image_source.cc +++ b/browser/ui/webui/brave_sanitized_image_source.cc @@ -25,6 +25,7 @@ #include "net/traffic_annotation/network_traffic_annotation.h" #include "services/network/public/cpp/resource_request.h" #include "services/network/public/cpp/simple_url_loader.h" +#include "third_party/blink/public/common/loader/network_utils.h" #include "third_party/skia/include/core/SkBitmap.h" #include "ui/gfx/codec/png_codec.h" #include "ui/gfx/geometry/size.h" @@ -247,6 +248,8 @@ void BraveSanitizedImageSource::StartImageDownload( auto request = std::make_unique(); request->url = request_attributes.image_url; request->credentials_mode = network::mojom::CredentialsMode::kOmit; + request->headers.SetHeader("Accept", + blink::network_utils::ImageAcceptHeader()); auto loader = network::SimpleURLLoader::Create(std::move(request), traffic_annotation); diff --git a/browser/ui/webui/brave_sanitized_image_source_unittest.cc b/browser/ui/webui/brave_sanitized_image_source_unittest.cc index 5ea466155a7..d461f11e19d 100644 --- a/browser/ui/webui/brave_sanitized_image_source_unittest.cc +++ b/browser/ui/webui/brave_sanitized_image_source_unittest.cc @@ -71,7 +71,16 @@ class BraveSanitizedImageSourceTest : public testing::Test { "chrome://brave-image/?url=" + EncodeQuery(url.spec()) + (target_size.empty() ? "" : "&target_size=" + EncodeQuery(target_size))); + base::RepeatingCallback interceptor = + base::BindLambdaForTesting( + [&](const network::ResourceRequest& request) { + const auto accept_header = request.headers.GetHeader("Accept"); + ASSERT_TRUE(accept_header.has_value()); + EXPECT_NE(accept_header->find("image/webp"), std::string::npos); + }); + test_url_loader_factory_.SetInterceptor(std::move(interceptor)); test_url_loader_factory_.AddResponse(url.spec(), std::move(data)); + base::RunLoop run_loop; scoped_refptr result; source_.StartDataRequest(