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