Index: net/http/http_network_transaction_unittest.cc |
diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc |
index f84c3f61ded68489ecada45b47f93e4e1e5ad49a..f23d0fb331e1e2e368f5757628b60a935c5df0b4 100644 |
--- a/net/http/http_network_transaction_unittest.cc |
+++ b/net/http/http_network_transaction_unittest.cc |
@@ -64,6 +64,7 @@ |
#include "net/ssl/ssl_config_service_defaults.h" |
#include "net/ssl/ssl_info.h" |
#include "net/test/cert_test_util.h" |
+#include "net/websockets/websocket_handshake_stream_base.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "testing/platform_test.h" |
#include "url/gurl.h" |
@@ -7171,11 +7172,12 @@ TEST_P(HttpNetworkTransactionTest, GroupNameForDirectConnections) { |
new CaptureGroupNameTransportSocketPool(NULL, NULL); |
CaptureGroupNameSSLSocketPool* ssl_conn_pool = |
new CaptureGroupNameSSLSocketPool(NULL, NULL); |
- MockClientSocketPoolManager* mock_pool_manager = |
- new MockClientSocketPoolManager; |
+ scoped_ptr<MockClientSocketPoolManager> mock_pool_manager( |
+ new MockClientSocketPoolManager); |
mock_pool_manager->SetTransportSocketPool(transport_conn_pool); |
mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); |
- peer.SetClientSocketPoolManager(mock_pool_manager); |
+ peer.SetClientSocketPoolManager( |
+ mock_pool_manager.PassAs<ClientSocketPoolManager>()); |
EXPECT_EQ(ERR_IO_PENDING, |
GroupNameTransactionHelper(tests[i].url, session)); |
@@ -7237,11 +7239,12 @@ TEST_P(HttpNetworkTransactionTest, GroupNameForHTTPProxyConnections) { |
CaptureGroupNameSSLSocketPool* ssl_conn_pool = |
new CaptureGroupNameSSLSocketPool(NULL, NULL); |
- MockClientSocketPoolManager* mock_pool_manager = |
- new MockClientSocketPoolManager; |
+ scoped_ptr<MockClientSocketPoolManager> mock_pool_manager( |
+ new MockClientSocketPoolManager); |
mock_pool_manager->SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool); |
mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); |
- peer.SetClientSocketPoolManager(mock_pool_manager); |
+ peer.SetClientSocketPoolManager( |
+ mock_pool_manager.PassAs<ClientSocketPoolManager>()); |
EXPECT_EQ(ERR_IO_PENDING, |
GroupNameTransactionHelper(tests[i].url, session)); |
@@ -7307,11 +7310,12 @@ TEST_P(HttpNetworkTransactionTest, GroupNameForSOCKSConnections) { |
CaptureGroupNameSSLSocketPool* ssl_conn_pool = |
new CaptureGroupNameSSLSocketPool(NULL, NULL); |
- MockClientSocketPoolManager* mock_pool_manager = |
- new MockClientSocketPoolManager; |
+ scoped_ptr<MockClientSocketPoolManager> mock_pool_manager( |
+ new MockClientSocketPoolManager); |
mock_pool_manager->SetSocketPoolForSOCKSProxy(proxy_host, socks_conn_pool); |
mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); |
- peer.SetClientSocketPoolManager(mock_pool_manager); |
+ peer.SetClientSocketPoolManager( |
+ mock_pool_manager.PassAs<ClientSocketPoolManager>()); |
scoped_ptr<HttpTransaction> trans( |
new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
@@ -9363,10 +9367,11 @@ TEST_P(HttpNetworkTransactionTest, MultiRoundAuth) { |
session_deps_.host_resolver.get(), |
session_deps_.socket_factory.get(), |
session_deps_.net_log); |
- MockClientSocketPoolManager* mock_pool_manager = |
- new MockClientSocketPoolManager; |
+ scoped_ptr<MockClientSocketPoolManager> mock_pool_manager( |
+ new MockClientSocketPoolManager); |
mock_pool_manager->SetTransportSocketPool(transport_pool); |
- session_peer.SetClientSocketPoolManager(mock_pool_manager); |
+ session_peer.SetClientSocketPoolManager( |
+ mock_pool_manager.PassAs<ClientSocketPoolManager>()); |
scoped_ptr<HttpTransaction> trans( |
new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
@@ -11851,12 +11856,25 @@ class FakeStreamRequest : public HttpStreamRequest, |
FakeStreamRequest(RequestPriority priority, |
HttpStreamRequest::Delegate* delegate) |
: priority_(priority), |
- delegate_(delegate) {} |
+ delegate_(delegate), |
+ websocket_stream_create_helper_(NULL) {} |
+ |
+ FakeStreamRequest(RequestPriority priority, |
+ HttpStreamRequest::Delegate* delegate, |
+ WebSocketHandshakeStreamBase::CreateHelper* create_helper) |
+ : priority_(priority), |
+ delegate_(delegate), |
+ websocket_stream_create_helper_(create_helper) {} |
virtual ~FakeStreamRequest() {} |
RequestPriority priority() const { return priority_; } |
+ const WebSocketHandshakeStreamBase::CreateHelper* |
+ websocket_stream_create_helper() const { |
+ return websocket_stream_create_helper_; |
+ } |
+ |
// Create a new FakeStream and pass it to the request's |
// delegate. Returns a weak pointer to the FakeStream. |
base::WeakPtr<FakeStream> FinishStreamRequest() { |
@@ -11898,6 +11916,7 @@ class FakeStreamRequest : public HttpStreamRequest, |
private: |
RequestPriority priority_; |
HttpStreamRequest::Delegate* const delegate_; |
+ WebSocketHandshakeStreamBase::CreateHelper* websocket_stream_create_helper_; |
DISALLOW_COPY_AND_ASSIGN(FakeStreamRequest); |
}; |
@@ -11934,8 +11953,10 @@ class FakeStreamFactory : public HttpStreamFactory { |
HttpStreamRequest::Delegate* delegate, |
WebSocketHandshakeStreamBase::CreateHelper* create_helper, |
const BoundNetLog& net_log) OVERRIDE { |
- ADD_FAILURE(); |
- return NULL; |
+ FakeStreamRequest* fake_request = |
+ new FakeStreamRequest(priority, delegate, create_helper); |
+ last_stream_request_ = fake_request->AsWeakPtr(); |
+ return fake_request; |
} |
virtual void PreconnectStreams(int num_streams, |
@@ -11962,6 +11983,33 @@ class FakeStreamFactory : public HttpStreamFactory { |
DISALLOW_COPY_AND_ASSIGN(FakeStreamFactory); |
}; |
+// TODO(yhirano): Split this class out into a net/websockets file, if it is |
+// worth doing. |
+class FakeWebSocketStreamCreateHelper : |
+ public WebSocketHandshakeStreamBase::CreateHelper { |
+ public: |
+ virtual WebSocketHandshakeStreamBase* CreateBasicStream( |
+ ClientSocketHandle* connection, |
+ bool using_proxy) OVERRIDE { |
+ NOTREACHED(); |
+ return NULL; |
+ } |
+ |
+ virtual WebSocketHandshakeStreamBase* CreateSpdyStream( |
+ const base::WeakPtr<SpdySession>& session, |
+ bool use_relative_url) OVERRIDE { |
+ NOTREACHED(); |
+ return NULL; |
+ }; |
+ |
+ virtual ~FakeWebSocketStreamCreateHelper() {} |
+ |
+ virtual scoped_ptr<WebSocketStream> Upgrade() { |
+ NOTREACHED(); |
+ return scoped_ptr<WebSocketStream>(); |
+ } |
+}; |
+ |
} // namespace |
// Make sure that HttpNetworkTransaction passes on its priority to its |
@@ -11970,7 +12018,7 @@ TEST_P(HttpNetworkTransactionTest, SetStreamRequestPriorityOnStart) { |
scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
HttpNetworkSessionPeer peer(session); |
FakeStreamFactory* fake_factory = new FakeStreamFactory(); |
- peer.SetHttpStreamFactory(fake_factory); |
+ peer.SetHttpStreamFactory(scoped_ptr<HttpStreamFactory>(fake_factory)); |
HttpNetworkTransaction trans(LOW, session); |
@@ -11993,7 +12041,7 @@ TEST_P(HttpNetworkTransactionTest, SetStreamRequestPriority) { |
scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
HttpNetworkSessionPeer peer(session); |
FakeStreamFactory* fake_factory = new FakeStreamFactory(); |
- peer.SetHttpStreamFactory(fake_factory); |
+ peer.SetHttpStreamFactory(scoped_ptr<HttpStreamFactory>(fake_factory)); |
HttpNetworkTransaction trans(LOW, session); |
@@ -12018,7 +12066,7 @@ TEST_P(HttpNetworkTransactionTest, SetStreamPriority) { |
scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
HttpNetworkSessionPeer peer(session); |
FakeStreamFactory* fake_factory = new FakeStreamFactory(); |
- peer.SetHttpStreamFactory(fake_factory); |
+ peer.SetHttpStreamFactory(scoped_ptr<HttpStreamFactory>(fake_factory)); |
HttpNetworkTransaction trans(LOW, session); |
@@ -12038,6 +12086,39 @@ TEST_P(HttpNetworkTransactionTest, SetStreamPriority) { |
EXPECT_EQ(LOWEST, fake_stream->priority()); |
} |
+TEST_P(HttpNetworkTransactionTest, CreateWebSocketHandshakeStream) { |
+ // The same logic needs to be tested for both ws: and wss: schemes, but this |
+ // test is already parameterised on NextProto, so it uses a loop to verify |
+ // that the different schemes work. |
+ std::string test_cases[] = {"ws://www.google.com/", "wss://www.google.com/"}; |
+ for (size_t i = 0; i < arraysize(test_cases); ++i) { |
+ scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
+ HttpNetworkSessionPeer peer(session); |
+ FakeStreamFactory* fake_factory = new FakeStreamFactory(); |
+ FakeWebSocketStreamCreateHelper websocket_stream_create_helper; |
+ peer.SetWebSocketHandshakeStreamFactory( |
+ scoped_ptr<HttpStreamFactory>(fake_factory)); |
+ |
+ HttpNetworkTransaction trans(LOW, session); |
+ trans.SetWebSocketHandshakeStreamCreateHelper( |
+ &websocket_stream_create_helper); |
+ |
+ HttpRequestInfo request; |
+ TestCompletionCallback callback; |
+ request.method = "GET"; |
+ request.url = GURL(test_cases[i]); |
+ |
+ EXPECT_EQ(ERR_IO_PENDING, |
+ trans.Start(&request, callback.callback(), BoundNetLog())); |
+ |
+ base::WeakPtr<FakeStreamRequest> fake_request = |
+ fake_factory->last_stream_request(); |
+ ASSERT_TRUE(fake_request != NULL); |
+ EXPECT_EQ(&websocket_stream_create_helper, |
+ fake_request->websocket_stream_create_helper()); |
+ } |
+} |
+ |
// Tests that when a used socket is returned to the SSL socket pool, it's closed |
// if the transport socket pool is stalled on the global socket limit. |
TEST_P(HttpNetworkTransactionTest, CloseSSLSocketOnIdleForHttpRequest) { |