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 3673 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3684 spdy_util_.ConstructWrappedSpdyFrame(get_resp, 1)); | 3684 spdy_util_.ConstructWrappedSpdyFrame(get_resp, 1)); |
3685 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true)); | 3685 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
3686 scoped_ptr<SpdyFrame> wrapped_body( | 3686 scoped_ptr<SpdyFrame> wrapped_body( |
3687 spdy_util_.ConstructWrappedSpdyFrame(body, 1)); | 3687 spdy_util_.ConstructWrappedSpdyFrame(body, 1)); |
3688 scoped_ptr<SpdyFrame> window_update_get_resp( | 3688 scoped_ptr<SpdyFrame> window_update_get_resp( |
3689 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_get_resp->size())); | 3689 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_get_resp->size())); |
3690 scoped_ptr<SpdyFrame> window_update_body( | 3690 scoped_ptr<SpdyFrame> window_update_body( |
3691 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_body->size())); | 3691 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_body->size())); |
3692 | 3692 |
3693 MockWrite spdy_writes[] = { | 3693 MockWrite spdy_writes[] = { |
3694 CreateMockWrite(*connect, 0), | 3694 CreateMockWrite(*connect, 1), |
3695 CreateMockWrite(*wrapped_get, 2), | 3695 CreateMockWrite(*wrapped_get, 3), |
3696 CreateMockWrite(*window_update_get_resp, 6), | 3696 CreateMockWrite(*window_update_get_resp, 5), |
3697 CreateMockWrite(*window_update_body, 7), | 3697 CreateMockWrite(*window_update_body, 7), |
3698 }; | 3698 }; |
3699 | 3699 |
3700 MockRead spdy_reads[] = { | 3700 MockRead spdy_reads[] = { |
3701 CreateMockRead(*conn_resp, 1, ASYNC), | 3701 CreateMockRead(*conn_resp, 2, ASYNC), |
3702 MockRead(ASYNC, ERR_IO_PENDING, 3), | |
3703 CreateMockRead(*wrapped_get_resp, 4, ASYNC), | 3702 CreateMockRead(*wrapped_get_resp, 4, ASYNC), |
3704 CreateMockRead(*wrapped_body, 5, ASYNC), | 3703 CreateMockRead(*wrapped_body, 6, ASYNC), |
3705 MockRead(ASYNC, 0, 8), | 3704 MockRead(ASYNC, 0, 8), |
3706 }; | 3705 }; |
3707 | 3706 |
3708 SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, | 3707 OrderedSocketData spdy_data( |
3709 arraysize(spdy_writes)); | 3708 spdy_reads, arraysize(spdy_reads), |
| 3709 spdy_writes, arraysize(spdy_writes)); |
3710 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 3710 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
3711 | 3711 |
3712 SSLSocketDataProvider ssl(ASYNC, OK); | 3712 SSLSocketDataProvider ssl(ASYNC, OK); |
3713 ssl.SetNextProto(GetParam()); | 3713 ssl.SetNextProto(GetParam()); |
3714 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 3714 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
3715 SSLSocketDataProvider ssl2(ASYNC, OK); | 3715 SSLSocketDataProvider ssl2(ASYNC, OK); |
3716 ssl2.SetNextProto(GetParam()); | 3716 ssl2.SetNextProto(GetParam()); |
3717 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); | 3717 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
3718 | 3718 |
3719 TestCompletionCallback callback1; | 3719 TestCompletionCallback callback1; |
3720 | 3720 |
3721 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 3721 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
3722 EXPECT_EQ(ERR_IO_PENDING, rv); | 3722 EXPECT_EQ(ERR_IO_PENDING, rv); |
3723 | 3723 |
3724 // Allow the SpdyProxyClientSocket's write callback to complete. | |
3725 base::MessageLoop::current()->RunUntilIdle(); | |
3726 // Now allow the read of the response to complete. | |
3727 spdy_data.CompleteRead(); | |
3728 rv = callback1.WaitForResult(); | 3724 rv = callback1.WaitForResult(); |
3729 EXPECT_EQ(OK, rv); | 3725 EXPECT_EQ(OK, rv); |
3730 | 3726 |
3731 LoadTimingInfo load_timing_info; | 3727 LoadTimingInfo load_timing_info; |
3732 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 3728 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
3733 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); | 3729 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_SSL_TIMES); |
3734 | 3730 |
3735 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3731 const HttpResponseInfo* response = trans->GetResponseInfo(); |
3736 ASSERT_TRUE(response != NULL); | 3732 ASSERT_TRUE(response != NULL); |
3737 ASSERT_TRUE(response->headers.get() != NULL); | 3733 ASSERT_TRUE(response->headers.get() != NULL); |
(...skipping 8144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11882 writes.push_back(CreateMockWrite(*req1, 0)); | 11878 writes.push_back(CreateMockWrite(*req1, 0)); |
11883 | 11879 |
11884 resp1.reset(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 11880 resp1.reset(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
11885 body1.reset(spdy_util_.ConstructSpdyBodyFrame(1, true)); | 11881 body1.reset(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
11886 | 11882 |
11887 reads.push_back(CreateMockRead(*resp1, 1)); | 11883 reads.push_back(CreateMockRead(*resp1, 1)); |
11888 reads.push_back(CreateMockRead(*body1, 2)); | 11884 reads.push_back(CreateMockRead(*body1, 2)); |
11889 reads.push_back(MockRead(ASYNC, OK, 3)); | 11885 reads.push_back(MockRead(ASYNC, OK, 3)); |
11890 } | 11886 } |
11891 | 11887 |
11892 SequencedSocketData data(vector_as_array(&reads), reads.size(), | 11888 OrderedSocketData data(vector_as_array(&reads), reads.size(), |
11893 vector_as_array(&writes), writes.size()); | 11889 vector_as_array(&writes), writes.size()); |
11894 session_deps_.socket_factory->AddSocketDataProvider(&data); | 11890 session_deps_.socket_factory->AddSocketDataProvider(&data); |
11895 | 11891 |
11896 // Connection to the origin fails. | 11892 // Connection to the origin fails. |
11897 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); | 11893 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
11898 StaticSocketDataProvider data_refused; | 11894 StaticSocketDataProvider data_refused; |
11899 data_refused.set_connect_data(mock_connect); | 11895 data_refused.set_connect_data(mock_connect); |
11900 session_deps_.socket_factory->AddSocketDataProvider(&data_refused); | 11896 session_deps_.socket_factory->AddSocketDataProvider(&data_refused); |
11901 | 11897 |
11902 session_deps_.use_alternate_protocols = true; | 11898 session_deps_.use_alternate_protocols = true; |
11903 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 11899 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
(...skipping 24 matching lines...) Expand all Loading... |
11928 scoped_ptr<HttpTransaction> trans1( | 11924 scoped_ptr<HttpTransaction> trans1( |
11929 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 11925 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
11930 HttpRequestInfo request1; | 11926 HttpRequestInfo request1; |
11931 request1.method = "GET"; | 11927 request1.method = "GET"; |
11932 request1.url = GURL(url1); | 11928 request1.url = GURL(url1); |
11933 request1.load_flags = 0; | 11929 request1.load_flags = 0; |
11934 TestCompletionCallback callback1; | 11930 TestCompletionCallback callback1; |
11935 | 11931 |
11936 int rv = trans1->Start(&request1, callback1.callback(), BoundNetLog()); | 11932 int rv = trans1->Start(&request1, callback1.callback(), BoundNetLog()); |
11937 EXPECT_EQ(ERR_IO_PENDING, rv); | 11933 EXPECT_EQ(ERR_IO_PENDING, rv); |
11938 base::MessageLoop::current()->RunUntilIdle(); | |
11939 if (data.IsReadPaused()) { | |
11940 data.CompleteRead(); | |
11941 } | |
11942 rv = callback1.WaitForResult(); | 11934 rv = callback1.WaitForResult(); |
11943 if (valid) { | 11935 if (valid) { |
11944 EXPECT_EQ(OK, rv); | 11936 EXPECT_EQ(OK, rv); |
11945 } else { | 11937 } else { |
11946 if (pooling) { | 11938 if (pooling) { |
11947 EXPECT_EQ(ERR_CONNECTION_REFUSED, rv); | 11939 EXPECT_EQ(ERR_CONNECTION_REFUSED, rv); |
11948 } else { | 11940 } else { |
11949 EXPECT_EQ(ERR_ALTERNATIVE_CERT_NOT_VALID_FOR_ORIGIN, rv); | 11941 EXPECT_EQ(ERR_ALTERNATIVE_CERT_NOT_VALID_FOR_ORIGIN, rv); |
11950 } | 11942 } |
11951 } | 11943 } |
(...skipping 2062 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14014 ASSERT_TRUE(response); | 14006 ASSERT_TRUE(response); |
14015 ASSERT_TRUE(response->headers.get()); | 14007 ASSERT_TRUE(response->headers.get()); |
14016 | 14008 |
14017 EXPECT_EQ(101, response->headers->response_code()); | 14009 EXPECT_EQ(101, response->headers->response_code()); |
14018 | 14010 |
14019 trans.reset(); | 14011 trans.reset(); |
14020 session->CloseAllConnections(); | 14012 session->CloseAllConnections(); |
14021 } | 14013 } |
14022 | 14014 |
14023 } // namespace net | 14015 } // namespace net |
OLD | NEW |