Index: net/socket/client_socket_pool.h |
=================================================================== |
--- net/socket/client_socket_pool.h (revision 219027) |
+++ net/socket/client_socket_pool.h (working copy) |
@@ -31,19 +31,38 @@ |
// ClientSocketPools are layered. This defines an interface for lower level |
// socket pools to communicate with higher layer pools. |
-class NET_EXPORT LayeredPool { |
+class NET_EXPORT HigherLayeredPool { |
public: |
- virtual ~LayeredPool() {}; |
+ virtual ~HigherLayeredPool() {} |
- // Instructs the LayeredPool to close an idle connection. Return true if one |
- // was closed. |
+ // Instructs the HigherLayeredPool to close an idle connection. Return true if |
+ // one was closed. Closing an idle connection will call into the lower layer |
+ // pool it came from, so must be careful of re-entrancy when using this. |
virtual bool CloseOneIdleConnection() = 0; |
}; |
+// ClientSocketPools are layered. This defines an interface for higher level |
+// socket pools to communicate with lower layer pools. |
+class NET_EXPORT LowerLayeredPool { |
+ public: |
+ virtual ~LowerLayeredPool() {} |
+ |
+ // Returns true if a there is currently a request blocked on the per-pool |
+ // (not per-host) max socket limit, either in this pool, or one that it is |
+ // layered on top of. |
+ virtual bool IsStalled() const = 0; |
+ |
+ // Called to add or remove a higher layer pool on top of |this|. A higher |
+ // layer pool may be added at most once to |this|, and must be removed prior |
+ // to destruction of |this|. |
+ virtual void AddHigherLayeredPool(HigherLayeredPool* higher_pool) = 0; |
+ virtual void RemoveHigherLayeredPool(HigherLayeredPool* higher_pool) = 0; |
+}; |
+ |
// A ClientSocketPool is used to restrict the number of sockets open at a time. |
// It also maintains a list of idle persistent sockets. |
// |
-class NET_EXPORT ClientSocketPool { |
+class NET_EXPORT ClientSocketPool : public LowerLayeredPool { |
public: |
// Subclasses must also have an inner class SocketParams which is |
// the type for the |params| argument in RequestSocket() and |
@@ -126,10 +145,6 @@ |
// Does not flush any pools wrapped by |this|. |
virtual void FlushWithError(int error) = 0; |
- // Returns true if a there is currently a request blocked on the |
- // per-pool (not per-host) max socket limit. |
- virtual bool IsStalled() const = 0; |
- |
// Called to close any idle connections held by the connection manager. |
virtual void CloseIdleSockets() = 0; |
@@ -143,12 +158,6 @@ |
virtual LoadState GetLoadState(const std::string& group_name, |
const ClientSocketHandle* handle) const = 0; |
- // Adds a LayeredPool on top of |this|. |
- virtual void AddLayeredPool(LayeredPool* layered_pool) = 0; |
- |
- // Removes a LayeredPool from |this|. |
- virtual void RemoveLayeredPool(LayeredPool* layered_pool) = 0; |
- |
// Retrieves information on the current state of the pool as a |
// DictionaryValue. Caller takes possession of the returned value. |
// If |include_nested_pools| is true, the states of any nested |