Stop exposing WebResourceRequestSender out of Blink

This CL does the followings:

1. Move web_resource_request_sender.h from public/platform/ to
   renderer/platform/loader/fetch/url_loader/.
2. Delete blink::WebResourceRequestSender::MakeRequestID() and introduce
   blink::GenerateRequestId() in
   third_party/blink/public/platform/web_url_request_util.h.
3. Use mojom::blink::BlobRegistry instead of mojom::BlobRegistry in
   Blink.
4. Use blink::BlobDataHandle instead of blink::WebBlobInfo.

Low-Coverage-Reason: Refactoring
Bug: 1413912
Change-Id: If8dec6c525ad71dd7ff86a0073fc6b68e44b5b5b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4240860
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Tsuyoshi Horo <horo@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1104775}
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index a24ce59..a1d8df2 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -186,7 +186,6 @@
 #include "third_party/blink/public/platform/web_media_player.h"
 #include "third_party/blink/public/platform/web_media_player_source.h"
 #include "third_party/blink/public/platform/web_navigation_body_loader.h"
-#include "third_party/blink/public/platform/web_resource_request_sender.h"
 #include "third_party/blink/public/platform/web_runtime_features.h"
 #include "third_party/blink/public/platform/web_string.h"
 #include "third_party/blink/public/platform/web_url.h"
@@ -2556,7 +2555,7 @@
   DCHECK(common_params->url.SchemeIs(url::kJavaScriptScheme) ||
          subresource_loader_factories);
 
-  int request_id = blink::WebResourceRequestSender::MakeRequestID();
+  int request_id = blink::GenerateRequestId();
   std::unique_ptr<DocumentState> document_state = BuildDocumentStateFromParams(
       *common_params, *commit_params, std::move(commit_callback),
       std::move(navigation_client_impl_), request_id,
@@ -2960,8 +2959,7 @@
   // |was_initiated_in_this_frame| is false.
   std::unique_ptr<DocumentState> document_state = BuildDocumentStateFromParams(
       *common_params, *commit_params, std::move(callback),
-      std::move(navigation_client_impl_),
-      blink::WebResourceRequestSender::MakeRequestID(),
+      std::move(navigation_client_impl_), blink::GenerateRequestId(),
       false /* was_initiated_in_this_frame */);
 
   DCHECK(!pending_loader_factories_);
diff --git a/third_party/blink/public/BUILD.gn b/third_party/blink/public/BUILD.gn
index 423887d0..d746aab 100644
--- a/third_party/blink/public/BUILD.gn
+++ b/third_party/blink/public/BUILD.gn
@@ -234,7 +234,6 @@
     "platform/web_prescient_networking.h",
     "platform/web_private_ptr.h",
     "platform/web_request_peer.h",
-    "platform/web_resource_request_sender.h",
     "platform/web_resource_request_sender_delegate.h",
     "platform/web_runtime_features.h",
     "platform/web_scoped_page_pauser.h",
diff --git a/third_party/blink/public/platform/web_url_request_util.h b/third_party/blink/public/platform/web_url_request_util.h
index 0d3cb65..7a8799b2 100644
--- a/third_party/blink/public/platform/web_url_request_util.h
+++ b/third_party/blink/public/platform/web_url_request_util.h
@@ -48,6 +48,14 @@
 BLINK_PLATFORM_EXPORT mojom::MixedContentContextType
 GetMixedContentContextTypeForWebURLRequest(const WebURLRequest& request);
 
+// Generates ids for requests initiated by child processes unique to the
+// particular process, counted up from 0 (browser initiated requests count
+// down from -2).
+//
+// Public to be used by content::RenderFrameImpl with the need to fill a
+// navigation request id.
+BLINK_PLATFORM_EXPORT int GenerateRequestId();
+
 }  // namespace blink
 
 #endif  // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_URL_REQUEST_UTIL_H_
diff --git a/third_party/blink/renderer/bindings/core/v8/script_streamer_test.cc b/third_party/blink/renderer/bindings/core/v8/script_streamer_test.cc
index 507007c..06091a9 100644
--- a/third_party/blink/renderer/bindings/core/v8/script_streamer_test.cc
+++ b/third_party/blink/renderer/bindings/core/v8/script_streamer_test.cc
@@ -109,7 +109,7 @@
         WebData&,
         int64_t& encoded_data_length,
         uint64_t& encoded_body_length,
-        WebBlobInfo& downloaded_blob,
+        scoped_refptr<BlobDataHandle>& downloaded_blob,
         std::unique_ptr<blink::ResourceLoadInfoNotifierWrapper>
             resource_load_info_notifier_wrapper) override {
       NOTREACHED();
diff --git a/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.cc b/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.cc
index e3eaa8c..ab6f8c6e 100644
--- a/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.cc
+++ b/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.cc
@@ -96,7 +96,7 @@
       WebData& data,
       int64_t& encoded_data_length,
       uint64_t& encoded_body_length,
-      WebBlobInfo& downloaded_blob,
+      scoped_refptr<BlobDataHandle>& downloaded_blob,
       std::unique_ptr<blink::ResourceLoadInfoNotifierWrapper>
           resource_load_info_notifier_wrapper) override {
     NOTREACHED();
diff --git a/third_party/blink/renderer/core/testing/no_network_web_url_loader.h b/third_party/blink/renderer/core/testing/no_network_web_url_loader.h
index 1a2679e..0fdbbb19 100644
--- a/third_party/blink/renderer/core/testing/no_network_web_url_loader.h
+++ b/third_party/blink/renderer/core/testing/no_network_web_url_loader.h
@@ -34,7 +34,7 @@
       WebData&,
       int64_t& encoded_data_length,
       uint64_t& encoded_body_length,
-      blink::WebBlobInfo& downloaded_blob,
+      scoped_refptr<BlobDataHandle>& downloaded_blob,
       std::unique_ptr<blink::ResourceLoadInfoNotifierWrapper>
           resource_load_info_notifier_wrapper) override {
     // Nothing should call this in our test.
diff --git a/third_party/blink/renderer/modules/service_worker/web_embedded_worker_impl_test.cc b/third_party/blink/renderer/modules/service_worker/web_embedded_worker_impl_test.cc
index d5b17942..0dfc79e 100644
--- a/third_party/blink/renderer/modules/service_worker/web_embedded_worker_impl_test.cc
+++ b/third_party/blink/renderer/modules/service_worker/web_embedded_worker_impl_test.cc
@@ -68,7 +68,7 @@
       WebData&,
       int64_t& encoded_data_length,
       uint64_t& encoded_body_length,
-      WebBlobInfo& downloaded_blob,
+      scoped_refptr<BlobDataHandle>& downloaded_blob,
       std::unique_ptr<blink::ResourceLoadInfoNotifierWrapper>
           resource_load_info_notifier_wrapper) override {
     NOTREACHED();
diff --git a/third_party/blink/renderer/platform/loader/BUILD.gn b/third_party/blink/renderer/platform/loader/BUILD.gn
index 95806ba..5b10bd5 100644
--- a/third_party/blink/renderer/platform/loader/BUILD.gn
+++ b/third_party/blink/renderer/platform/loader/BUILD.gn
@@ -140,6 +140,7 @@
     "fetch/url_loader/sync_load_response.cc",
     "fetch/url_loader/sync_load_response.h",
     "fetch/url_loader/web_resource_request_sender.cc",
+    "fetch/url_loader/web_resource_request_sender.h",
     "fetch/url_loader/web_url_loader.cc",
     "fetch/url_loader/web_url_loader.h",
     "fetch/url_loader/web_url_loader_client.cc",
diff --git a/third_party/blink/renderer/platform/loader/DEPS b/third_party/blink/renderer/platform/loader/DEPS
index e75fc2b..fffc579 100644
--- a/third_party/blink/renderer/platform/loader/DEPS
+++ b/third_party/blink/renderer/platform/loader/DEPS
@@ -63,5 +63,8 @@
      "+net/http/http_util.h",
      "+third_party/blink/public/mojom/blob/blob.mojom.h",
      "+services/network/public/mojom/data_pipe_getter.mojom.h",
-  ]
+  ],
+  "web_url_request_util.cc": [
+      "+base/atomic_sequence_num.h",
+  ],
 }
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc b/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc
index 2e1c0365..c72711e 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc
@@ -55,7 +55,6 @@
 #include "third_party/blink/public/mojom/devtools/console_message.mojom-blink.h"
 #include "third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom-shared.h"
 #include "third_party/blink/public/platform/platform.h"
-#include "third_party/blink/public/platform/web_blob_info.h"
 #include "third_party/blink/public/platform/web_code_cache_loader.h"
 #include "third_party/blink/public/platform/web_data.h"
 #include "third_party/blink/public/platform/web_security_origin.h"
@@ -1393,7 +1392,7 @@
   WebData data_out;
   int64_t encoded_data_length = WebURLLoaderClient::kUnknownEncodedDataLength;
   uint64_t encoded_body_length = 0;
-  WebBlobInfo downloaded_blob;
+  scoped_refptr<BlobDataHandle> downloaded_blob;
 
   if (CanHandleDataURLRequestLocally(request)) {
     // We don't have to verify mime type again since it's allowed to handle
@@ -1447,10 +1446,10 @@
   }
 
   if (request.DownloadToBlob()) {
-    auto blob = downloaded_blob.GetBlobHandle();
-    if (blob)
-      OnProgress(blob->size());
-    FinishedCreatingBlob(blob);
+    if (downloaded_blob) {
+      OnProgress(downloaded_blob->size());
+    }
+    FinishedCreatingBlob(std::move(downloaded_blob));
   }
   DidFinishLoading(base::TimeTicks::Now(), encoded_data_length,
                    encoded_body_length, decoded_body_length, false);
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_loader_defer_loading_test.cc b/third_party/blink/renderer/platform/loader/fetch/resource_loader_defer_loading_test.cc
index 1d23995c..e6053f0f 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_loader_defer_loading_test.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_loader_defer_loading_test.cc
@@ -73,7 +73,7 @@
       WebData&,
       int64_t& encoded_data_length,
       uint64_t& encoded_body_length,
-      WebBlobInfo& downloaded_blob,
+      scoped_refptr<BlobDataHandle>& downloaded_blob,
       std::unique_ptr<blink::ResourceLoadInfoNotifierWrapper>
           resource_load_info_notifier_wrapper) override {
     NOTREACHED();
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/mojo_url_loader_client.cc b/third_party/blink/renderer/platform/loader/fetch/url_loader/mojo_url_loader_client.cc
index efc6b37..cedd7eab 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/mojo_url_loader_client.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/mojo_url_loader_client.cc
@@ -21,11 +21,11 @@
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/mojom/frame/back_forward_cache_controller.mojom.h"
 #include "third_party/blink/public/platform/platform.h"
-#include "third_party/blink/public/platform/web_resource_request_sender.h"
 #include "third_party/blink/renderer/platform/back_forward_cache_buffer_limit_tracker.h"
 #include "third_party/blink/renderer/platform/back_forward_cache_utils.h"
 #include "third_party/blink/renderer/platform/loader/fetch/back_forward_cache_loader_helper.h"
 #include "third_party/blink/renderer/platform/loader/fetch/loader_freeze_mode.h"
+#include "third_party/blink/renderer/platform/loader/fetch/url_loader/web_resource_request_sender.h"
 #include "third_party/blink/renderer/platform/wtf/functional.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/mojo_url_loader_client_unittest.cc b/third_party/blink/renderer/platform/loader/fetch/url_loader/mojo_url_loader_client_unittest.cc
index 87301fe..2077b1a 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/mojo_url_loader_client_unittest.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/mojo_url_loader_client_unittest.cc
@@ -23,9 +23,9 @@
 #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom.h"
 #include "third_party/blink/public/platform/resource_load_info_notifier_wrapper.h"
 #include "third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h"
-#include "third_party/blink/public/platform/web_resource_request_sender.h"
 #include "third_party/blink/public/platform/web_runtime_features.h"
 #include "third_party/blink/renderer/platform/loader/fetch/back_forward_cache_loader_helper.h"
+#include "third_party/blink/renderer/platform/loader/fetch/url_loader/web_resource_request_sender.h"
 #include "third_party/blink/renderer/platform/testing/testing_platform_support.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context.cc b/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context.cc
index ab6c339..e0fa253 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context.cc
@@ -104,7 +104,7 @@
     base::WaitableEvent* redirect_or_response_event,
     base::WaitableEvent* abort_event,
     base::TimeDelta timeout,
-    mojo::PendingRemote<mojom::BlobRegistry> download_to_blob_registry,
+    mojo::PendingRemote<mojom::blink::BlobRegistry> download_to_blob_registry,
     const WebVector<WebString>& cors_exempt_header_list,
     std::unique_ptr<ResourceLoadInfoNotifierWrapper>
         resource_load_info_notifier_wrapper) {
@@ -128,7 +128,7 @@
     base::WaitableEvent* redirect_or_response_event,
     base::WaitableEvent* abort_event,
     base::TimeDelta timeout,
-    mojo::PendingRemote<mojom::BlobRegistry> download_to_blob_registry,
+    mojo::PendingRemote<mojom::blink::BlobRegistry> download_to_blob_registry,
     scoped_refptr<base::SingleThreadTaskRunner> task_runner)
     : response_(response),
       context_for_redirect_(context_for_redirect),
@@ -214,7 +214,7 @@
     blob_response_started_ = true;
 
     download_to_blob_registry_->RegisterFromStream(
-        response_->head->mime_type, "",
+        String(response_->head->mime_type), "",
         std::max<int64_t>(0, response_->head->content_length), std::move(body),
         mojo::NullAssociatedRemote(),
         base::BindOnce(&SyncLoadContext::OnFinishCreatingBlob,
@@ -261,10 +261,11 @@
   CompleteRequest();
 }
 
-void SyncLoadContext::OnFinishCreatingBlob(mojom::SerializedBlobPtr blob) {
+void SyncLoadContext::OnFinishCreatingBlob(
+    const scoped_refptr<BlobDataHandle>& blob) {
   DCHECK(!Completed());
   blob_finished_ = true;
-  response_->downloaded_blob = std::move(blob);
+  response_->downloaded_blob = blob;
   if (request_completed_)
     CompleteRequest();
 }
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context.h b/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context.h
index beb31a60..05ed9e92 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context.h
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context.h
@@ -13,12 +13,12 @@
 #include "mojo/public/cpp/system/simple_watcher.h"
 #include "net/traffic_annotation/network_traffic_annotation.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
-#include "third_party/blink/public/mojom/blob/blob_registry.mojom.h"
+#include "third_party/blink/public/mojom/blob/blob_registry.mojom-blink.h"
 #include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_request_peer.h"
-#include "third_party/blink/public/platform/web_resource_request_sender.h"
 #include "third_party/blink/public/platform/web_string.h"
 #include "third_party/blink/public/platform/web_vector.h"
+#include "third_party/blink/renderer/platform/loader/fetch/url_loader/web_resource_request_sender.h"
 
 namespace base {
 class WaitableEvent;
@@ -68,7 +68,7 @@
       base::WaitableEvent* completed_event,
       base::WaitableEvent* abort_event,
       base::TimeDelta timeout,
-      mojo::PendingRemote<mojom::BlobRegistry> download_to_blob_registry,
+      mojo::PendingRemote<mojom::blink::BlobRegistry> download_to_blob_registry,
       const WebVector<WebString>& cors_exempt_header_list,
       std::unique_ptr<ResourceLoadInfoNotifierWrapper>
           resource_load_info_notifier_wrapper);
@@ -92,7 +92,7 @@
       base::WaitableEvent* completed_event,
       base::WaitableEvent* abort_event,
       base::TimeDelta timeout,
-      mojo::PendingRemote<mojom::BlobRegistry> download_to_blob_registry,
+      mojo::PendingRemote<mojom::blink::BlobRegistry> download_to_blob_registry,
       scoped_refptr<base::SingleThreadTaskRunner> task_runner);
   // WebRequestPeer implementation:
   void OnUploadProgress(uint64_t position, uint64_t size) override;
@@ -107,7 +107,7 @@
   void OnTransferSizeUpdated(int transfer_size_diff) override;
   void OnCompletedRequest(
       const network::URLLoaderCompletionStatus& status) override;
-  void OnFinishCreatingBlob(mojom::SerializedBlobPtr blob);
+  void OnFinishCreatingBlob(const scoped_refptr<BlobDataHandle>& blob);
 
   void OnBodyReadable(MojoResult, const mojo::HandleSignalsState&);
 
@@ -140,7 +140,7 @@
   std::unique_ptr<WebResourceRequestSender> resource_request_sender_;
 
   // State for downloading to a blob.
-  mojo::Remote<mojom::BlobRegistry> download_to_blob_registry_;
+  mojo::Remote<mojom::blink::BlobRegistry> download_to_blob_registry_;
   bool blob_response_started_ = false;
   bool blob_finished_ = false;
   bool request_completed_ = false;
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context_unittest.cc b/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context_unittest.cc
index 38cd0a9..dc7b870 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context_unittest.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context_unittest.cc
@@ -17,8 +17,8 @@
 #include "services/network/test/test_url_loader_factory.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/platform/resource_load_info_notifier_wrapper.h"
-#include "third_party/blink/public/platform/web_resource_request_sender.h"
 #include "third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_response.h"
+#include "third_party/blink/renderer/platform/loader/fetch/url_loader/web_resource_request_sender.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_response.h b/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_response.h
index 92c1d3e..878b9ac0 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_response.h
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_response.h
@@ -9,10 +9,10 @@
 #include "services/network/public/cpp/cors/cors_error_status.h"
 #include "services/network/public/mojom/url_response_head.mojom.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
-#include "third_party/blink/public/mojom/blob/serialized_blob.mojom.h"
 #include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_data.h"
 #include "third_party/blink/renderer/platform/allow_discouraged_type.h"
+#include "third_party/blink/renderer/platform/blob/blob_data.h"
 #include "url/gurl.h"
 
 namespace blink {
@@ -55,7 +55,7 @@
   WebData data;
 
   // Used for blob response type XMLHttpRequest.
-  mojom::SerializedBlobPtr downloaded_blob;
+  scoped_refptr<BlobDataHandle> downloaded_blob;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/web_resource_request_sender.cc b/third_party/blink/renderer/platform/loader/fetch/url_loader/web_resource_request_sender.cc
index 2bea5757..c7f01fb 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/web_resource_request_sender.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/web_resource_request_sender.cc
@@ -2,18 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "third_party/blink/public/platform/web_resource_request_sender.h"
+#include "third_party/blink/renderer/platform/loader/fetch/url_loader/web_resource_request_sender.h"
 
 #include <utility>
 
-#include "base/atomic_sequence_num.h"
 #include "base/compiler_specific.h"
 #include "base/debug/alias.h"
 #include "base/files/file_path.h"
 #include "base/functional/bind.h"
 #include "base/logging.h"
 #include "base/metrics/histogram_macros.h"
-#include "base/rand_util.h"
 #include "base/strings/string_util.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/single_thread_task_runner.h"
@@ -46,6 +44,7 @@
 #include "third_party/blink/public/platform/web_resource_request_sender_delegate.h"
 #include "third_party/blink/public/platform/web_string.h"
 #include "third_party/blink/public/platform/web_url.h"
+#include "third_party/blink/public/platform/web_url_request_util.h"
 #include "third_party/blink/renderer/platform/back_forward_cache_utils.h"
 #include "third_party/blink/renderer/platform/loader/fetch/back_forward_cache_loader_helper.h"
 #include "third_party/blink/renderer/platform/loader/fetch/url_loader/mojo_url_loader_client.h"
@@ -116,21 +115,6 @@
   }
 }
 
-int GetInitialRequestID() {
-  // Starting with a random number speculatively avoids RDH_INVALID_REQUEST_ID
-  // which are assumed to have been caused by restarting RequestID at 0 when
-  // restarting a renderer after a crash - this would cause collisions if
-  // requests from the previously crashed renderer are still active.  See
-  // https://crbug.com/614281#c61 for more details about this hypothesis.
-  //
-  // To avoid increasing the likelihood of overflowing the range of available
-  // RequestIDs, kMax is set to a relatively low value of 2^20 (rather than
-  // to something higher like 2^31).
-  const int kMin = 0;
-  const int kMax = 1 << 20;
-  return base::RandInt(kMin, kMax);
-}
-
 // Determines if the loader should be restarted on a redirect using
 // ThrottlingURLLoader::FollowRedirectForcingRestart.
 bool RedirectRequiresLoaderRestart(const GURL& original_url,
@@ -146,13 +130,6 @@
 
 }  // namespace
 
-// static
-int WebResourceRequestSender::MakeRequestID() {
-  static const int kInitialRequestID = GetInitialRequestID();
-  static base::AtomicSequenceNumber sequence;
-  return kInitialRequestID + sequence.GetNext();
-}
-
 WebResourceRequestSender::WebResourceRequestSender()
     : delegate_(Platform::Current()->GetResourceRequestSenderDelegate()) {}
 
@@ -168,7 +145,7 @@
     base::TimeDelta timeout,
     const WebVector<WebString>& cors_exempt_header_list,
     base::WaitableEvent* terminate_sync_load_event,
-    mojo::PendingRemote<mojom::BlobRegistry> download_to_blob_registry,
+    mojo::PendingRemote<mojom::blink::BlobRegistry> download_to_blob_registry,
     scoped_refptr<WebRequestPeer> peer,
     std::unique_ptr<ResourceLoadInfoNotifierWrapper>
         resource_load_info_notifier_wrapper) {
@@ -259,9 +236,9 @@
 #endif
 
   // Compute a unique request_id for this renderer process.
-  int request_id = MakeRequestID();
+  int request_id = GenerateRequestId();
   request_info_ = std::make_unique<PendingRequestInfo>(
-      std::move(peer), request->destination, request->url,
+      std::move(peer), request->destination, KURL(request->url),
       std::move(resource_load_info_notifier_wrapper));
 
   request_info_->resource_load_info_notifier_wrapper
@@ -359,7 +336,7 @@
 WebResourceRequestSender::PendingRequestInfo::PendingRequestInfo(
     scoped_refptr<WebRequestPeer> peer,
     network::mojom::RequestDestination request_destination,
-    const GURL& request_url,
+    const KURL& request_url,
     std::unique_ptr<ResourceLoadInfoNotifierWrapper>
         resource_load_info_notifier_wrapper)
     : peer(std::move(peer)),
@@ -490,7 +467,7 @@
   request_info_->remote_request_start =
       response_head->load_timing.request_start;
   request_info_->redirect_requires_loader_restart =
-      RedirectRequiresLoaderRestart(request_info_->response_url,
+      RedirectRequiresLoaderRestart(GURL(request_info_->response_url),
                                     redirect_info.new_url);
 
   base::TimeTicks remote_response_start =
@@ -514,7 +491,7 @@
         removed_headers.begin(), removed_headers.end(), vector.begin(),
         [](const std::string& h) { return WebString::FromASCII(h); });
     request_info_->removed_headers = vector;
-    request_info_->response_url = redirect_info.new_url;
+    request_info_->response_url = KURL(redirect_info.new_url);
     request_info_->has_pending_redirect = true;
     request_info_->resource_load_info_notifier_wrapper
         ->NotifyResourceRedirectReceived(redirect_info,
diff --git a/third_party/blink/public/platform/web_resource_request_sender.h b/third_party/blink/renderer/platform/loader/fetch/url_loader/web_resource_request_sender.h
similarity index 89%
rename from third_party/blink/public/platform/web_resource_request_sender.h
rename to third_party/blink/renderer/platform/loader/fetch/url_loader/web_resource_request_sender.h
index bd4e0ee5..1be6371a 100644
--- a/third_party/blink/public/platform/web_resource_request_sender.h
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/web_resource_request_sender.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_RESOURCE_REQUEST_SENDER_H_
-#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_RESOURCE_REQUEST_SENDER_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_LOADER_FETCH_URL_LOADER_WEB_RESOURCE_REQUEST_SENDER_H_
+#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_LOADER_FETCH_URL_LOADER_WEB_RESOURCE_REQUEST_SENDER_H_
 
 #include <stdint.h>
 
@@ -12,7 +12,6 @@
 #include <string>
 #include <vector>
 
-#include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
@@ -26,14 +25,14 @@
 #include "services/network/public/mojom/fetch_api.mojom-forward.h"
 #include "services/network/public/mojom/url_response_head.mojom-forward.h"
 #include "third_party/blink/public/common/loader/url_loader_throttle.h"
-#include "third_party/blink/public/mojom/blob/blob_registry.mojom-forward.h"
+#include "third_party/blink/public/mojom/blob/blob_registry.mojom-blink.h"
 #include "third_party/blink/public/mojom/loader/resource_load_info.mojom-shared.h"
 #include "third_party/blink/public/mojom/loader/resource_load_info.mojom.h"
 #include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_loader_freeze_mode.h"
 #include "third_party/blink/public/platform/web_url_request.h"
 #include "third_party/blink/public/platform/web_vector.h"
-#include "url/gurl.h"
+#include "third_party/blink/renderer/platform/weborigin/kurl.h"
 
 namespace base {
 class WaitableEvent;
@@ -46,9 +45,6 @@
 namespace network {
 struct ResourceRequest;
 struct URLLoaderCompletionStatus;
-namespace mojom {
-class URLLoaderFactory;
-}  // namespace mojom
 }  // namespace network
 
 namespace blink {
@@ -65,15 +61,6 @@
 // WebURLLoaderImpl::Context or SyncLoadContext.
 class BLINK_PLATFORM_EXPORT WebResourceRequestSender {
  public:
-  // Generates ids for requests initiated by child processes unique to the
-  // particular process, counted up from 0 (browser initiated requests count
-  // down from -2).
-  //
-  // Public to be used by URLLoaderFactory and/or URLLoader implementations with
-  // the need to perform additional requests besides the main request, e.g.,
-  // CORS preflight requests.
-  static int MakeRequestID();
-
   WebResourceRequestSender();
   WebResourceRequestSender(const WebResourceRequestSender&) = delete;
   WebResourceRequestSender& operator=(const WebResourceRequestSender&) = delete;
@@ -101,7 +88,7 @@
       base::TimeDelta timeout,
       const WebVector<WebString>& cors_exempt_header_list,
       base::WaitableEvent* terminate_sync_load_event,
-      mojo::PendingRemote<mojom::BlobRegistry> download_to_blob_registry,
+      mojo::PendingRemote<mojom::blink::BlobRegistry> download_to_blob_registry,
       scoped_refptr<WebRequestPeer> peer,
       std::unique_ptr<ResourceLoadInfoNotifierWrapper>
           resource_load_info_notifier_wrapper);
@@ -176,7 +163,7 @@
   struct PendingRequestInfo {
     PendingRequestInfo(scoped_refptr<WebRequestPeer> peer,
                        network::mojom::RequestDestination request_destination,
-                       const GURL& request_url,
+                       const KURL& request_url,
                        std::unique_ptr<ResourceLoadInfoNotifierWrapper>
                            resource_load_info_notifier_wrapper);
 
@@ -186,10 +173,10 @@
     network::mojom::RequestDestination request_destination;
     WebLoaderFreezeMode freeze_mode = WebLoaderFreezeMode::kNone;
     // Original requested url.
-    GURL url;
+    KURL url;
     // The url, method and referrer of the latest response even in case of
     // redirection.
-    GURL response_url;
+    KURL response_url;
     bool has_pending_redirect = false;
     base::TimeTicks local_request_start;
     base::TimeTicks local_response_start;
@@ -223,7 +210,7 @@
       network::mojom::URLResponseHead& response_head) const;
 
   // `delegate_` is expected to live longer than `this`.
-  raw_ptr<WebResourceRequestSenderDelegate> delegate_;
+  WebResourceRequestSenderDelegate* delegate_;
 
   // The instance is created on StartAsync() or StartSync(), and it's deleted
   // when the response has finished, or when the request is canceled.
@@ -234,4 +221,4 @@
 
 }  // namespace blink
 
-#endif  // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_RESOURCE_REQUEST_SENDER_H_
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_LOADER_FETCH_URL_LOADER_WEB_RESOURCE_REQUEST_SENDER_H_
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/web_resource_request_sender_unittest.cc b/third_party/blink/renderer/platform/loader/fetch/url_loader/web_resource_request_sender_unittest.cc
index 02d268e..10c5da3 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/web_resource_request_sender_unittest.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/web_resource_request_sender_unittest.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "third_party/blink/public/platform/web_resource_request_sender.h"
+#include "third_party/blink/renderer/platform/loader/fetch/url_loader/web_resource_request_sender.h"
 
 #include <stddef.h>
 #include <stdint.h>
@@ -36,6 +36,7 @@
 #include "third_party/blink/public/platform/web_request_peer.h"
 #include "third_party/blink/public/platform/web_resource_request_sender_delegate.h"
 #include "third_party/blink/public/platform/web_url_request_extra_data.h"
+#include "third_party/blink/public/platform/web_url_request_util.h"
 #include "third_party/blink/renderer/platform/testing/testing_platform_support.h"
 #include "url/gurl.h"
 
@@ -304,8 +305,8 @@
 
 // Tests the generation of unique request ids.
 TEST_F(WebResourceRequestSenderTest, MakeRequestID) {
-  int first_id = WebResourceRequestSender::MakeRequestID();
-  int second_id = WebResourceRequestSender::MakeRequestID();
+  int first_id = GenerateRequestId();
+  int second_id = GenerateRequestId();
 
   // Child process ids are unique (per process) and counting from 0 upwards:
   EXPECT_GT(second_id, first_id);
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/web_url_loader.cc b/third_party/blink/renderer/platform/loader/fetch/url_loader/web_url_loader.cc
index 368efd5..2e97f12 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/web_url_loader.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/web_url_loader.cc
@@ -61,16 +61,14 @@
 #include "third_party/blink/public/common/security/security_style.h"
 #include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h"
 #include "third_party/blink/public/mojom/blob/blob.mojom.h"
-#include "third_party/blink/public/mojom/blob/blob_registry.mojom.h"
+#include "third_party/blink/public/mojom/blob/blob_registry.mojom-blink.h"
 #include "third_party/blink/public/mojom/loader/keep_alive_handle.mojom.h"
 #include "third_party/blink/public/platform/file_path_conversion.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/platform/resource_load_info_notifier_wrapper.h"
 #include "third_party/blink/public/platform/resource_request_blocked_reason.h"
 #include "third_party/blink/public/platform/url_conversion.h"
-#include "third_party/blink/public/platform/web_blob_info.h"
 #include "third_party/blink/public/platform/web_request_peer.h"
-#include "third_party/blink/public/platform/web_resource_request_sender.h"
 #include "third_party/blink/public/platform/web_security_origin.h"
 #include "third_party/blink/public/platform/web_url.h"
 #include "third_party/blink/public/platform/web_url_error.h"
@@ -79,8 +77,10 @@
 #include "third_party/blink/public/platform/web_url_response.h"
 #include "third_party/blink/public/web/web_local_frame.h"
 #include "third_party/blink/public/web/web_security_policy.h"
+#include "third_party/blink/renderer/platform/blob/blob_data.h"
 #include "third_party/blink/renderer/platform/loader/fetch/back_forward_cache_loader_helper.h"
 #include "third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_response.h"
+#include "third_party/blink/renderer/platform/loader/fetch/url_loader/web_resource_request_sender.h"
 #include "third_party/blink/renderer/platform/loader/fetch/url_loader/web_url_loader_client.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
 #include "third_party/boringssl/src/include/openssl/ssl.h"
@@ -324,7 +324,7 @@
     loader_options |= network::mojom::kURLLoadOptionSynchronous;
     request->load_flags |= net::LOAD_IGNORE_LIMITS;
 
-    mojo::PendingRemote<mojom::BlobRegistry> download_to_blob_registry;
+    mojo::PendingRemote<mojom::blink::BlobRegistry> download_to_blob_registry;
     if (pass_response_pipe_to_client) {
       Platform::Current()->GetBrowserInterfaceBroker()->GetInterface(
           download_to_blob_registry.InitWithNewPipeAndPassReceiver());
@@ -515,7 +515,7 @@
     WebData& data,
     int64_t& encoded_data_length,
     uint64_t& encoded_body_length,
-    WebBlobInfo& downloaded_blob,
+    scoped_refptr<BlobDataHandle>& downloaded_blob,
     std::unique_ptr<ResourceLoadInfoNotifierWrapper>
         resource_load_info_notifier_wrapper) {
   if (!context_)
@@ -569,11 +569,7 @@
           ? sync_load_response.head->encoded_body_length->value
           : 0;
   if (sync_load_response.downloaded_blob) {
-    downloaded_blob = WebBlobInfo(
-        WebString::FromLatin1(sync_load_response.downloaded_blob->uuid),
-        WebString::FromLatin1(sync_load_response.downloaded_blob->content_type),
-        sync_load_response.downloaded_blob->size,
-        std::move(sync_load_response.downloaded_blob->blob));
+    downloaded_blob = std::move(sync_load_response.downloaded_blob);
   }
 
   data.Assign(sync_load_response.data);
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/web_url_loader.h b/third_party/blink/renderer/platform/loader/fetch/url_loader/web_url_loader.h
index 06a4537..d36dc10 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/web_url_loader.h
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/web_url_loader.h
@@ -62,7 +62,7 @@
 
 class ResourceLoadInfoNotifierWrapper;
 class BackForwardCacheLoaderHelper;
-class WebBlobInfo;
+class BlobDataHandle;
 class WebData;
 class WebResourceRequestSender;
 class WebURLRequestExtraData;
@@ -107,7 +107,7 @@
       WebData& data,
       int64_t& encoded_data_length,
       uint64_t& encoded_body_length,
-      WebBlobInfo& downloaded_blob,
+      scoped_refptr<BlobDataHandle>& downloaded_blob,
       std::unique_ptr<ResourceLoadInfoNotifierWrapper>
           resource_load_info_notifier_wrapper);
 
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/web_url_loader_unittest.cc b/third_party/blink/renderer/platform/loader/fetch/url_loader/web_url_loader_unittest.cc
index f8ded3d..a884e93 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/web_url_loader_unittest.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/web_url_loader_unittest.cc
@@ -38,11 +38,9 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/platform/resource_load_info_notifier_wrapper.h"
 #include "third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h"
-#include "third_party/blink/public/platform/web_blob_info.h"
 #include "third_party/blink/public/platform/web_data.h"
 #include "third_party/blink/public/platform/web_loader_freeze_mode.h"
 #include "third_party/blink/public/platform/web_request_peer.h"
-#include "third_party/blink/public/platform/web_resource_request_sender.h"
 #include "third_party/blink/public/platform/web_string.h"
 #include "third_party/blink/public/platform/web_url.h"
 #include "third_party/blink/public/platform/web_url_error.h"
@@ -52,6 +50,7 @@
 #include "third_party/blink/public/platform/web_vector.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource_response.h"
 #include "third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_response.h"
+#include "third_party/blink/renderer/platform/loader/fetch/url_loader/web_resource_request_sender.h"
 #include "third_party/blink/renderer/platform/loader/fetch/url_loader/web_url_loader.h"
 #include "third_party/blink/renderer/platform/loader/fetch/url_loader/web_url_loader_client.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
@@ -84,7 +83,7 @@
       base::TimeDelta timeout,
       const WebVector<WebString>& cors_exempt_header_list,
       base::WaitableEvent* terminate_sync_load_event,
-      mojo::PendingRemote<mojom::BlobRegistry> download_to_blob_registry,
+      mojo::PendingRemote<mojom::blink::BlobRegistry> download_to_blob_registry,
       scoped_refptr<WebRequestPeer> peer,
       std::unique_ptr<ResourceLoadInfoNotifierWrapper>
           resource_load_info_notifier_wrapper) override {
@@ -588,7 +587,7 @@
   WebData data;
   int64_t encoded_data_length = 0;
   uint64_t encoded_body_length = 0;
-  WebBlobInfo downloaded_blob;
+  scoped_refptr<BlobDataHandle> downloaded_blob;
 
   client()->loader()->LoadSynchronously(
       std::move(request), /*url_request_extra_data=*/nullptr,
@@ -600,7 +599,7 @@
 
   EXPECT_EQ(kEncodedBodyLength, encoded_body_length);
   EXPECT_EQ(kEncodedDataLength, encoded_data_length);
-  EXPECT_TRUE(downloaded_blob.Uuid().IsNull());
+  EXPECT_FALSE(downloaded_blob);
 }
 
 // Verifies that WebURLResponse::Create() copies AuthChallengeInfo to the
diff --git a/third_party/blink/renderer/platform/loader/internet_disconnected_web_url_loader.cc b/third_party/blink/renderer/platform/loader/internet_disconnected_web_url_loader.cc
index baf0fea..6dd53280 100644
--- a/third_party/blink/renderer/platform/loader/internet_disconnected_web_url_loader.cc
+++ b/third_party/blink/renderer/platform/loader/internet_disconnected_web_url_loader.cc
@@ -48,7 +48,7 @@
     WebData&,
     int64_t& encoded_data_length,
     uint64_t& encoded_body_length,
-    WebBlobInfo& downloaded_blob,
+    scoped_refptr<BlobDataHandle>& downloaded_blob,
     std::unique_ptr<blink::ResourceLoadInfoNotifierWrapper>
         resource_load_info_notifier_wrapper) {
   NOTREACHED();
diff --git a/third_party/blink/renderer/platform/loader/internet_disconnected_web_url_loader.h b/third_party/blink/renderer/platform/loader/internet_disconnected_web_url_loader.h
index 47f24383..9554f76 100644
--- a/third_party/blink/renderer/platform/loader/internet_disconnected_web_url_loader.h
+++ b/third_party/blink/renderer/platform/loader/internet_disconnected_web_url_loader.h
@@ -50,7 +50,7 @@
       WebData&,
       int64_t& encoded_data_length,
       uint64_t& encoded_body_length,
-      WebBlobInfo& downloaded_blob,
+      scoped_refptr<BlobDataHandle>& downloaded_blob,
       std::unique_ptr<blink::ResourceLoadInfoNotifierWrapper>
           resource_load_info_notifier_wrapper) override;
   void LoadAsynchronously(
diff --git a/third_party/blink/renderer/platform/loader/web_url_request_util.cc b/third_party/blink/renderer/platform/loader/web_url_request_util.cc
index 20956503..d2246ec7 100644
--- a/third_party/blink/renderer/platform/loader/web_url_request_util.cc
+++ b/third_party/blink/renderer/platform/loader/web_url_request_util.cc
@@ -9,8 +9,10 @@
 
 #include <limits>
 
+#include "base/atomic_sequence_num.h"
 #include "base/check.h"
 #include "base/notreached.h"
+#include "base/rand_util.h"
 #include "base/time/time.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "services/network/public/mojom/data_pipe_getter.mojom-blink.h"
@@ -63,6 +65,21 @@
   StringBuilder buffer_;
 };
 
+int GetInitialRequestID() {
+  // Starting with a random number speculatively avoids RDH_INVALID_REQUEST_ID
+  // which are assumed to have been caused by restarting RequestID at 0 when
+  // restarting a renderer after a crash - this would cause collisions if
+  // requests from the previously crashed renderer are still active.  See
+  // https://crbug.com/614281#c61 for more details about this hypothesis.
+  //
+  // To avoid increasing the likelihood of overflowing the range of available
+  // RequestIDs, kMax is set to a relatively low value of 2^20 (rather than
+  // to something higher like 2^31).
+  const int kMin = 0;
+  const int kMax = 1 << 20;
+  return base::RandInt(kMin, kMax);
+}
+
 }  // namespace
 
 WebString GetWebURLRequestHeadersAsString(const WebURLRequest& request) {
@@ -205,4 +222,10 @@
       request.GetRequestContext(), MixedContent::CheckModeForPlugin::kLax);
 }
 
+int GenerateRequestId() {
+  static const int kInitialRequestID = GetInitialRequestID();
+  static base::AtomicSequenceNumber sequence;
+  return kInitialRequestID + sequence.GetNext();
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/testing/noop_web_url_loader.cc b/third_party/blink/renderer/platform/testing/noop_web_url_loader.cc
index 69f5771a..a18c597 100644
--- a/third_party/blink/renderer/platform/testing/noop_web_url_loader.cc
+++ b/third_party/blink/renderer/platform/testing/noop_web_url_loader.cc
@@ -22,7 +22,7 @@
     WebData&,
     int64_t& encoded_data_length,
     uint64_t& encoded_body_length,
-    WebBlobInfo& downloaded_blob,
+    scoped_refptr<BlobDataHandle>& downloaded_blob,
     std::unique_ptr<blink::ResourceLoadInfoNotifierWrapper>
         resource_load_info_notifier_wrapper) {
   NOTREACHED();
diff --git a/third_party/blink/renderer/platform/testing/noop_web_url_loader.h b/third_party/blink/renderer/platform/testing/noop_web_url_loader.h
index fb7e30a..98ed2e5 100644
--- a/third_party/blink/renderer/platform/testing/noop_web_url_loader.h
+++ b/third_party/blink/renderer/platform/testing/noop_web_url_loader.h
@@ -28,7 +28,7 @@
       WebData&,
       int64_t& encoded_data_length,
       uint64_t& encoded_body_length,
-      WebBlobInfo& downloaded_blob,
+      scoped_refptr<BlobDataHandle>& downloaded_blob,
       std::unique_ptr<blink::ResourceLoadInfoNotifierWrapper>
           resource_load_info_notifier_wrapper) override;
   void LoadAsynchronously(
diff --git a/third_party/blink/renderer/platform/testing/weburl_loader_mock.cc b/third_party/blink/renderer/platform/testing/weburl_loader_mock.cc
index 1adcd43e..e67a8487 100644
--- a/third_party/blink/renderer/platform/testing/weburl_loader_mock.cc
+++ b/third_party/blink/renderer/platform/testing/weburl_loader_mock.cc
@@ -110,7 +110,7 @@
     WebData& data,
     int64_t& encoded_data_length,
     uint64_t& encoded_body_length,
-    blink::WebBlobInfo& downloaded_blob,
+    scoped_refptr<BlobDataHandle>& downloaded_blob,
     std::unique_ptr<blink::ResourceLoadInfoNotifierWrapper>
         resource_load_info_notifier_wrapper) {
   DCHECK(factory_->IsMockedURL(WebURL(KURL(request->url)))) << request->url;
diff --git a/third_party/blink/renderer/platform/testing/weburl_loader_mock.h b/third_party/blink/renderer/platform/testing/weburl_loader_mock.h
index 0f6227c..317e11c 100644
--- a/third_party/blink/renderer/platform/testing/weburl_loader_mock.h
+++ b/third_party/blink/renderer/platform/testing/weburl_loader_mock.h
@@ -58,7 +58,7 @@
       WebData&,
       int64_t& encoded_data_length,
       uint64_t& encoded_body_length,
-      blink::WebBlobInfo& downloaded_blob,
+      scoped_refptr<BlobDataHandle>& downloaded_blob,
       std::unique_ptr<blink::ResourceLoadInfoNotifierWrapper>
           resource_load_info_notifier_wrapper) override;
   void LoadAsynchronously(