// 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. // This class is useful for building a simple URLRequestContext. Most creators // of new URLRequestContexts should use this helper class to construct it. Call // any configuration params, and when done, invoke Build() to construct the // URLRequestContext. This URLRequestContext will own all its own storage. // // URLRequestContextBuilder and its associated params classes are initially // populated with "sane" default values. Read through the comments to figure out // what these are. #ifndef NET_URL_REQUEST_URL_REQUEST_CONTEXT_BUILDER_H_ #define NET_URL_REQUEST_URL_REQUEST_CONTEXT_BUILDER_H_ #include <stdint.h> #include <map> #include <memory> #include <optional> #include <string> #include <utility> #include <vector> #include "base/files/file_path.h" #include "base/functional/callback.h" #include "base/memory/raw_ptr.h" #include "base/memory/scoped_refptr.h" #include "base/task/task_traits.h" #include "base/types/optional_ref.h" #include "build/build_config.h" #include "build/buildflag.h" #include "net/base/net_export.h" #include "net/base/network_delegate.h" #include "net/base/network_handle.h" #include "net/base/proxy_delegate.h" #include "net/disk_cache/disk_cache.h" #include "net/dns/host_resolver.h" #include "net/http/http_network_session.h" #include "net/net_buildflags.h" #include "net/network_error_logging/network_error_logging_service.h" #include "net/proxy_resolution/proxy_config_service.h" #include "net/proxy_resolution/proxy_resolution_service.h" #include "net/socket/client_socket_factory.h" #include "net/ssl/ssl_config_service.h" #include "net/third_party/quiche/src/quiche/quic/core/quic_packets.h" #include "net/url_request/url_request_job_factory.h" namespace net { class CertVerifier; class ClientSocketFactory; class CookieStore; class HttpAuthHandlerFactory; class HttpTransactionFactory; class HttpUserAgentSettings; class HttpServerProperties; class HostResolverManager; class NetworkQualityEstimator; class ProxyConfigService; class URLRequestContext; #if BUILDFLAG(ENABLE_REPORTING) struct ReportingPolicy; class PersistentReportingAndNelStore; #endif // BUILDFLAG(ENABLE_REPORTING) #if BUILDFLAG(ENABLE_DEVICE_BOUND_SESSIONS) namespace device_bound_sessions { class SessionService; } #endif // BUILDFLAG(ENABLE_DEVICE_BOUND_SESSIONS) // A URLRequestContextBuilder creates a single URLRequestContext. It provides // methods to manage various URLRequestContext components which should be called // before creating the Context. Once configuration is complete, calling Build() // will create a URLRequestContext with the specified configuration. Components // that are not explicitly configured will use reasonable in-memory defaults. // // The returned URLRequestContext is self-contained: Deleting it will safely // shut down all of the URLRequests owned by its internal components, and then // tear down those components. The only exception to this are objects not owned // by URLRequestContext. This includes components passed in to the methods that // take raw pointers, and objects that components passed in to the Builder have // raw pointers to. // // A Builder should be destroyed after calling Build, and there is no need to // keep it around for the lifetime of the created URLRequestContext. Each // Builder may be used to create only a single URLRequestContext. class NET_EXPORT URLRequestContextBuilder { … }; } // namespace net #endif // NET_URL_REQUEST_URL_REQUEST_CONTEXT_BUILDER_H_