| 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 | 
|  |