diff options
Diffstat (limited to 'chromium/net/url_request/url_request.cc')
-rw-r--r-- | chromium/net/url_request/url_request.cc | 70 |
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(); |