OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/http/http_network_transaction.h" | 5 #include "net/http/http_network_transaction.h" |
6 | 6 |
7 #include <math.h> // ceil | 7 #include <math.h> // ceil |
8 #include <stdarg.h> | 8 #include <stdarg.h> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 #include "net/socket/ssl_client_socket.h" | 57 #include "net/socket/ssl_client_socket.h" |
58 #include "net/spdy/spdy_framer.h" | 58 #include "net/spdy/spdy_framer.h" |
59 #include "net/spdy/spdy_session.h" | 59 #include "net/spdy/spdy_session.h" |
60 #include "net/spdy/spdy_session_pool.h" | 60 #include "net/spdy/spdy_session_pool.h" |
61 #include "net/spdy/spdy_test_util_common.h" | 61 #include "net/spdy/spdy_test_util_common.h" |
62 #include "net/ssl/ssl_cert_request_info.h" | 62 #include "net/ssl/ssl_cert_request_info.h" |
63 #include "net/ssl/ssl_config_service.h" | 63 #include "net/ssl/ssl_config_service.h" |
64 #include "net/ssl/ssl_config_service_defaults.h" | 64 #include "net/ssl/ssl_config_service_defaults.h" |
65 #include "net/ssl/ssl_info.h" | 65 #include "net/ssl/ssl_info.h" |
66 #include "net/test/cert_test_util.h" | 66 #include "net/test/cert_test_util.h" |
| 67 #include "net/websockets/websocket_handshake_stream_base.h" |
67 #include "testing/gtest/include/gtest/gtest.h" | 68 #include "testing/gtest/include/gtest/gtest.h" |
68 #include "testing/platform_test.h" | 69 #include "testing/platform_test.h" |
69 #include "url/gurl.h" | 70 #include "url/gurl.h" |
70 | 71 |
71 //----------------------------------------------------------------------------- | 72 //----------------------------------------------------------------------------- |
72 | 73 |
73 namespace { | 74 namespace { |
74 | 75 |
75 const base::string16 kBar(ASCIIToUTF16("bar")); | 76 const base::string16 kBar(ASCIIToUTF16("bar")); |
76 const base::string16 kBar2(ASCIIToUTF16("bar2")); | 77 const base::string16 kBar2(ASCIIToUTF16("bar2")); |
(...skipping 7087 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7164 session_deps_.proxy_service.reset( | 7165 session_deps_.proxy_service.reset( |
7165 ProxyService::CreateFixed(tests[i].proxy_server)); | 7166 ProxyService::CreateFixed(tests[i].proxy_server)); |
7166 scoped_refptr<HttpNetworkSession> session( | 7167 scoped_refptr<HttpNetworkSession> session( |
7167 SetupSessionForGroupNameTests(GetParam(), &session_deps_)); | 7168 SetupSessionForGroupNameTests(GetParam(), &session_deps_)); |
7168 | 7169 |
7169 HttpNetworkSessionPeer peer(session); | 7170 HttpNetworkSessionPeer peer(session); |
7170 CaptureGroupNameTransportSocketPool* transport_conn_pool = | 7171 CaptureGroupNameTransportSocketPool* transport_conn_pool = |
7171 new CaptureGroupNameTransportSocketPool(NULL, NULL); | 7172 new CaptureGroupNameTransportSocketPool(NULL, NULL); |
7172 CaptureGroupNameSSLSocketPool* ssl_conn_pool = | 7173 CaptureGroupNameSSLSocketPool* ssl_conn_pool = |
7173 new CaptureGroupNameSSLSocketPool(NULL, NULL); | 7174 new CaptureGroupNameSSLSocketPool(NULL, NULL); |
7174 MockClientSocketPoolManager* mock_pool_manager = | 7175 scoped_ptr<MockClientSocketPoolManager> mock_pool_manager( |
7175 new MockClientSocketPoolManager; | 7176 new MockClientSocketPoolManager); |
7176 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); | 7177 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); |
7177 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); | 7178 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); |
7178 peer.SetClientSocketPoolManager(mock_pool_manager); | 7179 peer.SetClientSocketPoolManager( |
| 7180 mock_pool_manager.PassAs<ClientSocketPoolManager>()); |
7179 | 7181 |
7180 EXPECT_EQ(ERR_IO_PENDING, | 7182 EXPECT_EQ(ERR_IO_PENDING, |
7181 GroupNameTransactionHelper(tests[i].url, session)); | 7183 GroupNameTransactionHelper(tests[i].url, session)); |
7182 if (tests[i].ssl) | 7184 if (tests[i].ssl) |
7183 EXPECT_EQ(tests[i].expected_group_name, | 7185 EXPECT_EQ(tests[i].expected_group_name, |
7184 ssl_conn_pool->last_group_name_received()); | 7186 ssl_conn_pool->last_group_name_received()); |
7185 else | 7187 else |
7186 EXPECT_EQ(tests[i].expected_group_name, | 7188 EXPECT_EQ(tests[i].expected_group_name, |
7187 transport_conn_pool->last_group_name_received()); | 7189 transport_conn_pool->last_group_name_received()); |
7188 } | 7190 } |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7230 SetupSessionForGroupNameTests(GetParam(), &session_deps_)); | 7232 SetupSessionForGroupNameTests(GetParam(), &session_deps_)); |
7231 | 7233 |
7232 HttpNetworkSessionPeer peer(session); | 7234 HttpNetworkSessionPeer peer(session); |
7233 | 7235 |
7234 HostPortPair proxy_host("http_proxy", 80); | 7236 HostPortPair proxy_host("http_proxy", 80); |
7235 CaptureGroupNameHttpProxySocketPool* http_proxy_pool = | 7237 CaptureGroupNameHttpProxySocketPool* http_proxy_pool = |
7236 new CaptureGroupNameHttpProxySocketPool(NULL, NULL); | 7238 new CaptureGroupNameHttpProxySocketPool(NULL, NULL); |
7237 CaptureGroupNameSSLSocketPool* ssl_conn_pool = | 7239 CaptureGroupNameSSLSocketPool* ssl_conn_pool = |
7238 new CaptureGroupNameSSLSocketPool(NULL, NULL); | 7240 new CaptureGroupNameSSLSocketPool(NULL, NULL); |
7239 | 7241 |
7240 MockClientSocketPoolManager* mock_pool_manager = | 7242 scoped_ptr<MockClientSocketPoolManager> mock_pool_manager( |
7241 new MockClientSocketPoolManager; | 7243 new MockClientSocketPoolManager); |
7242 mock_pool_manager->SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool); | 7244 mock_pool_manager->SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool); |
7243 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); | 7245 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); |
7244 peer.SetClientSocketPoolManager(mock_pool_manager); | 7246 peer.SetClientSocketPoolManager( |
| 7247 mock_pool_manager.PassAs<ClientSocketPoolManager>()); |
7245 | 7248 |
7246 EXPECT_EQ(ERR_IO_PENDING, | 7249 EXPECT_EQ(ERR_IO_PENDING, |
7247 GroupNameTransactionHelper(tests[i].url, session)); | 7250 GroupNameTransactionHelper(tests[i].url, session)); |
7248 if (tests[i].ssl) | 7251 if (tests[i].ssl) |
7249 EXPECT_EQ(tests[i].expected_group_name, | 7252 EXPECT_EQ(tests[i].expected_group_name, |
7250 ssl_conn_pool->last_group_name_received()); | 7253 ssl_conn_pool->last_group_name_received()); |
7251 else | 7254 else |
7252 EXPECT_EQ(tests[i].expected_group_name, | 7255 EXPECT_EQ(tests[i].expected_group_name, |
7253 http_proxy_pool->last_group_name_received()); | 7256 http_proxy_pool->last_group_name_received()); |
7254 } | 7257 } |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7300 SetupSessionForGroupNameTests(GetParam(), &session_deps_)); | 7303 SetupSessionForGroupNameTests(GetParam(), &session_deps_)); |
7301 | 7304 |
7302 HttpNetworkSessionPeer peer(session); | 7305 HttpNetworkSessionPeer peer(session); |
7303 | 7306 |
7304 HostPortPair proxy_host("socks_proxy", 1080); | 7307 HostPortPair proxy_host("socks_proxy", 1080); |
7305 CaptureGroupNameSOCKSSocketPool* socks_conn_pool = | 7308 CaptureGroupNameSOCKSSocketPool* socks_conn_pool = |
7306 new CaptureGroupNameSOCKSSocketPool(NULL, NULL); | 7309 new CaptureGroupNameSOCKSSocketPool(NULL, NULL); |
7307 CaptureGroupNameSSLSocketPool* ssl_conn_pool = | 7310 CaptureGroupNameSSLSocketPool* ssl_conn_pool = |
7308 new CaptureGroupNameSSLSocketPool(NULL, NULL); | 7311 new CaptureGroupNameSSLSocketPool(NULL, NULL); |
7309 | 7312 |
7310 MockClientSocketPoolManager* mock_pool_manager = | 7313 scoped_ptr<MockClientSocketPoolManager> mock_pool_manager( |
7311 new MockClientSocketPoolManager; | 7314 new MockClientSocketPoolManager); |
7312 mock_pool_manager->SetSocketPoolForSOCKSProxy(proxy_host, socks_conn_pool); | 7315 mock_pool_manager->SetSocketPoolForSOCKSProxy(proxy_host, socks_conn_pool); |
7313 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); | 7316 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); |
7314 peer.SetClientSocketPoolManager(mock_pool_manager); | 7317 peer.SetClientSocketPoolManager( |
| 7318 mock_pool_manager.PassAs<ClientSocketPoolManager>()); |
7315 | 7319 |
7316 scoped_ptr<HttpTransaction> trans( | 7320 scoped_ptr<HttpTransaction> trans( |
7317 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 7321 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
7318 | 7322 |
7319 EXPECT_EQ(ERR_IO_PENDING, | 7323 EXPECT_EQ(ERR_IO_PENDING, |
7320 GroupNameTransactionHelper(tests[i].url, session)); | 7324 GroupNameTransactionHelper(tests[i].url, session)); |
7321 if (tests[i].ssl) | 7325 if (tests[i].ssl) |
7322 EXPECT_EQ(tests[i].expected_group_name, | 7326 EXPECT_EQ(tests[i].expected_group_name, |
7323 ssl_conn_pool->last_group_name_received()); | 7327 ssl_conn_pool->last_group_name_received()); |
7324 else | 7328 else |
(...skipping 2031 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9356 // each round of multi-round authentication. | 9360 // each round of multi-round authentication. |
9357 HttpNetworkSessionPeer session_peer(session); | 9361 HttpNetworkSessionPeer session_peer(session); |
9358 ClientSocketPoolHistograms transport_pool_histograms("SmallTCP"); | 9362 ClientSocketPoolHistograms transport_pool_histograms("SmallTCP"); |
9359 TransportClientSocketPool* transport_pool = new TransportClientSocketPool( | 9363 TransportClientSocketPool* transport_pool = new TransportClientSocketPool( |
9360 50, // Max sockets for pool | 9364 50, // Max sockets for pool |
9361 1, // Max sockets per group | 9365 1, // Max sockets per group |
9362 &transport_pool_histograms, | 9366 &transport_pool_histograms, |
9363 session_deps_.host_resolver.get(), | 9367 session_deps_.host_resolver.get(), |
9364 session_deps_.socket_factory.get(), | 9368 session_deps_.socket_factory.get(), |
9365 session_deps_.net_log); | 9369 session_deps_.net_log); |
9366 MockClientSocketPoolManager* mock_pool_manager = | 9370 scoped_ptr<MockClientSocketPoolManager> mock_pool_manager( |
9367 new MockClientSocketPoolManager; | 9371 new MockClientSocketPoolManager); |
9368 mock_pool_manager->SetTransportSocketPool(transport_pool); | 9372 mock_pool_manager->SetTransportSocketPool(transport_pool); |
9369 session_peer.SetClientSocketPoolManager(mock_pool_manager); | 9373 session_peer.SetClientSocketPoolManager( |
| 9374 mock_pool_manager.PassAs<ClientSocketPoolManager>()); |
9370 | 9375 |
9371 scoped_ptr<HttpTransaction> trans( | 9376 scoped_ptr<HttpTransaction> trans( |
9372 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9377 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
9373 TestCompletionCallback callback; | 9378 TestCompletionCallback callback; |
9374 | 9379 |
9375 const MockWrite kGet( | 9380 const MockWrite kGet( |
9376 "GET / HTTP/1.1\r\n" | 9381 "GET / HTTP/1.1\r\n" |
9377 "Host: www.example.com\r\n" | 9382 "Host: www.example.com\r\n" |
9378 "Connection: keep-alive\r\n\r\n"); | 9383 "Connection: keep-alive\r\n\r\n"); |
9379 const MockWrite kGetAuth( | 9384 const MockWrite kGetAuth( |
(...skipping 2464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11844 }; | 11849 }; |
11845 | 11850 |
11846 // Fake HttpStreamRequest that simply records calls to SetPriority() | 11851 // Fake HttpStreamRequest that simply records calls to SetPriority() |
11847 // and vends FakeStreams with its current priority. | 11852 // and vends FakeStreams with its current priority. |
11848 class FakeStreamRequest : public HttpStreamRequest, | 11853 class FakeStreamRequest : public HttpStreamRequest, |
11849 public base::SupportsWeakPtr<FakeStreamRequest> { | 11854 public base::SupportsWeakPtr<FakeStreamRequest> { |
11850 public: | 11855 public: |
11851 FakeStreamRequest(RequestPriority priority, | 11856 FakeStreamRequest(RequestPriority priority, |
11852 HttpStreamRequest::Delegate* delegate) | 11857 HttpStreamRequest::Delegate* delegate) |
11853 : priority_(priority), | 11858 : priority_(priority), |
11854 delegate_(delegate) {} | 11859 delegate_(delegate), |
| 11860 websocket_stream_create_helper_(NULL) {} |
| 11861 |
| 11862 FakeStreamRequest(RequestPriority priority, |
| 11863 HttpStreamRequest::Delegate* delegate, |
| 11864 WebSocketHandshakeStreamBase::CreateHelper* create_helper) |
| 11865 : priority_(priority), |
| 11866 delegate_(delegate), |
| 11867 websocket_stream_create_helper_(create_helper) {} |
11855 | 11868 |
11856 virtual ~FakeStreamRequest() {} | 11869 virtual ~FakeStreamRequest() {} |
11857 | 11870 |
11858 RequestPriority priority() const { return priority_; } | 11871 RequestPriority priority() const { return priority_; } |
11859 | 11872 |
| 11873 const WebSocketHandshakeStreamBase::CreateHelper* |
| 11874 websocket_stream_create_helper() const { |
| 11875 return websocket_stream_create_helper_; |
| 11876 } |
| 11877 |
11860 // Create a new FakeStream and pass it to the request's | 11878 // Create a new FakeStream and pass it to the request's |
11861 // delegate. Returns a weak pointer to the FakeStream. | 11879 // delegate. Returns a weak pointer to the FakeStream. |
11862 base::WeakPtr<FakeStream> FinishStreamRequest() { | 11880 base::WeakPtr<FakeStream> FinishStreamRequest() { |
11863 FakeStream* fake_stream = new FakeStream(priority_); | 11881 FakeStream* fake_stream = new FakeStream(priority_); |
11864 // Do this before calling OnStreamReady() as OnStreamReady() may | 11882 // Do this before calling OnStreamReady() as OnStreamReady() may |
11865 // immediately delete |fake_stream|. | 11883 // immediately delete |fake_stream|. |
11866 base::WeakPtr<FakeStream> weak_stream = fake_stream->AsWeakPtr(); | 11884 base::WeakPtr<FakeStream> weak_stream = fake_stream->AsWeakPtr(); |
11867 delegate_->OnStreamReady(SSLConfig(), ProxyInfo(), fake_stream); | 11885 delegate_->OnStreamReady(SSLConfig(), ProxyInfo(), fake_stream); |
11868 return weak_stream; | 11886 return weak_stream; |
11869 } | 11887 } |
(...skipping 21 matching lines...) Expand all Loading... |
11891 return kProtoUnknown; | 11909 return kProtoUnknown; |
11892 } | 11910 } |
11893 | 11911 |
11894 virtual bool using_spdy() const OVERRIDE { | 11912 virtual bool using_spdy() const OVERRIDE { |
11895 return false; | 11913 return false; |
11896 } | 11914 } |
11897 | 11915 |
11898 private: | 11916 private: |
11899 RequestPriority priority_; | 11917 RequestPriority priority_; |
11900 HttpStreamRequest::Delegate* const delegate_; | 11918 HttpStreamRequest::Delegate* const delegate_; |
| 11919 WebSocketHandshakeStreamBase::CreateHelper* websocket_stream_create_helper_; |
11901 | 11920 |
11902 DISALLOW_COPY_AND_ASSIGN(FakeStreamRequest); | 11921 DISALLOW_COPY_AND_ASSIGN(FakeStreamRequest); |
11903 }; | 11922 }; |
11904 | 11923 |
11905 // Fake HttpStreamFactory that vends FakeStreamRequests. | 11924 // Fake HttpStreamFactory that vends FakeStreamRequests. |
11906 class FakeStreamFactory : public HttpStreamFactory { | 11925 class FakeStreamFactory : public HttpStreamFactory { |
11907 public: | 11926 public: |
11908 FakeStreamFactory() {} | 11927 FakeStreamFactory() {} |
11909 virtual ~FakeStreamFactory() {} | 11928 virtual ~FakeStreamFactory() {} |
11910 | 11929 |
(...skipping 16 matching lines...) Expand all Loading... |
11927 } | 11946 } |
11928 | 11947 |
11929 virtual HttpStreamRequest* RequestWebSocketHandshakeStream( | 11948 virtual HttpStreamRequest* RequestWebSocketHandshakeStream( |
11930 const HttpRequestInfo& info, | 11949 const HttpRequestInfo& info, |
11931 RequestPriority priority, | 11950 RequestPriority priority, |
11932 const SSLConfig& server_ssl_config, | 11951 const SSLConfig& server_ssl_config, |
11933 const SSLConfig& proxy_ssl_config, | 11952 const SSLConfig& proxy_ssl_config, |
11934 HttpStreamRequest::Delegate* delegate, | 11953 HttpStreamRequest::Delegate* delegate, |
11935 WebSocketHandshakeStreamBase::CreateHelper* create_helper, | 11954 WebSocketHandshakeStreamBase::CreateHelper* create_helper, |
11936 const BoundNetLog& net_log) OVERRIDE { | 11955 const BoundNetLog& net_log) OVERRIDE { |
11937 ADD_FAILURE(); | 11956 FakeStreamRequest* fake_request = |
11938 return NULL; | 11957 new FakeStreamRequest(priority, delegate, create_helper); |
| 11958 last_stream_request_ = fake_request->AsWeakPtr(); |
| 11959 return fake_request; |
11939 } | 11960 } |
11940 | 11961 |
11941 virtual void PreconnectStreams(int num_streams, | 11962 virtual void PreconnectStreams(int num_streams, |
11942 const HttpRequestInfo& info, | 11963 const HttpRequestInfo& info, |
11943 RequestPriority priority, | 11964 RequestPriority priority, |
11944 const SSLConfig& server_ssl_config, | 11965 const SSLConfig& server_ssl_config, |
11945 const SSLConfig& proxy_ssl_config) OVERRIDE { | 11966 const SSLConfig& proxy_ssl_config) OVERRIDE { |
11946 ADD_FAILURE(); | 11967 ADD_FAILURE(); |
11947 } | 11968 } |
11948 | 11969 |
11949 virtual base::Value* PipelineInfoToValue() const OVERRIDE { | 11970 virtual base::Value* PipelineInfoToValue() const OVERRIDE { |
11950 ADD_FAILURE(); | 11971 ADD_FAILURE(); |
11951 return NULL; | 11972 return NULL; |
11952 } | 11973 } |
11953 | 11974 |
11954 virtual const HostMappingRules* GetHostMappingRules() const OVERRIDE { | 11975 virtual const HostMappingRules* GetHostMappingRules() const OVERRIDE { |
11955 ADD_FAILURE(); | 11976 ADD_FAILURE(); |
11956 return NULL; | 11977 return NULL; |
11957 } | 11978 } |
11958 | 11979 |
11959 private: | 11980 private: |
11960 base::WeakPtr<FakeStreamRequest> last_stream_request_; | 11981 base::WeakPtr<FakeStreamRequest> last_stream_request_; |
11961 | 11982 |
11962 DISALLOW_COPY_AND_ASSIGN(FakeStreamFactory); | 11983 DISALLOW_COPY_AND_ASSIGN(FakeStreamFactory); |
11963 }; | 11984 }; |
11964 | 11985 |
| 11986 // TODO(yhirano): Split this class out into a net/websockets file, if it is |
| 11987 // worth doing. |
| 11988 class FakeWebSocketStreamCreateHelper : |
| 11989 public WebSocketHandshakeStreamBase::CreateHelper { |
| 11990 public: |
| 11991 virtual WebSocketHandshakeStreamBase* CreateBasicStream( |
| 11992 ClientSocketHandle* connection, |
| 11993 bool using_proxy) OVERRIDE { |
| 11994 NOTREACHED(); |
| 11995 return NULL; |
| 11996 } |
| 11997 |
| 11998 virtual WebSocketHandshakeStreamBase* CreateSpdyStream( |
| 11999 const base::WeakPtr<SpdySession>& session, |
| 12000 bool use_relative_url) OVERRIDE { |
| 12001 NOTREACHED(); |
| 12002 return NULL; |
| 12003 }; |
| 12004 |
| 12005 virtual ~FakeWebSocketStreamCreateHelper() {} |
| 12006 |
| 12007 virtual scoped_ptr<WebSocketStream> Upgrade() { |
| 12008 NOTREACHED(); |
| 12009 return scoped_ptr<WebSocketStream>(); |
| 12010 } |
| 12011 }; |
| 12012 |
11965 } // namespace | 12013 } // namespace |
11966 | 12014 |
11967 // Make sure that HttpNetworkTransaction passes on its priority to its | 12015 // Make sure that HttpNetworkTransaction passes on its priority to its |
11968 // stream request on start. | 12016 // stream request on start. |
11969 TEST_P(HttpNetworkTransactionTest, SetStreamRequestPriorityOnStart) { | 12017 TEST_P(HttpNetworkTransactionTest, SetStreamRequestPriorityOnStart) { |
11970 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12018 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
11971 HttpNetworkSessionPeer peer(session); | 12019 HttpNetworkSessionPeer peer(session); |
11972 FakeStreamFactory* fake_factory = new FakeStreamFactory(); | 12020 FakeStreamFactory* fake_factory = new FakeStreamFactory(); |
11973 peer.SetHttpStreamFactory(fake_factory); | 12021 peer.SetHttpStreamFactory(scoped_ptr<HttpStreamFactory>(fake_factory)); |
11974 | 12022 |
11975 HttpNetworkTransaction trans(LOW, session); | 12023 HttpNetworkTransaction trans(LOW, session); |
11976 | 12024 |
11977 ASSERT_TRUE(fake_factory->last_stream_request() == NULL); | 12025 ASSERT_TRUE(fake_factory->last_stream_request() == NULL); |
11978 | 12026 |
11979 HttpRequestInfo request; | 12027 HttpRequestInfo request; |
11980 TestCompletionCallback callback; | 12028 TestCompletionCallback callback; |
11981 EXPECT_EQ(ERR_IO_PENDING, | 12029 EXPECT_EQ(ERR_IO_PENDING, |
11982 trans.Start(&request, callback.callback(), BoundNetLog())); | 12030 trans.Start(&request, callback.callback(), BoundNetLog())); |
11983 | 12031 |
11984 base::WeakPtr<FakeStreamRequest> fake_request = | 12032 base::WeakPtr<FakeStreamRequest> fake_request = |
11985 fake_factory->last_stream_request(); | 12033 fake_factory->last_stream_request(); |
11986 ASSERT_TRUE(fake_request != NULL); | 12034 ASSERT_TRUE(fake_request != NULL); |
11987 EXPECT_EQ(LOW, fake_request->priority()); | 12035 EXPECT_EQ(LOW, fake_request->priority()); |
11988 } | 12036 } |
11989 | 12037 |
11990 // Make sure that HttpNetworkTransaction passes on its priority | 12038 // Make sure that HttpNetworkTransaction passes on its priority |
11991 // updates to its stream request. | 12039 // updates to its stream request. |
11992 TEST_P(HttpNetworkTransactionTest, SetStreamRequestPriority) { | 12040 TEST_P(HttpNetworkTransactionTest, SetStreamRequestPriority) { |
11993 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12041 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
11994 HttpNetworkSessionPeer peer(session); | 12042 HttpNetworkSessionPeer peer(session); |
11995 FakeStreamFactory* fake_factory = new FakeStreamFactory(); | 12043 FakeStreamFactory* fake_factory = new FakeStreamFactory(); |
11996 peer.SetHttpStreamFactory(fake_factory); | 12044 peer.SetHttpStreamFactory(scoped_ptr<HttpStreamFactory>(fake_factory)); |
11997 | 12045 |
11998 HttpNetworkTransaction trans(LOW, session); | 12046 HttpNetworkTransaction trans(LOW, session); |
11999 | 12047 |
12000 HttpRequestInfo request; | 12048 HttpRequestInfo request; |
12001 TestCompletionCallback callback; | 12049 TestCompletionCallback callback; |
12002 EXPECT_EQ(ERR_IO_PENDING, | 12050 EXPECT_EQ(ERR_IO_PENDING, |
12003 trans.Start(&request, callback.callback(), BoundNetLog())); | 12051 trans.Start(&request, callback.callback(), BoundNetLog())); |
12004 | 12052 |
12005 base::WeakPtr<FakeStreamRequest> fake_request = | 12053 base::WeakPtr<FakeStreamRequest> fake_request = |
12006 fake_factory->last_stream_request(); | 12054 fake_factory->last_stream_request(); |
12007 ASSERT_TRUE(fake_request != NULL); | 12055 ASSERT_TRUE(fake_request != NULL); |
12008 EXPECT_EQ(LOW, fake_request->priority()); | 12056 EXPECT_EQ(LOW, fake_request->priority()); |
12009 | 12057 |
12010 trans.SetPriority(LOWEST); | 12058 trans.SetPriority(LOWEST); |
12011 ASSERT_TRUE(fake_request != NULL); | 12059 ASSERT_TRUE(fake_request != NULL); |
12012 EXPECT_EQ(LOWEST, fake_request->priority()); | 12060 EXPECT_EQ(LOWEST, fake_request->priority()); |
12013 } | 12061 } |
12014 | 12062 |
12015 // Make sure that HttpNetworkTransaction passes on its priority | 12063 // Make sure that HttpNetworkTransaction passes on its priority |
12016 // updates to its stream. | 12064 // updates to its stream. |
12017 TEST_P(HttpNetworkTransactionTest, SetStreamPriority) { | 12065 TEST_P(HttpNetworkTransactionTest, SetStreamPriority) { |
12018 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12066 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
12019 HttpNetworkSessionPeer peer(session); | 12067 HttpNetworkSessionPeer peer(session); |
12020 FakeStreamFactory* fake_factory = new FakeStreamFactory(); | 12068 FakeStreamFactory* fake_factory = new FakeStreamFactory(); |
12021 peer.SetHttpStreamFactory(fake_factory); | 12069 peer.SetHttpStreamFactory(scoped_ptr<HttpStreamFactory>(fake_factory)); |
12022 | 12070 |
12023 HttpNetworkTransaction trans(LOW, session); | 12071 HttpNetworkTransaction trans(LOW, session); |
12024 | 12072 |
12025 HttpRequestInfo request; | 12073 HttpRequestInfo request; |
12026 TestCompletionCallback callback; | 12074 TestCompletionCallback callback; |
12027 EXPECT_EQ(ERR_IO_PENDING, | 12075 EXPECT_EQ(ERR_IO_PENDING, |
12028 trans.Start(&request, callback.callback(), BoundNetLog())); | 12076 trans.Start(&request, callback.callback(), BoundNetLog())); |
12029 | 12077 |
12030 base::WeakPtr<FakeStreamRequest> fake_request = | 12078 base::WeakPtr<FakeStreamRequest> fake_request = |
12031 fake_factory->last_stream_request(); | 12079 fake_factory->last_stream_request(); |
12032 ASSERT_TRUE(fake_request != NULL); | 12080 ASSERT_TRUE(fake_request != NULL); |
12033 base::WeakPtr<FakeStream> fake_stream = fake_request->FinishStreamRequest(); | 12081 base::WeakPtr<FakeStream> fake_stream = fake_request->FinishStreamRequest(); |
12034 ASSERT_TRUE(fake_stream != NULL); | 12082 ASSERT_TRUE(fake_stream != NULL); |
12035 EXPECT_EQ(LOW, fake_stream->priority()); | 12083 EXPECT_EQ(LOW, fake_stream->priority()); |
12036 | 12084 |
12037 trans.SetPriority(LOWEST); | 12085 trans.SetPriority(LOWEST); |
12038 EXPECT_EQ(LOWEST, fake_stream->priority()); | 12086 EXPECT_EQ(LOWEST, fake_stream->priority()); |
12039 } | 12087 } |
12040 | 12088 |
| 12089 TEST_P(HttpNetworkTransactionTest, CreateWebSocketHandshakeStream) { |
| 12090 // The same logic needs to be tested for both ws: and wss: schemes, but this |
| 12091 // test is already parameterised on NextProto, so it uses a loop to verify |
| 12092 // that the different schemes work. |
| 12093 std::string test_cases[] = {"ws://www.google.com/", "wss://www.google.com/"}; |
| 12094 for (size_t i = 0; i < arraysize(test_cases); ++i) { |
| 12095 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 12096 HttpNetworkSessionPeer peer(session); |
| 12097 FakeStreamFactory* fake_factory = new FakeStreamFactory(); |
| 12098 FakeWebSocketStreamCreateHelper websocket_stream_create_helper; |
| 12099 peer.SetWebSocketHandshakeStreamFactory( |
| 12100 scoped_ptr<HttpStreamFactory>(fake_factory)); |
| 12101 |
| 12102 HttpNetworkTransaction trans(LOW, session); |
| 12103 trans.SetWebSocketHandshakeStreamCreateHelper( |
| 12104 &websocket_stream_create_helper); |
| 12105 |
| 12106 HttpRequestInfo request; |
| 12107 TestCompletionCallback callback; |
| 12108 request.method = "GET"; |
| 12109 request.url = GURL(test_cases[i]); |
| 12110 |
| 12111 EXPECT_EQ(ERR_IO_PENDING, |
| 12112 trans.Start(&request, callback.callback(), BoundNetLog())); |
| 12113 |
| 12114 base::WeakPtr<FakeStreamRequest> fake_request = |
| 12115 fake_factory->last_stream_request(); |
| 12116 ASSERT_TRUE(fake_request != NULL); |
| 12117 EXPECT_EQ(&websocket_stream_create_helper, |
| 12118 fake_request->websocket_stream_create_helper()); |
| 12119 } |
| 12120 } |
| 12121 |
12041 // Tests that when a used socket is returned to the SSL socket pool, it's closed | 12122 // Tests that when a used socket is returned to the SSL socket pool, it's closed |
12042 // if the transport socket pool is stalled on the global socket limit. | 12123 // if the transport socket pool is stalled on the global socket limit. |
12043 TEST_P(HttpNetworkTransactionTest, CloseSSLSocketOnIdleForHttpRequest) { | 12124 TEST_P(HttpNetworkTransactionTest, CloseSSLSocketOnIdleForHttpRequest) { |
12044 ClientSocketPoolManager::set_max_sockets_per_group( | 12125 ClientSocketPoolManager::set_max_sockets_per_group( |
12045 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); | 12126 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); |
12046 ClientSocketPoolManager::set_max_sockets_per_pool( | 12127 ClientSocketPoolManager::set_max_sockets_per_pool( |
12047 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); | 12128 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); |
12048 | 12129 |
12049 // Set up SSL request. | 12130 // Set up SSL request. |
12050 | 12131 |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12196 // established, to let the HTTP request start. | 12277 // established, to let the HTTP request start. |
12197 ASSERT_EQ(OK, http_callback.WaitForResult()); | 12278 ASSERT_EQ(OK, http_callback.WaitForResult()); |
12198 std::string response_data; | 12279 std::string response_data; |
12199 ASSERT_EQ(OK, ReadTransaction(http_trans.get(), &response_data)); | 12280 ASSERT_EQ(OK, ReadTransaction(http_trans.get(), &response_data)); |
12200 EXPECT_EQ("falafel", response_data); | 12281 EXPECT_EQ("falafel", response_data); |
12201 | 12282 |
12202 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session)); | 12283 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session)); |
12203 } | 12284 } |
12204 | 12285 |
12205 } // namespace net | 12286 } // namespace net |
OLD | NEW |