summaryrefslogtreecommitdiff
path: root/chromium/net/url_request/url_request.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/net/url_request/url_request.cc')
-rw-r--r--chromium/net/url_request/url_request.cc70
1 files changed, 63 insertions, 7 deletions
diff --git a/chromium/net/url_request/url_request.cc b/chromium/net/url_request/url_request.cc
index ccb85ec9ff8..5d754a7e1c9 100644
--- a/chromium/net/url_request/url_request.cc
+++ b/chromium/net/url_request/url_request.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -105,12 +105,12 @@ void ConvertRealLoadTimesToBlockingTimes(LoadTimingInfo* load_timing_info) {
LoadTimingInfo::ConnectTiming* connect_timing =
&load_timing_info->connect_timing;
- if (!connect_timing->dns_start.is_null()) {
- DCHECK(!connect_timing->dns_end.is_null());
- if (connect_timing->dns_start < block_on_connect)
- connect_timing->dns_start = block_on_connect;
- if (connect_timing->dns_end < block_on_connect)
- connect_timing->dns_end = block_on_connect;
+ if (!connect_timing->domain_lookup_start.is_null()) {
+ DCHECK(!connect_timing->domain_lookup_end.is_null());
+ if (connect_timing->domain_lookup_start < block_on_connect)
+ connect_timing->domain_lookup_start = block_on_connect;
+ if (connect_timing->domain_lookup_end < block_on_connect)
+ connect_timing->domain_lookup_end = block_on_connect;
}
if (!connect_timing->connect_start.is_null()) {
@@ -304,6 +304,8 @@ base::Value URLRequest::GetStateAsValue() const {
dict.Set("delegate_blocked_by", blocked_by_);
dict.Set("method", method_);
+ // TODO(https://crbug.com/1343856): Update "network_isolation_key" to
+ // "network_anonymization_key" and change NetLog viewer.
dict.Set("network_isolation_key",
isolation_info_.network_isolation_key().ToDebugString());
dict.Set("has_upload", has_upload());
@@ -476,6 +478,14 @@ void URLRequest::set_site_for_cookies(const SiteForCookies& site_for_cookies) {
site_for_cookies_ = site_for_cookies;
}
+void URLRequest::set_isolation_info_from_network_anonymization_key(
+ const NetworkAnonymizationKey& network_anonymization_key) {
+ set_isolation_info(URLRequest::CreateIsolationInfoFromNetworkAnonymizationKey(
+ network_anonymization_key));
+
+ is_created_from_network_anonymization_key_ = true;
+}
+
void URLRequest::set_first_party_url_policy(
RedirectInfo::FirstPartyURLPolicy first_party_url_policy) {
DCHECK(!is_pending_);
@@ -624,6 +634,10 @@ void URLRequest::BeforeRequestComplete(int error) {
void URLRequest::StartJob(std::unique_ptr<URLRequestJob> job) {
DCHECK(!is_pending_);
DCHECK(!job_);
+ if (is_created_from_network_anonymization_key_) {
+ DCHECK(load_flags_ & LOAD_DISABLE_CACHE);
+ DCHECK(!allow_credentials_);
+ }
net_log_.BeginEvent(NetLogEventType::URL_REQUEST_START_JOB, [&] {
return NetLogURLRequestStartParams(
@@ -1161,6 +1175,48 @@ void URLRequest::RecordReferrerGranularityMetrics(
}
}
+IsolationInfo URLRequest::CreateIsolationInfoFromNetworkAnonymizationKey(
+ const NetworkAnonymizationKey& network_anonymization_key) {
+ if (!network_anonymization_key.IsFullyPopulated()) {
+ return IsolationInfo();
+ }
+
+ url::Origin top_frame_origin =
+ network_anonymization_key.GetTopFrameSite()->site_as_origin_;
+
+ absl::optional<url::Origin> frame_origin;
+ if (NetworkAnonymizationKey::IsFrameSiteEnabled() &&
+ network_anonymization_key.GetFrameSite().has_value()) {
+ // If frame site is set on the network anonymization key, use it to set the
+ // frame origin on the isolation info.
+ frame_origin = network_anonymization_key.GetFrameSite()->site_as_origin_;
+ } else if (NetworkAnonymizationKey::IsCrossSiteFlagSchemeEnabled() &&
+ network_anonymization_key.GetIsCrossSite().value()) {
+ // If frame site is not set on the network anonymization key but we know
+ // that it is cross site to the top level site, create an empty origin to
+ // use as the frame origin for the isolation info. This should be cross site
+ // with the top level origin.
+ frame_origin = url::Origin();
+ } else {
+ // If frame sit is not set on the network anonymization key and we don't
+ // know that it's cross site to the top level site, use the top frame site
+ // to set the frame origin.
+ frame_origin = top_frame_origin;
+ }
+
+ const base::UnguessableToken* nonce =
+ network_anonymization_key.GetNonce()
+ ? &network_anonymization_key.GetNonce().value()
+ : nullptr;
+
+ auto isolation_info = IsolationInfo::Create(
+ IsolationInfo::RequestType::kOther, top_frame_origin,
+ frame_origin.value(), SiteForCookies(),
+ /*party_context=*/absl::nullopt, nonce);
+ // TODO(crbug/1343856): DCHECK isolation info is fully populated.
+ return isolation_info;
+}
+
ConnectionAttempts URLRequest::GetConnectionAttempts() const {
if (job_)
return job_->GetConnectionAttempts();