// Copyright 2018 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. #ifndef SERVICES_NETWORK_PROXY_RESOLVING_CLIENT_SOCKET_FACTORY_H_ #define SERVICES_NETWORK_PROXY_RESOLVING_CLIENT_SOCKET_FACTORY_H_ #include #include "base/component_export.h" #include "base/memory/raw_ptr.h" #include "base/memory/ref_counted.h" #include "net/socket/connect_job_factory.h" #include "net/ssl/ssl_config.h" #include "url/gurl.h" namespace net { struct CommonConnectJobParams; class HttpNetworkSession; class NetworkIsolationKey; class URLRequestContext; } // namespace net namespace network { class ProxyResolvingClientSocket; class COMPONENT_EXPORT(NETWORK_SERVICE) ProxyResolvingClientSocketFactory { public: // Constructs a ProxyResolvingClientSocketFactory. This factory shares // network session params with |request_context|, but keeps separate socket // pools by instantiating and owning a separate |network_session_|. explicit ProxyResolvingClientSocketFactory( net::URLRequestContext* request_context); ProxyResolvingClientSocketFactory(const ProxyResolvingClientSocketFactory&) = delete; ProxyResolvingClientSocketFactory& operator=( const ProxyResolvingClientSocketFactory&) = delete; ~ProxyResolvingClientSocketFactory(); // Creates a socket. |url|'s host and port specify where a connection will be // established to. The full URL will be only used for proxy resolution. Caller // doesn't need to explicitly sanitize the url, any sensitive data (like // embedded usernames and passwords), and local data (i.e. reference fragment) // will be sanitized by net::ProxyResolutionService before the url is // disclosed to the PAC script. // // |network_isolation_key| indicates the network shard to use for storing // shared network state (DNS cache entries, shared H2/QUIC proxy connections, // etc). Proxy connections will only be shared with other // ProxyResolvingClientSockets, not with standards HTTP/HTTPS requests. // // If |use_tls| is true, TLS connect will be used in addition to TCP connect. // The URLRequestContext's SSL configurations will be respected when // establishing a TLS connection. std::unique_ptr CreateSocket( const GURL& url, const net::NetworkIsolationKey& network_isolation_key, bool use_tls); private: std::unique_ptr network_session_; std::unique_ptr common_connect_job_params_; raw_ptr request_context_; std::unique_ptr connect_job_factory_ = std::make_unique(); }; } // namespace network #endif // SERVICES_NETWORK_PROXY_RESOLVING_CLIENT_SOCKET_FACTORY_H_