123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- // Copyright (c) 2012 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "net/base/network_delegate.h"
- #include <utility>
- #include "base/logging.h"
- #include "base/ranges/algorithm.h"
- #include "base/trace_event/trace_event.h"
- #include "net/base/load_flags.h"
- #include "net/base/net_errors.h"
- #include "net/base/trace_constants.h"
- #include "net/cookies/cookie_util.h"
- #include "net/proxy_resolution/proxy_info.h"
- #include "net/url_request/url_request.h"
- namespace net {
- NetworkDelegate::~NetworkDelegate() {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- }
- int NetworkDelegate::NotifyBeforeURLRequest(URLRequest* request,
- CompletionOnceCallback callback,
- GURL* new_url) {
- TRACE_EVENT0(NetTracingCategory(), "NetworkDelegate::NotifyBeforeURLRequest");
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- DCHECK(request);
- DCHECK(!callback.is_null());
- // ClusterFuzz depends on the following VLOG. See: crbug.com/715656
- VLOG(1) << "NetworkDelegate::NotifyBeforeURLRequest: " << request->url();
- return OnBeforeURLRequest(request, std::move(callback), new_url);
- }
- int NetworkDelegate::NotifyBeforeStartTransaction(
- URLRequest* request,
- const HttpRequestHeaders& headers,
- OnBeforeStartTransactionCallback callback) {
- TRACE_EVENT0(NetTracingCategory(),
- "NetworkDelegate::NotifyBeforeStartTransation");
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- DCHECK(!callback.is_null());
- return OnBeforeStartTransaction(request, headers, std::move(callback));
- }
- int NetworkDelegate::NotifyHeadersReceived(
- URLRequest* request,
- CompletionOnceCallback callback,
- const HttpResponseHeaders* original_response_headers,
- scoped_refptr<HttpResponseHeaders>* override_response_headers,
- const IPEndPoint& endpoint,
- absl::optional<GURL>* preserve_fragment_on_redirect_url) {
- TRACE_EVENT0(NetTracingCategory(), "NetworkDelegate::NotifyHeadersReceived");
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- DCHECK(original_response_headers);
- DCHECK(!callback.is_null());
- DCHECK(!preserve_fragment_on_redirect_url->has_value());
- return OnHeadersReceived(request, std::move(callback),
- original_response_headers, override_response_headers,
- endpoint, preserve_fragment_on_redirect_url);
- }
- void NetworkDelegate::NotifyResponseStarted(URLRequest* request,
- int net_error) {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- DCHECK(request);
- OnResponseStarted(request, net_error);
- }
- void NetworkDelegate::NotifyBeforeRedirect(URLRequest* request,
- const GURL& new_location) {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- DCHECK(request);
- OnBeforeRedirect(request, new_location);
- }
- void NetworkDelegate::NotifyCompleted(URLRequest* request,
- bool started,
- int net_error) {
- TRACE_EVENT0(NetTracingCategory(), "NetworkDelegate::NotifyCompleted");
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- DCHECK(request);
- OnCompleted(request, started, net_error);
- }
- void NetworkDelegate::NotifyURLRequestDestroyed(URLRequest* request) {
- TRACE_EVENT0(NetTracingCategory(),
- "NetworkDelegate::NotifyURLRequestDestroyed");
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- DCHECK(request);
- OnURLRequestDestroyed(request);
- }
- void NetworkDelegate::NotifyPACScriptError(int line_number,
- const std::u16string& error) {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- OnPACScriptError(line_number, error);
- }
- bool NetworkDelegate::AnnotateAndMoveUserBlockedCookies(
- const URLRequest& request,
- net::CookieAccessResultList& maybe_included_cookies,
- net::CookieAccessResultList& excluded_cookies) {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- bool allowed = OnAnnotateAndMoveUserBlockedCookies(
- request, maybe_included_cookies, excluded_cookies);
- cookie_util::DCheckIncludedAndExcludedCookieLists(maybe_included_cookies,
- excluded_cookies);
- return allowed;
- }
- bool NetworkDelegate::CanSetCookie(const URLRequest& request,
- const CanonicalCookie& cookie,
- CookieOptions* options) {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- DCHECK(!(request.load_flags() & LOAD_DO_NOT_SAVE_COOKIES));
- return OnCanSetCookie(request, cookie, options);
- }
- NetworkDelegate::PrivacySetting NetworkDelegate::ForcePrivacyMode(
- const GURL& url,
- const SiteForCookies& site_for_cookies,
- const absl::optional<url::Origin>& top_frame_origin,
- SamePartyContext::Type same_party_context_type) const {
- TRACE_EVENT0(NetTracingCategory(), "NetworkDelegate::ForcePrivacyMode");
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- return OnForcePrivacyMode(url, site_for_cookies, top_frame_origin,
- same_party_context_type);
- }
- bool NetworkDelegate::CancelURLRequestWithPolicyViolatingReferrerHeader(
- const URLRequest& request,
- const GURL& target_url,
- const GURL& referrer_url) const {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- return OnCancelURLRequestWithPolicyViolatingReferrerHeader(
- request, target_url, referrer_url);
- }
- bool NetworkDelegate::CanQueueReportingReport(const url::Origin& origin) const {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- return OnCanQueueReportingReport(origin);
- }
- void NetworkDelegate::CanSendReportingReports(
- std::set<url::Origin> origins,
- base::OnceCallback<void(std::set<url::Origin>)> result_callback) const {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- OnCanSendReportingReports(std::move(origins), std::move(result_callback));
- }
- bool NetworkDelegate::CanSetReportingClient(const url::Origin& origin,
- const GURL& endpoint) const {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- return OnCanSetReportingClient(origin, endpoint);
- }
- bool NetworkDelegate::CanUseReportingClient(const url::Origin& origin,
- const GURL& endpoint) const {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- return OnCanUseReportingClient(origin, endpoint);
- }
- // static
- void NetworkDelegate::ExcludeAllCookies(
- net::CookieInclusionStatus::ExclusionReason reason,
- net::CookieAccessResultList& maybe_included_cookies,
- net::CookieAccessResultList& excluded_cookies) {
- excluded_cookies.insert(
- excluded_cookies.end(),
- std::make_move_iterator(maybe_included_cookies.begin()),
- std::make_move_iterator(maybe_included_cookies.end()));
- maybe_included_cookies.clear();
- // Add the ExclusionReason for all cookies.
- for (net::CookieWithAccessResult& cookie : excluded_cookies) {
- cookie.access_result.status.AddExclusionReason(reason);
- }
- }
- // static
- void NetworkDelegate::MoveExcludedCookies(
- net::CookieAccessResultList& maybe_included_cookies,
- net::CookieAccessResultList& excluded_cookies) {
- const auto to_be_moved = base::ranges::stable_partition(
- maybe_included_cookies, [](const CookieWithAccessResult& cookie) {
- return cookie.access_result.status.IsInclude();
- });
- excluded_cookies.insert(
- excluded_cookies.end(), std::make_move_iterator(to_be_moved),
- std::make_move_iterator(maybe_included_cookies.end()));
- maybe_included_cookies.erase(to_be_moved, maybe_included_cookies.end());
- }
- } // namespace net
|