#include "net/url_request/url_request_job.h"
#include <utility>
#include "base/compiler_specific.h"
#include "base/functional/bind.h"
#include "base/functional/callback_helpers.h"
#include "base/location.h"
#include "base/memory/raw_ptr.h"
#include "base/metrics/histogram_macros.h"
#include "base/strings/string_number_conversions.h"
#include "base/task/single_thread_task_runner.h"
#include "base/values.h"
#include "net/base/auth.h"
#include "net/base/features.h"
#include "net/base/io_buffer.h"
#include "net/base/load_flags.h"
#include "net/base/load_states.h"
#include "net/base/net_errors.h"
#include "net/base/network_delegate.h"
#include "net/base/proxy_chain.h"
#include "net/base/schemeful_site.h"
#include "net/cert/x509_certificate.h"
#include "net/cookies/cookie_setting_override.h"
#include "net/cookies/cookie_util.h"
#include "net/log/net_log.h"
#include "net/log/net_log_capture_mode.h"
#include "net/log/net_log_event_type.h"
#include "net/log/net_log_with_source.h"
#include "net/nqe/network_quality_estimator.h"
#include "net/ssl/ssl_private_key.h"
#include "net/url_request/redirect_util.h"
#include "net/url_request/url_request_context.h"
namespace net {
namespace {
base::Value::Dict SourceStreamSetParams(SourceStream* source_stream) { … }
}
class URLRequestJob::URLRequestJobSourceStream : public SourceStream { … };
URLRequestJob::URLRequestJob(URLRequest* request)
: … { … }
URLRequestJob::~URLRequestJob() = default;
void URLRequestJob::SetUpload(UploadDataStream* upload) { … }
void URLRequestJob::SetExtraRequestHeaders(const HttpRequestHeaders& headers) { … }
void URLRequestJob::SetPriority(RequestPriority priority) { … }
void URLRequestJob::Kill() { … }
int URLRequestJob::Read(IOBuffer* buf, int buf_size) { … }
int64_t URLRequestJob::GetTotalReceivedBytes() const { … }
int64_t URLRequestJob::GetTotalSentBytes() const { … }
int64_t URLRequestJob::GetReceivedBodyBytes() const { … }
LoadState URLRequestJob::GetLoadState() const { … }
bool URLRequestJob::GetCharset(std::string* charset) { … }
void URLRequestJob::GetResponseInfo(HttpResponseInfo* info) { … }
void URLRequestJob::GetLoadTimingInfo(LoadTimingInfo* load_timing_info) const { … }
bool URLRequestJob::GetTransactionRemoteEndpoint(IPEndPoint* endpoint) const { … }
void URLRequestJob::PopulateNetErrorDetails(NetErrorDetails* details) const { … }
bool URLRequestJob::IsRedirectResponse(GURL* location,
int* http_status_code,
bool* insecure_scheme_was_upgraded) { … }
bool URLRequestJob::CopyFragmentOnRedirect(const GURL& location) const { … }
bool URLRequestJob::IsSafeRedirect(const GURL& location) { … }
bool URLRequestJob::NeedsAuth() { … }
std::unique_ptr<AuthChallengeInfo> URLRequestJob::GetAuthChallengeInfo() { … }
void URLRequestJob::SetAuth(const AuthCredentials& credentials) { … }
void URLRequestJob::CancelAuth() { … }
void URLRequestJob::ContinueWithCertificate(
scoped_refptr<X509Certificate> client_cert,
scoped_refptr<SSLPrivateKey> client_private_key) { … }
void URLRequestJob::ContinueDespiteLastError() { … }
void URLRequestJob::FollowDeferredRedirect(
const std::optional<std::vector<std::string>>& removed_headers,
const std::optional<net::HttpRequestHeaders>& modified_headers) { … }
int64_t URLRequestJob::prefilter_bytes_read() const { … }
bool URLRequestJob::GetMimeType(std::string* mime_type) const { … }
int URLRequestJob::GetResponseCode() const { … }
IPEndPoint URLRequestJob::GetResponseRemoteEndpoint() const { … }
void URLRequestJob::NotifyURLRequestDestroyed() { … }
ConnectionAttempts URLRequestJob::GetConnectionAttempts() const { … }
void URLRequestJob::CloseConnectionOnDestruction() { … }
bool URLRequestJob::NeedsRetryWithStorageAccess() { … }
namespace {
GURL MaybeStripToOrigin(GURL url, bool should_strip_to_origin) { … }
}
GURL URLRequestJob::ComputeReferrerForPolicy(
ReferrerPolicy policy,
const GURL& original_referrer,
const GURL& destination,
bool* same_origin_out_for_metrics) { … }
cookie_util::StorageAccessStatus URLRequestJob::StorageAccessStatus() const { … }
int URLRequestJob::NotifyConnected(const TransportInfo& info,
CompletionOnceCallback callback) { … }
void URLRequestJob::NotifyCertificateRequested(
SSLCertRequestInfo* cert_request_info) { … }
void URLRequestJob::NotifySSLCertificateError(int net_error,
const SSLInfo& ssl_info,
bool fatal) { … }
bool URLRequestJob::CanSetCookie(
const net::CanonicalCookie& cookie,
CookieOptions* options,
const net::FirstPartySetMetadata& first_party_set_metadata,
CookieInclusionStatus* inclusion_status) const { … }
void URLRequestJob::NotifyHeadersComplete() { … }
void URLRequestJob::NotifyFinalHeadersReceived() { … }
void URLRequestJob::ConvertResultToError(int result, Error* error, int* count) { … }
void URLRequestJob::ReadRawDataComplete(int result) { … }
void URLRequestJob::NotifyStartError(int net_error) { … }
void URLRequestJob::OnDone(int net_error, bool notify_done) { … }
void URLRequestJob::NotifyDone() { … }
void URLRequestJob::NotifyCanceled() { … }
void URLRequestJob::OnCallToDelegate(NetLogEventType type) { … }
void URLRequestJob::OnCallToDelegateComplete() { … }
int URLRequestJob::ReadRawData(IOBuffer* buf, int buf_size) { … }
void URLRequestJob::DoneReading() { … }
void URLRequestJob::DoneReadingRedirectResponse() { … }
void URLRequestJob::DoneReadingRetryResponse() { … }
std::unique_ptr<SourceStream> URLRequestJob::SetUpSourceStream() { … }
void URLRequestJob::SetProxyChain(const ProxyChain& proxy_chain) { … }
void URLRequestJob::SourceStreamReadComplete(bool synchronous, int result) { … }
int URLRequestJob::ReadRawDataHelper(IOBuffer* buf,
int buf_size,
CompletionOnceCallback callback) { … }
int URLRequestJob::CanFollowRedirect(const GURL& new_url) { … }
void URLRequestJob::FollowRedirect(
const RedirectInfo& redirect_info,
const std::optional<std::vector<std::string>>& removed_headers,
const std::optional<net::HttpRequestHeaders>& modified_headers) { … }
void URLRequestJob::GatherRawReadStats(int bytes_read) { … }
void URLRequestJob::RecordBytesRead(int bytes_read) { … }
}