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(