Index: net/base/tcp_client_socket_pool_unittest.cc |
diff --git a/net/base/tcp_client_socket_pool_unittest.cc b/net/base/tcp_client_socket_pool_unittest.cc |
index 2d19605118a5f9867c9567b176d66523d4f25c9f..53341904ede991fce488d9e27508cda64e11fe5e 100644 |
--- a/net/base/tcp_client_socket_pool_unittest.cc |
+++ b/net/base/tcp_client_socket_pool_unittest.cc |
@@ -512,6 +512,49 @@ TEST_F(TCPClientSocketPoolTest, CancelRequest) { |
"earlier into the queue."; |
} |
+class RequestSocketCallback : public CallbackRunner< Tuple1<int> > { |
+ public: |
+ RequestSocketCallback(ClientSocketHandle* handle) |
+ : handle_(handle), |
+ within_callback_(false) {} |
+ |
+ virtual void RunWithParams(const Tuple1<int>& params) { |
+ callback_.RunWithParams(params); |
+ ASSERT_EQ(OK, params.a); |
+ |
+ if (!within_callback_) { |
+ handle_->Reset(); |
+ within_callback_ = true; |
+ int rv = handle_->Init( |
+ "a", HostResolver::RequestInfo("www.google.com", 80), 0, this); |
+ EXPECT_EQ(OK, rv); |
+ } |
+ } |
+ |
+ int WaitForResult() { |
+ return callback_.WaitForResult(); |
+ } |
+ |
+ private: |
+ ClientSocketHandle* const handle_; |
+ bool within_callback_; |
+ TestCompletionCallback callback_; |
+}; |
+ |
+TEST_F(TCPClientSocketPoolTest, RequestTwice) { |
+ ClientSocketHandle handle(pool_.get()); |
+ RequestSocketCallback callback(&handle); |
+ int rv = handle.Init( |
+ "a", HostResolver::RequestInfo("www.google.com", 80), 0, &callback); |
+ ASSERT_EQ(ERR_IO_PENDING, rv); |
+ |
+ EXPECT_EQ(OK, callback.WaitForResult()); |
+ |
+ handle.Reset(); |
+ // The handle's Reset method may have posted a task. |
+ MessageLoop::current()->RunAllPending(); |
+} |
+ |
} // namespace |
} // namespace net |