#include "third_party/blink/renderer/platform/loader/fetch/url_loader/url_loader.h"
#include <stdint.h>
#include <memory>
#include <optional>
#include <string>
#include <utility>
#include <vector>
#include "base/check.h"
#include "base/check_op.h"
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/memory/raw_ptr.h"
#include "base/task/sequenced_task_runner.h"
#include "base/task/single_thread_task_runner.h"
#include "base/time/time.h"
#include "base/trace_event/trace_event.h"
#include "mojo/public/cpp/base/big_buffer.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/struct_ptr.h"
#include "mojo/public/cpp/system/data_pipe.h"
#include "net/base/load_flags.h"
#include "net/base/net_errors.h"
#include "net/base/request_priority.h"
#include "net/http/http_response_headers.h"
#include "net/traffic_annotation/network_traffic_annotation.h"
#include "net/url_request/redirect_info.h"
#include "services/network/public/cpp/resource_request.h"
#include "services/network/public/cpp/shared_url_loader_factory.h"
#include "services/network/public/cpp/url_loader_completion_status.h"
#include "services/network/public/mojom/encoded_body_length.mojom.h"
#include "services/network/public/mojom/url_loader_factory.mojom-forward.h"
#include "services/network/public/mojom/url_response_head.mojom-forward.h"
#include "services/network/public/mojom/url_response_head.mojom.h"
#include "third_party/blink/public/common/loader/mime_sniffing_throttle.h"
#include "third_party/blink/public/common/loader/referrer_utils.h"
#include "third_party/blink/public/common/loader/url_loader_throttle.h"
#include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h"
#include "third_party/blink/public/mojom/blob/blob_registry.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/resource_load_info_notifier_wrapper.h"
#include "third_party/blink/public/platform/web_loader_freeze_mode.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"
#include "third_party/blink/public/platform/web_url_request.h"
#include "third_party/blink/public/platform/web_url_response.h"
#include "third_party/blink/renderer/platform/heap/persistent.h"
#include "third_party/blink/renderer/platform/loader/fetch/back_forward_cache_loader_helper.h"
#include "third_party/blink/renderer/platform/loader/fetch/fetch_utils.h"
#include "third_party/blink/renderer/platform/loader/fetch/url_loader/background_response_processor.h"
#include "third_party/blink/renderer/platform/loader/fetch/url_loader/resource_request_client.h"
#include "third_party/blink/renderer/platform/loader/fetch/url_loader/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/url_loader_client.h"
#include "third_party/blink/renderer/platform/weborigin/kurl.h"
#include "third_party/blink/renderer/platform/wtf/shared_buffer.h"
Time;
TimeTicks;
namespace blink {
class URLLoader::Context : public ResourceRequestClient { … };
URLLoader::Context::Context(
URLLoader* loader,
const Vector<String>& cors_exempt_header_list,
base::WaitableEvent* terminate_sync_load_event,
scoped_refptr<base::SingleThreadTaskRunner> freezable_task_runner,
scoped_refptr<base::SingleThreadTaskRunner> unfreezable_task_runner,
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
mojo::PendingRemote<mojom::blink::KeepAliveHandle> keep_alive_handle,
BackForwardCacheLoaderHelper* back_forward_cache_loader_helper,
Vector<std::unique_ptr<URLLoaderThrottle>> throttles)
: … { … }
scoped_refptr<base::SingleThreadTaskRunner>
URLLoader::Context::GetMaybeUnfreezableTaskRunner() { … }
void URLLoader::Context::Cancel() { … }
void URLLoader::Context::Freeze(LoaderFreezeMode mode) { … }
void URLLoader::Context::DidChangePriority(WebURLRequest::Priority new_priority,
int intra_priority_value) { … }
void URLLoader::Context::Start(
std::unique_ptr<network::ResourceRequest> request,
scoped_refptr<const SecurityOrigin> top_frame_origin,
bool download_to_blob,
bool no_mime_sniffing,
base::TimeDelta timeout_interval,
SyncLoadResponse* sync_load_response,
std::unique_ptr<ResourceLoadInfoNotifierWrapper>
resource_load_info_notifier_wrapper,
CodeCacheHost* code_cache_host) { … }
void URLLoader::Context::OnUploadProgress(uint64_t position, uint64_t size) { … }
void URLLoader::Context::OnReceivedRedirect(
const net::RedirectInfo& redirect_info,
network::mojom::URLResponseHeadPtr head,
FollowRedirectCallback follow_redirect_callback) { … }
void URLLoader::Context::OnReceivedResponse(
network::mojom::URLResponseHeadPtr head,
mojo::ScopedDataPipeConsumerHandle body,
std::optional<mojo_base::BigBuffer> cached_metadata) { … }
void URLLoader::Context::OnTransferSizeUpdated(int transfer_size_diff) { … }
void URLLoader::Context::OnCompletedRequest(
const network::URLLoaderCompletionStatus& status) { … }
URLLoader::Context::~Context() { … }
URLLoader::URLLoader(
const Vector<String>& cors_exempt_header_list,
base::WaitableEvent* terminate_sync_load_event,
scoped_refptr<base::SingleThreadTaskRunner> freezable_task_runner,
scoped_refptr<base::SingleThreadTaskRunner> unfreezable_task_runner,
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
mojo::PendingRemote<mojom::blink::KeepAliveHandle> keep_alive_handle,
BackForwardCacheLoaderHelper* back_forward_cache_loader_helper,
Vector<std::unique_ptr<URLLoaderThrottle>> throttles)
: … { … }
URLLoader::URLLoader() = default;
URLLoader::~URLLoader() { … }
void URLLoader::LoadSynchronously(
std::unique_ptr<network::ResourceRequest> request,
scoped_refptr<const SecurityOrigin> top_frame_origin,
bool download_to_blob,
bool no_mime_sniffing,
base::TimeDelta timeout_interval,
URLLoaderClient* client,
WebURLResponse& response,
std::optional<WebURLError>& error,
scoped_refptr<SharedBuffer>& data,
int64_t& encoded_data_length,
uint64_t& encoded_body_length,
scoped_refptr<BlobDataHandle>& downloaded_blob,
std::unique_ptr<ResourceLoadInfoNotifierWrapper>
resource_load_info_notifier_wrapper) { … }
void URLLoader::LoadAsynchronously(
std::unique_ptr<network::ResourceRequest> request,
scoped_refptr<const SecurityOrigin> top_frame_origin,
bool no_mime_sniffing,
std::unique_ptr<ResourceLoadInfoNotifierWrapper>
resource_load_info_notifier_wrapper,
CodeCacheHost* code_cache_host,
URLLoaderClient* client) { … }
void URLLoader::Cancel() { … }
void URLLoader::Freeze(LoaderFreezeMode mode) { … }
void URLLoader::DidChangePriority(WebURLRequest::Priority new_priority,
int intra_priority_value) { … }
scoped_refptr<base::SingleThreadTaskRunner>
URLLoader::GetTaskRunnerForBodyLoader() { … }
void URLLoader::SetResourceRequestSenderForTesting(
std::unique_ptr<ResourceRequestSender> resource_request_sender) { … }
void URLLoader::Context::SetResourceRequestSenderForTesting(
std::unique_ptr<blink::ResourceRequestSender> resource_request_sender) { … }
void URLLoader::SetBackgroundResponseProcessorFactory(
std::unique_ptr<BackgroundResponseProcessorFactory>
background_response_processor_factory) { … }
}