// 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. #ifndef NET_SOCKET_CLIENT_SOCKET_POOL_MANAGER_IMPL_H_ #define NET_SOCKET_CLIENT_SOCKET_POOL_MANAGER_IMPL_H_ #include #include #include #include #include "base/compiler_specific.h" #include "base/threading/thread_checker.h" #include "base/values.h" #include "net/base/net_export.h" #include "net/http/http_network_session.h" #include "net/socket/client_socket_pool_manager.h" #include "net/socket/connect_job.h" namespace net { class ProxyChain; class ClientSocketPool; class NET_EXPORT_PRIVATE ClientSocketPoolManagerImpl : public ClientSocketPoolManager { public: // `websocket_common_connect_job_params` is only used for direct WebSocket // connections (No proxies in use). It's never used if `pool_type` is not // HttpNetworkSession::SocketPoolType::WEBSOCKET_SOCKET_POOL. ClientSocketPoolManagerImpl( const CommonConnectJobParams& common_connect_job_params, const CommonConnectJobParams& websocket_common_connect_job_params, HttpNetworkSession::SocketPoolType pool_type, bool cleanup_on_ip_address_change = true); ClientSocketPoolManagerImpl(const ClientSocketPoolManagerImpl&) = delete; ClientSocketPoolManagerImpl& operator=(const ClientSocketPoolManagerImpl&) = delete; ~ClientSocketPoolManagerImpl() override; void FlushSocketPoolsWithError(int net_error, const char* net_log_reason_utf8) override; void CloseIdleSockets(const char* net_log_reason_utf8) override; ClientSocketPool* GetSocketPool(const ProxyChain& proxy_chain) override; // Creates a Value summary of the state of the socket pools. base::Value SocketPoolInfoToValue() const override; private: using SocketPoolMap = std::map>; const CommonConnectJobParams common_connect_job_params_; // Used only for direct WebSocket connections (i.e., no proxy in use). const CommonConnectJobParams websocket_common_connect_job_params_; const HttpNetworkSession::SocketPoolType pool_type_; const bool cleanup_on_ip_address_change_; SocketPoolMap socket_pools_; THREAD_CHECKER(thread_checker_); }; } // namespace net #endif // NET_SOCKET_CLIENT_SOCKET_POOL_MANAGER_IMPL_H_