Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(486)

Unified Diff: net/socket/ssl_client_socket_pool.h

Issue 384873002: This CL changes the lifespan of SSLConnectJobMessengers so that they are created only when needed, (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@useloop
Patch Set: Rebase, fixed issue where messenger field wasn't set to NULL after deletion Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/socket/ssl_client_socket_pool.h
diff --git a/net/socket/ssl_client_socket_pool.h b/net/socket/ssl_client_socket_pool.h
index cfc7c0dfbabd3832d89d29ebc511b145d64226fd..8dac9fc24392e78cb497575741854c45b2a5a684 100644
--- a/net/socket/ssl_client_socket_pool.h
+++ b/net/socket/ssl_client_socket_pool.h
@@ -114,8 +114,12 @@ class SSLConnectJobMessenger {
};
typedef std::vector<SocketAndCallback> SSLPendingSocketsAndCallbacks;
+ typedef base::Callback<void(std::string, std::string)>
+ ConnectionCompleteCallback;
wtc 2014/08/12 14:51:01 Please document what the two string inputs to Conn
mshelley 2014/08/12 21:47:01 Done.
- SSLConnectJobMessenger();
+ SSLConnectJobMessenger(
+ const ConnectionCompleteCallback& connection_complete_callback,
+ std::string group_name);
Ryan Sleevi 2014/08/12 00:27:43 Do you really need |group_name| to be exposed at a
wtc 2014/08/12 14:51:01 If |group_name| is needed, it should be a const re
mshelley 2014/08/12 21:47:02 Done.
~SSLConnectJobMessenger();
// Removes |socket| from the set of sockets being monitored. This
@@ -142,6 +146,10 @@ class SSLConnectJobMessenger {
void AddPendingSocket(SSLClientSocket* ssl_socket,
const base::Closure& callback);
+ // Returns true if this SSLConnectJobMessenger still has pending
+ // connection callbacks.
+ bool IsNeeded();
Ryan Sleevi 2014/08/12 00:27:43 Let's rename this then, to better match that it do
mshelley 2014/08/12 21:47:01 Realized I don't actually need this anymore, becau
+
private:
// Processes pending callbacks when a socket completes its SSL handshake --
// either successfully or unsuccessfully.
@@ -151,18 +159,27 @@ class SSLConnectJobMessenger {
void RunAllCallbacks(
const SSLPendingSocketsAndCallbacks& pending_socket_and_callbacks);
- base::WeakPtrFactory<SSLConnectJobMessenger> weak_factory_;
-
SSLPendingSocketsAndCallbacks pending_sockets_and_callbacks_;
// Note: this field is a vector to allow for future design changes. Currently,
// this vector should only ever have one entry.
std::vector<SSLClientSocket*> connecting_sockets_;
+
+ std::string group_name_;
+
+ base::WeakPtrFactory<SSLConnectJobMessenger> weak_factory_;
+
+ const ConnectionCompleteCallback connection_complete_callback_;
Ryan Sleevi 2014/08/12 00:27:42 Why const?
mshelley 2014/08/12 21:47:01 Done.
};
// SSLConnectJob handles the SSL handshake after setting up the underlying
// connection as specified in the params.
class SSLConnectJob : public ConnectJob {
public:
+ // The returned messenger is a pointer to an existing messenger
+ // owned by the SSLConnectJobFactory.
+ typedef base::Callback<SSLConnectJobMessenger*(std::string, std::string)>
+ UncachedSessionCallback;
Ryan Sleevi 2014/08/12 00:27:43 I guess I'm still unclear what this means, or how
mshelley 2014/08/12 21:47:02 Done.
+
// Note: the SSLConnectJob does not own |messenger| so it must outlive the
// job.
SSLConnectJob(const std::string& group_name,
@@ -175,7 +192,8 @@ class SSLConnectJob : public ConnectJob {
ClientSocketFactory* client_socket_factory,
HostResolver* host_resolver,
const SSLClientSocketContext& context,
- SSLConnectJobMessenger* messenger,
+ UncachedSessionCallback uncached_session_callback,
Ryan Sleevi 2014/08/12 00:27:43 This still feels a bit circular. Perhaps we should
mshelley 2014/08/12 21:47:02 Done.
+ bool enable_ssl_connect_job_waiting,
Delegate* delegate,
NetLog* net_log);
virtual ~SSLConnectJob();
@@ -185,6 +203,8 @@ class SSLConnectJob : public ConnectJob {
virtual void GetAdditionalErrorState(ClientSocketHandle * handle) OVERRIDE;
+ void RemoveMessenger(const std::string& cache_key);
+
private:
enum State {
STATE_TRANSPORT_CONNECT,
@@ -219,6 +239,10 @@ class SSLConnectJob : public ConnectJob {
// Tells a waiting SSLConnectJob to resume its SSL connection.
void ResumeSSLConnection();
+ // Runs a callback informing the SSLClientSocketPool that this
+ // SSLConnectJob's SSL session is not in the session cache.
+ void RunUncachedSessionCallback(std::string cache_key);
+
// Returns the initial state for the state machine based on the
// |connection_type|.
static State GetInitialState(SSLSocketParams::ConnectionType connection_type);
@@ -247,6 +271,9 @@ class SSLConnectJob : public ConnectJob {
base::WeakPtrFactory<SSLConnectJob> weak_factory_;
+ SSLConnectJob::UncachedSessionCallback uncached_session_callback_;
+ bool enable_ssl_connect_job_waiting_;
+
DISALLOW_COPY_AND_ASSIGN(SSLConnectJob);
};
@@ -330,8 +357,17 @@ class NET_EXPORT_PRIVATE SSLClientSocketPool
// HigherLayeredPool implementation.
virtual bool CloseOneIdleConnection() OVERRIDE;
+ // Creates an SSLConnectJobMessenger for the given |cache_key| and stores it
+ // in |messenger_map_|. Returns the new SSLConnectJobMessenger.
+ SSLConnectJobMessenger* AddSSLConnectJobMessenger(std::string cache_key,
+ std::string group_name);
+ void DeleteSSLConnectJobMessenger(std::string cache_key,
+ std::string group_name);
+
private:
typedef ClientSocketPoolBase<SSLSocketParams> PoolBase;
+ // Maps SSLConnectJob cache keys to SSLConnectJobMessenger objects.
+ typedef std::map<std::string, SSLConnectJobMessenger*> MessengerMap;
// SSLConfigService::Observer implementation.
@@ -341,14 +377,16 @@ class NET_EXPORT_PRIVATE SSLClientSocketPool
class SSLConnectJobFactory : public PoolBase::ConnectJobFactory {
public:
- SSLConnectJobFactory(TransportClientSocketPool* transport_pool,
- SOCKSClientSocketPool* socks_pool,
- HttpProxyClientSocketPool* http_proxy_pool,
- ClientSocketFactory* client_socket_factory,
- HostResolver* host_resolver,
- const SSLClientSocketContext& context,
- bool enable_ssl_connect_job_waiting,
- NetLog* net_log);
+ SSLConnectJobFactory(
+ TransportClientSocketPool* transport_pool,
+ SOCKSClientSocketPool* socks_pool,
+ HttpProxyClientSocketPool* http_proxy_pool,
+ ClientSocketFactory* client_socket_factory,
+ HostResolver* host_resolver,
+ const SSLClientSocketContext& context,
+ bool enable_ssl_connect_job_waiting,
+ SSLConnectJob::UncachedSessionCallback uncached_session_callback,
+ NetLog* net_log);
virtual ~SSLConnectJobFactory();
@@ -356,7 +394,7 @@ class NET_EXPORT_PRIVATE SSLClientSocketPool
virtual scoped_ptr<ConnectJob> NewConnectJob(
const std::string& group_name,
const PoolBase::Request& request,
- ConnectJob::Delegate* delegate) const OVERRIDE;
+ ConnectJob::Delegate* delegate) OVERRIDE;
virtual base::TimeDelta ConnectionTimeout() const OVERRIDE;
@@ -372,12 +410,8 @@ class NET_EXPORT_PRIVATE SSLClientSocketPool
const SSLClientSocketContext context_;
base::TimeDelta timeout_;
bool enable_ssl_connect_job_waiting_;
+ SSLConnectJob::UncachedSessionCallback uncached_session_callback_;
NetLog* net_log_;
- // |messenger_map_| is currently a pointer so that an element can be
- // added to it inside of the const method NewConnectJob. In the future,
- // elements will be added in a different method.
- // TODO(mshelley) Change this to a non-pointer.
- scoped_ptr<MessengerMap> messenger_map_;
DISALLOW_COPY_AND_ASSIGN(SSLConnectJobFactory);
};
@@ -387,6 +421,7 @@ class NET_EXPORT_PRIVATE SSLClientSocketPool
HttpProxyClientSocketPool* const http_proxy_pool_;
PoolBase base_;
const scoped_refptr<SSLConfigService> ssl_config_service_;
+ MessengerMap messenger_map_;
DISALLOW_COPY_AND_ASSIGN(SSLClientSocketPool);
};

Powered by Google App Engine
This is Rietveld 408576698