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 3668 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3679 spdy_util_.ConstructWrappedSpdyFrame(get_resp, 1)); | 3679 spdy_util_.ConstructWrappedSpdyFrame(get_resp, 1)); |
3680 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true)); | 3680 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
3681 scoped_ptr<SpdyFrame> wrapped_body( | 3681 scoped_ptr<SpdyFrame> wrapped_body( |
3682 spdy_util_.ConstructWrappedSpdyFrame(body, 1)); | 3682 spdy_util_.ConstructWrappedSpdyFrame(body, 1)); |
3683 scoped_ptr<SpdyFrame> window_update_get_resp( | 3683 scoped_ptr<SpdyFrame> window_update_get_resp( |
3684 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_get_resp->size())); | 3684 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_get_resp->size())); |
3685 scoped_ptr<SpdyFrame> window_update_body( | 3685 scoped_ptr<SpdyFrame> window_update_body( |
3686 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_body->size())); | 3686 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_body->size())); |
3687 | 3687 |
3688 MockWrite spdy_writes[] = { | 3688 MockWrite spdy_writes[] = { |
3689 CreateMockWrite(*connect, 1), | 3689 CreateMockWrite(*connect, 0), |
3690 CreateMockWrite(*wrapped_get, 3), | 3690 CreateMockWrite(*wrapped_get, 2), |
3691 CreateMockWrite(*window_update_get_resp, 5), | 3691 CreateMockWrite(*window_update_get_resp, 6), |
3692 CreateMockWrite(*window_update_body, 7), | 3692 CreateMockWrite(*window_update_body, 7), |
3693 }; | 3693 }; |
3694 | 3694 |
3695 MockRead spdy_reads[] = { | 3695 MockRead spdy_reads[] = { |
3696 CreateMockRead(*conn_resp, 2, ASYNC), | 3696 CreateMockRead(*conn_resp, 1, ASYNC), |
| 3697 MockRead(ASYNC, ERR_IO_PENDING, 3), |
3697 CreateMockRead(*wrapped_get_resp, 4, ASYNC), | 3698 CreateMockRead(*wrapped_get_resp, 4, ASYNC), |
3698 CreateMockRead(*wrapped_body, 6, ASYNC), | 3699 CreateMockRead(*wrapped_body, 5, ASYNC), |
3699 MockRead(ASYNC, 0, 8), | 3700 MockRead(ASYNC, 0, 8), |
3700 }; | 3701 }; |
3701 | 3702 |
3702 OrderedSocketData spdy_data( | 3703 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, |
3703 spdy_reads, arraysize(spdy_reads), | 3704 arraysize(spdy_writes)); |
3704 spdy_writes, arraysize(spdy_writes)); | |
3705 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 3705 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
3706 | 3706 |
3707 SSLSocketDataProvider ssl(ASYNC, OK); | 3707 SSLSocketDataProvider ssl(ASYNC, OK); |
3708 ssl.SetNextProto(GetParam()); | 3708 ssl.SetNextProto(GetParam()); |
3709 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 3709 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
3710 SSLSocketDataProvider ssl2(ASYNC, OK); | 3710 SSLSocketDataProvider ssl2(ASYNC, OK); |
3711 ssl2.SetNextProto(GetParam()); | 3711 ssl2.SetNextProto(GetParam()); |
3712 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); | 3712 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
3713 | 3713 |
3714 TestCompletionCallback callback1; | 3714 TestCompletionCallback callback1; |
3715 | 3715 |
3716 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 3716 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
3717 EXPECT_EQ(ERR_IO_PENDING, rv); | 3717 EXPECT_EQ(ERR_IO_PENDING, rv); |
3718 | 3718 |
| 3719 // Allow the SpdyProxyClientSocket's write callback to complete. |
| 3720 base::MessageLoop::current()->RunUntilIdle(); |
| 3721 // Now allow the read of the response to complete. |
| 3722 spdy_data.CompleteRead(); |
3719 rv = callback1.WaitForResult(); | 3723 rv = callback1.WaitForResult(); |
3720 EXPECT_EQ(OK, rv); | 3724 EXPECT_EQ(OK, rv); |
3721 | 3725 |
3722 LoadTimingInfo load_timing_info; | 3726 LoadTimingInfo load_timing_info; |
3723 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 3727 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
3724 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); | 3728 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); |
3725 | 3729 |
3726 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3730 const HttpResponseInfo* response = trans->GetResponseInfo(); |
3727 ASSERT_TRUE(response != NULL); | 3731 ASSERT_TRUE(response != NULL); |
3728 ASSERT_TRUE(response->headers.get() != NULL); | 3732 ASSERT_TRUE(response->headers.get() != NULL); |
(...skipping 8125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11854 writes.push_back(CreateMockWrite(*req1, 0)); | 11858 writes.push_back(CreateMockWrite(*req1, 0)); |
11855 | 11859 |
11856 resp1.reset(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 11860 resp1.reset(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
11857 body1.reset(spdy_util_.ConstructSpdyBodyFrame(1, true)); | 11861 body1.reset(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
11858 | 11862 |
11859 reads.push_back(CreateMockRead(*resp1, 1)); | 11863 reads.push_back(CreateMockRead(*resp1, 1)); |
11860 reads.push_back(CreateMockRead(*body1, 2)); | 11864 reads.push_back(CreateMockRead(*body1, 2)); |
11861 reads.push_back(MockRead(ASYNC, OK, 3)); | 11865 reads.push_back(MockRead(ASYNC, OK, 3)); |
11862 } | 11866 } |
11863 | 11867 |
11864 OrderedSocketData data(vector_as_array(&reads), reads.size(), | 11868 SequencedSocketData data(vector_as_array(&reads), reads.size(), |
11865 vector_as_array(&writes), writes.size()); | 11869 vector_as_array(&writes), writes.size()); |
11866 session_deps_.socket_factory->AddSocketDataProvider(&data); | 11870 session_deps_.socket_factory->AddSocketDataProvider(&data); |
11867 | 11871 |
11868 // Connection to the origin fails. | 11872 // Connection to the origin fails. |
11869 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); | 11873 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
11870 StaticSocketDataProvider data_refused; | 11874 StaticSocketDataProvider data_refused; |
11871 data_refused.set_connect_data(mock_connect); | 11875 data_refused.set_connect_data(mock_connect); |
11872 session_deps_.socket_factory->AddSocketDataProvider(&data_refused); | 11876 session_deps_.socket_factory->AddSocketDataProvider(&data_refused); |
11873 | 11877 |
11874 session_deps_.use_alternate_protocols = true; | 11878 session_deps_.use_alternate_protocols = true; |
11875 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 11879 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
(...skipping 24 matching lines...) Expand all Loading... |
11900 scoped_ptr<HttpTransaction> trans1( | 11904 scoped_ptr<HttpTransaction> trans1( |
11901 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 11905 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
11902 HttpRequestInfo request1; | 11906 HttpRequestInfo request1; |
11903 request1.method = "GET"; | 11907 request1.method = "GET"; |
11904 request1.url = GURL(url1); | 11908 request1.url = GURL(url1); |
11905 request1.load_flags = 0; | 11909 request1.load_flags = 0; |
11906 TestCompletionCallback callback1; | 11910 TestCompletionCallback callback1; |
11907 | 11911 |
11908 int rv = trans1->Start(&request1, callback1.callback(), BoundNetLog()); | 11912 int rv = trans1->Start(&request1, callback1.callback(), BoundNetLog()); |
11909 EXPECT_EQ(ERR_IO_PENDING, rv); | 11913 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 11914 base::MessageLoop::current()->RunUntilIdle(); |
| 11915 if (data.IsReadPaused()) { |
| 11916 data.CompleteRead(); |
| 11917 } |
11910 rv = callback1.WaitForResult(); | 11918 rv = callback1.WaitForResult(); |
11911 if (valid) { | 11919 if (valid) { |
11912 EXPECT_EQ(OK, rv); | 11920 EXPECT_EQ(OK, rv); |
11913 } else { | 11921 } else { |
11914 if (pooling) { | 11922 if (pooling) { |
11915 EXPECT_EQ(ERR_CONNECTION_REFUSED, rv); | 11923 EXPECT_EQ(ERR_CONNECTION_REFUSED, rv); |
11916 } else { | 11924 } else { |
11917 EXPECT_EQ(ERR_ALTERNATIVE_CERT_NOT_VALID_FOR_ORIGIN, rv); | 11925 EXPECT_EQ(ERR_ALTERNATIVE_CERT_NOT_VALID_FOR_ORIGIN, rv); |
11918 } | 11926 } |
11919 } | 11927 } |
(...skipping 2311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14231 ASSERT_TRUE(response); | 14239 ASSERT_TRUE(response); |
14232 ASSERT_TRUE(response->headers.get()); | 14240 ASSERT_TRUE(response->headers.get()); |
14233 | 14241 |
14234 EXPECT_EQ(101, response->headers->response_code()); | 14242 EXPECT_EQ(101, response->headers->response_code()); |
14235 | 14243 |
14236 trans.reset(); | 14244 trans.reset(); |
14237 session->CloseAllConnections(); | 14245 session->CloseAllConnections(); |
14238 } | 14246 } |
14239 | 14247 |
14240 } // namespace net | 14248 } // namespace net |
OLD | NEW |