diff options
Diffstat (limited to 'net/socket/client_socket_pool_base.h')
-rw-r--r-- | net/socket/client_socket_pool_base.h | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/net/socket/client_socket_pool_base.h b/net/socket/client_socket_pool_base.h index 21cd642..51b2139 100644 --- a/net/socket/client_socket_pool_base.h +++ b/net/socket/client_socket_pool_base.h @@ -43,8 +43,10 @@ class ConnectJob { DISALLOW_COPY_AND_ASSIGN(Delegate); }; + // A |timeout_duration| of 0 corresponds to no timeout. ConnectJob(const std::string& group_name, const ClientSocketHandle* key_handle, + base::TimeDelta timeout_duration, Delegate* delegate); virtual ~ConnectJob(); @@ -63,7 +65,7 @@ class ConnectJob { // |delegate_| via OnConnectJobComplete. In both asynchronous and synchronous // completion, ReleaseSocket() can be called to acquire the connected socket // if it succeeded. - virtual int Connect() = 0; + int Connect(); protected: void set_load_state(LoadState load_state) { load_state_ = load_state; } @@ -72,10 +74,18 @@ class ConnectJob { Delegate* delegate() { return delegate_; } private: + virtual int ConnectInternal() = 0; + + // Alerts the delegate that the ConnectJob has timed out. + void OnTimeout(); + const std::string group_name_; // Temporarily needed until we switch to late binding. const ClientSocketHandle* const key_handle_; - Delegate* const delegate_; + const base::TimeDelta timeout_duration_; + // Timer to abort jobs that take too long. + base::OneShotTimer<ConnectJob> timer_; + Delegate* delegate_; LoadState load_state_; scoped_ptr<ClientSocket> socket_; @@ -168,6 +178,9 @@ class ClientSocketPoolBase // For testing. bool may_have_stalled_group() const { return may_have_stalled_group_; } + int NumConnectJobsInGroup(const std::string& group_name) const { + return group_map_.find(group_name)->second.jobs.size(); + } private: // Entry for a persistent socket which became idle at time |start_time|. @@ -252,7 +265,7 @@ class ClientSocketPoolBase // binding is enabled. |job| must be non-NULL when late binding is // enabled. Also updates |group| if non-NULL. void RemoveConnectJob(const ClientSocketHandle* handle, - ConnectJob* job, + const ConnectJob* job, Group* group); // Same as OnAvailableSocketSlot except it looks up the Group first to see if |