OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 return session->GetSSLSocketPool( | 115 return session->GetSSLSocketPool( |
116 net::HttpNetworkSession::NORMAL_SOCKET_POOL)->IdleSocketCount(); | 116 net::HttpNetworkSession::NORMAL_SOCKET_POOL)->IdleSocketCount(); |
117 } | 117 } |
118 | 118 |
119 } // namespace | 119 } // namespace |
120 | 120 |
121 namespace net { | 121 namespace net { |
122 | 122 |
123 namespace { | 123 namespace { |
124 | 124 |
125 // Helper to manage the lifetimes of the dependencies for a | 125 HttpNetworkSession* CreateSession(SpdySessionDependencies* session_deps) { |
126 // HttpNetworkTransaction. | 126 return SpdySessionDependencies::SpdyCreateSession(session_deps); |
127 struct SessionDependencies { | |
128 // Default set of dependencies -- "null" proxy service. | |
129 SessionDependencies() | |
130 : host_resolver(new MockHostResolver), | |
131 cert_verifier(new MockCertVerifier), | |
132 proxy_service(ProxyService::CreateDirect()), | |
133 ssl_config_service(new SSLConfigServiceDefaults), | |
134 http_auth_handler_factory( | |
135 HttpAuthHandlerFactory::CreateDefault(host_resolver.get())), | |
136 net_log(NULL) {} | |
137 | |
138 // Custom proxy service dependency. | |
139 explicit SessionDependencies(ProxyService* proxy_service) | |
140 : host_resolver(new MockHostResolver), | |
141 cert_verifier(new MockCertVerifier), | |
142 proxy_service(proxy_service), | |
143 ssl_config_service(new SSLConfigServiceDefaults), | |
144 http_auth_handler_factory( | |
145 HttpAuthHandlerFactory::CreateDefault(host_resolver.get())), | |
146 net_log(NULL) {} | |
147 | |
148 scoped_ptr<MockHostResolverBase> host_resolver; | |
149 scoped_ptr<CertVerifier> cert_verifier; | |
150 scoped_ptr<ProxyService> proxy_service; | |
151 scoped_refptr<SSLConfigService> ssl_config_service; | |
152 MockClientSocketFactory socket_factory; | |
153 scoped_ptr<HttpAuthHandlerFactory> http_auth_handler_factory; | |
154 HttpServerPropertiesImpl http_server_properties; | |
155 NetLog* net_log; | |
156 std::string trusted_spdy_proxy; | |
157 }; | |
158 | |
159 HttpNetworkSession* CreateSession(SessionDependencies* session_deps) { | |
160 net::HttpNetworkSession::Params params; | |
161 params.client_socket_factory = &session_deps->socket_factory; | |
162 params.host_resolver = session_deps->host_resolver.get(); | |
163 params.cert_verifier = session_deps->cert_verifier.get(); | |
164 params.proxy_service = session_deps->proxy_service.get(); | |
165 params.ssl_config_service = session_deps->ssl_config_service; | |
166 params.http_auth_handler_factory = | |
167 session_deps->http_auth_handler_factory.get(); | |
168 params.http_server_properties = &session_deps->http_server_properties; | |
169 params.net_log = session_deps->net_log; | |
170 params.trusted_spdy_proxy = session_deps->trusted_spdy_proxy; | |
171 HttpNetworkSession* http_session = new HttpNetworkSession(params); | |
172 SpdySessionPoolPeer pool_peer(http_session->spdy_session_pool()); | |
173 pool_peer.EnableSendingInitialSettings(false); | |
174 return http_session; | |
175 } | 127 } |
176 | 128 |
177 // Takes in a Value created from a NetLogHttpResponseParameter, and returns | 129 // Takes in a Value created from a NetLogHttpResponseParameter, and returns |
178 // a JSONified list of headers as a single string. Uses single quotes instead | 130 // a JSONified list of headers as a single string. Uses single quotes instead |
179 // of double quotes for easier comparison. Returns false on failure. | 131 // of double quotes for easier comparison. Returns false on failure. |
180 bool GetHeaders(DictionaryValue* params, std::string* headers) { | 132 bool GetHeaders(DictionaryValue* params, std::string* headers) { |
181 if (!params) | 133 if (!params) |
182 return false; | 134 return false; |
183 ListValue* header_list; | 135 ListValue* header_list; |
184 if (!params->GetList("headers", &header_list)) | 136 if (!params->GetList("headers", &header_list)) |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
224 | 176 |
225 SimpleGetHelperResult SimpleGetHelperForData(StaticSocketDataProvider* data[], | 177 SimpleGetHelperResult SimpleGetHelperForData(StaticSocketDataProvider* data[], |
226 size_t data_count) { | 178 size_t data_count) { |
227 SimpleGetHelperResult out; | 179 SimpleGetHelperResult out; |
228 | 180 |
229 HttpRequestInfo request; | 181 HttpRequestInfo request; |
230 request.method = "GET"; | 182 request.method = "GET"; |
231 request.url = GURL("http://www.google.com/"); | 183 request.url = GURL("http://www.google.com/"); |
232 request.load_flags = 0; | 184 request.load_flags = 0; |
233 | 185 |
234 SessionDependencies session_deps; | 186 SpdySessionDependencies session_deps; |
235 scoped_ptr<HttpTransaction> trans( | 187 scoped_ptr<HttpTransaction> trans( |
236 new HttpNetworkTransaction(CreateSession(&session_deps))); | 188 new HttpNetworkTransaction(CreateSession(&session_deps))); |
237 | 189 |
238 for (size_t i = 0; i < data_count; ++i) { | 190 for (size_t i = 0; i < data_count; ++i) { |
239 session_deps.socket_factory.AddSocketDataProvider(data[i]); | 191 session_deps.socket_factory->AddSocketDataProvider(data[i]); |
240 } | 192 } |
241 | 193 |
242 TestCompletionCallback callback; | 194 TestCompletionCallback callback; |
243 | 195 |
244 CapturingBoundNetLog log; | 196 CapturingBoundNetLog log; |
245 EXPECT_TRUE(log.bound().IsLoggingAllEvents()); | 197 EXPECT_TRUE(log.bound().IsLoggingAllEvents()); |
246 int rv = trans->Start(&request, callback.callback(), log.bound()); | 198 int rv = trans->Start(&request, callback.callback(), log.bound()); |
247 EXPECT_EQ(ERR_IO_PENDING, rv); | 199 EXPECT_EQ(ERR_IO_PENDING, rv); |
248 | 200 |
249 out.rv = callback.WaitForResult(); | 201 out.rv = callback.WaitForResult(); |
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
463 EXPECT_FALSE(auth_challenge->is_proxy); | 415 EXPECT_FALSE(auth_challenge->is_proxy); |
464 EXPECT_EQ("172.22.68.17:80", auth_challenge->challenger.ToString()); | 416 EXPECT_EQ("172.22.68.17:80", auth_challenge->challenger.ToString()); |
465 EXPECT_EQ(std::string(), auth_challenge->realm); | 417 EXPECT_EQ(std::string(), auth_challenge->realm); |
466 EXPECT_EQ("ntlm", auth_challenge->scheme); | 418 EXPECT_EQ("ntlm", auth_challenge->scheme); |
467 return true; | 419 return true; |
468 } | 420 } |
469 | 421 |
470 } // namespace | 422 } // namespace |
471 | 423 |
472 TEST_F(HttpNetworkTransactionSpdy3Test, Basic) { | 424 TEST_F(HttpNetworkTransactionSpdy3Test, Basic) { |
473 SessionDependencies session_deps; | 425 SpdySessionDependencies session_deps; |
474 scoped_ptr<HttpTransaction> trans( | 426 scoped_ptr<HttpTransaction> trans( |
475 new HttpNetworkTransaction(CreateSession(&session_deps))); | 427 new HttpNetworkTransaction(CreateSession(&session_deps))); |
476 } | 428 } |
477 | 429 |
478 TEST_F(HttpNetworkTransactionSpdy3Test, SimpleGET) { | 430 TEST_F(HttpNetworkTransactionSpdy3Test, SimpleGET) { |
479 MockRead data_reads[] = { | 431 MockRead data_reads[] = { |
480 MockRead("HTTP/1.0 200 OK\r\n\r\n"), | 432 MockRead("HTTP/1.0 200 OK\r\n\r\n"), |
481 MockRead("hello world"), | 433 MockRead("hello world"), |
482 MockRead(SYNCHRONOUS, OK), | 434 MockRead(SYNCHRONOUS, OK), |
483 }; | 435 }; |
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
758 MockRead("Location: http://good.com/\r\n"), | 710 MockRead("Location: http://good.com/\r\n"), |
759 MockRead("Content-Length: 0\r\n\r\n"), | 711 MockRead("Content-Length: 0\r\n\r\n"), |
760 MockRead(SYNCHRONOUS, OK), | 712 MockRead(SYNCHRONOUS, OK), |
761 }; | 713 }; |
762 | 714 |
763 HttpRequestInfo request; | 715 HttpRequestInfo request; |
764 request.method = "GET"; | 716 request.method = "GET"; |
765 request.url = GURL("http://redirect.com/"); | 717 request.url = GURL("http://redirect.com/"); |
766 request.load_flags = 0; | 718 request.load_flags = 0; |
767 | 719 |
768 SessionDependencies session_deps; | 720 SpdySessionDependencies session_deps; |
769 scoped_ptr<HttpTransaction> trans( | 721 scoped_ptr<HttpTransaction> trans( |
770 new HttpNetworkTransaction(CreateSession(&session_deps))); | 722 new HttpNetworkTransaction(CreateSession(&session_deps))); |
771 | 723 |
772 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 724 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
773 session_deps.socket_factory.AddSocketDataProvider(&data); | 725 session_deps.socket_factory->AddSocketDataProvider(&data); |
774 | 726 |
775 TestCompletionCallback callback; | 727 TestCompletionCallback callback; |
776 | 728 |
777 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 729 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
778 EXPECT_EQ(ERR_IO_PENDING, rv); | 730 EXPECT_EQ(ERR_IO_PENDING, rv); |
779 | 731 |
780 EXPECT_EQ(OK, callback.WaitForResult()); | 732 EXPECT_EQ(OK, callback.WaitForResult()); |
781 | 733 |
782 const HttpResponseInfo* response = trans->GetResponseInfo(); | 734 const HttpResponseInfo* response = trans->GetResponseInfo(); |
783 ASSERT_TRUE(response != NULL && response->headers != NULL); | 735 ASSERT_TRUE(response != NULL && response->headers != NULL); |
(...skipping 18 matching lines...) Expand all Loading... |
802 } | 754 } |
803 | 755 |
804 // Do a request using the HEAD method. Verify that we don't try to read the | 756 // Do a request using the HEAD method. Verify that we don't try to read the |
805 // message body (since HEAD has none). | 757 // message body (since HEAD has none). |
806 TEST_F(HttpNetworkTransactionSpdy3Test, Head) { | 758 TEST_F(HttpNetworkTransactionSpdy3Test, Head) { |
807 HttpRequestInfo request; | 759 HttpRequestInfo request; |
808 request.method = "HEAD"; | 760 request.method = "HEAD"; |
809 request.url = GURL("http://www.google.com/"); | 761 request.url = GURL("http://www.google.com/"); |
810 request.load_flags = 0; | 762 request.load_flags = 0; |
811 | 763 |
812 SessionDependencies session_deps; | 764 SpdySessionDependencies session_deps; |
813 scoped_ptr<HttpTransaction> trans( | 765 scoped_ptr<HttpTransaction> trans( |
814 new HttpNetworkTransaction(CreateSession(&session_deps))); | 766 new HttpNetworkTransaction(CreateSession(&session_deps))); |
815 | 767 |
816 MockWrite data_writes1[] = { | 768 MockWrite data_writes1[] = { |
817 MockWrite("HEAD / HTTP/1.1\r\n" | 769 MockWrite("HEAD / HTTP/1.1\r\n" |
818 "Host: www.google.com\r\n" | 770 "Host: www.google.com\r\n" |
819 "Connection: keep-alive\r\n" | 771 "Connection: keep-alive\r\n" |
820 "Content-Length: 0\r\n\r\n"), | 772 "Content-Length: 0\r\n\r\n"), |
821 }; | 773 }; |
822 MockRead data_reads1[] = { | 774 MockRead data_reads1[] = { |
823 MockRead("HTTP/1.1 404 Not Found\r\n"), | 775 MockRead("HTTP/1.1 404 Not Found\r\n"), |
824 MockRead("Server: Blah\r\n"), | 776 MockRead("Server: Blah\r\n"), |
825 MockRead("Content-Length: 1234\r\n\r\n"), | 777 MockRead("Content-Length: 1234\r\n\r\n"), |
826 | 778 |
827 // No response body because the test stops reading here. | 779 // No response body because the test stops reading here. |
828 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. | 780 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. |
829 }; | 781 }; |
830 | 782 |
831 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 783 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
832 data_writes1, arraysize(data_writes1)); | 784 data_writes1, arraysize(data_writes1)); |
833 session_deps.socket_factory.AddSocketDataProvider(&data1); | 785 session_deps.socket_factory->AddSocketDataProvider(&data1); |
834 | 786 |
835 TestCompletionCallback callback1; | 787 TestCompletionCallback callback1; |
836 | 788 |
837 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 789 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
838 EXPECT_EQ(ERR_IO_PENDING, rv); | 790 EXPECT_EQ(ERR_IO_PENDING, rv); |
839 | 791 |
840 rv = callback1.WaitForResult(); | 792 rv = callback1.WaitForResult(); |
841 EXPECT_EQ(OK, rv); | 793 EXPECT_EQ(OK, rv); |
842 | 794 |
843 const HttpResponseInfo* response = trans->GetResponseInfo(); | 795 const HttpResponseInfo* response = trans->GetResponseInfo(); |
(...skipping 13 matching lines...) Expand all Loading... |
857 | 809 |
858 // Reading should give EOF right away, since there is no message body | 810 // Reading should give EOF right away, since there is no message body |
859 // (despite non-zero content-length). | 811 // (despite non-zero content-length). |
860 std::string response_data; | 812 std::string response_data; |
861 rv = ReadTransaction(trans.get(), &response_data); | 813 rv = ReadTransaction(trans.get(), &response_data); |
862 EXPECT_EQ(OK, rv); | 814 EXPECT_EQ(OK, rv); |
863 EXPECT_EQ("", response_data); | 815 EXPECT_EQ("", response_data); |
864 } | 816 } |
865 | 817 |
866 TEST_F(HttpNetworkTransactionSpdy3Test, ReuseConnection) { | 818 TEST_F(HttpNetworkTransactionSpdy3Test, ReuseConnection) { |
867 SessionDependencies session_deps; | 819 SpdySessionDependencies session_deps; |
868 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 820 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
869 | 821 |
870 MockRead data_reads[] = { | 822 MockRead data_reads[] = { |
871 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), | 823 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), |
872 MockRead("hello"), | 824 MockRead("hello"), |
873 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), | 825 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), |
874 MockRead("world"), | 826 MockRead("world"), |
875 MockRead(SYNCHRONOUS, OK), | 827 MockRead(SYNCHRONOUS, OK), |
876 }; | 828 }; |
877 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 829 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
878 session_deps.socket_factory.AddSocketDataProvider(&data); | 830 session_deps.socket_factory->AddSocketDataProvider(&data); |
879 | 831 |
880 const char* const kExpectedResponseData[] = { | 832 const char* const kExpectedResponseData[] = { |
881 "hello", "world" | 833 "hello", "world" |
882 }; | 834 }; |
883 | 835 |
884 for (int i = 0; i < 2; ++i) { | 836 for (int i = 0; i < 2; ++i) { |
885 HttpRequestInfo request; | 837 HttpRequestInfo request; |
886 request.method = "GET"; | 838 request.method = "GET"; |
887 request.url = GURL("http://www.google.com/"); | 839 request.url = GURL("http://www.google.com/"); |
888 request.load_flags = 0; | 840 request.load_flags = 0; |
(...skipping 25 matching lines...) Expand all Loading... |
914 scoped_refptr<UploadData> upload_data(new UploadData()); | 866 scoped_refptr<UploadData> upload_data(new UploadData()); |
915 upload_data->AppendBytes("foo", 3); | 867 upload_data->AppendBytes("foo", 3); |
916 UploadDataStream upload_data_stream(upload_data); | 868 UploadDataStream upload_data_stream(upload_data); |
917 | 869 |
918 HttpRequestInfo request; | 870 HttpRequestInfo request; |
919 request.method = "POST"; | 871 request.method = "POST"; |
920 request.url = GURL("http://www.foo.com/"); | 872 request.url = GURL("http://www.foo.com/"); |
921 request.upload_data_stream = &upload_data_stream; | 873 request.upload_data_stream = &upload_data_stream; |
922 request.load_flags = 0; | 874 request.load_flags = 0; |
923 | 875 |
924 SessionDependencies session_deps; | 876 SpdySessionDependencies session_deps; |
925 scoped_ptr<HttpTransaction> trans( | 877 scoped_ptr<HttpTransaction> trans( |
926 new HttpNetworkTransaction(CreateSession(&session_deps))); | 878 new HttpNetworkTransaction(CreateSession(&session_deps))); |
927 | 879 |
928 MockRead data_reads[] = { | 880 MockRead data_reads[] = { |
929 MockRead("HTTP/1.0 100 Continue\r\n\r\n"), | 881 MockRead("HTTP/1.0 100 Continue\r\n\r\n"), |
930 MockRead("HTTP/1.0 200 OK\r\n\r\n"), | 882 MockRead("HTTP/1.0 200 OK\r\n\r\n"), |
931 MockRead("hello world"), | 883 MockRead("hello world"), |
932 MockRead(SYNCHRONOUS, OK), | 884 MockRead(SYNCHRONOUS, OK), |
933 }; | 885 }; |
934 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 886 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
935 session_deps.socket_factory.AddSocketDataProvider(&data); | 887 session_deps.socket_factory->AddSocketDataProvider(&data); |
936 | 888 |
937 TestCompletionCallback callback; | 889 TestCompletionCallback callback; |
938 | 890 |
939 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 891 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
940 EXPECT_EQ(ERR_IO_PENDING, rv); | 892 EXPECT_EQ(ERR_IO_PENDING, rv); |
941 | 893 |
942 rv = callback.WaitForResult(); | 894 rv = callback.WaitForResult(); |
943 EXPECT_EQ(OK, rv); | 895 EXPECT_EQ(OK, rv); |
944 | 896 |
945 const HttpResponseInfo* response = trans->GetResponseInfo(); | 897 const HttpResponseInfo* response = trans->GetResponseInfo(); |
(...skipping 10 matching lines...) Expand all Loading... |
956 | 908 |
957 // This test is almost the same as Ignores100 above, but the response contains | 909 // This test is almost the same as Ignores100 above, but the response contains |
958 // a 102 instead of a 100. Also, instead of HTTP/1.0 the response is | 910 // a 102 instead of a 100. Also, instead of HTTP/1.0 the response is |
959 // HTTP/1.1 and the two status headers are read in one read. | 911 // HTTP/1.1 and the two status headers are read in one read. |
960 TEST_F(HttpNetworkTransactionSpdy3Test, Ignores1xx) { | 912 TEST_F(HttpNetworkTransactionSpdy3Test, Ignores1xx) { |
961 HttpRequestInfo request; | 913 HttpRequestInfo request; |
962 request.method = "GET"; | 914 request.method = "GET"; |
963 request.url = GURL("http://www.foo.com/"); | 915 request.url = GURL("http://www.foo.com/"); |
964 request.load_flags = 0; | 916 request.load_flags = 0; |
965 | 917 |
966 SessionDependencies session_deps; | 918 SpdySessionDependencies session_deps; |
967 scoped_ptr<HttpTransaction> trans( | 919 scoped_ptr<HttpTransaction> trans( |
968 new HttpNetworkTransaction(CreateSession(&session_deps))); | 920 new HttpNetworkTransaction(CreateSession(&session_deps))); |
969 | 921 |
970 MockRead data_reads[] = { | 922 MockRead data_reads[] = { |
971 MockRead("HTTP/1.1 102 Unspecified status code\r\n\r\n" | 923 MockRead("HTTP/1.1 102 Unspecified status code\r\n\r\n" |
972 "HTTP/1.1 200 OK\r\n\r\n"), | 924 "HTTP/1.1 200 OK\r\n\r\n"), |
973 MockRead("hello world"), | 925 MockRead("hello world"), |
974 MockRead(SYNCHRONOUS, OK), | 926 MockRead(SYNCHRONOUS, OK), |
975 }; | 927 }; |
976 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 928 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
977 session_deps.socket_factory.AddSocketDataProvider(&data); | 929 session_deps.socket_factory->AddSocketDataProvider(&data); |
978 | 930 |
979 TestCompletionCallback callback; | 931 TestCompletionCallback callback; |
980 | 932 |
981 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 933 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
982 EXPECT_EQ(ERR_IO_PENDING, rv); | 934 EXPECT_EQ(ERR_IO_PENDING, rv); |
983 | 935 |
984 rv = callback.WaitForResult(); | 936 rv = callback.WaitForResult(); |
985 EXPECT_EQ(OK, rv); | 937 EXPECT_EQ(OK, rv); |
986 | 938 |
987 const HttpResponseInfo* response = trans->GetResponseInfo(); | 939 const HttpResponseInfo* response = trans->GetResponseInfo(); |
988 ASSERT_TRUE(response != NULL); | 940 ASSERT_TRUE(response != NULL); |
989 | 941 |
990 EXPECT_TRUE(response->headers != NULL); | 942 EXPECT_TRUE(response->headers != NULL); |
991 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 943 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
992 | 944 |
993 std::string response_data; | 945 std::string response_data; |
994 rv = ReadTransaction(trans.get(), &response_data); | 946 rv = ReadTransaction(trans.get(), &response_data); |
995 EXPECT_EQ(OK, rv); | 947 EXPECT_EQ(OK, rv); |
996 EXPECT_EQ("hello world", response_data); | 948 EXPECT_EQ("hello world", response_data); |
997 } | 949 } |
998 | 950 |
999 TEST_F(HttpNetworkTransactionSpdy3Test, Incomplete100ThenEOF) { | 951 TEST_F(HttpNetworkTransactionSpdy3Test, Incomplete100ThenEOF) { |
1000 HttpRequestInfo request; | 952 HttpRequestInfo request; |
1001 request.method = "POST"; | 953 request.method = "POST"; |
1002 request.url = GURL("http://www.foo.com/"); | 954 request.url = GURL("http://www.foo.com/"); |
1003 request.load_flags = 0; | 955 request.load_flags = 0; |
1004 | 956 |
1005 SessionDependencies session_deps; | 957 SpdySessionDependencies session_deps; |
1006 scoped_ptr<HttpTransaction> trans( | 958 scoped_ptr<HttpTransaction> trans( |
1007 new HttpNetworkTransaction(CreateSession(&session_deps))); | 959 new HttpNetworkTransaction(CreateSession(&session_deps))); |
1008 | 960 |
1009 MockRead data_reads[] = { | 961 MockRead data_reads[] = { |
1010 MockRead(SYNCHRONOUS, "HTTP/1.0 100 Continue\r\n"), | 962 MockRead(SYNCHRONOUS, "HTTP/1.0 100 Continue\r\n"), |
1011 MockRead(ASYNC, 0), | 963 MockRead(ASYNC, 0), |
1012 }; | 964 }; |
1013 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 965 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
1014 session_deps.socket_factory.AddSocketDataProvider(&data); | 966 session_deps.socket_factory->AddSocketDataProvider(&data); |
1015 | 967 |
1016 TestCompletionCallback callback; | 968 TestCompletionCallback callback; |
1017 | 969 |
1018 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 970 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
1019 EXPECT_EQ(ERR_IO_PENDING, rv); | 971 EXPECT_EQ(ERR_IO_PENDING, rv); |
1020 | 972 |
1021 rv = callback.WaitForResult(); | 973 rv = callback.WaitForResult(); |
1022 EXPECT_EQ(OK, rv); | 974 EXPECT_EQ(OK, rv); |
1023 | 975 |
1024 std::string response_data; | 976 std::string response_data; |
1025 rv = ReadTransaction(trans.get(), &response_data); | 977 rv = ReadTransaction(trans.get(), &response_data); |
1026 EXPECT_EQ(OK, rv); | 978 EXPECT_EQ(OK, rv); |
1027 EXPECT_EQ("", response_data); | 979 EXPECT_EQ("", response_data); |
1028 } | 980 } |
1029 | 981 |
1030 TEST_F(HttpNetworkTransactionSpdy3Test, EmptyResponse) { | 982 TEST_F(HttpNetworkTransactionSpdy3Test, EmptyResponse) { |
1031 HttpRequestInfo request; | 983 HttpRequestInfo request; |
1032 request.method = "POST"; | 984 request.method = "POST"; |
1033 request.url = GURL("http://www.foo.com/"); | 985 request.url = GURL("http://www.foo.com/"); |
1034 request.load_flags = 0; | 986 request.load_flags = 0; |
1035 | 987 |
1036 SessionDependencies session_deps; | 988 SpdySessionDependencies session_deps; |
1037 scoped_ptr<HttpTransaction> trans( | 989 scoped_ptr<HttpTransaction> trans( |
1038 new HttpNetworkTransaction(CreateSession(&session_deps))); | 990 new HttpNetworkTransaction(CreateSession(&session_deps))); |
1039 | 991 |
1040 MockRead data_reads[] = { | 992 MockRead data_reads[] = { |
1041 MockRead(ASYNC, 0), | 993 MockRead(ASYNC, 0), |
1042 }; | 994 }; |
1043 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 995 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
1044 session_deps.socket_factory.AddSocketDataProvider(&data); | 996 session_deps.socket_factory->AddSocketDataProvider(&data); |
1045 | 997 |
1046 TestCompletionCallback callback; | 998 TestCompletionCallback callback; |
1047 | 999 |
1048 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1000 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
1049 EXPECT_EQ(ERR_IO_PENDING, rv); | 1001 EXPECT_EQ(ERR_IO_PENDING, rv); |
1050 | 1002 |
1051 rv = callback.WaitForResult(); | 1003 rv = callback.WaitForResult(); |
1052 EXPECT_EQ(ERR_EMPTY_RESPONSE, rv); | 1004 EXPECT_EQ(ERR_EMPTY_RESPONSE, rv); |
1053 } | 1005 } |
1054 | 1006 |
1055 void HttpNetworkTransactionSpdy3Test::KeepAliveConnectionResendRequestTest( | 1007 void HttpNetworkTransactionSpdy3Test::KeepAliveConnectionResendRequestTest( |
1056 const MockWrite* write_failure, | 1008 const MockWrite* write_failure, |
1057 const MockRead* read_failure) { | 1009 const MockRead* read_failure) { |
1058 HttpRequestInfo request; | 1010 HttpRequestInfo request; |
1059 request.method = "GET"; | 1011 request.method = "GET"; |
1060 request.url = GURL("http://www.foo.com/"); | 1012 request.url = GURL("http://www.foo.com/"); |
1061 request.load_flags = 0; | 1013 request.load_flags = 0; |
1062 | 1014 |
1063 SessionDependencies session_deps; | 1015 SpdySessionDependencies session_deps; |
1064 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 1016 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
1065 | 1017 |
1066 // Written data for successfully sending both requests. | 1018 // Written data for successfully sending both requests. |
1067 MockWrite data1_writes[] = { | 1019 MockWrite data1_writes[] = { |
1068 MockWrite("GET / HTTP/1.1\r\n" | 1020 MockWrite("GET / HTTP/1.1\r\n" |
1069 "Host: www.foo.com\r\n" | 1021 "Host: www.foo.com\r\n" |
1070 "Connection: keep-alive\r\n\r\n"), | 1022 "Connection: keep-alive\r\n\r\n"), |
1071 MockWrite("GET / HTTP/1.1\r\n" | 1023 MockWrite("GET / HTTP/1.1\r\n" |
1072 "Host: www.foo.com\r\n" | 1024 "Host: www.foo.com\r\n" |
1073 "Connection: keep-alive\r\n\r\n") | 1025 "Connection: keep-alive\r\n\r\n") |
1074 }; | 1026 }; |
1075 | 1027 |
1076 // Read results for the first request. | 1028 // Read results for the first request. |
1077 MockRead data1_reads[] = { | 1029 MockRead data1_reads[] = { |
1078 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), | 1030 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), |
1079 MockRead("hello"), | 1031 MockRead("hello"), |
1080 MockRead(ASYNC, OK), | 1032 MockRead(ASYNC, OK), |
1081 }; | 1033 }; |
1082 | 1034 |
1083 if (write_failure) { | 1035 if (write_failure) { |
1084 ASSERT_TRUE(!read_failure); | 1036 ASSERT_TRUE(!read_failure); |
1085 data1_writes[1] = *write_failure; | 1037 data1_writes[1] = *write_failure; |
1086 } else { | 1038 } else { |
1087 ASSERT_TRUE(read_failure); | 1039 ASSERT_TRUE(read_failure); |
1088 data1_reads[2] = *read_failure; | 1040 data1_reads[2] = *read_failure; |
1089 } | 1041 } |
1090 | 1042 |
1091 StaticSocketDataProvider data1(data1_reads, arraysize(data1_reads), | 1043 StaticSocketDataProvider data1(data1_reads, arraysize(data1_reads), |
1092 data1_writes, arraysize(data1_writes)); | 1044 data1_writes, arraysize(data1_writes)); |
1093 session_deps.socket_factory.AddSocketDataProvider(&data1); | 1045 session_deps.socket_factory->AddSocketDataProvider(&data1); |
1094 | 1046 |
1095 MockRead data2_reads[] = { | 1047 MockRead data2_reads[] = { |
1096 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), | 1048 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), |
1097 MockRead("world"), | 1049 MockRead("world"), |
1098 MockRead(ASYNC, OK), | 1050 MockRead(ASYNC, OK), |
1099 }; | 1051 }; |
1100 StaticSocketDataProvider data2(data2_reads, arraysize(data2_reads), NULL, 0); | 1052 StaticSocketDataProvider data2(data2_reads, arraysize(data2_reads), NULL, 0); |
1101 session_deps.socket_factory.AddSocketDataProvider(&data2); | 1053 session_deps.socket_factory->AddSocketDataProvider(&data2); |
1102 | 1054 |
1103 const char* kExpectedResponseData[] = { | 1055 const char* kExpectedResponseData[] = { |
1104 "hello", "world" | 1056 "hello", "world" |
1105 }; | 1057 }; |
1106 | 1058 |
1107 for (int i = 0; i < 2; ++i) { | 1059 for (int i = 0; i < 2; ++i) { |
1108 TestCompletionCallback callback; | 1060 TestCompletionCallback callback; |
1109 | 1061 |
1110 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 1062 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
1111 | 1063 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1143 MockRead read_failure(SYNCHRONOUS, OK); // EOF | 1095 MockRead read_failure(SYNCHRONOUS, OK); // EOF |
1144 KeepAliveConnectionResendRequestTest(NULL, &read_failure); | 1096 KeepAliveConnectionResendRequestTest(NULL, &read_failure); |
1145 } | 1097 } |
1146 | 1098 |
1147 TEST_F(HttpNetworkTransactionSpdy3Test, NonKeepAliveConnectionReset) { | 1099 TEST_F(HttpNetworkTransactionSpdy3Test, NonKeepAliveConnectionReset) { |
1148 HttpRequestInfo request; | 1100 HttpRequestInfo request; |
1149 request.method = "GET"; | 1101 request.method = "GET"; |
1150 request.url = GURL("http://www.google.com/"); | 1102 request.url = GURL("http://www.google.com/"); |
1151 request.load_flags = 0; | 1103 request.load_flags = 0; |
1152 | 1104 |
1153 SessionDependencies session_deps; | 1105 SpdySessionDependencies session_deps; |
1154 scoped_ptr<HttpTransaction> trans( | 1106 scoped_ptr<HttpTransaction> trans( |
1155 new HttpNetworkTransaction(CreateSession(&session_deps))); | 1107 new HttpNetworkTransaction(CreateSession(&session_deps))); |
1156 | 1108 |
1157 MockRead data_reads[] = { | 1109 MockRead data_reads[] = { |
1158 MockRead(ASYNC, ERR_CONNECTION_RESET), | 1110 MockRead(ASYNC, ERR_CONNECTION_RESET), |
1159 MockRead("HTTP/1.0 200 OK\r\n\r\n"), // Should not be used | 1111 MockRead("HTTP/1.0 200 OK\r\n\r\n"), // Should not be used |
1160 MockRead("hello world"), | 1112 MockRead("hello world"), |
1161 MockRead(SYNCHRONOUS, OK), | 1113 MockRead(SYNCHRONOUS, OK), |
1162 }; | 1114 }; |
1163 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1115 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
1164 session_deps.socket_factory.AddSocketDataProvider(&data); | 1116 session_deps.socket_factory->AddSocketDataProvider(&data); |
1165 | 1117 |
1166 TestCompletionCallback callback; | 1118 TestCompletionCallback callback; |
1167 | 1119 |
1168 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1120 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
1169 EXPECT_EQ(ERR_IO_PENDING, rv); | 1121 EXPECT_EQ(ERR_IO_PENDING, rv); |
1170 | 1122 |
1171 rv = callback.WaitForResult(); | 1123 rv = callback.WaitForResult(); |
1172 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 1124 EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
1173 | 1125 |
1174 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1126 const HttpResponseInfo* response = trans->GetResponseInfo(); |
(...skipping 24 matching lines...) Expand all Loading... |
1199 // Next 2 cases (KeepAliveEarlyClose and KeepAliveEarlyClose2) are regression | 1151 // Next 2 cases (KeepAliveEarlyClose and KeepAliveEarlyClose2) are regression |
1200 // tests. There was a bug causing HttpNetworkTransaction to hang in the | 1152 // tests. There was a bug causing HttpNetworkTransaction to hang in the |
1201 // destructor in such situations. | 1153 // destructor in such situations. |
1202 // See http://crbug.com/154712 and http://crbug.com/156609. | 1154 // See http://crbug.com/154712 and http://crbug.com/156609. |
1203 TEST_F(HttpNetworkTransactionSpdy3Test, KeepAliveEarlyClose) { | 1155 TEST_F(HttpNetworkTransactionSpdy3Test, KeepAliveEarlyClose) { |
1204 HttpRequestInfo request; | 1156 HttpRequestInfo request; |
1205 request.method = "GET"; | 1157 request.method = "GET"; |
1206 request.url = GURL("http://www.google.com/"); | 1158 request.url = GURL("http://www.google.com/"); |
1207 request.load_flags = 0; | 1159 request.load_flags = 0; |
1208 | 1160 |
1209 SessionDependencies session_deps; | 1161 SpdySessionDependencies session_deps; |
1210 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 1162 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
1211 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 1163 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
1212 | 1164 |
1213 MockRead data_reads[] = { | 1165 MockRead data_reads[] = { |
1214 MockRead("HTTP/1.0 200 OK\r\n"), | 1166 MockRead("HTTP/1.0 200 OK\r\n"), |
1215 MockRead("Connection: keep-alive\r\n"), | 1167 MockRead("Connection: keep-alive\r\n"), |
1216 MockRead("Content-Length: 100\r\n\r\n"), | 1168 MockRead("Content-Length: 100\r\n\r\n"), |
1217 MockRead("hello"), | 1169 MockRead("hello"), |
1218 MockRead(SYNCHRONOUS, 0), | 1170 MockRead(SYNCHRONOUS, 0), |
1219 }; | 1171 }; |
1220 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1172 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
1221 session_deps.socket_factory.AddSocketDataProvider(&data); | 1173 session_deps.socket_factory->AddSocketDataProvider(&data); |
1222 | 1174 |
1223 TestCompletionCallback callback; | 1175 TestCompletionCallback callback; |
1224 | 1176 |
1225 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1177 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
1226 EXPECT_EQ(ERR_IO_PENDING, rv); | 1178 EXPECT_EQ(ERR_IO_PENDING, rv); |
1227 | 1179 |
1228 rv = callback.WaitForResult(); | 1180 rv = callback.WaitForResult(); |
1229 EXPECT_EQ(OK, rv); | 1181 EXPECT_EQ(OK, rv); |
1230 | 1182 |
1231 scoped_refptr<IOBufferWithSize> io_buf(new IOBufferWithSize(100)); | 1183 scoped_refptr<IOBufferWithSize> io_buf(new IOBufferWithSize(100)); |
1232 rv = trans->Read(io_buf, io_buf->size(), callback.callback()); | 1184 rv = trans->Read(io_buf, io_buf->size(), callback.callback()); |
1233 if (rv == ERR_IO_PENDING) | 1185 if (rv == ERR_IO_PENDING) |
1234 rv = callback.WaitForResult(); | 1186 rv = callback.WaitForResult(); |
1235 EXPECT_EQ(5, rv); | 1187 EXPECT_EQ(5, rv); |
1236 rv = trans->Read(io_buf, io_buf->size(), callback.callback()); | 1188 rv = trans->Read(io_buf, io_buf->size(), callback.callback()); |
1237 EXPECT_EQ(ERR_CONTENT_LENGTH_MISMATCH, rv); | 1189 EXPECT_EQ(ERR_CONTENT_LENGTH_MISMATCH, rv); |
1238 | 1190 |
1239 trans.reset(); | 1191 trans.reset(); |
1240 MessageLoop::current()->RunUntilIdle(); | 1192 MessageLoop::current()->RunUntilIdle(); |
1241 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 1193 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
1242 } | 1194 } |
1243 | 1195 |
1244 TEST_F(HttpNetworkTransactionSpdy3Test, KeepAliveEarlyClose2) { | 1196 TEST_F(HttpNetworkTransactionSpdy3Test, KeepAliveEarlyClose2) { |
1245 HttpRequestInfo request; | 1197 HttpRequestInfo request; |
1246 request.method = "GET"; | 1198 request.method = "GET"; |
1247 request.url = GURL("http://www.google.com/"); | 1199 request.url = GURL("http://www.google.com/"); |
1248 request.load_flags = 0; | 1200 request.load_flags = 0; |
1249 | 1201 |
1250 SessionDependencies session_deps; | 1202 SpdySessionDependencies session_deps; |
1251 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 1203 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
1252 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 1204 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
1253 | 1205 |
1254 MockRead data_reads[] = { | 1206 MockRead data_reads[] = { |
1255 MockRead("HTTP/1.0 200 OK\r\n"), | 1207 MockRead("HTTP/1.0 200 OK\r\n"), |
1256 MockRead("Connection: keep-alive\r\n"), | 1208 MockRead("Connection: keep-alive\r\n"), |
1257 MockRead("Content-Length: 100\r\n\r\n"), | 1209 MockRead("Content-Length: 100\r\n\r\n"), |
1258 MockRead(SYNCHRONOUS, 0), | 1210 MockRead(SYNCHRONOUS, 0), |
1259 }; | 1211 }; |
1260 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1212 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
1261 session_deps.socket_factory.AddSocketDataProvider(&data); | 1213 session_deps.socket_factory->AddSocketDataProvider(&data); |
1262 | 1214 |
1263 TestCompletionCallback callback; | 1215 TestCompletionCallback callback; |
1264 | 1216 |
1265 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1217 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
1266 EXPECT_EQ(ERR_IO_PENDING, rv); | 1218 EXPECT_EQ(ERR_IO_PENDING, rv); |
1267 | 1219 |
1268 rv = callback.WaitForResult(); | 1220 rv = callback.WaitForResult(); |
1269 EXPECT_EQ(OK, rv); | 1221 EXPECT_EQ(OK, rv); |
1270 | 1222 |
1271 scoped_refptr<IOBufferWithSize> io_buf(new IOBufferWithSize(100)); | 1223 scoped_refptr<IOBufferWithSize> io_buf(new IOBufferWithSize(100)); |
1272 rv = trans->Read(io_buf, io_buf->size(), callback.callback()); | 1224 rv = trans->Read(io_buf, io_buf->size(), callback.callback()); |
1273 if (rv == ERR_IO_PENDING) | 1225 if (rv == ERR_IO_PENDING) |
1274 rv = callback.WaitForResult(); | 1226 rv = callback.WaitForResult(); |
1275 EXPECT_EQ(ERR_CONTENT_LENGTH_MISMATCH, rv); | 1227 EXPECT_EQ(ERR_CONTENT_LENGTH_MISMATCH, rv); |
1276 | 1228 |
1277 trans.reset(); | 1229 trans.reset(); |
1278 MessageLoop::current()->RunUntilIdle(); | 1230 MessageLoop::current()->RunUntilIdle(); |
1279 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); | 1231 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); |
1280 } | 1232 } |
1281 | 1233 |
1282 // Test that we correctly reuse a keep-alive connection after not explicitly | 1234 // Test that we correctly reuse a keep-alive connection after not explicitly |
1283 // reading the body. | 1235 // reading the body. |
1284 TEST_F(HttpNetworkTransactionSpdy3Test, KeepAliveAfterUnreadBody) { | 1236 TEST_F(HttpNetworkTransactionSpdy3Test, KeepAliveAfterUnreadBody) { |
1285 HttpRequestInfo request; | 1237 HttpRequestInfo request; |
1286 request.method = "GET"; | 1238 request.method = "GET"; |
1287 request.url = GURL("http://www.foo.com/"); | 1239 request.url = GURL("http://www.foo.com/"); |
1288 request.load_flags = 0; | 1240 request.load_flags = 0; |
1289 | 1241 |
1290 SessionDependencies session_deps; | 1242 SpdySessionDependencies session_deps; |
1291 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 1243 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
1292 | 1244 |
1293 // Note that because all these reads happen in the same | 1245 // Note that because all these reads happen in the same |
1294 // StaticSocketDataProvider, it shows that the same socket is being reused for | 1246 // StaticSocketDataProvider, it shows that the same socket is being reused for |
1295 // all transactions. | 1247 // all transactions. |
1296 MockRead data1_reads[] = { | 1248 MockRead data1_reads[] = { |
1297 MockRead("HTTP/1.1 204 No Content\r\n\r\n"), | 1249 MockRead("HTTP/1.1 204 No Content\r\n\r\n"), |
1298 MockRead("HTTP/1.1 205 Reset Content\r\n\r\n"), | 1250 MockRead("HTTP/1.1 205 Reset Content\r\n\r\n"), |
1299 MockRead("HTTP/1.1 304 Not Modified\r\n\r\n"), | 1251 MockRead("HTTP/1.1 304 Not Modified\r\n\r\n"), |
1300 MockRead("HTTP/1.1 302 Found\r\n" | 1252 MockRead("HTTP/1.1 302 Found\r\n" |
1301 "Content-Length: 0\r\n\r\n"), | 1253 "Content-Length: 0\r\n\r\n"), |
1302 MockRead("HTTP/1.1 302 Found\r\n" | 1254 MockRead("HTTP/1.1 302 Found\r\n" |
1303 "Content-Length: 5\r\n\r\n" | 1255 "Content-Length: 5\r\n\r\n" |
1304 "hello"), | 1256 "hello"), |
1305 MockRead("HTTP/1.1 301 Moved Permanently\r\n" | 1257 MockRead("HTTP/1.1 301 Moved Permanently\r\n" |
1306 "Content-Length: 0\r\n\r\n"), | 1258 "Content-Length: 0\r\n\r\n"), |
1307 MockRead("HTTP/1.1 301 Moved Permanently\r\n" | 1259 MockRead("HTTP/1.1 301 Moved Permanently\r\n" |
1308 "Content-Length: 5\r\n\r\n" | 1260 "Content-Length: 5\r\n\r\n" |
1309 "hello"), | 1261 "hello"), |
1310 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), | 1262 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), |
1311 MockRead("hello"), | 1263 MockRead("hello"), |
1312 }; | 1264 }; |
1313 StaticSocketDataProvider data1(data1_reads, arraysize(data1_reads), NULL, 0); | 1265 StaticSocketDataProvider data1(data1_reads, arraysize(data1_reads), NULL, 0); |
1314 session_deps.socket_factory.AddSocketDataProvider(&data1); | 1266 session_deps.socket_factory->AddSocketDataProvider(&data1); |
1315 | 1267 |
1316 MockRead data2_reads[] = { | 1268 MockRead data2_reads[] = { |
1317 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. | 1269 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. |
1318 }; | 1270 }; |
1319 StaticSocketDataProvider data2(data2_reads, arraysize(data2_reads), NULL, 0); | 1271 StaticSocketDataProvider data2(data2_reads, arraysize(data2_reads), NULL, 0); |
1320 session_deps.socket_factory.AddSocketDataProvider(&data2); | 1272 session_deps.socket_factory->AddSocketDataProvider(&data2); |
1321 | 1273 |
1322 const int kNumUnreadBodies = arraysize(data1_reads) - 2; | 1274 const int kNumUnreadBodies = arraysize(data1_reads) - 2; |
1323 std::string response_lines[kNumUnreadBodies]; | 1275 std::string response_lines[kNumUnreadBodies]; |
1324 | 1276 |
1325 for (size_t i = 0; i < arraysize(data1_reads) - 2; ++i) { | 1277 for (size_t i = 0; i < arraysize(data1_reads) - 2; ++i) { |
1326 TestCompletionCallback callback; | 1278 TestCompletionCallback callback; |
1327 | 1279 |
1328 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 1280 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
1329 | 1281 |
1330 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1282 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1375 } | 1327 } |
1376 | 1328 |
1377 // Test the request-challenge-retry sequence for basic auth. | 1329 // Test the request-challenge-retry sequence for basic auth. |
1378 // (basic auth is the easiest to mock, because it has no randomness). | 1330 // (basic auth is the easiest to mock, because it has no randomness). |
1379 TEST_F(HttpNetworkTransactionSpdy3Test, BasicAuth) { | 1331 TEST_F(HttpNetworkTransactionSpdy3Test, BasicAuth) { |
1380 HttpRequestInfo request; | 1332 HttpRequestInfo request; |
1381 request.method = "GET"; | 1333 request.method = "GET"; |
1382 request.url = GURL("http://www.google.com/"); | 1334 request.url = GURL("http://www.google.com/"); |
1383 request.load_flags = 0; | 1335 request.load_flags = 0; |
1384 | 1336 |
1385 SessionDependencies session_deps; | 1337 SpdySessionDependencies session_deps; |
1386 scoped_ptr<HttpTransaction> trans( | 1338 scoped_ptr<HttpTransaction> trans( |
1387 new HttpNetworkTransaction(CreateSession(&session_deps))); | 1339 new HttpNetworkTransaction(CreateSession(&session_deps))); |
1388 | 1340 |
1389 MockWrite data_writes1[] = { | 1341 MockWrite data_writes1[] = { |
1390 MockWrite("GET / HTTP/1.1\r\n" | 1342 MockWrite("GET / HTTP/1.1\r\n" |
1391 "Host: www.google.com\r\n" | 1343 "Host: www.google.com\r\n" |
1392 "Connection: keep-alive\r\n\r\n"), | 1344 "Connection: keep-alive\r\n\r\n"), |
1393 }; | 1345 }; |
1394 | 1346 |
1395 MockRead data_reads1[] = { | 1347 MockRead data_reads1[] = { |
(...skipping 23 matching lines...) Expand all Loading... |
1419 MockRead("HTTP/1.0 200 OK\r\n"), | 1371 MockRead("HTTP/1.0 200 OK\r\n"), |
1420 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 1372 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
1421 MockRead("Content-Length: 100\r\n\r\n"), | 1373 MockRead("Content-Length: 100\r\n\r\n"), |
1422 MockRead(SYNCHRONOUS, OK), | 1374 MockRead(SYNCHRONOUS, OK), |
1423 }; | 1375 }; |
1424 | 1376 |
1425 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 1377 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
1426 data_writes1, arraysize(data_writes1)); | 1378 data_writes1, arraysize(data_writes1)); |
1427 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 1379 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
1428 data_writes2, arraysize(data_writes2)); | 1380 data_writes2, arraysize(data_writes2)); |
1429 session_deps.socket_factory.AddSocketDataProvider(&data1); | 1381 session_deps.socket_factory->AddSocketDataProvider(&data1); |
1430 session_deps.socket_factory.AddSocketDataProvider(&data2); | 1382 session_deps.socket_factory->AddSocketDataProvider(&data2); |
1431 | 1383 |
1432 TestCompletionCallback callback1; | 1384 TestCompletionCallback callback1; |
1433 | 1385 |
1434 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 1386 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
1435 EXPECT_EQ(ERR_IO_PENDING, rv); | 1387 EXPECT_EQ(ERR_IO_PENDING, rv); |
1436 | 1388 |
1437 rv = callback1.WaitForResult(); | 1389 rv = callback1.WaitForResult(); |
1438 EXPECT_EQ(OK, rv); | 1390 EXPECT_EQ(OK, rv); |
1439 | 1391 |
1440 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1392 const HttpResponseInfo* response = trans->GetResponseInfo(); |
(...skipping 14 matching lines...) Expand all Loading... |
1455 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 1407 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
1456 EXPECT_EQ(100, response->headers->GetContentLength()); | 1408 EXPECT_EQ(100, response->headers->GetContentLength()); |
1457 } | 1409 } |
1458 | 1410 |
1459 TEST_F(HttpNetworkTransactionSpdy3Test, DoNotSendAuth) { | 1411 TEST_F(HttpNetworkTransactionSpdy3Test, DoNotSendAuth) { |
1460 HttpRequestInfo request; | 1412 HttpRequestInfo request; |
1461 request.method = "GET"; | 1413 request.method = "GET"; |
1462 request.url = GURL("http://www.google.com/"); | 1414 request.url = GURL("http://www.google.com/"); |
1463 request.load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA; | 1415 request.load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA; |
1464 | 1416 |
1465 SessionDependencies session_deps; | 1417 SpdySessionDependencies session_deps; |
1466 scoped_ptr<HttpTransaction> trans( | 1418 scoped_ptr<HttpTransaction> trans( |
1467 new HttpNetworkTransaction(CreateSession(&session_deps))); | 1419 new HttpNetworkTransaction(CreateSession(&session_deps))); |
1468 | 1420 |
1469 MockWrite data_writes[] = { | 1421 MockWrite data_writes[] = { |
1470 MockWrite("GET / HTTP/1.1\r\n" | 1422 MockWrite("GET / HTTP/1.1\r\n" |
1471 "Host: www.google.com\r\n" | 1423 "Host: www.google.com\r\n" |
1472 "Connection: keep-alive\r\n\r\n"), | 1424 "Connection: keep-alive\r\n\r\n"), |
1473 }; | 1425 }; |
1474 | 1426 |
1475 MockRead data_reads[] = { | 1427 MockRead data_reads[] = { |
1476 MockRead("HTTP/1.0 401 Unauthorized\r\n"), | 1428 MockRead("HTTP/1.0 401 Unauthorized\r\n"), |
1477 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 1429 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
1478 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 1430 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
1479 // Large content-length -- won't matter, as connection will be reset. | 1431 // Large content-length -- won't matter, as connection will be reset. |
1480 MockRead("Content-Length: 10000\r\n\r\n"), | 1432 MockRead("Content-Length: 10000\r\n\r\n"), |
1481 MockRead(SYNCHRONOUS, ERR_FAILED), | 1433 MockRead(SYNCHRONOUS, ERR_FAILED), |
1482 }; | 1434 }; |
1483 | 1435 |
1484 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 1436 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
1485 data_writes, arraysize(data_writes)); | 1437 data_writes, arraysize(data_writes)); |
1486 session_deps.socket_factory.AddSocketDataProvider(&data); | 1438 session_deps.socket_factory->AddSocketDataProvider(&data); |
1487 TestCompletionCallback callback; | 1439 TestCompletionCallback callback; |
1488 | 1440 |
1489 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1441 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
1490 EXPECT_EQ(ERR_IO_PENDING, rv); | 1442 EXPECT_EQ(ERR_IO_PENDING, rv); |
1491 | 1443 |
1492 rv = callback.WaitForResult(); | 1444 rv = callback.WaitForResult(); |
1493 EXPECT_EQ(0, rv); | 1445 EXPECT_EQ(0, rv); |
1494 | 1446 |
1495 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1447 const HttpResponseInfo* response = trans->GetResponseInfo(); |
1496 ASSERT_TRUE(response != NULL); | 1448 ASSERT_TRUE(response != NULL); |
1497 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 1449 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
1498 } | 1450 } |
1499 | 1451 |
1500 // Test the request-challenge-retry sequence for basic auth, over a keep-alive | 1452 // Test the request-challenge-retry sequence for basic auth, over a keep-alive |
1501 // connection. | 1453 // connection. |
1502 TEST_F(HttpNetworkTransactionSpdy3Test, BasicAuthKeepAlive) { | 1454 TEST_F(HttpNetworkTransactionSpdy3Test, BasicAuthKeepAlive) { |
1503 HttpRequestInfo request; | 1455 HttpRequestInfo request; |
1504 request.method = "GET"; | 1456 request.method = "GET"; |
1505 request.url = GURL("http://www.google.com/"); | 1457 request.url = GURL("http://www.google.com/"); |
1506 request.load_flags = 0; | 1458 request.load_flags = 0; |
1507 | 1459 |
1508 SessionDependencies session_deps; | 1460 SpdySessionDependencies session_deps; |
1509 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 1461 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
1510 | 1462 |
1511 MockWrite data_writes1[] = { | 1463 MockWrite data_writes1[] = { |
1512 MockWrite("GET / HTTP/1.1\r\n" | 1464 MockWrite("GET / HTTP/1.1\r\n" |
1513 "Host: www.google.com\r\n" | 1465 "Host: www.google.com\r\n" |
1514 "Connection: keep-alive\r\n\r\n"), | 1466 "Connection: keep-alive\r\n\r\n"), |
1515 | 1467 |
1516 // After calling trans->RestartWithAuth(), this is the request we should | 1468 // After calling trans->RestartWithAuth(), this is the request we should |
1517 // be issuing -- the final header line contains the credentials. | 1469 // be issuing -- the final header line contains the credentials. |
1518 MockWrite("GET / HTTP/1.1\r\n" | 1470 MockWrite("GET / HTTP/1.1\r\n" |
(...skipping 19 matching lines...) Expand all Loading... |
1538 // If there is a regression where we disconnect a Keep-Alive | 1490 // If there is a regression where we disconnect a Keep-Alive |
1539 // connection during an auth roundtrip, we'll end up reading this. | 1491 // connection during an auth roundtrip, we'll end up reading this. |
1540 MockRead data_reads2[] = { | 1492 MockRead data_reads2[] = { |
1541 MockRead(SYNCHRONOUS, ERR_FAILED), | 1493 MockRead(SYNCHRONOUS, ERR_FAILED), |
1542 }; | 1494 }; |
1543 | 1495 |
1544 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 1496 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
1545 data_writes1, arraysize(data_writes1)); | 1497 data_writes1, arraysize(data_writes1)); |
1546 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 1498 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
1547 NULL, 0); | 1499 NULL, 0); |
1548 session_deps.socket_factory.AddSocketDataProvider(&data1); | 1500 session_deps.socket_factory->AddSocketDataProvider(&data1); |
1549 session_deps.socket_factory.AddSocketDataProvider(&data2); | 1501 session_deps.socket_factory->AddSocketDataProvider(&data2); |
1550 | 1502 |
1551 TestCompletionCallback callback1; | 1503 TestCompletionCallback callback1; |
1552 | 1504 |
1553 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 1505 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
1554 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 1506 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
1555 EXPECT_EQ(ERR_IO_PENDING, rv); | 1507 EXPECT_EQ(ERR_IO_PENDING, rv); |
1556 | 1508 |
1557 rv = callback1.WaitForResult(); | 1509 rv = callback1.WaitForResult(); |
1558 EXPECT_EQ(OK, rv); | 1510 EXPECT_EQ(OK, rv); |
1559 | 1511 |
(...skipping 17 matching lines...) Expand all Loading... |
1577 } | 1529 } |
1578 | 1530 |
1579 // Test the request-challenge-retry sequence for basic auth, over a keep-alive | 1531 // Test the request-challenge-retry sequence for basic auth, over a keep-alive |
1580 // connection and with no response body to drain. | 1532 // connection and with no response body to drain. |
1581 TEST_F(HttpNetworkTransactionSpdy3Test, BasicAuthKeepAliveNoBody) { | 1533 TEST_F(HttpNetworkTransactionSpdy3Test, BasicAuthKeepAliveNoBody) { |
1582 HttpRequestInfo request; | 1534 HttpRequestInfo request; |
1583 request.method = "GET"; | 1535 request.method = "GET"; |
1584 request.url = GURL("http://www.google.com/"); | 1536 request.url = GURL("http://www.google.com/"); |
1585 request.load_flags = 0; | 1537 request.load_flags = 0; |
1586 | 1538 |
1587 SessionDependencies session_deps; | 1539 SpdySessionDependencies session_deps; |
1588 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 1540 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
1589 | 1541 |
1590 MockWrite data_writes1[] = { | 1542 MockWrite data_writes1[] = { |
1591 MockWrite("GET / HTTP/1.1\r\n" | 1543 MockWrite("GET / HTTP/1.1\r\n" |
1592 "Host: www.google.com\r\n" | 1544 "Host: www.google.com\r\n" |
1593 "Connection: keep-alive\r\n\r\n"), | 1545 "Connection: keep-alive\r\n\r\n"), |
1594 | 1546 |
1595 // After calling trans->RestartWithAuth(), this is the request we should | 1547 // After calling trans->RestartWithAuth(), this is the request we should |
1596 // be issuing -- the final header line contains the credentials. | 1548 // be issuing -- the final header line contains the credentials. |
1597 MockWrite("GET / HTTP/1.1\r\n" | 1549 MockWrite("GET / HTTP/1.1\r\n" |
(...skipping 16 matching lines...) Expand all Loading... |
1614 | 1566 |
1615 // An incorrect reconnect would cause this to be read. | 1567 // An incorrect reconnect would cause this to be read. |
1616 MockRead data_reads2[] = { | 1568 MockRead data_reads2[] = { |
1617 MockRead(SYNCHRONOUS, ERR_FAILED), | 1569 MockRead(SYNCHRONOUS, ERR_FAILED), |
1618 }; | 1570 }; |
1619 | 1571 |
1620 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 1572 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
1621 data_writes1, arraysize(data_writes1)); | 1573 data_writes1, arraysize(data_writes1)); |
1622 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 1574 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
1623 NULL, 0); | 1575 NULL, 0); |
1624 session_deps.socket_factory.AddSocketDataProvider(&data1); | 1576 session_deps.socket_factory->AddSocketDataProvider(&data1); |
1625 session_deps.socket_factory.AddSocketDataProvider(&data2); | 1577 session_deps.socket_factory->AddSocketDataProvider(&data2); |
1626 | 1578 |
1627 TestCompletionCallback callback1; | 1579 TestCompletionCallback callback1; |
1628 | 1580 |
1629 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 1581 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
1630 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 1582 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
1631 EXPECT_EQ(ERR_IO_PENDING, rv); | 1583 EXPECT_EQ(ERR_IO_PENDING, rv); |
1632 | 1584 |
1633 rv = callback1.WaitForResult(); | 1585 rv = callback1.WaitForResult(); |
1634 EXPECT_EQ(OK, rv); | 1586 EXPECT_EQ(OK, rv); |
1635 | 1587 |
(...skipping 17 matching lines...) Expand all Loading... |
1653 } | 1605 } |
1654 | 1606 |
1655 // Test the request-challenge-retry sequence for basic auth, over a keep-alive | 1607 // Test the request-challenge-retry sequence for basic auth, over a keep-alive |
1656 // connection and with a large response body to drain. | 1608 // connection and with a large response body to drain. |
1657 TEST_F(HttpNetworkTransactionSpdy3Test, BasicAuthKeepAliveLargeBody) { | 1609 TEST_F(HttpNetworkTransactionSpdy3Test, BasicAuthKeepAliveLargeBody) { |
1658 HttpRequestInfo request; | 1610 HttpRequestInfo request; |
1659 request.method = "GET"; | 1611 request.method = "GET"; |
1660 request.url = GURL("http://www.google.com/"); | 1612 request.url = GURL("http://www.google.com/"); |
1661 request.load_flags = 0; | 1613 request.load_flags = 0; |
1662 | 1614 |
1663 SessionDependencies session_deps; | 1615 SpdySessionDependencies session_deps; |
1664 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 1616 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
1665 | 1617 |
1666 MockWrite data_writes1[] = { | 1618 MockWrite data_writes1[] = { |
1667 MockWrite("GET / HTTP/1.1\r\n" | 1619 MockWrite("GET / HTTP/1.1\r\n" |
1668 "Host: www.google.com\r\n" | 1620 "Host: www.google.com\r\n" |
1669 "Connection: keep-alive\r\n\r\n"), | 1621 "Connection: keep-alive\r\n\r\n"), |
1670 | 1622 |
1671 // After calling trans->RestartWithAuth(), this is the request we should | 1623 // After calling trans->RestartWithAuth(), this is the request we should |
1672 // be issuing -- the final header line contains the credentials. | 1624 // be issuing -- the final header line contains the credentials. |
1673 MockWrite("GET / HTTP/1.1\r\n" | 1625 MockWrite("GET / HTTP/1.1\r\n" |
(...skipping 24 matching lines...) Expand all Loading... |
1698 | 1650 |
1699 // An incorrect reconnect would cause this to be read. | 1651 // An incorrect reconnect would cause this to be read. |
1700 MockRead data_reads2[] = { | 1652 MockRead data_reads2[] = { |
1701 MockRead(SYNCHRONOUS, ERR_FAILED), | 1653 MockRead(SYNCHRONOUS, ERR_FAILED), |
1702 }; | 1654 }; |
1703 | 1655 |
1704 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 1656 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
1705 data_writes1, arraysize(data_writes1)); | 1657 data_writes1, arraysize(data_writes1)); |
1706 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 1658 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
1707 NULL, 0); | 1659 NULL, 0); |
1708 session_deps.socket_factory.AddSocketDataProvider(&data1); | 1660 session_deps.socket_factory->AddSocketDataProvider(&data1); |
1709 session_deps.socket_factory.AddSocketDataProvider(&data2); | 1661 session_deps.socket_factory->AddSocketDataProvider(&data2); |
1710 | 1662 |
1711 TestCompletionCallback callback1; | 1663 TestCompletionCallback callback1; |
1712 | 1664 |
1713 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 1665 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
1714 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 1666 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
1715 EXPECT_EQ(ERR_IO_PENDING, rv); | 1667 EXPECT_EQ(ERR_IO_PENDING, rv); |
1716 | 1668 |
1717 rv = callback1.WaitForResult(); | 1669 rv = callback1.WaitForResult(); |
1718 EXPECT_EQ(OK, rv); | 1670 EXPECT_EQ(OK, rv); |
1719 | 1671 |
(...skipping 17 matching lines...) Expand all Loading... |
1737 } | 1689 } |
1738 | 1690 |
1739 // Test the request-challenge-retry sequence for basic auth, over a keep-alive | 1691 // Test the request-challenge-retry sequence for basic auth, over a keep-alive |
1740 // connection, but the server gets impatient and closes the connection. | 1692 // connection, but the server gets impatient and closes the connection. |
1741 TEST_F(HttpNetworkTransactionSpdy3Test, BasicAuthKeepAliveImpatientServer) { | 1693 TEST_F(HttpNetworkTransactionSpdy3Test, BasicAuthKeepAliveImpatientServer) { |
1742 HttpRequestInfo request; | 1694 HttpRequestInfo request; |
1743 request.method = "GET"; | 1695 request.method = "GET"; |
1744 request.url = GURL("http://www.google.com/"); | 1696 request.url = GURL("http://www.google.com/"); |
1745 request.load_flags = 0; | 1697 request.load_flags = 0; |
1746 | 1698 |
1747 SessionDependencies session_deps; | 1699 SpdySessionDependencies session_deps; |
1748 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 1700 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
1749 | 1701 |
1750 MockWrite data_writes1[] = { | 1702 MockWrite data_writes1[] = { |
1751 MockWrite("GET / HTTP/1.1\r\n" | 1703 MockWrite("GET / HTTP/1.1\r\n" |
1752 "Host: www.google.com\r\n" | 1704 "Host: www.google.com\r\n" |
1753 "Connection: keep-alive\r\n\r\n"), | 1705 "Connection: keep-alive\r\n\r\n"), |
1754 // This simulates the seemingly successful write to a closed connection | 1706 // This simulates the seemingly successful write to a closed connection |
1755 // if the bug is not fixed. | 1707 // if the bug is not fixed. |
1756 MockWrite("GET / HTTP/1.1\r\n" | 1708 MockWrite("GET / HTTP/1.1\r\n" |
1757 "Host: www.google.com\r\n" | 1709 "Host: www.google.com\r\n" |
(...skipping 26 matching lines...) Expand all Loading... |
1784 MockRead("HTTP/1.1 200 OK\r\n"), | 1736 MockRead("HTTP/1.1 200 OK\r\n"), |
1785 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 1737 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
1786 MockRead("Content-Length: 5\r\n\r\n"), | 1738 MockRead("Content-Length: 5\r\n\r\n"), |
1787 MockRead("hello"), | 1739 MockRead("hello"), |
1788 }; | 1740 }; |
1789 | 1741 |
1790 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 1742 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
1791 data_writes1, arraysize(data_writes1)); | 1743 data_writes1, arraysize(data_writes1)); |
1792 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 1744 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
1793 data_writes2, arraysize(data_writes2)); | 1745 data_writes2, arraysize(data_writes2)); |
1794 session_deps.socket_factory.AddSocketDataProvider(&data1); | 1746 session_deps.socket_factory->AddSocketDataProvider(&data1); |
1795 session_deps.socket_factory.AddSocketDataProvider(&data2); | 1747 session_deps.socket_factory->AddSocketDataProvider(&data2); |
1796 | 1748 |
1797 TestCompletionCallback callback1; | 1749 TestCompletionCallback callback1; |
1798 | 1750 |
1799 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 1751 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
1800 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 1752 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
1801 EXPECT_EQ(ERR_IO_PENDING, rv); | 1753 EXPECT_EQ(ERR_IO_PENDING, rv); |
1802 | 1754 |
1803 rv = callback1.WaitForResult(); | 1755 rv = callback1.WaitForResult(); |
1804 EXPECT_EQ(OK, rv); | 1756 EXPECT_EQ(OK, rv); |
1805 | 1757 |
(...skipping 19 matching lines...) Expand all Loading... |
1825 // Test the request-challenge-retry sequence for basic auth, over a connection | 1777 // Test the request-challenge-retry sequence for basic auth, over a connection |
1826 // that requires a restart when setting up an SSL tunnel. | 1778 // that requires a restart when setting up an SSL tunnel. |
1827 TEST_F(HttpNetworkTransactionSpdy3Test, BasicAuthProxyNoKeepAlive) { | 1779 TEST_F(HttpNetworkTransactionSpdy3Test, BasicAuthProxyNoKeepAlive) { |
1828 HttpRequestInfo request; | 1780 HttpRequestInfo request; |
1829 request.method = "GET"; | 1781 request.method = "GET"; |
1830 request.url = GURL("https://www.google.com/"); | 1782 request.url = GURL("https://www.google.com/"); |
1831 // when the no authentication data flag is set. | 1783 // when the no authentication data flag is set. |
1832 request.load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA; | 1784 request.load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA; |
1833 | 1785 |
1834 // Configure against proxy server "myproxy:70". | 1786 // Configure against proxy server "myproxy:70". |
1835 SessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); | 1787 SpdySessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); |
1836 CapturingBoundNetLog log; | 1788 CapturingBoundNetLog log; |
1837 session_deps.net_log = log.bound().net_log(); | 1789 session_deps.net_log = log.bound().net_log(); |
1838 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 1790 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
1839 | 1791 |
1840 // Since we have proxy, should try to establish tunnel. | 1792 // Since we have proxy, should try to establish tunnel. |
1841 MockWrite data_writes1[] = { | 1793 MockWrite data_writes1[] = { |
1842 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 1794 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" |
1843 "Host: www.google.com\r\n" | 1795 "Host: www.google.com\r\n" |
1844 "Proxy-Connection: keep-alive\r\n\r\n"), | 1796 "Proxy-Connection: keep-alive\r\n\r\n"), |
1845 | 1797 |
(...skipping 20 matching lines...) Expand all Loading... |
1866 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), | 1818 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), |
1867 | 1819 |
1868 MockRead("HTTP/1.1 200 OK\r\n"), | 1820 MockRead("HTTP/1.1 200 OK\r\n"), |
1869 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 1821 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
1870 MockRead("Content-Length: 5\r\n\r\n"), | 1822 MockRead("Content-Length: 5\r\n\r\n"), |
1871 MockRead(SYNCHRONOUS, "hello"), | 1823 MockRead(SYNCHRONOUS, "hello"), |
1872 }; | 1824 }; |
1873 | 1825 |
1874 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 1826 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
1875 data_writes1, arraysize(data_writes1)); | 1827 data_writes1, arraysize(data_writes1)); |
1876 session_deps.socket_factory.AddSocketDataProvider(&data1); | 1828 session_deps.socket_factory->AddSocketDataProvider(&data1); |
1877 SSLSocketDataProvider ssl(ASYNC, OK); | 1829 SSLSocketDataProvider ssl(ASYNC, OK); |
1878 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 1830 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
1879 | 1831 |
1880 TestCompletionCallback callback1; | 1832 TestCompletionCallback callback1; |
1881 | 1833 |
1882 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 1834 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
1883 | 1835 |
1884 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 1836 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
1885 EXPECT_EQ(ERR_IO_PENDING, rv); | 1837 EXPECT_EQ(ERR_IO_PENDING, rv); |
1886 | 1838 |
1887 rv = callback1.WaitForResult(); | 1839 rv = callback1.WaitForResult(); |
1888 EXPECT_EQ(OK, rv); | 1840 EXPECT_EQ(OK, rv); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1931 // proxy connection, when setting up an SSL tunnel. | 1883 // proxy connection, when setting up an SSL tunnel. |
1932 TEST_F(HttpNetworkTransactionSpdy3Test, BasicAuthProxyKeepAlive) { | 1884 TEST_F(HttpNetworkTransactionSpdy3Test, BasicAuthProxyKeepAlive) { |
1933 HttpRequestInfo request; | 1885 HttpRequestInfo request; |
1934 request.method = "GET"; | 1886 request.method = "GET"; |
1935 request.url = GURL("https://www.google.com/"); | 1887 request.url = GURL("https://www.google.com/"); |
1936 // Ensure that proxy authentication is attempted even | 1888 // Ensure that proxy authentication is attempted even |
1937 // when the no authentication data flag is set. | 1889 // when the no authentication data flag is set. |
1938 request.load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA; | 1890 request.load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA; |
1939 | 1891 |
1940 // Configure against proxy server "myproxy:70". | 1892 // Configure against proxy server "myproxy:70". |
1941 SessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); | 1893 SpdySessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); |
1942 CapturingBoundNetLog log; | 1894 CapturingBoundNetLog log; |
1943 session_deps.net_log = log.bound().net_log(); | 1895 session_deps.net_log = log.bound().net_log(); |
1944 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 1896 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
1945 | 1897 |
1946 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 1898 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
1947 | 1899 |
1948 // Since we have proxy, should try to establish tunnel. | 1900 // Since we have proxy, should try to establish tunnel. |
1949 MockWrite data_writes1[] = { | 1901 MockWrite data_writes1[] = { |
1950 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 1902 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" |
1951 "Host: www.google.com\r\n" | 1903 "Host: www.google.com\r\n" |
(...skipping 19 matching lines...) Expand all Loading... |
1971 // Wrong credentials (wrong password). | 1923 // Wrong credentials (wrong password). |
1972 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), | 1924 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), |
1973 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 1925 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
1974 MockRead("Content-Length: 10\r\n\r\n"), | 1926 MockRead("Content-Length: 10\r\n\r\n"), |
1975 // No response body because the test stops reading here. | 1927 // No response body because the test stops reading here. |
1976 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. | 1928 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. |
1977 }; | 1929 }; |
1978 | 1930 |
1979 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 1931 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
1980 data_writes1, arraysize(data_writes1)); | 1932 data_writes1, arraysize(data_writes1)); |
1981 session_deps.socket_factory.AddSocketDataProvider(&data1); | 1933 session_deps.socket_factory->AddSocketDataProvider(&data1); |
1982 | 1934 |
1983 TestCompletionCallback callback1; | 1935 TestCompletionCallback callback1; |
1984 | 1936 |
1985 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 1937 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
1986 EXPECT_EQ(ERR_IO_PENDING, rv); | 1938 EXPECT_EQ(ERR_IO_PENDING, rv); |
1987 | 1939 |
1988 rv = callback1.WaitForResult(); | 1940 rv = callback1.WaitForResult(); |
1989 EXPECT_EQ(OK, rv); | 1941 EXPECT_EQ(OK, rv); |
1990 CapturingNetLog::CapturedEntryList entries; | 1942 CapturingNetLog::CapturedEntryList entries; |
1991 log.GetEntries(&entries); | 1943 log.GetEntries(&entries); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2032 | 1984 |
2033 // Test that we don't read the response body when we fail to establish a tunnel, | 1985 // Test that we don't read the response body when we fail to establish a tunnel, |
2034 // even if the user cancels the proxy's auth attempt. | 1986 // even if the user cancels the proxy's auth attempt. |
2035 TEST_F(HttpNetworkTransactionSpdy3Test, BasicAuthProxyCancelTunnel) { | 1987 TEST_F(HttpNetworkTransactionSpdy3Test, BasicAuthProxyCancelTunnel) { |
2036 HttpRequestInfo request; | 1988 HttpRequestInfo request; |
2037 request.method = "GET"; | 1989 request.method = "GET"; |
2038 request.url = GURL("https://www.google.com/"); | 1990 request.url = GURL("https://www.google.com/"); |
2039 request.load_flags = 0; | 1991 request.load_flags = 0; |
2040 | 1992 |
2041 // Configure against proxy server "myproxy:70". | 1993 // Configure against proxy server "myproxy:70". |
2042 SessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); | 1994 SpdySessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); |
2043 | 1995 |
2044 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 1996 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
2045 | 1997 |
2046 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 1998 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
2047 | 1999 |
2048 // Since we have proxy, should try to establish tunnel. | 2000 // Since we have proxy, should try to establish tunnel. |
2049 MockWrite data_writes[] = { | 2001 MockWrite data_writes[] = { |
2050 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 2002 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" |
2051 "Host: www.google.com\r\n" | 2003 "Host: www.google.com\r\n" |
2052 "Proxy-Connection: keep-alive\r\n\r\n"), | 2004 "Proxy-Connection: keep-alive\r\n\r\n"), |
2053 }; | 2005 }; |
2054 | 2006 |
2055 // The proxy responds to the connect with a 407. | 2007 // The proxy responds to the connect with a 407. |
2056 MockRead data_reads[] = { | 2008 MockRead data_reads[] = { |
2057 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), | 2009 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), |
2058 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 2010 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
2059 MockRead("Content-Length: 10\r\n\r\n"), | 2011 MockRead("Content-Length: 10\r\n\r\n"), |
2060 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. | 2012 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. |
2061 }; | 2013 }; |
2062 | 2014 |
2063 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 2015 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
2064 data_writes, arraysize(data_writes)); | 2016 data_writes, arraysize(data_writes)); |
2065 session_deps.socket_factory.AddSocketDataProvider(&data); | 2017 session_deps.socket_factory->AddSocketDataProvider(&data); |
2066 | 2018 |
2067 TestCompletionCallback callback; | 2019 TestCompletionCallback callback; |
2068 | 2020 |
2069 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 2021 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
2070 EXPECT_EQ(ERR_IO_PENDING, rv); | 2022 EXPECT_EQ(ERR_IO_PENDING, rv); |
2071 | 2023 |
2072 rv = callback.WaitForResult(); | 2024 rv = callback.WaitForResult(); |
2073 EXPECT_EQ(OK, rv); | 2025 EXPECT_EQ(OK, rv); |
2074 | 2026 |
2075 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2027 const HttpResponseInfo* response = trans->GetResponseInfo(); |
(...skipping 14 matching lines...) Expand all Loading... |
2090 | 2042 |
2091 // Test when a server (non-proxy) returns a 407 (proxy-authenticate). | 2043 // Test when a server (non-proxy) returns a 407 (proxy-authenticate). |
2092 // The request should fail with ERR_UNEXPECTED_PROXY_AUTH. | 2044 // The request should fail with ERR_UNEXPECTED_PROXY_AUTH. |
2093 TEST_F(HttpNetworkTransactionSpdy3Test, UnexpectedProxyAuth) { | 2045 TEST_F(HttpNetworkTransactionSpdy3Test, UnexpectedProxyAuth) { |
2094 HttpRequestInfo request; | 2046 HttpRequestInfo request; |
2095 request.method = "GET"; | 2047 request.method = "GET"; |
2096 request.url = GURL("http://www.google.com/"); | 2048 request.url = GURL("http://www.google.com/"); |
2097 request.load_flags = 0; | 2049 request.load_flags = 0; |
2098 | 2050 |
2099 // We are using a DIRECT connection (i.e. no proxy) for this session. | 2051 // We are using a DIRECT connection (i.e. no proxy) for this session. |
2100 SessionDependencies session_deps; | 2052 SpdySessionDependencies session_deps; |
2101 scoped_ptr<HttpTransaction> trans( | 2053 scoped_ptr<HttpTransaction> trans( |
2102 new HttpNetworkTransaction(CreateSession(&session_deps))); | 2054 new HttpNetworkTransaction(CreateSession(&session_deps))); |
2103 | 2055 |
2104 MockWrite data_writes1[] = { | 2056 MockWrite data_writes1[] = { |
2105 MockWrite("GET / HTTP/1.1\r\n" | 2057 MockWrite("GET / HTTP/1.1\r\n" |
2106 "Host: www.google.com\r\n" | 2058 "Host: www.google.com\r\n" |
2107 "Connection: keep-alive\r\n\r\n"), | 2059 "Connection: keep-alive\r\n\r\n"), |
2108 }; | 2060 }; |
2109 | 2061 |
2110 MockRead data_reads1[] = { | 2062 MockRead data_reads1[] = { |
2111 MockRead("HTTP/1.0 407 Proxy Auth required\r\n"), | 2063 MockRead("HTTP/1.0 407 Proxy Auth required\r\n"), |
2112 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 2064 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
2113 // Large content-length -- won't matter, as connection will be reset. | 2065 // Large content-length -- won't matter, as connection will be reset. |
2114 MockRead("Content-Length: 10000\r\n\r\n"), | 2066 MockRead("Content-Length: 10000\r\n\r\n"), |
2115 MockRead(SYNCHRONOUS, ERR_FAILED), | 2067 MockRead(SYNCHRONOUS, ERR_FAILED), |
2116 }; | 2068 }; |
2117 | 2069 |
2118 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 2070 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
2119 data_writes1, arraysize(data_writes1)); | 2071 data_writes1, arraysize(data_writes1)); |
2120 session_deps.socket_factory.AddSocketDataProvider(&data1); | 2072 session_deps.socket_factory->AddSocketDataProvider(&data1); |
2121 | 2073 |
2122 TestCompletionCallback callback; | 2074 TestCompletionCallback callback; |
2123 | 2075 |
2124 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 2076 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
2125 EXPECT_EQ(ERR_IO_PENDING, rv); | 2077 EXPECT_EQ(ERR_IO_PENDING, rv); |
2126 | 2078 |
2127 rv = callback.WaitForResult(); | 2079 rv = callback.WaitForResult(); |
2128 EXPECT_EQ(ERR_UNEXPECTED_PROXY_AUTH, rv); | 2080 EXPECT_EQ(ERR_UNEXPECTED_PROXY_AUTH, rv); |
2129 } | 2081 } |
2130 | 2082 |
2131 // Tests when an HTTPS server (non-proxy) returns a 407 (proxy-authentication) | 2083 // Tests when an HTTPS server (non-proxy) returns a 407 (proxy-authentication) |
2132 // through a non-authenticating proxy. The request should fail with | 2084 // through a non-authenticating proxy. The request should fail with |
2133 // ERR_UNEXPECTED_PROXY_AUTH. | 2085 // ERR_UNEXPECTED_PROXY_AUTH. |
2134 // Note that it is impossible to detect if an HTTP server returns a 407 through | 2086 // Note that it is impossible to detect if an HTTP server returns a 407 through |
2135 // a non-authenticating proxy - there is nothing to indicate whether the | 2087 // a non-authenticating proxy - there is nothing to indicate whether the |
2136 // response came from the proxy or the server, so it is treated as if the proxy | 2088 // response came from the proxy or the server, so it is treated as if the proxy |
2137 // issued the challenge. | 2089 // issued the challenge. |
2138 TEST_F(HttpNetworkTransactionSpdy3Test, | 2090 TEST_F(HttpNetworkTransactionSpdy3Test, |
2139 HttpsServerRequestsProxyAuthThroughProxy) { | 2091 HttpsServerRequestsProxyAuthThroughProxy) { |
2140 HttpRequestInfo request; | 2092 HttpRequestInfo request; |
2141 request.method = "GET"; | 2093 request.method = "GET"; |
2142 request.url = GURL("https://www.google.com/"); | 2094 request.url = GURL("https://www.google.com/"); |
2143 | 2095 |
2144 SessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); | 2096 SpdySessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); |
2145 CapturingBoundNetLog log; | 2097 CapturingBoundNetLog log; |
2146 session_deps.net_log = log.bound().net_log(); | 2098 session_deps.net_log = log.bound().net_log(); |
2147 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 2099 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
2148 | 2100 |
2149 // Since we have proxy, should try to establish tunnel. | 2101 // Since we have proxy, should try to establish tunnel. |
2150 MockWrite data_writes1[] = { | 2102 MockWrite data_writes1[] = { |
2151 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 2103 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" |
2152 "Host: www.google.com\r\n" | 2104 "Host: www.google.com\r\n" |
2153 "Proxy-Connection: keep-alive\r\n\r\n"), | 2105 "Proxy-Connection: keep-alive\r\n\r\n"), |
2154 | 2106 |
2155 MockWrite("GET / HTTP/1.1\r\n" | 2107 MockWrite("GET / HTTP/1.1\r\n" |
2156 "Host: www.google.com\r\n" | 2108 "Host: www.google.com\r\n" |
2157 "Connection: keep-alive\r\n\r\n"), | 2109 "Connection: keep-alive\r\n\r\n"), |
2158 }; | 2110 }; |
2159 | 2111 |
2160 MockRead data_reads1[] = { | 2112 MockRead data_reads1[] = { |
2161 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), | 2113 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), |
2162 | 2114 |
2163 MockRead("HTTP/1.1 407 Unauthorized\r\n"), | 2115 MockRead("HTTP/1.1 407 Unauthorized\r\n"), |
2164 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 2116 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
2165 MockRead("\r\n"), | 2117 MockRead("\r\n"), |
2166 MockRead(SYNCHRONOUS, OK), | 2118 MockRead(SYNCHRONOUS, OK), |
2167 }; | 2119 }; |
2168 | 2120 |
2169 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 2121 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
2170 data_writes1, arraysize(data_writes1)); | 2122 data_writes1, arraysize(data_writes1)); |
2171 session_deps.socket_factory.AddSocketDataProvider(&data1); | 2123 session_deps.socket_factory->AddSocketDataProvider(&data1); |
2172 SSLSocketDataProvider ssl(ASYNC, OK); | 2124 SSLSocketDataProvider ssl(ASYNC, OK); |
2173 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 2125 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
2174 | 2126 |
2175 TestCompletionCallback callback1; | 2127 TestCompletionCallback callback1; |
2176 | 2128 |
2177 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 2129 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
2178 | 2130 |
2179 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 2131 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
2180 EXPECT_EQ(ERR_IO_PENDING, rv); | 2132 EXPECT_EQ(ERR_IO_PENDING, rv); |
2181 | 2133 |
2182 rv = callback1.WaitForResult(); | 2134 rv = callback1.WaitForResult(); |
2183 EXPECT_EQ(ERR_UNEXPECTED_PROXY_AUTH, rv); | 2135 EXPECT_EQ(ERR_UNEXPECTED_PROXY_AUTH, rv); |
2184 CapturingNetLog::CapturedEntryList entries; | 2136 CapturingNetLog::CapturedEntryList entries; |
2185 log.GetEntries(&entries); | 2137 log.GetEntries(&entries); |
2186 size_t pos = ExpectLogContainsSomewhere( | 2138 size_t pos = ExpectLogContainsSomewhere( |
2187 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 2139 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
2188 NetLog::PHASE_NONE); | 2140 NetLog::PHASE_NONE); |
2189 ExpectLogContainsSomewhere( | 2141 ExpectLogContainsSomewhere( |
2190 entries, pos, | 2142 entries, pos, |
2191 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 2143 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
2192 NetLog::PHASE_NONE); | 2144 NetLog::PHASE_NONE); |
2193 } | 2145 } |
2194 | 2146 |
2195 // Test a simple get through an HTTPS Proxy. | 2147 // Test a simple get through an HTTPS Proxy. |
2196 TEST_F(HttpNetworkTransactionSpdy3Test, HttpsProxyGet) { | 2148 TEST_F(HttpNetworkTransactionSpdy3Test, HttpsProxyGet) { |
2197 HttpRequestInfo request; | 2149 HttpRequestInfo request; |
2198 request.method = "GET"; | 2150 request.method = "GET"; |
2199 request.url = GURL("http://www.google.com/"); | 2151 request.url = GURL("http://www.google.com/"); |
2200 | 2152 |
2201 // Configure against https proxy server "proxy:70". | 2153 // Configure against https proxy server "proxy:70". |
2202 SessionDependencies session_deps(ProxyService::CreateFixed( | 2154 SpdySessionDependencies session_deps(ProxyService::CreateFixed( |
2203 "https://proxy:70")); | 2155 "https://proxy:70")); |
2204 CapturingBoundNetLog log; | 2156 CapturingBoundNetLog log; |
2205 session_deps.net_log = log.bound().net_log(); | 2157 session_deps.net_log = log.bound().net_log(); |
2206 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 2158 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
2207 | 2159 |
2208 // Since we have proxy, should use full url | 2160 // Since we have proxy, should use full url |
2209 MockWrite data_writes1[] = { | 2161 MockWrite data_writes1[] = { |
2210 MockWrite("GET http://www.google.com/ HTTP/1.1\r\n" | 2162 MockWrite("GET http://www.google.com/ HTTP/1.1\r\n" |
2211 "Host: www.google.com\r\n" | 2163 "Host: www.google.com\r\n" |
2212 "Proxy-Connection: keep-alive\r\n\r\n"), | 2164 "Proxy-Connection: keep-alive\r\n\r\n"), |
2213 }; | 2165 }; |
2214 | 2166 |
2215 MockRead data_reads1[] = { | 2167 MockRead data_reads1[] = { |
2216 MockRead("HTTP/1.1 200 OK\r\n"), | 2168 MockRead("HTTP/1.1 200 OK\r\n"), |
2217 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 2169 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
2218 MockRead("Content-Length: 100\r\n\r\n"), | 2170 MockRead("Content-Length: 100\r\n\r\n"), |
2219 MockRead(SYNCHRONOUS, OK), | 2171 MockRead(SYNCHRONOUS, OK), |
2220 }; | 2172 }; |
2221 | 2173 |
2222 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 2174 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
2223 data_writes1, arraysize(data_writes1)); | 2175 data_writes1, arraysize(data_writes1)); |
2224 session_deps.socket_factory.AddSocketDataProvider(&data1); | 2176 session_deps.socket_factory->AddSocketDataProvider(&data1); |
2225 SSLSocketDataProvider ssl(ASYNC, OK); | 2177 SSLSocketDataProvider ssl(ASYNC, OK); |
2226 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 2178 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
2227 | 2179 |
2228 TestCompletionCallback callback1; | 2180 TestCompletionCallback callback1; |
2229 | 2181 |
2230 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 2182 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
2231 | 2183 |
2232 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 2184 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
2233 EXPECT_EQ(ERR_IO_PENDING, rv); | 2185 EXPECT_EQ(ERR_IO_PENDING, rv); |
2234 | 2186 |
2235 rv = callback1.WaitForResult(); | 2187 rv = callback1.WaitForResult(); |
2236 EXPECT_EQ(OK, rv); | 2188 EXPECT_EQ(OK, rv); |
(...skipping 11 matching lines...) Expand all Loading... |
2248 } | 2200 } |
2249 | 2201 |
2250 // Test a SPDY get through an HTTPS Proxy. | 2202 // Test a SPDY get through an HTTPS Proxy. |
2251 TEST_F(HttpNetworkTransactionSpdy3Test, HttpsProxySpdyGet) { | 2203 TEST_F(HttpNetworkTransactionSpdy3Test, HttpsProxySpdyGet) { |
2252 HttpRequestInfo request; | 2204 HttpRequestInfo request; |
2253 request.method = "GET"; | 2205 request.method = "GET"; |
2254 request.url = GURL("http://www.google.com/"); | 2206 request.url = GURL("http://www.google.com/"); |
2255 request.load_flags = 0; | 2207 request.load_flags = 0; |
2256 | 2208 |
2257 // Configure against https proxy server "proxy:70". | 2209 // Configure against https proxy server "proxy:70". |
2258 SessionDependencies session_deps(ProxyService::CreateFixed( | 2210 SpdySessionDependencies session_deps(ProxyService::CreateFixed( |
2259 "https://proxy:70")); | 2211 "https://proxy:70")); |
2260 CapturingBoundNetLog log; | 2212 CapturingBoundNetLog log; |
2261 session_deps.net_log = log.bound().net_log(); | 2213 session_deps.net_log = log.bound().net_log(); |
2262 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 2214 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
2263 | 2215 |
2264 // fetch http://www.google.com/ via SPDY | 2216 // fetch http://www.google.com/ via SPDY |
2265 scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST, | 2217 scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST, |
2266 false)); | 2218 false)); |
2267 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; | 2219 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; |
2268 | 2220 |
2269 scoped_ptr<SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); | 2221 scoped_ptr<SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); |
2270 scoped_ptr<SpdyFrame> data(ConstructSpdyBodyFrame(1, true)); | 2222 scoped_ptr<SpdyFrame> data(ConstructSpdyBodyFrame(1, true)); |
2271 MockRead spdy_reads[] = { | 2223 MockRead spdy_reads[] = { |
2272 CreateMockRead(*resp), | 2224 CreateMockRead(*resp), |
2273 CreateMockRead(*data), | 2225 CreateMockRead(*data), |
2274 MockRead(ASYNC, 0, 0), | 2226 MockRead(ASYNC, 0, 0), |
2275 }; | 2227 }; |
2276 | 2228 |
2277 DelayedSocketData spdy_data( | 2229 DelayedSocketData spdy_data( |
2278 1, // wait for one write to finish before reading. | 2230 1, // wait for one write to finish before reading. |
2279 spdy_reads, arraysize(spdy_reads), | 2231 spdy_reads, arraysize(spdy_reads), |
2280 spdy_writes, arraysize(spdy_writes)); | 2232 spdy_writes, arraysize(spdy_writes)); |
2281 session_deps.socket_factory.AddSocketDataProvider(&spdy_data); | 2233 session_deps.socket_factory->AddSocketDataProvider(&spdy_data); |
2282 | 2234 |
2283 SSLSocketDataProvider ssl(ASYNC, OK); | 2235 SSLSocketDataProvider ssl(ASYNC, OK); |
2284 ssl.SetNextProto(kProtoSPDY3); | 2236 ssl.SetNextProto(kProtoSPDY3); |
2285 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 2237 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
2286 | 2238 |
2287 TestCompletionCallback callback1; | 2239 TestCompletionCallback callback1; |
2288 | 2240 |
2289 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 2241 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
2290 | 2242 |
2291 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 2243 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
2292 EXPECT_EQ(ERR_IO_PENDING, rv); | 2244 EXPECT_EQ(ERR_IO_PENDING, rv); |
2293 | 2245 |
2294 rv = callback1.WaitForResult(); | 2246 rv = callback1.WaitForResult(); |
2295 EXPECT_EQ(OK, rv); | 2247 EXPECT_EQ(OK, rv); |
2296 | 2248 |
2297 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2249 const HttpResponseInfo* response = trans->GetResponseInfo(); |
2298 ASSERT_TRUE(response != NULL); | 2250 ASSERT_TRUE(response != NULL); |
2299 ASSERT_TRUE(response->headers != NULL); | 2251 ASSERT_TRUE(response->headers != NULL); |
2300 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 2252 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
2301 | 2253 |
2302 std::string response_data; | 2254 std::string response_data; |
2303 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 2255 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
2304 EXPECT_EQ(kUploadData, response_data); | 2256 EXPECT_EQ(kUploadData, response_data); |
2305 } | 2257 } |
2306 | 2258 |
2307 // Test a SPDY get through an HTTPS Proxy. | 2259 // Test a SPDY get through an HTTPS Proxy. |
2308 TEST_F(HttpNetworkTransactionSpdy3Test, HttpsProxySpdyGetWithProxyAuth) { | 2260 TEST_F(HttpNetworkTransactionSpdy3Test, HttpsProxySpdyGetWithProxyAuth) { |
2309 HttpRequestInfo request; | 2261 HttpRequestInfo request; |
2310 request.method = "GET"; | 2262 request.method = "GET"; |
2311 request.url = GURL("http://www.google.com/"); | 2263 request.url = GURL("http://www.google.com/"); |
2312 request.load_flags = 0; | 2264 request.load_flags = 0; |
2313 | 2265 |
2314 // Configure against https proxy server "myproxy:70". | 2266 // Configure against https proxy server "myproxy:70". |
2315 SessionDependencies session_deps( | 2267 SpdySessionDependencies session_deps( |
2316 ProxyService::CreateFixed("https://myproxy:70")); | 2268 ProxyService::CreateFixed("https://myproxy:70")); |
2317 CapturingBoundNetLog log; | 2269 CapturingBoundNetLog log; |
2318 session_deps.net_log = log.bound().net_log(); | 2270 session_deps.net_log = log.bound().net_log(); |
2319 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 2271 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
2320 | 2272 |
2321 // The first request will be a bare GET, the second request will be a | 2273 // The first request will be a bare GET, the second request will be a |
2322 // GET with a Proxy-Authorization header. | 2274 // GET with a Proxy-Authorization header. |
2323 scoped_ptr<SpdyFrame> req_get( | 2275 scoped_ptr<SpdyFrame> req_get( |
2324 ConstructSpdyGet(NULL, 0, false, 1, LOWEST, false)); | 2276 ConstructSpdyGet(NULL, 0, false, 1, LOWEST, false)); |
2325 const char* const kExtraAuthorizationHeaders[] = { | 2277 const char* const kExtraAuthorizationHeaders[] = { |
(...skipping 29 matching lines...) Expand all Loading... |
2355 CreateMockRead(*resp_authentication, 2), | 2307 CreateMockRead(*resp_authentication, 2), |
2356 CreateMockRead(*body_authentication, 3), | 2308 CreateMockRead(*body_authentication, 3), |
2357 CreateMockRead(*resp_data, 5), | 2309 CreateMockRead(*resp_data, 5), |
2358 CreateMockRead(*body_data, 6), | 2310 CreateMockRead(*body_data, 6), |
2359 MockRead(ASYNC, 0, 7), | 2311 MockRead(ASYNC, 0, 7), |
2360 }; | 2312 }; |
2361 | 2313 |
2362 OrderedSocketData data( | 2314 OrderedSocketData data( |
2363 spdy_reads, arraysize(spdy_reads), | 2315 spdy_reads, arraysize(spdy_reads), |
2364 spdy_writes, arraysize(spdy_writes)); | 2316 spdy_writes, arraysize(spdy_writes)); |
2365 session_deps.socket_factory.AddSocketDataProvider(&data); | 2317 session_deps.socket_factory->AddSocketDataProvider(&data); |
2366 | 2318 |
2367 SSLSocketDataProvider ssl(ASYNC, OK); | 2319 SSLSocketDataProvider ssl(ASYNC, OK); |
2368 ssl.SetNextProto(kProtoSPDY3); | 2320 ssl.SetNextProto(kProtoSPDY3); |
2369 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 2321 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
2370 | 2322 |
2371 TestCompletionCallback callback1; | 2323 TestCompletionCallback callback1; |
2372 | 2324 |
2373 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 2325 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
2374 | 2326 |
2375 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 2327 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
2376 EXPECT_EQ(ERR_IO_PENDING, rv); | 2328 EXPECT_EQ(ERR_IO_PENDING, rv); |
2377 | 2329 |
2378 rv = callback1.WaitForResult(); | 2330 rv = callback1.WaitForResult(); |
2379 EXPECT_EQ(OK, rv); | 2331 EXPECT_EQ(OK, rv); |
(...skipping 25 matching lines...) Expand all Loading... |
2405 } | 2357 } |
2406 | 2358 |
2407 // Test a SPDY CONNECT through an HTTPS Proxy to an HTTPS (non-SPDY) Server. | 2359 // Test a SPDY CONNECT through an HTTPS Proxy to an HTTPS (non-SPDY) Server. |
2408 TEST_F(HttpNetworkTransactionSpdy3Test, HttpsProxySpdyConnectHttps) { | 2360 TEST_F(HttpNetworkTransactionSpdy3Test, HttpsProxySpdyConnectHttps) { |
2409 HttpRequestInfo request; | 2361 HttpRequestInfo request; |
2410 request.method = "GET"; | 2362 request.method = "GET"; |
2411 request.url = GURL("https://www.google.com/"); | 2363 request.url = GURL("https://www.google.com/"); |
2412 request.load_flags = 0; | 2364 request.load_flags = 0; |
2413 | 2365 |
2414 // Configure against https proxy server "proxy:70". | 2366 // Configure against https proxy server "proxy:70". |
2415 SessionDependencies session_deps(ProxyService::CreateFixed( | 2367 SpdySessionDependencies session_deps(ProxyService::CreateFixed( |
2416 "https://proxy:70")); | 2368 "https://proxy:70")); |
2417 CapturingBoundNetLog log; | 2369 CapturingBoundNetLog log; |
2418 session_deps.net_log = log.bound().net_log(); | 2370 session_deps.net_log = log.bound().net_log(); |
2419 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 2371 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
2420 | 2372 |
2421 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 2373 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
2422 | 2374 |
2423 // CONNECT to www.google.com:443 via SPDY | 2375 // CONNECT to www.google.com:443 via SPDY |
2424 scoped_ptr<SpdyFrame> connect(ConstructSpdyConnect(NULL, 0, 1)); | 2376 scoped_ptr<SpdyFrame> connect(ConstructSpdyConnect(NULL, 0, 1)); |
2425 // fetch https://www.google.com/ via HTTP | 2377 // fetch https://www.google.com/ via HTTP |
(...skipping 23 matching lines...) Expand all Loading... |
2449 CreateMockRead(*conn_resp, 2, ASYNC), | 2401 CreateMockRead(*conn_resp, 2, ASYNC), |
2450 CreateMockRead(*wrapped_get_resp, 4, ASYNC), | 2402 CreateMockRead(*wrapped_get_resp, 4, ASYNC), |
2451 CreateMockRead(*wrapped_body, 6, ASYNC), | 2403 CreateMockRead(*wrapped_body, 6, ASYNC), |
2452 CreateMockRead(*wrapped_body, 7, ASYNC), | 2404 CreateMockRead(*wrapped_body, 7, ASYNC), |
2453 MockRead(ASYNC, 0, 8), | 2405 MockRead(ASYNC, 0, 8), |
2454 }; | 2406 }; |
2455 | 2407 |
2456 OrderedSocketData spdy_data( | 2408 OrderedSocketData spdy_data( |
2457 spdy_reads, arraysize(spdy_reads), | 2409 spdy_reads, arraysize(spdy_reads), |
2458 spdy_writes, arraysize(spdy_writes)); | 2410 spdy_writes, arraysize(spdy_writes)); |
2459 session_deps.socket_factory.AddSocketDataProvider(&spdy_data); | 2411 session_deps.socket_factory->AddSocketDataProvider(&spdy_data); |
2460 | 2412 |
2461 SSLSocketDataProvider ssl(ASYNC, OK); | 2413 SSLSocketDataProvider ssl(ASYNC, OK); |
2462 ssl.SetNextProto(kProtoSPDY3); | 2414 ssl.SetNextProto(kProtoSPDY3); |
2463 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 2415 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
2464 SSLSocketDataProvider ssl2(ASYNC, OK); | 2416 SSLSocketDataProvider ssl2(ASYNC, OK); |
2465 ssl2.was_npn_negotiated = false; | 2417 ssl2.was_npn_negotiated = false; |
2466 ssl2.protocol_negotiated = kProtoUnknown; | 2418 ssl2.protocol_negotiated = kProtoUnknown; |
2467 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl2); | 2419 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl2); |
2468 | 2420 |
2469 TestCompletionCallback callback1; | 2421 TestCompletionCallback callback1; |
2470 | 2422 |
2471 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 2423 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
2472 EXPECT_EQ(ERR_IO_PENDING, rv); | 2424 EXPECT_EQ(ERR_IO_PENDING, rv); |
2473 | 2425 |
2474 rv = callback1.WaitForResult(); | 2426 rv = callback1.WaitForResult(); |
2475 EXPECT_EQ(OK, rv); | 2427 EXPECT_EQ(OK, rv); |
2476 | 2428 |
2477 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2429 const HttpResponseInfo* response = trans->GetResponseInfo(); |
2478 ASSERT_TRUE(response != NULL); | 2430 ASSERT_TRUE(response != NULL); |
2479 ASSERT_TRUE(response->headers != NULL); | 2431 ASSERT_TRUE(response->headers != NULL); |
2480 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 2432 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
2481 | 2433 |
2482 std::string response_data; | 2434 std::string response_data; |
2483 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 2435 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
2484 EXPECT_EQ("1234567890", response_data); | 2436 EXPECT_EQ("1234567890", response_data); |
2485 } | 2437 } |
2486 | 2438 |
2487 // Test a SPDY CONNECT through an HTTPS Proxy to a SPDY server. | 2439 // Test a SPDY CONNECT through an HTTPS Proxy to a SPDY server. |
2488 TEST_F(HttpNetworkTransactionSpdy3Test, HttpsProxySpdyConnectSpdy) { | 2440 TEST_F(HttpNetworkTransactionSpdy3Test, HttpsProxySpdyConnectSpdy) { |
2489 HttpRequestInfo request; | 2441 HttpRequestInfo request; |
2490 request.method = "GET"; | 2442 request.method = "GET"; |
2491 request.url = GURL("https://www.google.com/"); | 2443 request.url = GURL("https://www.google.com/"); |
2492 request.load_flags = 0; | 2444 request.load_flags = 0; |
2493 | 2445 |
2494 // Configure against https proxy server "proxy:70". | 2446 // Configure against https proxy server "proxy:70". |
2495 SessionDependencies session_deps(ProxyService::CreateFixed( | 2447 SpdySessionDependencies session_deps(ProxyService::CreateFixed( |
2496 "https://proxy:70")); | 2448 "https://proxy:70")); |
2497 CapturingBoundNetLog log; | 2449 CapturingBoundNetLog log; |
2498 session_deps.net_log = log.bound().net_log(); | 2450 session_deps.net_log = log.bound().net_log(); |
2499 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 2451 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
2500 | 2452 |
2501 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 2453 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
2502 | 2454 |
2503 // CONNECT to www.google.com:443 via SPDY | 2455 // CONNECT to www.google.com:443 via SPDY |
2504 scoped_ptr<SpdyFrame> connect(ConstructSpdyConnect(NULL, 0, 1)); | 2456 scoped_ptr<SpdyFrame> connect(ConstructSpdyConnect(NULL, 0, 1)); |
2505 // fetch https://www.google.com/ via SPDY | 2457 // fetch https://www.google.com/ via SPDY |
(...skipping 21 matching lines...) Expand all Loading... |
2527 MockRead spdy_reads[] = { | 2479 MockRead spdy_reads[] = { |
2528 CreateMockRead(*conn_resp, 2, ASYNC), | 2480 CreateMockRead(*conn_resp, 2, ASYNC), |
2529 CreateMockRead(*wrapped_get_resp, 4, ASYNC), | 2481 CreateMockRead(*wrapped_get_resp, 4, ASYNC), |
2530 CreateMockRead(*wrapped_body, 6, ASYNC), | 2482 CreateMockRead(*wrapped_body, 6, ASYNC), |
2531 MockRead(ASYNC, 0, 8), | 2483 MockRead(ASYNC, 0, 8), |
2532 }; | 2484 }; |
2533 | 2485 |
2534 OrderedSocketData spdy_data( | 2486 OrderedSocketData spdy_data( |
2535 spdy_reads, arraysize(spdy_reads), | 2487 spdy_reads, arraysize(spdy_reads), |
2536 spdy_writes, arraysize(spdy_writes)); | 2488 spdy_writes, arraysize(spdy_writes)); |
2537 session_deps.socket_factory.AddSocketDataProvider(&spdy_data); | 2489 session_deps.socket_factory->AddSocketDataProvider(&spdy_data); |
2538 | 2490 |
2539 SSLSocketDataProvider ssl(ASYNC, OK); | 2491 SSLSocketDataProvider ssl(ASYNC, OK); |
2540 ssl.SetNextProto(kProtoSPDY3); | 2492 ssl.SetNextProto(kProtoSPDY3); |
2541 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 2493 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
2542 SSLSocketDataProvider ssl2(ASYNC, OK); | 2494 SSLSocketDataProvider ssl2(ASYNC, OK); |
2543 ssl2.SetNextProto(kProtoSPDY3); | 2495 ssl2.SetNextProto(kProtoSPDY3); |
2544 ssl2.protocol_negotiated = kProtoSPDY3; | 2496 ssl2.protocol_negotiated = kProtoSPDY3; |
2545 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl2); | 2497 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl2); |
2546 | 2498 |
2547 TestCompletionCallback callback1; | 2499 TestCompletionCallback callback1; |
2548 | 2500 |
2549 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 2501 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
2550 EXPECT_EQ(ERR_IO_PENDING, rv); | 2502 EXPECT_EQ(ERR_IO_PENDING, rv); |
2551 | 2503 |
2552 rv = callback1.WaitForResult(); | 2504 rv = callback1.WaitForResult(); |
2553 EXPECT_EQ(OK, rv); | 2505 EXPECT_EQ(OK, rv); |
2554 | 2506 |
2555 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2507 const HttpResponseInfo* response = trans->GetResponseInfo(); |
2556 ASSERT_TRUE(response != NULL); | 2508 ASSERT_TRUE(response != NULL); |
2557 ASSERT_TRUE(response->headers != NULL); | 2509 ASSERT_TRUE(response->headers != NULL); |
2558 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 2510 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
2559 | 2511 |
2560 std::string response_data; | 2512 std::string response_data; |
2561 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 2513 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
2562 EXPECT_EQ(kUploadData, response_data); | 2514 EXPECT_EQ(kUploadData, response_data); |
2563 } | 2515 } |
2564 | 2516 |
2565 // Test a SPDY CONNECT failure through an HTTPS Proxy. | 2517 // Test a SPDY CONNECT failure through an HTTPS Proxy. |
2566 TEST_F(HttpNetworkTransactionSpdy3Test, HttpsProxySpdyConnectFailure) { | 2518 TEST_F(HttpNetworkTransactionSpdy3Test, HttpsProxySpdyConnectFailure) { |
2567 HttpRequestInfo request; | 2519 HttpRequestInfo request; |
2568 request.method = "GET"; | 2520 request.method = "GET"; |
2569 request.url = GURL("https://www.google.com/"); | 2521 request.url = GURL("https://www.google.com/"); |
2570 request.load_flags = 0; | 2522 request.load_flags = 0; |
2571 | 2523 |
2572 // Configure against https proxy server "proxy:70". | 2524 // Configure against https proxy server "proxy:70". |
2573 SessionDependencies session_deps(ProxyService::CreateFixed( | 2525 SpdySessionDependencies session_deps(ProxyService::CreateFixed( |
2574 "https://proxy:70")); | 2526 "https://proxy:70")); |
2575 CapturingBoundNetLog log; | 2527 CapturingBoundNetLog log; |
2576 session_deps.net_log = log.bound().net_log(); | 2528 session_deps.net_log = log.bound().net_log(); |
2577 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 2529 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
2578 | 2530 |
2579 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 2531 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
2580 | 2532 |
2581 // CONNECT to www.google.com:443 via SPDY | 2533 // CONNECT to www.google.com:443 via SPDY |
2582 scoped_ptr<SpdyFrame> connect(ConstructSpdyConnect(NULL, 0, 1)); | 2534 scoped_ptr<SpdyFrame> connect(ConstructSpdyConnect(NULL, 0, 1)); |
2583 scoped_ptr<SpdyFrame> get(ConstructSpdyRstStream(1, CANCEL)); | 2535 scoped_ptr<SpdyFrame> get(ConstructSpdyRstStream(1, CANCEL)); |
2584 | 2536 |
2585 MockWrite spdy_writes[] = { | 2537 MockWrite spdy_writes[] = { |
2586 CreateMockWrite(*connect, 1), | 2538 CreateMockWrite(*connect, 1), |
2587 CreateMockWrite(*get, 3), | 2539 CreateMockWrite(*get, 3), |
2588 }; | 2540 }; |
2589 | 2541 |
2590 scoped_ptr<SpdyFrame> resp(ConstructSpdySynReplyError(1)); | 2542 scoped_ptr<SpdyFrame> resp(ConstructSpdySynReplyError(1)); |
2591 scoped_ptr<SpdyFrame> data(ConstructSpdyBodyFrame(1, true)); | 2543 scoped_ptr<SpdyFrame> data(ConstructSpdyBodyFrame(1, true)); |
2592 MockRead spdy_reads[] = { | 2544 MockRead spdy_reads[] = { |
2593 CreateMockRead(*resp, 2, ASYNC), | 2545 CreateMockRead(*resp, 2, ASYNC), |
2594 MockRead(ASYNC, 0, 4), | 2546 MockRead(ASYNC, 0, 4), |
2595 }; | 2547 }; |
2596 | 2548 |
2597 OrderedSocketData spdy_data( | 2549 OrderedSocketData spdy_data( |
2598 spdy_reads, arraysize(spdy_reads), | 2550 spdy_reads, arraysize(spdy_reads), |
2599 spdy_writes, arraysize(spdy_writes)); | 2551 spdy_writes, arraysize(spdy_writes)); |
2600 session_deps.socket_factory.AddSocketDataProvider(&spdy_data); | 2552 session_deps.socket_factory->AddSocketDataProvider(&spdy_data); |
2601 | 2553 |
2602 SSLSocketDataProvider ssl(ASYNC, OK); | 2554 SSLSocketDataProvider ssl(ASYNC, OK); |
2603 ssl.SetNextProto(kProtoSPDY3); | 2555 ssl.SetNextProto(kProtoSPDY3); |
2604 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 2556 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
2605 SSLSocketDataProvider ssl2(ASYNC, OK); | 2557 SSLSocketDataProvider ssl2(ASYNC, OK); |
2606 ssl2.SetNextProto(kProtoSPDY3); | 2558 ssl2.SetNextProto(kProtoSPDY3); |
2607 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl2); | 2559 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl2); |
2608 | 2560 |
2609 TestCompletionCallback callback1; | 2561 TestCompletionCallback callback1; |
2610 | 2562 |
2611 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 2563 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
2612 EXPECT_EQ(ERR_IO_PENDING, rv); | 2564 EXPECT_EQ(ERR_IO_PENDING, rv); |
2613 | 2565 |
2614 rv = callback1.WaitForResult(); | 2566 rv = callback1.WaitForResult(); |
2615 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 2567 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); |
2616 | 2568 |
2617 // TODO(ttuttle): Anything else to check here? | 2569 // TODO(ttuttle): Anything else to check here? |
2618 } | 2570 } |
2619 | 2571 |
2620 // Test the challenge-response-retry sequence through an HTTPS Proxy | 2572 // Test the challenge-response-retry sequence through an HTTPS Proxy |
2621 TEST_F(HttpNetworkTransactionSpdy3Test, HttpsProxyAuthRetry) { | 2573 TEST_F(HttpNetworkTransactionSpdy3Test, HttpsProxyAuthRetry) { |
2622 HttpRequestInfo request; | 2574 HttpRequestInfo request; |
2623 request.method = "GET"; | 2575 request.method = "GET"; |
2624 request.url = GURL("http://www.google.com/"); | 2576 request.url = GURL("http://www.google.com/"); |
2625 // when the no authentication data flag is set. | 2577 // when the no authentication data flag is set. |
2626 request.load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA; | 2578 request.load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA; |
2627 | 2579 |
2628 // Configure against https proxy server "myproxy:70". | 2580 // Configure against https proxy server "myproxy:70". |
2629 SessionDependencies session_deps( | 2581 SpdySessionDependencies session_deps( |
2630 ProxyService::CreateFixed("https://myproxy:70")); | 2582 ProxyService::CreateFixed("https://myproxy:70")); |
2631 CapturingBoundNetLog log; | 2583 CapturingBoundNetLog log; |
2632 session_deps.net_log = log.bound().net_log(); | 2584 session_deps.net_log = log.bound().net_log(); |
2633 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 2585 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
2634 | 2586 |
2635 // Since we have proxy, should use full url | 2587 // Since we have proxy, should use full url |
2636 MockWrite data_writes1[] = { | 2588 MockWrite data_writes1[] = { |
2637 MockWrite("GET http://www.google.com/ HTTP/1.1\r\n" | 2589 MockWrite("GET http://www.google.com/ HTTP/1.1\r\n" |
2638 "Host: www.google.com\r\n" | 2590 "Host: www.google.com\r\n" |
2639 "Proxy-Connection: keep-alive\r\n\r\n"), | 2591 "Proxy-Connection: keep-alive\r\n\r\n"), |
(...skipping 16 matching lines...) Expand all Loading... |
2656 MockRead("Content-Length: 0\r\n\r\n"), | 2608 MockRead("Content-Length: 0\r\n\r\n"), |
2657 | 2609 |
2658 MockRead("HTTP/1.1 200 OK\r\n"), | 2610 MockRead("HTTP/1.1 200 OK\r\n"), |
2659 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 2611 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
2660 MockRead("Content-Length: 100\r\n\r\n"), | 2612 MockRead("Content-Length: 100\r\n\r\n"), |
2661 MockRead(SYNCHRONOUS, OK), | 2613 MockRead(SYNCHRONOUS, OK), |
2662 }; | 2614 }; |
2663 | 2615 |
2664 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 2616 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
2665 data_writes1, arraysize(data_writes1)); | 2617 data_writes1, arraysize(data_writes1)); |
2666 session_deps.socket_factory.AddSocketDataProvider(&data1); | 2618 session_deps.socket_factory->AddSocketDataProvider(&data1); |
2667 SSLSocketDataProvider ssl(ASYNC, OK); | 2619 SSLSocketDataProvider ssl(ASYNC, OK); |
2668 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 2620 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
2669 | 2621 |
2670 TestCompletionCallback callback1; | 2622 TestCompletionCallback callback1; |
2671 | 2623 |
2672 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 2624 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
2673 | 2625 |
2674 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 2626 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
2675 EXPECT_EQ(ERR_IO_PENDING, rv); | 2627 EXPECT_EQ(ERR_IO_PENDING, rv); |
2676 | 2628 |
2677 rv = callback1.WaitForResult(); | 2629 rv = callback1.WaitForResult(); |
2678 EXPECT_EQ(OK, rv); | 2630 EXPECT_EQ(OK, rv); |
(...skipping 27 matching lines...) Expand all Loading... |
2706 } | 2658 } |
2707 | 2659 |
2708 void HttpNetworkTransactionSpdy3Test::ConnectStatusHelperWithExpectedStatus( | 2660 void HttpNetworkTransactionSpdy3Test::ConnectStatusHelperWithExpectedStatus( |
2709 const MockRead& status, int expected_status) { | 2661 const MockRead& status, int expected_status) { |
2710 HttpRequestInfo request; | 2662 HttpRequestInfo request; |
2711 request.method = "GET"; | 2663 request.method = "GET"; |
2712 request.url = GURL("https://www.google.com/"); | 2664 request.url = GURL("https://www.google.com/"); |
2713 request.load_flags = 0; | 2665 request.load_flags = 0; |
2714 | 2666 |
2715 // Configure against proxy server "myproxy:70". | 2667 // Configure against proxy server "myproxy:70". |
2716 SessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); | 2668 SpdySessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); |
2717 | 2669 |
2718 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 2670 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
2719 | 2671 |
2720 // Since we have proxy, should try to establish tunnel. | 2672 // Since we have proxy, should try to establish tunnel. |
2721 MockWrite data_writes[] = { | 2673 MockWrite data_writes[] = { |
2722 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 2674 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" |
2723 "Host: www.google.com\r\n" | 2675 "Host: www.google.com\r\n" |
2724 "Proxy-Connection: keep-alive\r\n\r\n"), | 2676 "Proxy-Connection: keep-alive\r\n\r\n"), |
2725 }; | 2677 }; |
2726 | 2678 |
2727 MockRead data_reads[] = { | 2679 MockRead data_reads[] = { |
2728 status, | 2680 status, |
2729 MockRead("Content-Length: 10\r\n\r\n"), | 2681 MockRead("Content-Length: 10\r\n\r\n"), |
2730 // No response body because the test stops reading here. | 2682 // No response body because the test stops reading here. |
2731 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. | 2683 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. |
2732 }; | 2684 }; |
2733 | 2685 |
2734 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 2686 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
2735 data_writes, arraysize(data_writes)); | 2687 data_writes, arraysize(data_writes)); |
2736 session_deps.socket_factory.AddSocketDataProvider(&data); | 2688 session_deps.socket_factory->AddSocketDataProvider(&data); |
2737 | 2689 |
2738 TestCompletionCallback callback; | 2690 TestCompletionCallback callback; |
2739 | 2691 |
2740 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 2692 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
2741 | 2693 |
2742 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 2694 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
2743 EXPECT_EQ(ERR_IO_PENDING, rv); | 2695 EXPECT_EQ(ERR_IO_PENDING, rv); |
2744 | 2696 |
2745 rv = callback.WaitForResult(); | 2697 rv = callback.WaitForResult(); |
2746 EXPECT_EQ(expected_status, rv); | 2698 EXPECT_EQ(expected_status, rv); |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2918 | 2870 |
2919 // Test the flow when both the proxy server AND origin server require | 2871 // Test the flow when both the proxy server AND origin server require |
2920 // authentication. Again, this uses basic auth for both since that is | 2872 // authentication. Again, this uses basic auth for both since that is |
2921 // the simplest to mock. | 2873 // the simplest to mock. |
2922 TEST_F(HttpNetworkTransactionSpdy3Test, BasicAuthProxyThenServer) { | 2874 TEST_F(HttpNetworkTransactionSpdy3Test, BasicAuthProxyThenServer) { |
2923 HttpRequestInfo request; | 2875 HttpRequestInfo request; |
2924 request.method = "GET"; | 2876 request.method = "GET"; |
2925 request.url = GURL("http://www.google.com/"); | 2877 request.url = GURL("http://www.google.com/"); |
2926 request.load_flags = 0; | 2878 request.load_flags = 0; |
2927 | 2879 |
2928 SessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); | 2880 SpdySessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); |
2929 | 2881 |
2930 // Configure against proxy server "myproxy:70". | 2882 // Configure against proxy server "myproxy:70". |
2931 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction( | 2883 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction( |
2932 CreateSession(&session_deps))); | 2884 CreateSession(&session_deps))); |
2933 | 2885 |
2934 MockWrite data_writes1[] = { | 2886 MockWrite data_writes1[] = { |
2935 MockWrite("GET http://www.google.com/ HTTP/1.1\r\n" | 2887 MockWrite("GET http://www.google.com/ HTTP/1.1\r\n" |
2936 "Host: www.google.com\r\n" | 2888 "Host: www.google.com\r\n" |
2937 "Proxy-Connection: keep-alive\r\n\r\n"), | 2889 "Proxy-Connection: keep-alive\r\n\r\n"), |
2938 }; | 2890 }; |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2989 MockRead("Content-Length: 100\r\n\r\n"), | 2941 MockRead("Content-Length: 100\r\n\r\n"), |
2990 MockRead(SYNCHRONOUS, OK), | 2942 MockRead(SYNCHRONOUS, OK), |
2991 }; | 2943 }; |
2992 | 2944 |
2993 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 2945 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
2994 data_writes1, arraysize(data_writes1)); | 2946 data_writes1, arraysize(data_writes1)); |
2995 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 2947 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
2996 data_writes2, arraysize(data_writes2)); | 2948 data_writes2, arraysize(data_writes2)); |
2997 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), | 2949 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), |
2998 data_writes3, arraysize(data_writes3)); | 2950 data_writes3, arraysize(data_writes3)); |
2999 session_deps.socket_factory.AddSocketDataProvider(&data1); | 2951 session_deps.socket_factory->AddSocketDataProvider(&data1); |
3000 session_deps.socket_factory.AddSocketDataProvider(&data2); | 2952 session_deps.socket_factory->AddSocketDataProvider(&data2); |
3001 session_deps.socket_factory.AddSocketDataProvider(&data3); | 2953 session_deps.socket_factory->AddSocketDataProvider(&data3); |
3002 | 2954 |
3003 TestCompletionCallback callback1; | 2955 TestCompletionCallback callback1; |
3004 | 2956 |
3005 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 2957 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
3006 EXPECT_EQ(ERR_IO_PENDING, rv); | 2958 EXPECT_EQ(ERR_IO_PENDING, rv); |
3007 | 2959 |
3008 rv = callback1.WaitForResult(); | 2960 rv = callback1.WaitForResult(); |
3009 EXPECT_EQ(OK, rv); | 2961 EXPECT_EQ(OK, rv); |
3010 | 2962 |
3011 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2963 const HttpResponseInfo* response = trans->GetResponseInfo(); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3049 | 3001 |
3050 // Enter the correct password and authenticate successfully. | 3002 // Enter the correct password and authenticate successfully. |
3051 TEST_F(HttpNetworkTransactionSpdy3Test, NTLMAuth1) { | 3003 TEST_F(HttpNetworkTransactionSpdy3Test, NTLMAuth1) { |
3052 HttpRequestInfo request; | 3004 HttpRequestInfo request; |
3053 request.method = "GET"; | 3005 request.method = "GET"; |
3054 request.url = GURL("http://172.22.68.17/kids/login.aspx"); | 3006 request.url = GURL("http://172.22.68.17/kids/login.aspx"); |
3055 request.load_flags = 0; | 3007 request.load_flags = 0; |
3056 | 3008 |
3057 HttpAuthHandlerNTLM::ScopedProcSetter proc_setter(MockGenerateRandom1, | 3009 HttpAuthHandlerNTLM::ScopedProcSetter proc_setter(MockGenerateRandom1, |
3058 MockGetHostName); | 3010 MockGetHostName); |
3059 SessionDependencies session_deps; | 3011 SpdySessionDependencies session_deps; |
3060 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 3012 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
3061 | 3013 |
3062 MockWrite data_writes1[] = { | 3014 MockWrite data_writes1[] = { |
3063 MockWrite("GET /kids/login.aspx HTTP/1.1\r\n" | 3015 MockWrite("GET /kids/login.aspx HTTP/1.1\r\n" |
3064 "Host: 172.22.68.17\r\n" | 3016 "Host: 172.22.68.17\r\n" |
3065 "Connection: keep-alive\r\n\r\n"), | 3017 "Connection: keep-alive\r\n\r\n"), |
3066 }; | 3018 }; |
3067 | 3019 |
3068 MockRead data_reads1[] = { | 3020 MockRead data_reads1[] = { |
3069 MockRead("HTTP/1.1 401 Access Denied\r\n"), | 3021 MockRead("HTTP/1.1 401 Access Denied\r\n"), |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3121 MockRead("Content-Type: text/html; charset=utf-8\r\n"), | 3073 MockRead("Content-Type: text/html; charset=utf-8\r\n"), |
3122 MockRead("Content-Length: 13\r\n\r\n"), | 3074 MockRead("Content-Length: 13\r\n\r\n"), |
3123 MockRead("Please Login\r\n"), | 3075 MockRead("Please Login\r\n"), |
3124 MockRead(SYNCHRONOUS, OK), | 3076 MockRead(SYNCHRONOUS, OK), |
3125 }; | 3077 }; |
3126 | 3078 |
3127 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 3079 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
3128 data_writes1, arraysize(data_writes1)); | 3080 data_writes1, arraysize(data_writes1)); |
3129 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 3081 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
3130 data_writes2, arraysize(data_writes2)); | 3082 data_writes2, arraysize(data_writes2)); |
3131 session_deps.socket_factory.AddSocketDataProvider(&data1); | 3083 session_deps.socket_factory->AddSocketDataProvider(&data1); |
3132 session_deps.socket_factory.AddSocketDataProvider(&data2); | 3084 session_deps.socket_factory->AddSocketDataProvider(&data2); |
3133 | 3085 |
3134 TestCompletionCallback callback1; | 3086 TestCompletionCallback callback1; |
3135 | 3087 |
3136 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 3088 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
3137 | 3089 |
3138 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 3090 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
3139 EXPECT_EQ(ERR_IO_PENDING, rv); | 3091 EXPECT_EQ(ERR_IO_PENDING, rv); |
3140 | 3092 |
3141 rv = callback1.WaitForResult(); | 3093 rv = callback1.WaitForResult(); |
3142 EXPECT_EQ(OK, rv); | 3094 EXPECT_EQ(OK, rv); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3178 | 3130 |
3179 // Enter a wrong password, and then the correct one. | 3131 // Enter a wrong password, and then the correct one. |
3180 TEST_F(HttpNetworkTransactionSpdy3Test, NTLMAuth2) { | 3132 TEST_F(HttpNetworkTransactionSpdy3Test, NTLMAuth2) { |
3181 HttpRequestInfo request; | 3133 HttpRequestInfo request; |
3182 request.method = "GET"; | 3134 request.method = "GET"; |
3183 request.url = GURL("http://172.22.68.17/kids/login.aspx"); | 3135 request.url = GURL("http://172.22.68.17/kids/login.aspx"); |
3184 request.load_flags = 0; | 3136 request.load_flags = 0; |
3185 | 3137 |
3186 HttpAuthHandlerNTLM::ScopedProcSetter proc_setter(MockGenerateRandom2, | 3138 HttpAuthHandlerNTLM::ScopedProcSetter proc_setter(MockGenerateRandom2, |
3187 MockGetHostName); | 3139 MockGetHostName); |
3188 SessionDependencies session_deps; | 3140 SpdySessionDependencies session_deps; |
3189 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 3141 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
3190 | 3142 |
3191 MockWrite data_writes1[] = { | 3143 MockWrite data_writes1[] = { |
3192 MockWrite("GET /kids/login.aspx HTTP/1.1\r\n" | 3144 MockWrite("GET /kids/login.aspx HTTP/1.1\r\n" |
3193 "Host: 172.22.68.17\r\n" | 3145 "Host: 172.22.68.17\r\n" |
3194 "Connection: keep-alive\r\n\r\n"), | 3146 "Connection: keep-alive\r\n\r\n"), |
3195 }; | 3147 }; |
3196 | 3148 |
3197 MockRead data_reads1[] = { | 3149 MockRead data_reads1[] = { |
3198 MockRead("HTTP/1.1 401 Access Denied\r\n"), | 3150 MockRead("HTTP/1.1 401 Access Denied\r\n"), |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3300 MockRead("Please Login\r\n"), | 3252 MockRead("Please Login\r\n"), |
3301 MockRead(SYNCHRONOUS, OK), | 3253 MockRead(SYNCHRONOUS, OK), |
3302 }; | 3254 }; |
3303 | 3255 |
3304 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 3256 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
3305 data_writes1, arraysize(data_writes1)); | 3257 data_writes1, arraysize(data_writes1)); |
3306 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 3258 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
3307 data_writes2, arraysize(data_writes2)); | 3259 data_writes2, arraysize(data_writes2)); |
3308 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), | 3260 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), |
3309 data_writes3, arraysize(data_writes3)); | 3261 data_writes3, arraysize(data_writes3)); |
3310 session_deps.socket_factory.AddSocketDataProvider(&data1); | 3262 session_deps.socket_factory->AddSocketDataProvider(&data1); |
3311 session_deps.socket_factory.AddSocketDataProvider(&data2); | 3263 session_deps.socket_factory->AddSocketDataProvider(&data2); |
3312 session_deps.socket_factory.AddSocketDataProvider(&data3); | 3264 session_deps.socket_factory->AddSocketDataProvider(&data3); |
3313 | 3265 |
3314 TestCompletionCallback callback1; | 3266 TestCompletionCallback callback1; |
3315 | 3267 |
3316 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 3268 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
3317 | 3269 |
3318 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 3270 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
3319 EXPECT_EQ(ERR_IO_PENDING, rv); | 3271 EXPECT_EQ(ERR_IO_PENDING, rv); |
3320 | 3272 |
3321 rv = callback1.WaitForResult(); | 3273 rv = callback1.WaitForResult(); |
3322 EXPECT_EQ(OK, rv); | 3274 EXPECT_EQ(OK, rv); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3378 | 3330 |
3379 // Test reading a server response which has only headers, and no body. | 3331 // Test reading a server response which has only headers, and no body. |
3380 // After some maximum number of bytes is consumed, the transaction should | 3332 // After some maximum number of bytes is consumed, the transaction should |
3381 // fail with ERR_RESPONSE_HEADERS_TOO_BIG. | 3333 // fail with ERR_RESPONSE_HEADERS_TOO_BIG. |
3382 TEST_F(HttpNetworkTransactionSpdy3Test, LargeHeadersNoBody) { | 3334 TEST_F(HttpNetworkTransactionSpdy3Test, LargeHeadersNoBody) { |
3383 HttpRequestInfo request; | 3335 HttpRequestInfo request; |
3384 request.method = "GET"; | 3336 request.method = "GET"; |
3385 request.url = GURL("http://www.google.com/"); | 3337 request.url = GURL("http://www.google.com/"); |
3386 request.load_flags = 0; | 3338 request.load_flags = 0; |
3387 | 3339 |
3388 SessionDependencies session_deps; | 3340 SpdySessionDependencies session_deps; |
3389 scoped_ptr<HttpTransaction> trans( | 3341 scoped_ptr<HttpTransaction> trans( |
3390 new HttpNetworkTransaction(CreateSession(&session_deps))); | 3342 new HttpNetworkTransaction(CreateSession(&session_deps))); |
3391 | 3343 |
3392 // Respond with 300 kb of headers (we should fail after 256 kb). | 3344 // Respond with 300 kb of headers (we should fail after 256 kb). |
3393 std::string large_headers_string; | 3345 std::string large_headers_string; |
3394 FillLargeHeadersString(&large_headers_string, 300 * 1024); | 3346 FillLargeHeadersString(&large_headers_string, 300 * 1024); |
3395 | 3347 |
3396 MockRead data_reads[] = { | 3348 MockRead data_reads[] = { |
3397 MockRead("HTTP/1.0 200 OK\r\n"), | 3349 MockRead("HTTP/1.0 200 OK\r\n"), |
3398 MockRead(ASYNC, large_headers_string.data(), large_headers_string.size()), | 3350 MockRead(ASYNC, large_headers_string.data(), large_headers_string.size()), |
3399 MockRead("\r\nBODY"), | 3351 MockRead("\r\nBODY"), |
3400 MockRead(SYNCHRONOUS, OK), | 3352 MockRead(SYNCHRONOUS, OK), |
3401 }; | 3353 }; |
3402 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 3354 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
3403 session_deps.socket_factory.AddSocketDataProvider(&data); | 3355 session_deps.socket_factory->AddSocketDataProvider(&data); |
3404 | 3356 |
3405 TestCompletionCallback callback; | 3357 TestCompletionCallback callback; |
3406 | 3358 |
3407 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 3359 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
3408 EXPECT_EQ(ERR_IO_PENDING, rv); | 3360 EXPECT_EQ(ERR_IO_PENDING, rv); |
3409 | 3361 |
3410 rv = callback.WaitForResult(); | 3362 rv = callback.WaitForResult(); |
3411 EXPECT_EQ(ERR_RESPONSE_HEADERS_TOO_BIG, rv); | 3363 EXPECT_EQ(ERR_RESPONSE_HEADERS_TOO_BIG, rv); |
3412 | 3364 |
3413 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3365 const HttpResponseInfo* response = trans->GetResponseInfo(); |
3414 EXPECT_TRUE(response == NULL); | 3366 EXPECT_TRUE(response == NULL); |
3415 } | 3367 } |
3416 | 3368 |
3417 // Make sure that we don't try to reuse a TCPClientSocket when failing to | 3369 // Make sure that we don't try to reuse a TCPClientSocket when failing to |
3418 // establish tunnel. | 3370 // establish tunnel. |
3419 // http://code.google.com/p/chromium/issues/detail?id=3772 | 3371 // http://code.google.com/p/chromium/issues/detail?id=3772 |
3420 TEST_F(HttpNetworkTransactionSpdy3Test, | 3372 TEST_F(HttpNetworkTransactionSpdy3Test, |
3421 DontRecycleTransportSocketForSSLTunnel) { | 3373 DontRecycleTransportSocketForSSLTunnel) { |
3422 HttpRequestInfo request; | 3374 HttpRequestInfo request; |
3423 request.method = "GET"; | 3375 request.method = "GET"; |
3424 request.url = GURL("https://www.google.com/"); | 3376 request.url = GURL("https://www.google.com/"); |
3425 request.load_flags = 0; | 3377 request.load_flags = 0; |
3426 | 3378 |
3427 // Configure against proxy server "myproxy:70". | 3379 // Configure against proxy server "myproxy:70". |
3428 SessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); | 3380 SpdySessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); |
3429 | 3381 |
3430 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 3382 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
3431 | 3383 |
3432 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 3384 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
3433 | 3385 |
3434 // Since we have proxy, should try to establish tunnel. | 3386 // Since we have proxy, should try to establish tunnel. |
3435 MockWrite data_writes1[] = { | 3387 MockWrite data_writes1[] = { |
3436 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 3388 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" |
3437 "Host: www.google.com\r\n" | 3389 "Host: www.google.com\r\n" |
3438 "Proxy-Connection: keep-alive\r\n\r\n"), | 3390 "Proxy-Connection: keep-alive\r\n\r\n"), |
3439 }; | 3391 }; |
3440 | 3392 |
3441 // The proxy responds to the connect with a 404, using a persistent | 3393 // The proxy responds to the connect with a 404, using a persistent |
3442 // connection. Usually a proxy would return 501 (not implemented), | 3394 // connection. Usually a proxy would return 501 (not implemented), |
3443 // or 200 (tunnel established). | 3395 // or 200 (tunnel established). |
3444 MockRead data_reads1[] = { | 3396 MockRead data_reads1[] = { |
3445 MockRead("HTTP/1.1 404 Not Found\r\n"), | 3397 MockRead("HTTP/1.1 404 Not Found\r\n"), |
3446 MockRead("Content-Length: 10\r\n\r\n"), | 3398 MockRead("Content-Length: 10\r\n\r\n"), |
3447 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. | 3399 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. |
3448 }; | 3400 }; |
3449 | 3401 |
3450 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 3402 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
3451 data_writes1, arraysize(data_writes1)); | 3403 data_writes1, arraysize(data_writes1)); |
3452 session_deps.socket_factory.AddSocketDataProvider(&data1); | 3404 session_deps.socket_factory->AddSocketDataProvider(&data1); |
3453 | 3405 |
3454 TestCompletionCallback callback1; | 3406 TestCompletionCallback callback1; |
3455 | 3407 |
3456 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 3408 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
3457 EXPECT_EQ(ERR_IO_PENDING, rv); | 3409 EXPECT_EQ(ERR_IO_PENDING, rv); |
3458 | 3410 |
3459 rv = callback1.WaitForResult(); | 3411 rv = callback1.WaitForResult(); |
3460 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 3412 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); |
3461 | 3413 |
3462 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3414 const HttpResponseInfo* response = trans->GetResponseInfo(); |
(...skipping 12 matching lines...) Expand all Loading... |
3475 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session)); | 3427 EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session)); |
3476 } | 3428 } |
3477 | 3429 |
3478 // Make sure that we recycle a socket after reading all of the response body. | 3430 // Make sure that we recycle a socket after reading all of the response body. |
3479 TEST_F(HttpNetworkTransactionSpdy3Test, RecycleSocket) { | 3431 TEST_F(HttpNetworkTransactionSpdy3Test, RecycleSocket) { |
3480 HttpRequestInfo request; | 3432 HttpRequestInfo request; |
3481 request.method = "GET"; | 3433 request.method = "GET"; |
3482 request.url = GURL("http://www.google.com/"); | 3434 request.url = GURL("http://www.google.com/"); |
3483 request.load_flags = 0; | 3435 request.load_flags = 0; |
3484 | 3436 |
3485 SessionDependencies session_deps; | 3437 SpdySessionDependencies session_deps; |
3486 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 3438 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
3487 | 3439 |
3488 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 3440 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
3489 | 3441 |
3490 MockRead data_reads[] = { | 3442 MockRead data_reads[] = { |
3491 // A part of the response body is received with the response headers. | 3443 // A part of the response body is received with the response headers. |
3492 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 11\r\n\r\nhel"), | 3444 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 11\r\n\r\nhel"), |
3493 // The rest of the response body is received in two parts. | 3445 // The rest of the response body is received in two parts. |
3494 MockRead("lo"), | 3446 MockRead("lo"), |
3495 MockRead(" world"), | 3447 MockRead(" world"), |
3496 MockRead("junk"), // Should not be read!! | 3448 MockRead("junk"), // Should not be read!! |
3497 MockRead(SYNCHRONOUS, OK), | 3449 MockRead(SYNCHRONOUS, OK), |
3498 }; | 3450 }; |
3499 | 3451 |
3500 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 3452 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
3501 session_deps.socket_factory.AddSocketDataProvider(&data); | 3453 session_deps.socket_factory->AddSocketDataProvider(&data); |
3502 | 3454 |
3503 TestCompletionCallback callback; | 3455 TestCompletionCallback callback; |
3504 | 3456 |
3505 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 3457 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
3506 EXPECT_EQ(ERR_IO_PENDING, rv); | 3458 EXPECT_EQ(ERR_IO_PENDING, rv); |
3507 | 3459 |
3508 rv = callback.WaitForResult(); | 3460 rv = callback.WaitForResult(); |
3509 EXPECT_EQ(OK, rv); | 3461 EXPECT_EQ(OK, rv); |
3510 | 3462 |
3511 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3463 const HttpResponseInfo* response = trans->GetResponseInfo(); |
(...skipping 14 matching lines...) Expand all Loading... |
3526 // added to the connection pool asynchronously with a PostTask. | 3478 // added to the connection pool asynchronously with a PostTask. |
3527 MessageLoop::current()->RunUntilIdle(); | 3479 MessageLoop::current()->RunUntilIdle(); |
3528 | 3480 |
3529 // We now check to make sure the socket was added back to the pool. | 3481 // We now check to make sure the socket was added back to the pool. |
3530 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session)); | 3482 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session)); |
3531 } | 3483 } |
3532 | 3484 |
3533 // Make sure that we recycle a SSL socket after reading all of the response | 3485 // Make sure that we recycle a SSL socket after reading all of the response |
3534 // body. | 3486 // body. |
3535 TEST_F(HttpNetworkTransactionSpdy3Test, RecycleSSLSocket) { | 3487 TEST_F(HttpNetworkTransactionSpdy3Test, RecycleSSLSocket) { |
3536 SessionDependencies session_deps; | 3488 SpdySessionDependencies session_deps; |
3537 HttpRequestInfo request; | 3489 HttpRequestInfo request; |
3538 request.method = "GET"; | 3490 request.method = "GET"; |
3539 request.url = GURL("https://www.google.com/"); | 3491 request.url = GURL("https://www.google.com/"); |
3540 request.load_flags = 0; | 3492 request.load_flags = 0; |
3541 | 3493 |
3542 MockWrite data_writes[] = { | 3494 MockWrite data_writes[] = { |
3543 MockWrite("GET / HTTP/1.1\r\n" | 3495 MockWrite("GET / HTTP/1.1\r\n" |
3544 "Host: www.google.com\r\n" | 3496 "Host: www.google.com\r\n" |
3545 "Connection: keep-alive\r\n\r\n"), | 3497 "Connection: keep-alive\r\n\r\n"), |
3546 }; | 3498 }; |
3547 | 3499 |
3548 MockRead data_reads[] = { | 3500 MockRead data_reads[] = { |
3549 MockRead("HTTP/1.1 200 OK\r\n"), | 3501 MockRead("HTTP/1.1 200 OK\r\n"), |
3550 MockRead("Content-Length: 11\r\n\r\n"), | 3502 MockRead("Content-Length: 11\r\n\r\n"), |
3551 MockRead("hello world"), | 3503 MockRead("hello world"), |
3552 MockRead(SYNCHRONOUS, OK), | 3504 MockRead(SYNCHRONOUS, OK), |
3553 }; | 3505 }; |
3554 | 3506 |
3555 SSLSocketDataProvider ssl(ASYNC, OK); | 3507 SSLSocketDataProvider ssl(ASYNC, OK); |
3556 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 3508 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
3557 | 3509 |
3558 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 3510 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
3559 data_writes, arraysize(data_writes)); | 3511 data_writes, arraysize(data_writes)); |
3560 session_deps.socket_factory.AddSocketDataProvider(&data); | 3512 session_deps.socket_factory->AddSocketDataProvider(&data); |
3561 | 3513 |
3562 TestCompletionCallback callback; | 3514 TestCompletionCallback callback; |
3563 | 3515 |
3564 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 3516 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
3565 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 3517 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
3566 | 3518 |
3567 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 3519 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
3568 | 3520 |
3569 EXPECT_EQ(ERR_IO_PENDING, rv); | 3521 EXPECT_EQ(ERR_IO_PENDING, rv); |
3570 EXPECT_EQ(OK, callback.WaitForResult()); | 3522 EXPECT_EQ(OK, callback.WaitForResult()); |
(...skipping 14 matching lines...) Expand all Loading... |
3585 // added to the connection pool asynchronously with a PostTask. | 3537 // added to the connection pool asynchronously with a PostTask. |
3586 MessageLoop::current()->RunUntilIdle(); | 3538 MessageLoop::current()->RunUntilIdle(); |
3587 | 3539 |
3588 // We now check to make sure the socket was added back to the pool. | 3540 // We now check to make sure the socket was added back to the pool. |
3589 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session)); | 3541 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session)); |
3590 } | 3542 } |
3591 | 3543 |
3592 // Grab a SSL socket, use it, and put it back into the pool. Then, reuse it | 3544 // Grab a SSL socket, use it, and put it back into the pool. Then, reuse it |
3593 // from the pool and make sure that we recover okay. | 3545 // from the pool and make sure that we recover okay. |
3594 TEST_F(HttpNetworkTransactionSpdy3Test, RecycleDeadSSLSocket) { | 3546 TEST_F(HttpNetworkTransactionSpdy3Test, RecycleDeadSSLSocket) { |
3595 SessionDependencies session_deps; | 3547 SpdySessionDependencies session_deps; |
3596 HttpRequestInfo request; | 3548 HttpRequestInfo request; |
3597 request.method = "GET"; | 3549 request.method = "GET"; |
3598 request.url = GURL("https://www.google.com/"); | 3550 request.url = GURL("https://www.google.com/"); |
3599 request.load_flags = 0; | 3551 request.load_flags = 0; |
3600 | 3552 |
3601 MockWrite data_writes[] = { | 3553 MockWrite data_writes[] = { |
3602 MockWrite("GET / HTTP/1.1\r\n" | 3554 MockWrite("GET / HTTP/1.1\r\n" |
3603 "Host: www.google.com\r\n" | 3555 "Host: www.google.com\r\n" |
3604 "Connection: keep-alive\r\n\r\n"), | 3556 "Connection: keep-alive\r\n\r\n"), |
3605 MockWrite("GET / HTTP/1.1\r\n" | 3557 MockWrite("GET / HTTP/1.1\r\n" |
3606 "Host: www.google.com\r\n" | 3558 "Host: www.google.com\r\n" |
3607 "Connection: keep-alive\r\n\r\n"), | 3559 "Connection: keep-alive\r\n\r\n"), |
3608 }; | 3560 }; |
3609 | 3561 |
3610 MockRead data_reads[] = { | 3562 MockRead data_reads[] = { |
3611 MockRead("HTTP/1.1 200 OK\r\n"), | 3563 MockRead("HTTP/1.1 200 OK\r\n"), |
3612 MockRead("Content-Length: 11\r\n\r\n"), | 3564 MockRead("Content-Length: 11\r\n\r\n"), |
3613 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 3565 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
3614 MockRead("hello world"), | 3566 MockRead("hello world"), |
3615 MockRead(ASYNC, 0, 0) // EOF | 3567 MockRead(ASYNC, 0, 0) // EOF |
3616 }; | 3568 }; |
3617 | 3569 |
3618 SSLSocketDataProvider ssl(ASYNC, OK); | 3570 SSLSocketDataProvider ssl(ASYNC, OK); |
3619 SSLSocketDataProvider ssl2(ASYNC, OK); | 3571 SSLSocketDataProvider ssl2(ASYNC, OK); |
3620 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 3572 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
3621 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl2); | 3573 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl2); |
3622 | 3574 |
3623 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 3575 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
3624 data_writes, arraysize(data_writes)); | 3576 data_writes, arraysize(data_writes)); |
3625 StaticSocketDataProvider data2(data_reads, arraysize(data_reads), | 3577 StaticSocketDataProvider data2(data_reads, arraysize(data_reads), |
3626 data_writes, arraysize(data_writes)); | 3578 data_writes, arraysize(data_writes)); |
3627 session_deps.socket_factory.AddSocketDataProvider(&data); | 3579 session_deps.socket_factory->AddSocketDataProvider(&data); |
3628 session_deps.socket_factory.AddSocketDataProvider(&data2); | 3580 session_deps.socket_factory->AddSocketDataProvider(&data2); |
3629 | 3581 |
3630 TestCompletionCallback callback; | 3582 TestCompletionCallback callback; |
3631 | 3583 |
3632 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 3584 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
3633 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 3585 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
3634 | 3586 |
3635 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 3587 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
3636 | 3588 |
3637 EXPECT_EQ(ERR_IO_PENDING, rv); | 3589 EXPECT_EQ(ERR_IO_PENDING, rv); |
3638 EXPECT_EQ(OK, callback.WaitForResult()); | 3590 EXPECT_EQ(OK, callback.WaitForResult()); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3688 // http://crbug.com/9880 | 3640 // http://crbug.com/9880 |
3689 TEST_F(HttpNetworkTransactionSpdy3Test, RecycleSocketAfterZeroContentLength) { | 3641 TEST_F(HttpNetworkTransactionSpdy3Test, RecycleSocketAfterZeroContentLength) { |
3690 HttpRequestInfo request; | 3642 HttpRequestInfo request; |
3691 request.method = "GET"; | 3643 request.method = "GET"; |
3692 request.url = GURL("http://www.google.com/csi?v=3&s=web&action=&" | 3644 request.url = GURL("http://www.google.com/csi?v=3&s=web&action=&" |
3693 "tran=undefined&ei=mAXcSeegAo-SMurloeUN&" | 3645 "tran=undefined&ei=mAXcSeegAo-SMurloeUN&" |
3694 "e=17259,18167,19592,19773,19981,20133,20173,20233&" | 3646 "e=17259,18167,19592,19773,19981,20133,20173,20233&" |
3695 "rt=prt.2642,ol.2649,xjs.2951"); | 3647 "rt=prt.2642,ol.2649,xjs.2951"); |
3696 request.load_flags = 0; | 3648 request.load_flags = 0; |
3697 | 3649 |
3698 SessionDependencies session_deps; | 3650 SpdySessionDependencies session_deps; |
3699 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 3651 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
3700 | 3652 |
3701 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 3653 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
3702 | 3654 |
3703 MockRead data_reads[] = { | 3655 MockRead data_reads[] = { |
3704 MockRead("HTTP/1.1 204 No Content\r\n" | 3656 MockRead("HTTP/1.1 204 No Content\r\n" |
3705 "Content-Length: 0\r\n" | 3657 "Content-Length: 0\r\n" |
3706 "Content-Type: text/html\r\n\r\n"), | 3658 "Content-Type: text/html\r\n\r\n"), |
3707 MockRead("junk"), // Should not be read!! | 3659 MockRead("junk"), // Should not be read!! |
3708 MockRead(SYNCHRONOUS, OK), | 3660 MockRead(SYNCHRONOUS, OK), |
3709 }; | 3661 }; |
3710 | 3662 |
3711 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 3663 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
3712 session_deps.socket_factory.AddSocketDataProvider(&data); | 3664 session_deps.socket_factory->AddSocketDataProvider(&data); |
3713 | 3665 |
3714 TestCompletionCallback callback; | 3666 TestCompletionCallback callback; |
3715 | 3667 |
3716 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 3668 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
3717 EXPECT_EQ(ERR_IO_PENDING, rv); | 3669 EXPECT_EQ(ERR_IO_PENDING, rv); |
3718 | 3670 |
3719 rv = callback.WaitForResult(); | 3671 rv = callback.WaitForResult(); |
3720 EXPECT_EQ(OK, rv); | 3672 EXPECT_EQ(OK, rv); |
3721 | 3673 |
3722 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3674 const HttpResponseInfo* response = trans->GetResponseInfo(); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3754 request[0].load_flags = 0; | 3706 request[0].load_flags = 0; |
3755 // Transaction 2: a POST request. Reuses the socket kept alive from | 3707 // Transaction 2: a POST request. Reuses the socket kept alive from |
3756 // transaction 1. The first attempts fails when writing the POST data. | 3708 // transaction 1. The first attempts fails when writing the POST data. |
3757 // This causes the transaction to retry with a new socket. The second | 3709 // This causes the transaction to retry with a new socket. The second |
3758 // attempt succeeds. | 3710 // attempt succeeds. |
3759 request[1].method = "POST"; | 3711 request[1].method = "POST"; |
3760 request[1].url = GURL("http://www.google.com/login.cgi"); | 3712 request[1].url = GURL("http://www.google.com/login.cgi"); |
3761 request[1].upload_data_stream = &upload_data_stream; | 3713 request[1].upload_data_stream = &upload_data_stream; |
3762 request[1].load_flags = 0; | 3714 request[1].load_flags = 0; |
3763 | 3715 |
3764 SessionDependencies session_deps; | 3716 SpdySessionDependencies session_deps; |
3765 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 3717 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
3766 | 3718 |
3767 // The first socket is used for transaction 1 and the first attempt of | 3719 // The first socket is used for transaction 1 and the first attempt of |
3768 // transaction 2. | 3720 // transaction 2. |
3769 | 3721 |
3770 // The response of transaction 1. | 3722 // The response of transaction 1. |
3771 MockRead data_reads1[] = { | 3723 MockRead data_reads1[] = { |
3772 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 11\r\n\r\n"), | 3724 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 11\r\n\r\n"), |
3773 MockRead("hello world"), | 3725 MockRead("hello world"), |
3774 MockRead(SYNCHRONOUS, OK), | 3726 MockRead(SYNCHRONOUS, OK), |
(...skipping 17 matching lines...) Expand all Loading... |
3792 MockRead(SYNCHRONOUS, OK), | 3744 MockRead(SYNCHRONOUS, OK), |
3793 }; | 3745 }; |
3794 // The mock write results of the second attempt of transaction 2. | 3746 // The mock write results of the second attempt of transaction 2. |
3795 MockWrite data_writes2[] = { | 3747 MockWrite data_writes2[] = { |
3796 MockWrite(SYNCHRONOUS, 93), // POST | 3748 MockWrite(SYNCHRONOUS, 93), // POST |
3797 MockWrite(SYNCHRONOUS, 3), // POST data | 3749 MockWrite(SYNCHRONOUS, 3), // POST data |
3798 }; | 3750 }; |
3799 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 3751 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
3800 data_writes2, arraysize(data_writes2)); | 3752 data_writes2, arraysize(data_writes2)); |
3801 | 3753 |
3802 session_deps.socket_factory.AddSocketDataProvider(&data1); | 3754 session_deps.socket_factory->AddSocketDataProvider(&data1); |
3803 session_deps.socket_factory.AddSocketDataProvider(&data2); | 3755 session_deps.socket_factory->AddSocketDataProvider(&data2); |
3804 | 3756 |
3805 const char* kExpectedResponseData[] = { | 3757 const char* kExpectedResponseData[] = { |
3806 "hello world", "welcome" | 3758 "hello world", "welcome" |
3807 }; | 3759 }; |
3808 | 3760 |
3809 for (int i = 0; i < 2; ++i) { | 3761 for (int i = 0; i < 2; ++i) { |
3810 scoped_ptr<HttpTransaction> trans( | 3762 scoped_ptr<HttpTransaction> trans( |
3811 new HttpNetworkTransaction(session)); | 3763 new HttpNetworkTransaction(session)); |
3812 | 3764 |
3813 TestCompletionCallback callback; | 3765 TestCompletionCallback callback; |
(...skipping 19 matching lines...) Expand all Loading... |
3833 | 3785 |
3834 // Test the request-challenge-retry sequence for basic auth when there is | 3786 // Test the request-challenge-retry sequence for basic auth when there is |
3835 // an identity in the URL. The request should be sent as normal, but when | 3787 // an identity in the URL. The request should be sent as normal, but when |
3836 // it fails the identity from the URL is used to answer the challenge. | 3788 // it fails the identity from the URL is used to answer the challenge. |
3837 TEST_F(HttpNetworkTransactionSpdy3Test, AuthIdentityInURL) { | 3789 TEST_F(HttpNetworkTransactionSpdy3Test, AuthIdentityInURL) { |
3838 HttpRequestInfo request; | 3790 HttpRequestInfo request; |
3839 request.method = "GET"; | 3791 request.method = "GET"; |
3840 request.url = GURL("http://foo:b@r@www.google.com/"); | 3792 request.url = GURL("http://foo:b@r@www.google.com/"); |
3841 request.load_flags = LOAD_NORMAL; | 3793 request.load_flags = LOAD_NORMAL; |
3842 | 3794 |
3843 SessionDependencies session_deps; | 3795 SpdySessionDependencies session_deps; |
3844 scoped_ptr<HttpTransaction> trans( | 3796 scoped_ptr<HttpTransaction> trans( |
3845 new HttpNetworkTransaction(CreateSession(&session_deps))); | 3797 new HttpNetworkTransaction(CreateSession(&session_deps))); |
3846 | 3798 |
3847 // The password contains an escaped character -- for this test to pass it | 3799 // The password contains an escaped character -- for this test to pass it |
3848 // will need to be unescaped by HttpNetworkTransaction. | 3800 // will need to be unescaped by HttpNetworkTransaction. |
3849 EXPECT_EQ("b%40r", request.url.password()); | 3801 EXPECT_EQ("b%40r", request.url.password()); |
3850 | 3802 |
3851 MockWrite data_writes1[] = { | 3803 MockWrite data_writes1[] = { |
3852 MockWrite("GET / HTTP/1.1\r\n" | 3804 MockWrite("GET / HTTP/1.1\r\n" |
3853 "Host: www.google.com\r\n" | 3805 "Host: www.google.com\r\n" |
(...skipping 19 matching lines...) Expand all Loading... |
3873 MockRead data_reads2[] = { | 3825 MockRead data_reads2[] = { |
3874 MockRead("HTTP/1.0 200 OK\r\n"), | 3826 MockRead("HTTP/1.0 200 OK\r\n"), |
3875 MockRead("Content-Length: 100\r\n\r\n"), | 3827 MockRead("Content-Length: 100\r\n\r\n"), |
3876 MockRead(SYNCHRONOUS, OK), | 3828 MockRead(SYNCHRONOUS, OK), |
3877 }; | 3829 }; |
3878 | 3830 |
3879 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 3831 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
3880 data_writes1, arraysize(data_writes1)); | 3832 data_writes1, arraysize(data_writes1)); |
3881 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 3833 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
3882 data_writes2, arraysize(data_writes2)); | 3834 data_writes2, arraysize(data_writes2)); |
3883 session_deps.socket_factory.AddSocketDataProvider(&data1); | 3835 session_deps.socket_factory->AddSocketDataProvider(&data1); |
3884 session_deps.socket_factory.AddSocketDataProvider(&data2); | 3836 session_deps.socket_factory->AddSocketDataProvider(&data2); |
3885 | 3837 |
3886 TestCompletionCallback callback1; | 3838 TestCompletionCallback callback1; |
3887 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 3839 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
3888 EXPECT_EQ(ERR_IO_PENDING, rv); | 3840 EXPECT_EQ(ERR_IO_PENDING, rv); |
3889 rv = callback1.WaitForResult(); | 3841 rv = callback1.WaitForResult(); |
3890 EXPECT_EQ(OK, rv); | 3842 EXPECT_EQ(OK, rv); |
3891 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 3843 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
3892 | 3844 |
3893 TestCompletionCallback callback2; | 3845 TestCompletionCallback callback2; |
3894 rv = trans->RestartWithAuth(AuthCredentials(), callback2.callback()); | 3846 rv = trans->RestartWithAuth(AuthCredentials(), callback2.callback()); |
(...skipping 19 matching lines...) Expand all Loading... |
3914 // once. | 3866 // once. |
3915 TEST_F(HttpNetworkTransactionSpdy3Test, WrongAuthIdentityInURL) { | 3867 TEST_F(HttpNetworkTransactionSpdy3Test, WrongAuthIdentityInURL) { |
3916 HttpRequestInfo request; | 3868 HttpRequestInfo request; |
3917 request.method = "GET"; | 3869 request.method = "GET"; |
3918 // Note: the URL has a username:password in it. The password "baz" is | 3870 // Note: the URL has a username:password in it. The password "baz" is |
3919 // wrong (should be "bar"). | 3871 // wrong (should be "bar"). |
3920 request.url = GURL("http://foo:baz@www.google.com/"); | 3872 request.url = GURL("http://foo:baz@www.google.com/"); |
3921 | 3873 |
3922 request.load_flags = LOAD_NORMAL; | 3874 request.load_flags = LOAD_NORMAL; |
3923 | 3875 |
3924 SessionDependencies session_deps; | 3876 SpdySessionDependencies session_deps; |
3925 scoped_ptr<HttpTransaction> trans( | 3877 scoped_ptr<HttpTransaction> trans( |
3926 new HttpNetworkTransaction(CreateSession(&session_deps))); | 3878 new HttpNetworkTransaction(CreateSession(&session_deps))); |
3927 | 3879 |
3928 MockWrite data_writes1[] = { | 3880 MockWrite data_writes1[] = { |
3929 MockWrite("GET / HTTP/1.1\r\n" | 3881 MockWrite("GET / HTTP/1.1\r\n" |
3930 "Host: www.google.com\r\n" | 3882 "Host: www.google.com\r\n" |
3931 "Connection: keep-alive\r\n\r\n"), | 3883 "Connection: keep-alive\r\n\r\n"), |
3932 }; | 3884 }; |
3933 | 3885 |
3934 MockRead data_reads1[] = { | 3886 MockRead data_reads1[] = { |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3968 MockRead("Content-Length: 100\r\n\r\n"), | 3920 MockRead("Content-Length: 100\r\n\r\n"), |
3969 MockRead(SYNCHRONOUS, OK), | 3921 MockRead(SYNCHRONOUS, OK), |
3970 }; | 3922 }; |
3971 | 3923 |
3972 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 3924 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
3973 data_writes1, arraysize(data_writes1)); | 3925 data_writes1, arraysize(data_writes1)); |
3974 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 3926 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
3975 data_writes2, arraysize(data_writes2)); | 3927 data_writes2, arraysize(data_writes2)); |
3976 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), | 3928 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), |
3977 data_writes3, arraysize(data_writes3)); | 3929 data_writes3, arraysize(data_writes3)); |
3978 session_deps.socket_factory.AddSocketDataProvider(&data1); | 3930 session_deps.socket_factory->AddSocketDataProvider(&data1); |
3979 session_deps.socket_factory.AddSocketDataProvider(&data2); | 3931 session_deps.socket_factory->AddSocketDataProvider(&data2); |
3980 session_deps.socket_factory.AddSocketDataProvider(&data3); | 3932 session_deps.socket_factory->AddSocketDataProvider(&data3); |
3981 | 3933 |
3982 TestCompletionCallback callback1; | 3934 TestCompletionCallback callback1; |
3983 | 3935 |
3984 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 3936 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
3985 EXPECT_EQ(ERR_IO_PENDING, rv); | 3937 EXPECT_EQ(ERR_IO_PENDING, rv); |
3986 | 3938 |
3987 rv = callback1.WaitForResult(); | 3939 rv = callback1.WaitForResult(); |
3988 EXPECT_EQ(OK, rv); | 3940 EXPECT_EQ(OK, rv); |
3989 | 3941 |
3990 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 3942 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
(...skipping 23 matching lines...) Expand all Loading... |
4014 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 3966 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
4015 | 3967 |
4016 EXPECT_EQ(100, response->headers->GetContentLength()); | 3968 EXPECT_EQ(100, response->headers->GetContentLength()); |
4017 | 3969 |
4018 // Empty the current queue. | 3970 // Empty the current queue. |
4019 MessageLoop::current()->RunUntilIdle(); | 3971 MessageLoop::current()->RunUntilIdle(); |
4020 } | 3972 } |
4021 | 3973 |
4022 // Test that previously tried username/passwords for a realm get re-used. | 3974 // Test that previously tried username/passwords for a realm get re-used. |
4023 TEST_F(HttpNetworkTransactionSpdy3Test, BasicAuthCacheAndPreauth) { | 3975 TEST_F(HttpNetworkTransactionSpdy3Test, BasicAuthCacheAndPreauth) { |
4024 SessionDependencies session_deps; | 3976 SpdySessionDependencies session_deps; |
4025 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 3977 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
4026 | 3978 |
4027 // Transaction 1: authenticate (foo, bar) on MyRealm1 | 3979 // Transaction 1: authenticate (foo, bar) on MyRealm1 |
4028 { | 3980 { |
4029 HttpRequestInfo request; | 3981 HttpRequestInfo request; |
4030 request.method = "GET"; | 3982 request.method = "GET"; |
4031 request.url = GURL("http://www.google.com/x/y/z"); | 3983 request.url = GURL("http://www.google.com/x/y/z"); |
4032 request.load_flags = 0; | 3984 request.load_flags = 0; |
4033 | 3985 |
4034 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 3986 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
(...skipping 23 matching lines...) Expand all Loading... |
4058 MockRead data_reads2[] = { | 4010 MockRead data_reads2[] = { |
4059 MockRead("HTTP/1.0 200 OK\r\n"), | 4011 MockRead("HTTP/1.0 200 OK\r\n"), |
4060 MockRead("Content-Length: 100\r\n\r\n"), | 4012 MockRead("Content-Length: 100\r\n\r\n"), |
4061 MockRead(SYNCHRONOUS, OK), | 4013 MockRead(SYNCHRONOUS, OK), |
4062 }; | 4014 }; |
4063 | 4015 |
4064 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 4016 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
4065 data_writes1, arraysize(data_writes1)); | 4017 data_writes1, arraysize(data_writes1)); |
4066 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 4018 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
4067 data_writes2, arraysize(data_writes2)); | 4019 data_writes2, arraysize(data_writes2)); |
4068 session_deps.socket_factory.AddSocketDataProvider(&data1); | 4020 session_deps.socket_factory->AddSocketDataProvider(&data1); |
4069 session_deps.socket_factory.AddSocketDataProvider(&data2); | 4021 session_deps.socket_factory->AddSocketDataProvider(&data2); |
4070 | 4022 |
4071 TestCompletionCallback callback1; | 4023 TestCompletionCallback callback1; |
4072 | 4024 |
4073 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 4025 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
4074 EXPECT_EQ(ERR_IO_PENDING, rv); | 4026 EXPECT_EQ(ERR_IO_PENDING, rv); |
4075 | 4027 |
4076 rv = callback1.WaitForResult(); | 4028 rv = callback1.WaitForResult(); |
4077 EXPECT_EQ(OK, rv); | 4029 EXPECT_EQ(OK, rv); |
4078 | 4030 |
4079 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4031 const HttpResponseInfo* response = trans->GetResponseInfo(); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4137 MockRead data_reads2[] = { | 4089 MockRead data_reads2[] = { |
4138 MockRead("HTTP/1.0 200 OK\r\n"), | 4090 MockRead("HTTP/1.0 200 OK\r\n"), |
4139 MockRead("Content-Length: 100\r\n\r\n"), | 4091 MockRead("Content-Length: 100\r\n\r\n"), |
4140 MockRead(SYNCHRONOUS, OK), | 4092 MockRead(SYNCHRONOUS, OK), |
4141 }; | 4093 }; |
4142 | 4094 |
4143 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 4095 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
4144 data_writes1, arraysize(data_writes1)); | 4096 data_writes1, arraysize(data_writes1)); |
4145 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 4097 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
4146 data_writes2, arraysize(data_writes2)); | 4098 data_writes2, arraysize(data_writes2)); |
4147 session_deps.socket_factory.AddSocketDataProvider(&data1); | 4099 session_deps.socket_factory->AddSocketDataProvider(&data1); |
4148 session_deps.socket_factory.AddSocketDataProvider(&data2); | 4100 session_deps.socket_factory->AddSocketDataProvider(&data2); |
4149 | 4101 |
4150 TestCompletionCallback callback1; | 4102 TestCompletionCallback callback1; |
4151 | 4103 |
4152 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 4104 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
4153 EXPECT_EQ(ERR_IO_PENDING, rv); | 4105 EXPECT_EQ(ERR_IO_PENDING, rv); |
4154 | 4106 |
4155 rv = callback1.WaitForResult(); | 4107 rv = callback1.WaitForResult(); |
4156 EXPECT_EQ(OK, rv); | 4108 EXPECT_EQ(OK, rv); |
4157 | 4109 |
4158 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4110 const HttpResponseInfo* response = trans->GetResponseInfo(); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4202 | 4154 |
4203 // Sever accepts the preemptive authorization | 4155 // Sever accepts the preemptive authorization |
4204 MockRead data_reads1[] = { | 4156 MockRead data_reads1[] = { |
4205 MockRead("HTTP/1.0 200 OK\r\n"), | 4157 MockRead("HTTP/1.0 200 OK\r\n"), |
4206 MockRead("Content-Length: 100\r\n\r\n"), | 4158 MockRead("Content-Length: 100\r\n\r\n"), |
4207 MockRead(SYNCHRONOUS, OK), | 4159 MockRead(SYNCHRONOUS, OK), |
4208 }; | 4160 }; |
4209 | 4161 |
4210 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 4162 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
4211 data_writes1, arraysize(data_writes1)); | 4163 data_writes1, arraysize(data_writes1)); |
4212 session_deps.socket_factory.AddSocketDataProvider(&data1); | 4164 session_deps.socket_factory->AddSocketDataProvider(&data1); |
4213 | 4165 |
4214 TestCompletionCallback callback1; | 4166 TestCompletionCallback callback1; |
4215 | 4167 |
4216 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 4168 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
4217 EXPECT_EQ(ERR_IO_PENDING, rv); | 4169 EXPECT_EQ(ERR_IO_PENDING, rv); |
4218 | 4170 |
4219 rv = callback1.WaitForResult(); | 4171 rv = callback1.WaitForResult(); |
4220 EXPECT_EQ(OK, rv); | 4172 EXPECT_EQ(OK, rv); |
4221 | 4173 |
4222 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4174 const HttpResponseInfo* response = trans->GetResponseInfo(); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4263 MockRead data_reads2[] = { | 4215 MockRead data_reads2[] = { |
4264 MockRead("HTTP/1.0 200 OK\r\n"), | 4216 MockRead("HTTP/1.0 200 OK\r\n"), |
4265 MockRead("Content-Length: 100\r\n\r\n"), | 4217 MockRead("Content-Length: 100\r\n\r\n"), |
4266 MockRead(SYNCHRONOUS, OK), | 4218 MockRead(SYNCHRONOUS, OK), |
4267 }; | 4219 }; |
4268 | 4220 |
4269 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 4221 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
4270 data_writes1, arraysize(data_writes1)); | 4222 data_writes1, arraysize(data_writes1)); |
4271 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 4223 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
4272 data_writes2, arraysize(data_writes2)); | 4224 data_writes2, arraysize(data_writes2)); |
4273 session_deps.socket_factory.AddSocketDataProvider(&data1); | 4225 session_deps.socket_factory->AddSocketDataProvider(&data1); |
4274 session_deps.socket_factory.AddSocketDataProvider(&data2); | 4226 session_deps.socket_factory->AddSocketDataProvider(&data2); |
4275 | 4227 |
4276 TestCompletionCallback callback1; | 4228 TestCompletionCallback callback1; |
4277 | 4229 |
4278 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 4230 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
4279 EXPECT_EQ(ERR_IO_PENDING, rv); | 4231 EXPECT_EQ(ERR_IO_PENDING, rv); |
4280 | 4232 |
4281 rv = callback1.WaitForResult(); | 4233 rv = callback1.WaitForResult(); |
4282 EXPECT_EQ(OK, rv); | 4234 EXPECT_EQ(OK, rv); |
4283 | 4235 |
4284 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 4236 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4351 MockRead("Content-Length: 100\r\n\r\n"), | 4303 MockRead("Content-Length: 100\r\n\r\n"), |
4352 MockRead(SYNCHRONOUS, OK), | 4304 MockRead(SYNCHRONOUS, OK), |
4353 }; | 4305 }; |
4354 | 4306 |
4355 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 4307 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
4356 data_writes1, arraysize(data_writes1)); | 4308 data_writes1, arraysize(data_writes1)); |
4357 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 4309 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
4358 data_writes2, arraysize(data_writes2)); | 4310 data_writes2, arraysize(data_writes2)); |
4359 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), | 4311 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), |
4360 data_writes3, arraysize(data_writes3)); | 4312 data_writes3, arraysize(data_writes3)); |
4361 session_deps.socket_factory.AddSocketDataProvider(&data1); | 4313 session_deps.socket_factory->AddSocketDataProvider(&data1); |
4362 session_deps.socket_factory.AddSocketDataProvider(&data2); | 4314 session_deps.socket_factory->AddSocketDataProvider(&data2); |
4363 session_deps.socket_factory.AddSocketDataProvider(&data3); | 4315 session_deps.socket_factory->AddSocketDataProvider(&data3); |
4364 | 4316 |
4365 TestCompletionCallback callback1; | 4317 TestCompletionCallback callback1; |
4366 | 4318 |
4367 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 4319 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
4368 EXPECT_EQ(ERR_IO_PENDING, rv); | 4320 EXPECT_EQ(ERR_IO_PENDING, rv); |
4369 | 4321 |
4370 rv = callback1.WaitForResult(); | 4322 rv = callback1.WaitForResult(); |
4371 EXPECT_EQ(OK, rv); | 4323 EXPECT_EQ(OK, rv); |
4372 | 4324 |
4373 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 4325 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
(...skipping 20 matching lines...) Expand all Loading... |
4394 response = trans->GetResponseInfo(); | 4346 response = trans->GetResponseInfo(); |
4395 ASSERT_TRUE(response != NULL); | 4347 ASSERT_TRUE(response != NULL); |
4396 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 4348 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
4397 EXPECT_EQ(100, response->headers->GetContentLength()); | 4349 EXPECT_EQ(100, response->headers->GetContentLength()); |
4398 } | 4350 } |
4399 } | 4351 } |
4400 | 4352 |
4401 // Tests that nonce count increments when multiple auth attempts | 4353 // Tests that nonce count increments when multiple auth attempts |
4402 // are started with the same nonce. | 4354 // are started with the same nonce. |
4403 TEST_F(HttpNetworkTransactionSpdy3Test, DigestPreAuthNonceCount) { | 4355 TEST_F(HttpNetworkTransactionSpdy3Test, DigestPreAuthNonceCount) { |
4404 SessionDependencies session_deps; | 4356 SpdySessionDependencies session_deps; |
4405 HttpAuthHandlerDigest::Factory* digest_factory = | 4357 HttpAuthHandlerDigest::Factory* digest_factory = |
4406 new HttpAuthHandlerDigest::Factory(); | 4358 new HttpAuthHandlerDigest::Factory(); |
4407 HttpAuthHandlerDigest::FixedNonceGenerator* nonce_generator = | 4359 HttpAuthHandlerDigest::FixedNonceGenerator* nonce_generator = |
4408 new HttpAuthHandlerDigest::FixedNonceGenerator("0123456789abcdef"); | 4360 new HttpAuthHandlerDigest::FixedNonceGenerator("0123456789abcdef"); |
4409 digest_factory->set_nonce_generator(nonce_generator); | 4361 digest_factory->set_nonce_generator(nonce_generator); |
4410 session_deps.http_auth_handler_factory.reset(digest_factory); | 4362 session_deps.http_auth_handler_factory.reset(digest_factory); |
4411 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 4363 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
4412 | 4364 |
4413 // Transaction 1: authenticate (foo, bar) on MyRealm1 | 4365 // Transaction 1: authenticate (foo, bar) on MyRealm1 |
4414 { | 4366 { |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4446 // Sever accepts the authorization. | 4398 // Sever accepts the authorization. |
4447 MockRead data_reads2[] = { | 4399 MockRead data_reads2[] = { |
4448 MockRead("HTTP/1.0 200 OK\r\n"), | 4400 MockRead("HTTP/1.0 200 OK\r\n"), |
4449 MockRead(SYNCHRONOUS, OK), | 4401 MockRead(SYNCHRONOUS, OK), |
4450 }; | 4402 }; |
4451 | 4403 |
4452 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 4404 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
4453 data_writes1, arraysize(data_writes1)); | 4405 data_writes1, arraysize(data_writes1)); |
4454 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 4406 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
4455 data_writes2, arraysize(data_writes2)); | 4407 data_writes2, arraysize(data_writes2)); |
4456 session_deps.socket_factory.AddSocketDataProvider(&data1); | 4408 session_deps.socket_factory->AddSocketDataProvider(&data1); |
4457 session_deps.socket_factory.AddSocketDataProvider(&data2); | 4409 session_deps.socket_factory->AddSocketDataProvider(&data2); |
4458 | 4410 |
4459 TestCompletionCallback callback1; | 4411 TestCompletionCallback callback1; |
4460 | 4412 |
4461 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 4413 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
4462 EXPECT_EQ(ERR_IO_PENDING, rv); | 4414 EXPECT_EQ(ERR_IO_PENDING, rv); |
4463 | 4415 |
4464 rv = callback1.WaitForResult(); | 4416 rv = callback1.WaitForResult(); |
4465 EXPECT_EQ(OK, rv); | 4417 EXPECT_EQ(OK, rv); |
4466 | 4418 |
4467 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4419 const HttpResponseInfo* response = trans->GetResponseInfo(); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4509 | 4461 |
4510 // Sever accepts the authorization. | 4462 // Sever accepts the authorization. |
4511 MockRead data_reads1[] = { | 4463 MockRead data_reads1[] = { |
4512 MockRead("HTTP/1.0 200 OK\r\n"), | 4464 MockRead("HTTP/1.0 200 OK\r\n"), |
4513 MockRead("Content-Length: 100\r\n\r\n"), | 4465 MockRead("Content-Length: 100\r\n\r\n"), |
4514 MockRead(SYNCHRONOUS, OK), | 4466 MockRead(SYNCHRONOUS, OK), |
4515 }; | 4467 }; |
4516 | 4468 |
4517 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 4469 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
4518 data_writes1, arraysize(data_writes1)); | 4470 data_writes1, arraysize(data_writes1)); |
4519 session_deps.socket_factory.AddSocketDataProvider(&data1); | 4471 session_deps.socket_factory->AddSocketDataProvider(&data1); |
4520 | 4472 |
4521 TestCompletionCallback callback1; | 4473 TestCompletionCallback callback1; |
4522 | 4474 |
4523 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 4475 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
4524 EXPECT_EQ(ERR_IO_PENDING, rv); | 4476 EXPECT_EQ(ERR_IO_PENDING, rv); |
4525 | 4477 |
4526 rv = callback1.WaitForResult(); | 4478 rv = callback1.WaitForResult(); |
4527 EXPECT_EQ(OK, rv); | 4479 EXPECT_EQ(OK, rv); |
4528 | 4480 |
4529 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4481 const HttpResponseInfo* response = trans->GetResponseInfo(); |
4530 ASSERT_TRUE(response != NULL); | 4482 ASSERT_TRUE(response != NULL); |
4531 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 4483 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
4532 } | 4484 } |
4533 } | 4485 } |
4534 | 4486 |
4535 // Test the ResetStateForRestart() private method. | 4487 // Test the ResetStateForRestart() private method. |
4536 TEST_F(HttpNetworkTransactionSpdy3Test, ResetStateForRestart) { | 4488 TEST_F(HttpNetworkTransactionSpdy3Test, ResetStateForRestart) { |
4537 // Create a transaction (the dependencies aren't important). | 4489 // Create a transaction (the dependencies aren't important). |
4538 SessionDependencies session_deps; | 4490 SpdySessionDependencies session_deps; |
4539 scoped_ptr<HttpNetworkTransaction> trans( | 4491 scoped_ptr<HttpNetworkTransaction> trans( |
4540 new HttpNetworkTransaction(CreateSession(&session_deps))); | 4492 new HttpNetworkTransaction(CreateSession(&session_deps))); |
4541 | 4493 |
4542 // Setup some state (which we expect ResetStateForRestart() will clear). | 4494 // Setup some state (which we expect ResetStateForRestart() will clear). |
4543 trans->read_buf_ = new IOBuffer(15); | 4495 trans->read_buf_ = new IOBuffer(15); |
4544 trans->read_buf_len_ = 15; | 4496 trans->read_buf_len_ = 15; |
4545 trans->request_headers_.SetHeader("Authorization", "NTLM"); | 4497 trans->request_headers_.SetHeader("Authorization", "NTLM"); |
4546 | 4498 |
4547 // Setup state in response_ | 4499 // Setup state in response_ |
4548 HttpResponseInfo* response = &trans->response_; | 4500 HttpResponseInfo* response = &trans->response_; |
(...skipping 26 matching lines...) Expand all Loading... |
4575 EXPECT_FALSE(response->vary_data.is_valid()); | 4527 EXPECT_FALSE(response->vary_data.is_valid()); |
4576 } | 4528 } |
4577 | 4529 |
4578 // Test HTTPS connections to a site with a bad certificate | 4530 // Test HTTPS connections to a site with a bad certificate |
4579 TEST_F(HttpNetworkTransactionSpdy3Test, HTTPSBadCertificate) { | 4531 TEST_F(HttpNetworkTransactionSpdy3Test, HTTPSBadCertificate) { |
4580 HttpRequestInfo request; | 4532 HttpRequestInfo request; |
4581 request.method = "GET"; | 4533 request.method = "GET"; |
4582 request.url = GURL("https://www.google.com/"); | 4534 request.url = GURL("https://www.google.com/"); |
4583 request.load_flags = 0; | 4535 request.load_flags = 0; |
4584 | 4536 |
4585 SessionDependencies session_deps; | 4537 SpdySessionDependencies session_deps; |
4586 scoped_ptr<HttpTransaction> trans( | 4538 scoped_ptr<HttpTransaction> trans( |
4587 new HttpNetworkTransaction(CreateSession(&session_deps))); | 4539 new HttpNetworkTransaction(CreateSession(&session_deps))); |
4588 | 4540 |
4589 MockWrite data_writes[] = { | 4541 MockWrite data_writes[] = { |
4590 MockWrite("GET / HTTP/1.1\r\n" | 4542 MockWrite("GET / HTTP/1.1\r\n" |
4591 "Host: www.google.com\r\n" | 4543 "Host: www.google.com\r\n" |
4592 "Connection: keep-alive\r\n\r\n"), | 4544 "Connection: keep-alive\r\n\r\n"), |
4593 }; | 4545 }; |
4594 | 4546 |
4595 MockRead data_reads[] = { | 4547 MockRead data_reads[] = { |
4596 MockRead("HTTP/1.0 200 OK\r\n"), | 4548 MockRead("HTTP/1.0 200 OK\r\n"), |
4597 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 4549 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
4598 MockRead("Content-Length: 100\r\n\r\n"), | 4550 MockRead("Content-Length: 100\r\n\r\n"), |
4599 MockRead(SYNCHRONOUS, OK), | 4551 MockRead(SYNCHRONOUS, OK), |
4600 }; | 4552 }; |
4601 | 4553 |
4602 StaticSocketDataProvider ssl_bad_certificate; | 4554 StaticSocketDataProvider ssl_bad_certificate; |
4603 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 4555 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
4604 data_writes, arraysize(data_writes)); | 4556 data_writes, arraysize(data_writes)); |
4605 SSLSocketDataProvider ssl_bad(ASYNC, ERR_CERT_AUTHORITY_INVALID); | 4557 SSLSocketDataProvider ssl_bad(ASYNC, ERR_CERT_AUTHORITY_INVALID); |
4606 SSLSocketDataProvider ssl(ASYNC, OK); | 4558 SSLSocketDataProvider ssl(ASYNC, OK); |
4607 | 4559 |
4608 session_deps.socket_factory.AddSocketDataProvider(&ssl_bad_certificate); | 4560 session_deps.socket_factory->AddSocketDataProvider(&ssl_bad_certificate); |
4609 session_deps.socket_factory.AddSocketDataProvider(&data); | 4561 session_deps.socket_factory->AddSocketDataProvider(&data); |
4610 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl_bad); | 4562 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_bad); |
4611 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 4563 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
4612 | 4564 |
4613 TestCompletionCallback callback; | 4565 TestCompletionCallback callback; |
4614 | 4566 |
4615 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 4567 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
4616 EXPECT_EQ(ERR_IO_PENDING, rv); | 4568 EXPECT_EQ(ERR_IO_PENDING, rv); |
4617 | 4569 |
4618 rv = callback.WaitForResult(); | 4570 rv = callback.WaitForResult(); |
4619 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, rv); | 4571 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, rv); |
4620 | 4572 |
4621 rv = trans->RestartIgnoringLastError(callback.callback()); | 4573 rv = trans->RestartIgnoringLastError(callback.callback()); |
4622 EXPECT_EQ(ERR_IO_PENDING, rv); | 4574 EXPECT_EQ(ERR_IO_PENDING, rv); |
4623 | 4575 |
4624 rv = callback.WaitForResult(); | 4576 rv = callback.WaitForResult(); |
4625 EXPECT_EQ(OK, rv); | 4577 EXPECT_EQ(OK, rv); |
4626 | 4578 |
4627 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4579 const HttpResponseInfo* response = trans->GetResponseInfo(); |
4628 | 4580 |
4629 ASSERT_TRUE(response != NULL); | 4581 ASSERT_TRUE(response != NULL); |
4630 EXPECT_EQ(100, response->headers->GetContentLength()); | 4582 EXPECT_EQ(100, response->headers->GetContentLength()); |
4631 } | 4583 } |
4632 | 4584 |
4633 // Test HTTPS connections to a site with a bad certificate, going through a | 4585 // Test HTTPS connections to a site with a bad certificate, going through a |
4634 // proxy | 4586 // proxy |
4635 TEST_F(HttpNetworkTransactionSpdy3Test, HTTPSBadCertificateViaProxy) { | 4587 TEST_F(HttpNetworkTransactionSpdy3Test, HTTPSBadCertificateViaProxy) { |
4636 SessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); | 4588 SpdySessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); |
4637 | 4589 |
4638 HttpRequestInfo request; | 4590 HttpRequestInfo request; |
4639 request.method = "GET"; | 4591 request.method = "GET"; |
4640 request.url = GURL("https://www.google.com/"); | 4592 request.url = GURL("https://www.google.com/"); |
4641 request.load_flags = 0; | 4593 request.load_flags = 0; |
4642 | 4594 |
4643 MockWrite proxy_writes[] = { | 4595 MockWrite proxy_writes[] = { |
4644 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 4596 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" |
4645 "Host: www.google.com\r\n" | 4597 "Host: www.google.com\r\n" |
4646 "Proxy-Connection: keep-alive\r\n\r\n"), | 4598 "Proxy-Connection: keep-alive\r\n\r\n"), |
(...skipping 22 matching lines...) Expand all Loading... |
4669 }; | 4621 }; |
4670 | 4622 |
4671 StaticSocketDataProvider ssl_bad_certificate( | 4623 StaticSocketDataProvider ssl_bad_certificate( |
4672 proxy_reads, arraysize(proxy_reads), | 4624 proxy_reads, arraysize(proxy_reads), |
4673 proxy_writes, arraysize(proxy_writes)); | 4625 proxy_writes, arraysize(proxy_writes)); |
4674 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 4626 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
4675 data_writes, arraysize(data_writes)); | 4627 data_writes, arraysize(data_writes)); |
4676 SSLSocketDataProvider ssl_bad(ASYNC, ERR_CERT_AUTHORITY_INVALID); | 4628 SSLSocketDataProvider ssl_bad(ASYNC, ERR_CERT_AUTHORITY_INVALID); |
4677 SSLSocketDataProvider ssl(ASYNC, OK); | 4629 SSLSocketDataProvider ssl(ASYNC, OK); |
4678 | 4630 |
4679 session_deps.socket_factory.AddSocketDataProvider(&ssl_bad_certificate); | 4631 session_deps.socket_factory->AddSocketDataProvider(&ssl_bad_certificate); |
4680 session_deps.socket_factory.AddSocketDataProvider(&data); | 4632 session_deps.socket_factory->AddSocketDataProvider(&data); |
4681 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl_bad); | 4633 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_bad); |
4682 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 4634 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
4683 | 4635 |
4684 TestCompletionCallback callback; | 4636 TestCompletionCallback callback; |
4685 | 4637 |
4686 for (int i = 0; i < 2; i++) { | 4638 for (int i = 0; i < 2; i++) { |
4687 session_deps.socket_factory.ResetNextMockIndexes(); | 4639 session_deps.socket_factory->ResetNextMockIndexes(); |
4688 | 4640 |
4689 scoped_ptr<HttpTransaction> trans( | 4641 scoped_ptr<HttpTransaction> trans( |
4690 new HttpNetworkTransaction(CreateSession(&session_deps))); | 4642 new HttpNetworkTransaction(CreateSession(&session_deps))); |
4691 | 4643 |
4692 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 4644 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
4693 EXPECT_EQ(ERR_IO_PENDING, rv); | 4645 EXPECT_EQ(ERR_IO_PENDING, rv); |
4694 | 4646 |
4695 rv = callback.WaitForResult(); | 4647 rv = callback.WaitForResult(); |
4696 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, rv); | 4648 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, rv); |
4697 | 4649 |
4698 rv = trans->RestartIgnoringLastError(callback.callback()); | 4650 rv = trans->RestartIgnoringLastError(callback.callback()); |
4699 EXPECT_EQ(ERR_IO_PENDING, rv); | 4651 EXPECT_EQ(ERR_IO_PENDING, rv); |
4700 | 4652 |
4701 rv = callback.WaitForResult(); | 4653 rv = callback.WaitForResult(); |
4702 EXPECT_EQ(OK, rv); | 4654 EXPECT_EQ(OK, rv); |
4703 | 4655 |
4704 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4656 const HttpResponseInfo* response = trans->GetResponseInfo(); |
4705 | 4657 |
4706 ASSERT_TRUE(response != NULL); | 4658 ASSERT_TRUE(response != NULL); |
4707 EXPECT_EQ(100, response->headers->GetContentLength()); | 4659 EXPECT_EQ(100, response->headers->GetContentLength()); |
4708 } | 4660 } |
4709 } | 4661 } |
4710 | 4662 |
4711 | 4663 |
4712 // Test HTTPS connections to a site, going through an HTTPS proxy | 4664 // Test HTTPS connections to a site, going through an HTTPS proxy |
4713 TEST_F(HttpNetworkTransactionSpdy3Test, HTTPSViaHttpsProxy) { | 4665 TEST_F(HttpNetworkTransactionSpdy3Test, HTTPSViaHttpsProxy) { |
4714 SessionDependencies session_deps(ProxyService::CreateFixed( | 4666 SpdySessionDependencies session_deps(ProxyService::CreateFixed( |
4715 "https://proxy:70")); | 4667 "https://proxy:70")); |
4716 | 4668 |
4717 HttpRequestInfo request; | 4669 HttpRequestInfo request; |
4718 request.method = "GET"; | 4670 request.method = "GET"; |
4719 request.url = GURL("https://www.google.com/"); | 4671 request.url = GURL("https://www.google.com/"); |
4720 request.load_flags = 0; | 4672 request.load_flags = 0; |
4721 | 4673 |
4722 MockWrite data_writes[] = { | 4674 MockWrite data_writes[] = { |
4723 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 4675 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" |
4724 "Host: www.google.com\r\n" | 4676 "Host: www.google.com\r\n" |
4725 "Proxy-Connection: keep-alive\r\n\r\n"), | 4677 "Proxy-Connection: keep-alive\r\n\r\n"), |
4726 MockWrite("GET / HTTP/1.1\r\n" | 4678 MockWrite("GET / HTTP/1.1\r\n" |
4727 "Host: www.google.com\r\n" | 4679 "Host: www.google.com\r\n" |
4728 "Connection: keep-alive\r\n\r\n"), | 4680 "Connection: keep-alive\r\n\r\n"), |
4729 }; | 4681 }; |
4730 | 4682 |
4731 MockRead data_reads[] = { | 4683 MockRead data_reads[] = { |
4732 MockRead("HTTP/1.0 200 Connected\r\n\r\n"), | 4684 MockRead("HTTP/1.0 200 Connected\r\n\r\n"), |
4733 MockRead("HTTP/1.1 200 OK\r\n"), | 4685 MockRead("HTTP/1.1 200 OK\r\n"), |
4734 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 4686 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
4735 MockRead("Content-Length: 100\r\n\r\n"), | 4687 MockRead("Content-Length: 100\r\n\r\n"), |
4736 MockRead(SYNCHRONOUS, OK), | 4688 MockRead(SYNCHRONOUS, OK), |
4737 }; | 4689 }; |
4738 | 4690 |
4739 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 4691 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
4740 data_writes, arraysize(data_writes)); | 4692 data_writes, arraysize(data_writes)); |
4741 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy | 4693 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy |
4742 SSLSocketDataProvider tunnel_ssl(ASYNC, OK); // SSL through the tunnel | 4694 SSLSocketDataProvider tunnel_ssl(ASYNC, OK); // SSL through the tunnel |
4743 | 4695 |
4744 session_deps.socket_factory.AddSocketDataProvider(&data); | 4696 session_deps.socket_factory->AddSocketDataProvider(&data); |
4745 session_deps.socket_factory.AddSSLSocketDataProvider(&proxy_ssl); | 4697 session_deps.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); |
4746 session_deps.socket_factory.AddSSLSocketDataProvider(&tunnel_ssl); | 4698 session_deps.socket_factory->AddSSLSocketDataProvider(&tunnel_ssl); |
4747 | 4699 |
4748 TestCompletionCallback callback; | 4700 TestCompletionCallback callback; |
4749 | 4701 |
4750 scoped_ptr<HttpTransaction> trans( | 4702 scoped_ptr<HttpTransaction> trans( |
4751 new HttpNetworkTransaction(CreateSession(&session_deps))); | 4703 new HttpNetworkTransaction(CreateSession(&session_deps))); |
4752 | 4704 |
4753 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 4705 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
4754 EXPECT_EQ(ERR_IO_PENDING, rv); | 4706 EXPECT_EQ(ERR_IO_PENDING, rv); |
4755 | 4707 |
4756 rv = callback.WaitForResult(); | 4708 rv = callback.WaitForResult(); |
4757 EXPECT_EQ(OK, rv); | 4709 EXPECT_EQ(OK, rv); |
4758 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4710 const HttpResponseInfo* response = trans->GetResponseInfo(); |
4759 | 4711 |
4760 ASSERT_TRUE(response != NULL); | 4712 ASSERT_TRUE(response != NULL); |
4761 | 4713 |
4762 EXPECT_TRUE(response->headers->IsKeepAlive()); | 4714 EXPECT_TRUE(response->headers->IsKeepAlive()); |
4763 EXPECT_EQ(200, response->headers->response_code()); | 4715 EXPECT_EQ(200, response->headers->response_code()); |
4764 EXPECT_EQ(100, response->headers->GetContentLength()); | 4716 EXPECT_EQ(100, response->headers->GetContentLength()); |
4765 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 4717 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
4766 } | 4718 } |
4767 | 4719 |
4768 // Test an HTTPS Proxy's ability to redirect a CONNECT request | 4720 // Test an HTTPS Proxy's ability to redirect a CONNECT request |
4769 TEST_F(HttpNetworkTransactionSpdy3Test, RedirectOfHttpsConnectViaHttpsProxy) { | 4721 TEST_F(HttpNetworkTransactionSpdy3Test, RedirectOfHttpsConnectViaHttpsProxy) { |
4770 SessionDependencies session_deps( | 4722 SpdySessionDependencies session_deps( |
4771 ProxyService::CreateFixed("https://proxy:70")); | 4723 ProxyService::CreateFixed("https://proxy:70")); |
4772 | 4724 |
4773 HttpRequestInfo request; | 4725 HttpRequestInfo request; |
4774 request.method = "GET"; | 4726 request.method = "GET"; |
4775 request.url = GURL("https://www.google.com/"); | 4727 request.url = GURL("https://www.google.com/"); |
4776 request.load_flags = 0; | 4728 request.load_flags = 0; |
4777 | 4729 |
4778 MockWrite data_writes[] = { | 4730 MockWrite data_writes[] = { |
4779 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 4731 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" |
4780 "Host: www.google.com\r\n" | 4732 "Host: www.google.com\r\n" |
4781 "Proxy-Connection: keep-alive\r\n\r\n"), | 4733 "Proxy-Connection: keep-alive\r\n\r\n"), |
4782 }; | 4734 }; |
4783 | 4735 |
4784 MockRead data_reads[] = { | 4736 MockRead data_reads[] = { |
4785 MockRead("HTTP/1.1 302 Redirect\r\n"), | 4737 MockRead("HTTP/1.1 302 Redirect\r\n"), |
4786 MockRead("Location: http://login.example.com/\r\n"), | 4738 MockRead("Location: http://login.example.com/\r\n"), |
4787 MockRead("Content-Length: 0\r\n\r\n"), | 4739 MockRead("Content-Length: 0\r\n\r\n"), |
4788 MockRead(SYNCHRONOUS, OK), | 4740 MockRead(SYNCHRONOUS, OK), |
4789 }; | 4741 }; |
4790 | 4742 |
4791 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 4743 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
4792 data_writes, arraysize(data_writes)); | 4744 data_writes, arraysize(data_writes)); |
4793 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy | 4745 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy |
4794 | 4746 |
4795 session_deps.socket_factory.AddSocketDataProvider(&data); | 4747 session_deps.socket_factory->AddSocketDataProvider(&data); |
4796 session_deps.socket_factory.AddSSLSocketDataProvider(&proxy_ssl); | 4748 session_deps.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); |
4797 | 4749 |
4798 TestCompletionCallback callback; | 4750 TestCompletionCallback callback; |
4799 | 4751 |
4800 scoped_ptr<HttpTransaction> trans( | 4752 scoped_ptr<HttpTransaction> trans( |
4801 new HttpNetworkTransaction(CreateSession(&session_deps))); | 4753 new HttpNetworkTransaction(CreateSession(&session_deps))); |
4802 | 4754 |
4803 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 4755 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
4804 EXPECT_EQ(ERR_IO_PENDING, rv); | 4756 EXPECT_EQ(ERR_IO_PENDING, rv); |
4805 | 4757 |
4806 rv = callback.WaitForResult(); | 4758 rv = callback.WaitForResult(); |
4807 EXPECT_EQ(OK, rv); | 4759 EXPECT_EQ(OK, rv); |
4808 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4760 const HttpResponseInfo* response = trans->GetResponseInfo(); |
4809 | 4761 |
4810 ASSERT_TRUE(response != NULL); | 4762 ASSERT_TRUE(response != NULL); |
4811 | 4763 |
4812 EXPECT_EQ(302, response->headers->response_code()); | 4764 EXPECT_EQ(302, response->headers->response_code()); |
4813 std::string url; | 4765 std::string url; |
4814 EXPECT_TRUE(response->headers->IsRedirect(&url)); | 4766 EXPECT_TRUE(response->headers->IsRedirect(&url)); |
4815 EXPECT_EQ("http://login.example.com/", url); | 4767 EXPECT_EQ("http://login.example.com/", url); |
4816 } | 4768 } |
4817 | 4769 |
4818 // Test an HTTPS (SPDY) Proxy's ability to redirect a CONNECT request | 4770 // Test an HTTPS (SPDY) Proxy's ability to redirect a CONNECT request |
4819 TEST_F(HttpNetworkTransactionSpdy3Test, RedirectOfHttpsConnectViaSpdyProxy) { | 4771 TEST_F(HttpNetworkTransactionSpdy3Test, RedirectOfHttpsConnectViaSpdyProxy) { |
4820 SessionDependencies session_deps( | 4772 SpdySessionDependencies session_deps( |
4821 ProxyService::CreateFixed("https://proxy:70")); | 4773 ProxyService::CreateFixed("https://proxy:70")); |
4822 | 4774 |
4823 HttpRequestInfo request; | 4775 HttpRequestInfo request; |
4824 request.method = "GET"; | 4776 request.method = "GET"; |
4825 request.url = GURL("https://www.google.com/"); | 4777 request.url = GURL("https://www.google.com/"); |
4826 request.load_flags = 0; | 4778 request.load_flags = 0; |
4827 | 4779 |
4828 scoped_ptr<SpdyFrame> conn(ConstructSpdyConnect(NULL, 0, 1)); | 4780 scoped_ptr<SpdyFrame> conn(ConstructSpdyConnect(NULL, 0, 1)); |
4829 scoped_ptr<SpdyFrame> goaway(ConstructSpdyRstStream(1, CANCEL)); | 4781 scoped_ptr<SpdyFrame> goaway(ConstructSpdyRstStream(1, CANCEL)); |
4830 MockWrite data_writes[] = { | 4782 MockWrite data_writes[] = { |
(...skipping 12 matching lines...) Expand all Loading... |
4843 MockRead(ASYNC, 0, 2), // EOF | 4795 MockRead(ASYNC, 0, 2), // EOF |
4844 }; | 4796 }; |
4845 | 4797 |
4846 DelayedSocketData data( | 4798 DelayedSocketData data( |
4847 1, // wait for one write to finish before reading. | 4799 1, // wait for one write to finish before reading. |
4848 data_reads, arraysize(data_reads), | 4800 data_reads, arraysize(data_reads), |
4849 data_writes, arraysize(data_writes)); | 4801 data_writes, arraysize(data_writes)); |
4850 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy | 4802 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy |
4851 proxy_ssl.SetNextProto(kProtoSPDY3); | 4803 proxy_ssl.SetNextProto(kProtoSPDY3); |
4852 | 4804 |
4853 session_deps.socket_factory.AddSocketDataProvider(&data); | 4805 session_deps.socket_factory->AddSocketDataProvider(&data); |
4854 session_deps.socket_factory.AddSSLSocketDataProvider(&proxy_ssl); | 4806 session_deps.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); |
4855 | 4807 |
4856 TestCompletionCallback callback; | 4808 TestCompletionCallback callback; |
4857 | 4809 |
4858 scoped_ptr<HttpTransaction> trans( | 4810 scoped_ptr<HttpTransaction> trans( |
4859 new HttpNetworkTransaction(CreateSession(&session_deps))); | 4811 new HttpNetworkTransaction(CreateSession(&session_deps))); |
4860 | 4812 |
4861 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 4813 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
4862 EXPECT_EQ(ERR_IO_PENDING, rv); | 4814 EXPECT_EQ(ERR_IO_PENDING, rv); |
4863 | 4815 |
4864 rv = callback.WaitForResult(); | 4816 rv = callback.WaitForResult(); |
4865 EXPECT_EQ(OK, rv); | 4817 EXPECT_EQ(OK, rv); |
4866 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4818 const HttpResponseInfo* response = trans->GetResponseInfo(); |
4867 | 4819 |
4868 ASSERT_TRUE(response != NULL); | 4820 ASSERT_TRUE(response != NULL); |
4869 | 4821 |
4870 EXPECT_EQ(302, response->headers->response_code()); | 4822 EXPECT_EQ(302, response->headers->response_code()); |
4871 std::string url; | 4823 std::string url; |
4872 EXPECT_TRUE(response->headers->IsRedirect(&url)); | 4824 EXPECT_TRUE(response->headers->IsRedirect(&url)); |
4873 EXPECT_EQ("http://login.example.com/", url); | 4825 EXPECT_EQ("http://login.example.com/", url); |
4874 } | 4826 } |
4875 | 4827 |
4876 // Test that an HTTPS proxy's response to a CONNECT request is filtered. | 4828 // Test that an HTTPS proxy's response to a CONNECT request is filtered. |
4877 TEST_F(HttpNetworkTransactionSpdy3Test, | 4829 TEST_F(HttpNetworkTransactionSpdy3Test, |
4878 ErrorResponseToHttpsConnectViaHttpsProxy) { | 4830 ErrorResponseToHttpsConnectViaHttpsProxy) { |
4879 SessionDependencies session_deps( | 4831 SpdySessionDependencies session_deps( |
4880 ProxyService::CreateFixed("https://proxy:70")); | 4832 ProxyService::CreateFixed("https://proxy:70")); |
4881 | 4833 |
4882 HttpRequestInfo request; | 4834 HttpRequestInfo request; |
4883 request.method = "GET"; | 4835 request.method = "GET"; |
4884 request.url = GURL("https://www.google.com/"); | 4836 request.url = GURL("https://www.google.com/"); |
4885 request.load_flags = 0; | 4837 request.load_flags = 0; |
4886 | 4838 |
4887 MockWrite data_writes[] = { | 4839 MockWrite data_writes[] = { |
4888 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 4840 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" |
4889 "Host: www.google.com\r\n" | 4841 "Host: www.google.com\r\n" |
4890 "Proxy-Connection: keep-alive\r\n\r\n"), | 4842 "Proxy-Connection: keep-alive\r\n\r\n"), |
4891 }; | 4843 }; |
4892 | 4844 |
4893 MockRead data_reads[] = { | 4845 MockRead data_reads[] = { |
4894 MockRead("HTTP/1.1 404 Not Found\r\n"), | 4846 MockRead("HTTP/1.1 404 Not Found\r\n"), |
4895 MockRead("Content-Length: 23\r\n\r\n"), | 4847 MockRead("Content-Length: 23\r\n\r\n"), |
4896 MockRead("The host does not exist"), | 4848 MockRead("The host does not exist"), |
4897 MockRead(SYNCHRONOUS, OK), | 4849 MockRead(SYNCHRONOUS, OK), |
4898 }; | 4850 }; |
4899 | 4851 |
4900 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 4852 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
4901 data_writes, arraysize(data_writes)); | 4853 data_writes, arraysize(data_writes)); |
4902 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy | 4854 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy |
4903 | 4855 |
4904 session_deps.socket_factory.AddSocketDataProvider(&data); | 4856 session_deps.socket_factory->AddSocketDataProvider(&data); |
4905 session_deps.socket_factory.AddSSLSocketDataProvider(&proxy_ssl); | 4857 session_deps.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); |
4906 | 4858 |
4907 TestCompletionCallback callback; | 4859 TestCompletionCallback callback; |
4908 | 4860 |
4909 scoped_ptr<HttpTransaction> trans( | 4861 scoped_ptr<HttpTransaction> trans( |
4910 new HttpNetworkTransaction(CreateSession(&session_deps))); | 4862 new HttpNetworkTransaction(CreateSession(&session_deps))); |
4911 | 4863 |
4912 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 4864 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
4913 EXPECT_EQ(ERR_IO_PENDING, rv); | 4865 EXPECT_EQ(ERR_IO_PENDING, rv); |
4914 | 4866 |
4915 rv = callback.WaitForResult(); | 4867 rv = callback.WaitForResult(); |
4916 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 4868 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); |
4917 | 4869 |
4918 // TODO(ttuttle): Anything else to check here? | 4870 // TODO(ttuttle): Anything else to check here? |
4919 } | 4871 } |
4920 | 4872 |
4921 // Test that a SPDY proxy's response to a CONNECT request is filtered. | 4873 // Test that a SPDY proxy's response to a CONNECT request is filtered. |
4922 TEST_F(HttpNetworkTransactionSpdy3Test, | 4874 TEST_F(HttpNetworkTransactionSpdy3Test, |
4923 ErrorResponseToHttpsConnectViaSpdyProxy) { | 4875 ErrorResponseToHttpsConnectViaSpdyProxy) { |
4924 SessionDependencies session_deps( | 4876 SpdySessionDependencies session_deps( |
4925 ProxyService::CreateFixed("https://proxy:70")); | 4877 ProxyService::CreateFixed("https://proxy:70")); |
4926 | 4878 |
4927 HttpRequestInfo request; | 4879 HttpRequestInfo request; |
4928 request.method = "GET"; | 4880 request.method = "GET"; |
4929 request.url = GURL("https://www.google.com/"); | 4881 request.url = GURL("https://www.google.com/"); |
4930 request.load_flags = 0; | 4882 request.load_flags = 0; |
4931 | 4883 |
4932 scoped_ptr<SpdyFrame> conn(ConstructSpdyConnect(NULL, 0, 1)); | 4884 scoped_ptr<SpdyFrame> conn(ConstructSpdyConnect(NULL, 0, 1)); |
4933 scoped_ptr<SpdyFrame> rst(ConstructSpdyRstStream(1, CANCEL)); | 4885 scoped_ptr<SpdyFrame> rst(ConstructSpdyRstStream(1, CANCEL)); |
4934 MockWrite data_writes[] = { | 4886 MockWrite data_writes[] = { |
(...skipping 16 matching lines...) Expand all Loading... |
4951 MockRead(ASYNC, 0, 4), // EOF | 4903 MockRead(ASYNC, 0, 4), // EOF |
4952 }; | 4904 }; |
4953 | 4905 |
4954 DelayedSocketData data( | 4906 DelayedSocketData data( |
4955 1, // wait for one write to finish before reading. | 4907 1, // wait for one write to finish before reading. |
4956 data_reads, arraysize(data_reads), | 4908 data_reads, arraysize(data_reads), |
4957 data_writes, arraysize(data_writes)); | 4909 data_writes, arraysize(data_writes)); |
4958 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy | 4910 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy |
4959 proxy_ssl.SetNextProto(kProtoSPDY3); | 4911 proxy_ssl.SetNextProto(kProtoSPDY3); |
4960 | 4912 |
4961 session_deps.socket_factory.AddSocketDataProvider(&data); | 4913 session_deps.socket_factory->AddSocketDataProvider(&data); |
4962 session_deps.socket_factory.AddSSLSocketDataProvider(&proxy_ssl); | 4914 session_deps.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); |
4963 | 4915 |
4964 TestCompletionCallback callback; | 4916 TestCompletionCallback callback; |
4965 | 4917 |
4966 scoped_ptr<HttpTransaction> trans( | 4918 scoped_ptr<HttpTransaction> trans( |
4967 new HttpNetworkTransaction(CreateSession(&session_deps))); | 4919 new HttpNetworkTransaction(CreateSession(&session_deps))); |
4968 | 4920 |
4969 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 4921 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
4970 EXPECT_EQ(ERR_IO_PENDING, rv); | 4922 EXPECT_EQ(ERR_IO_PENDING, rv); |
4971 | 4923 |
4972 rv = callback.WaitForResult(); | 4924 rv = callback.WaitForResult(); |
4973 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 4925 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); |
4974 | 4926 |
4975 // TODO(ttuttle): Anything else to check here? | 4927 // TODO(ttuttle): Anything else to check here? |
4976 } | 4928 } |
4977 | 4929 |
4978 // Test the request-challenge-retry sequence for basic auth, through | 4930 // Test the request-challenge-retry sequence for basic auth, through |
4979 // a SPDY proxy over a single SPDY session. | 4931 // a SPDY proxy over a single SPDY session. |
4980 TEST_F(HttpNetworkTransactionSpdy3Test, BasicAuthSpdyProxy) { | 4932 TEST_F(HttpNetworkTransactionSpdy3Test, BasicAuthSpdyProxy) { |
4981 HttpRequestInfo request; | 4933 HttpRequestInfo request; |
4982 request.method = "GET"; | 4934 request.method = "GET"; |
4983 request.url = GURL("https://www.google.com/"); | 4935 request.url = GURL("https://www.google.com/"); |
4984 // when the no authentication data flag is set. | 4936 // when the no authentication data flag is set. |
4985 request.load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA; | 4937 request.load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA; |
4986 | 4938 |
4987 // Configure against https proxy server "myproxy:70". | 4939 // Configure against https proxy server "myproxy:70". |
4988 SessionDependencies session_deps( | 4940 SpdySessionDependencies session_deps( |
4989 ProxyService::CreateFixed("https://myproxy:70")); | 4941 ProxyService::CreateFixed("https://myproxy:70")); |
4990 CapturingBoundNetLog log; | 4942 CapturingBoundNetLog log; |
4991 session_deps.net_log = log.bound().net_log(); | 4943 session_deps.net_log = log.bound().net_log(); |
4992 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 4944 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
4993 | 4945 |
4994 // Since we have proxy, should try to establish tunnel. | 4946 // Since we have proxy, should try to establish tunnel. |
4995 scoped_ptr<SpdyFrame> req(ConstructSpdyConnect(NULL, 0, 1)); | 4947 scoped_ptr<SpdyFrame> req(ConstructSpdyConnect(NULL, 0, 1)); |
4996 scoped_ptr<SpdyFrame> rst(ConstructSpdyRstStream(1, CANCEL)); | 4948 scoped_ptr<SpdyFrame> rst(ConstructSpdyRstStream(1, CANCEL)); |
4997 | 4949 |
4998 // After calling trans->RestartWithAuth(), this is the request we should | 4950 // After calling trans->RestartWithAuth(), this is the request we should |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5047 CreateMockRead(*conn_auth_resp, 2, ASYNC), | 4999 CreateMockRead(*conn_auth_resp, 2, ASYNC), |
5048 CreateMockRead(*conn_resp, 6, ASYNC), | 5000 CreateMockRead(*conn_resp, 6, ASYNC), |
5049 CreateMockRead(*wrapped_get_resp, 9, ASYNC), | 5001 CreateMockRead(*wrapped_get_resp, 9, ASYNC), |
5050 CreateMockRead(*wrapped_body, 10, ASYNC), | 5002 CreateMockRead(*wrapped_body, 10, ASYNC), |
5051 MockRead(SYNCHRONOUS, ERR_IO_PENDING), // EOF. May or may not be read. | 5003 MockRead(SYNCHRONOUS, ERR_IO_PENDING), // EOF. May or may not be read. |
5052 }; | 5004 }; |
5053 | 5005 |
5054 OrderedSocketData spdy_data( | 5006 OrderedSocketData spdy_data( |
5055 spdy_reads, arraysize(spdy_reads), | 5007 spdy_reads, arraysize(spdy_reads), |
5056 spdy_writes, arraysize(spdy_writes)); | 5008 spdy_writes, arraysize(spdy_writes)); |
5057 session_deps.socket_factory.AddSocketDataProvider(&spdy_data); | 5009 session_deps.socket_factory->AddSocketDataProvider(&spdy_data); |
5058 // Negotiate SPDY to the proxy | 5010 // Negotiate SPDY to the proxy |
5059 SSLSocketDataProvider proxy(ASYNC, OK); | 5011 SSLSocketDataProvider proxy(ASYNC, OK); |
5060 proxy.SetNextProto(kProtoSPDY3); | 5012 proxy.SetNextProto(kProtoSPDY3); |
5061 session_deps.socket_factory.AddSSLSocketDataProvider(&proxy); | 5013 session_deps.socket_factory->AddSSLSocketDataProvider(&proxy); |
5062 // Vanilla SSL to the server | 5014 // Vanilla SSL to the server |
5063 SSLSocketDataProvider server(ASYNC, OK); | 5015 SSLSocketDataProvider server(ASYNC, OK); |
5064 session_deps.socket_factory.AddSSLSocketDataProvider(&server); | 5016 session_deps.socket_factory->AddSSLSocketDataProvider(&server); |
5065 | 5017 |
5066 TestCompletionCallback callback1; | 5018 TestCompletionCallback callback1; |
5067 | 5019 |
5068 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 5020 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
5069 | 5021 |
5070 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 5022 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
5071 EXPECT_EQ(ERR_IO_PENDING, rv); | 5023 EXPECT_EQ(ERR_IO_PENDING, rv); |
5072 | 5024 |
5073 rv = callback1.WaitForResult(); | 5025 rv = callback1.WaitForResult(); |
5074 EXPECT_EQ(OK, rv); | 5026 EXPECT_EQ(OK, rv); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5125 0x01, 0x00, 0x00, 0x06, // FIN, length | 5077 0x01, 0x00, 0x00, 0x06, // FIN, length |
5126 'p', 'u', 's', 'h', 'e', 'd' // "pushed" | 5078 'p', 'u', 's', 'h', 'e', 'd' // "pushed" |
5127 }; | 5079 }; |
5128 | 5080 |
5129 request.method = "GET"; | 5081 request.method = "GET"; |
5130 request.url = GURL("http://www.google.com/"); | 5082 request.url = GURL("http://www.google.com/"); |
5131 push_request.method = "GET"; | 5083 push_request.method = "GET"; |
5132 push_request.url = GURL("http://www.another-origin.com/foo.dat"); | 5084 push_request.url = GURL("http://www.another-origin.com/foo.dat"); |
5133 | 5085 |
5134 // Configure against https proxy server "myproxy:70". | 5086 // Configure against https proxy server "myproxy:70". |
5135 SessionDependencies session_deps( | 5087 SpdySessionDependencies session_deps( |
5136 ProxyService::CreateFixed("https://myproxy:70")); | 5088 ProxyService::CreateFixed("https://myproxy:70")); |
5137 CapturingBoundNetLog log; | 5089 CapturingBoundNetLog log; |
5138 session_deps.net_log = log.bound().net_log(); | 5090 session_deps.net_log = log.bound().net_log(); |
5139 | 5091 |
5140 // Enable cross-origin push. | 5092 // Enable cross-origin push. |
5141 session_deps.trusted_spdy_proxy = "myproxy:70"; | 5093 session_deps.trusted_spdy_proxy = "myproxy:70"; |
5142 | 5094 |
5143 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 5095 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
5144 | 5096 |
5145 scoped_ptr<SpdyFrame> | 5097 scoped_ptr<SpdyFrame> |
(...skipping 21 matching lines...) Expand all Loading... |
5167 CreateMockRead(*stream2_syn, 3, ASYNC), | 5119 CreateMockRead(*stream2_syn, 3, ASYNC), |
5168 CreateMockRead(*stream1_body, 4, ASYNC), | 5120 CreateMockRead(*stream1_body, 4, ASYNC), |
5169 MockRead(ASYNC, reinterpret_cast<const char*>(kPushBodyFrame), | 5121 MockRead(ASYNC, reinterpret_cast<const char*>(kPushBodyFrame), |
5170 arraysize(kPushBodyFrame), 5), | 5122 arraysize(kPushBodyFrame), 5), |
5171 MockRead(ASYNC, ERR_IO_PENDING, 6), // Force a pause | 5123 MockRead(ASYNC, ERR_IO_PENDING, 6), // Force a pause |
5172 }; | 5124 }; |
5173 | 5125 |
5174 OrderedSocketData spdy_data( | 5126 OrderedSocketData spdy_data( |
5175 spdy_reads, arraysize(spdy_reads), | 5127 spdy_reads, arraysize(spdy_reads), |
5176 spdy_writes, arraysize(spdy_writes)); | 5128 spdy_writes, arraysize(spdy_writes)); |
5177 session_deps.socket_factory.AddSocketDataProvider(&spdy_data); | 5129 session_deps.socket_factory->AddSocketDataProvider(&spdy_data); |
5178 // Negotiate SPDY to the proxy | 5130 // Negotiate SPDY to the proxy |
5179 SSLSocketDataProvider proxy(ASYNC, OK); | 5131 SSLSocketDataProvider proxy(ASYNC, OK); |
5180 proxy.SetNextProto(kProtoSPDY3); | 5132 proxy.SetNextProto(kProtoSPDY3); |
5181 session_deps.socket_factory.AddSSLSocketDataProvider(&proxy); | 5133 session_deps.socket_factory->AddSSLSocketDataProvider(&proxy); |
5182 | 5134 |
5183 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 5135 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
5184 TestCompletionCallback callback; | 5136 TestCompletionCallback callback; |
5185 int rv = trans->Start(&request, callback.callback(), log.bound()); | 5137 int rv = trans->Start(&request, callback.callback(), log.bound()); |
5186 EXPECT_EQ(ERR_IO_PENDING, rv); | 5138 EXPECT_EQ(ERR_IO_PENDING, rv); |
5187 | 5139 |
5188 rv = callback.WaitForResult(); | 5140 rv = callback.WaitForResult(); |
5189 EXPECT_EQ(OK, rv); | 5141 EXPECT_EQ(OK, rv); |
5190 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5142 const HttpResponseInfo* response = trans->GetResponseInfo(); |
5191 | 5143 |
(...skipping 30 matching lines...) Expand all Loading... |
5222 } | 5174 } |
5223 | 5175 |
5224 // Test that an explicitly trusted SPDY proxy cannot push HTTPS content. | 5176 // Test that an explicitly trusted SPDY proxy cannot push HTTPS content. |
5225 TEST_F(HttpNetworkTransactionSpdy3Test, CrossOriginProxyPushCorrectness) { | 5177 TEST_F(HttpNetworkTransactionSpdy3Test, CrossOriginProxyPushCorrectness) { |
5226 HttpRequestInfo request; | 5178 HttpRequestInfo request; |
5227 | 5179 |
5228 request.method = "GET"; | 5180 request.method = "GET"; |
5229 request.url = GURL("http://www.google.com/"); | 5181 request.url = GURL("http://www.google.com/"); |
5230 | 5182 |
5231 // Configure against https proxy server "myproxy:70". | 5183 // Configure against https proxy server "myproxy:70". |
5232 SessionDependencies session_deps( | 5184 SpdySessionDependencies session_deps( |
5233 ProxyService::CreateFixed("https://myproxy:70")); | 5185 ProxyService::CreateFixed("https://myproxy:70")); |
5234 CapturingBoundNetLog log; | 5186 CapturingBoundNetLog log; |
5235 session_deps.net_log = log.bound().net_log(); | 5187 session_deps.net_log = log.bound().net_log(); |
5236 | 5188 |
5237 // Enable cross-origin push. | 5189 // Enable cross-origin push. |
5238 session_deps.trusted_spdy_proxy = "myproxy:70"; | 5190 session_deps.trusted_spdy_proxy = "myproxy:70"; |
5239 | 5191 |
5240 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 5192 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
5241 | 5193 |
5242 scoped_ptr<SpdyFrame> | 5194 scoped_ptr<SpdyFrame> |
(...skipping 23 matching lines...) Expand all Loading... |
5266 MockRead spdy_reads[] = { | 5218 MockRead spdy_reads[] = { |
5267 CreateMockRead(*stream1_reply, 2, ASYNC), | 5219 CreateMockRead(*stream1_reply, 2, ASYNC), |
5268 CreateMockRead(*stream2_syn, 3, ASYNC), | 5220 CreateMockRead(*stream2_syn, 3, ASYNC), |
5269 CreateMockRead(*stream1_body, 5, ASYNC), | 5221 CreateMockRead(*stream1_body, 5, ASYNC), |
5270 MockRead(ASYNC, ERR_IO_PENDING, 6), // Force a pause | 5222 MockRead(ASYNC, ERR_IO_PENDING, 6), // Force a pause |
5271 }; | 5223 }; |
5272 | 5224 |
5273 OrderedSocketData spdy_data( | 5225 OrderedSocketData spdy_data( |
5274 spdy_reads, arraysize(spdy_reads), | 5226 spdy_reads, arraysize(spdy_reads), |
5275 spdy_writes, arraysize(spdy_writes)); | 5227 spdy_writes, arraysize(spdy_writes)); |
5276 session_deps.socket_factory.AddSocketDataProvider(&spdy_data); | 5228 session_deps.socket_factory->AddSocketDataProvider(&spdy_data); |
5277 // Negotiate SPDY to the proxy | 5229 // Negotiate SPDY to the proxy |
5278 SSLSocketDataProvider proxy(ASYNC, OK); | 5230 SSLSocketDataProvider proxy(ASYNC, OK); |
5279 proxy.SetNextProto(kProtoSPDY3); | 5231 proxy.SetNextProto(kProtoSPDY3); |
5280 session_deps.socket_factory.AddSSLSocketDataProvider(&proxy); | 5232 session_deps.socket_factory->AddSSLSocketDataProvider(&proxy); |
5281 | 5233 |
5282 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 5234 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
5283 TestCompletionCallback callback; | 5235 TestCompletionCallback callback; |
5284 int rv = trans->Start(&request, callback.callback(), log.bound()); | 5236 int rv = trans->Start(&request, callback.callback(), log.bound()); |
5285 EXPECT_EQ(ERR_IO_PENDING, rv); | 5237 EXPECT_EQ(ERR_IO_PENDING, rv); |
5286 | 5238 |
5287 rv = callback.WaitForResult(); | 5239 rv = callback.WaitForResult(); |
5288 EXPECT_EQ(OK, rv); | 5240 EXPECT_EQ(OK, rv); |
5289 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5241 const HttpResponseInfo* response = trans->GetResponseInfo(); |
5290 | 5242 |
5291 ASSERT_TRUE(response != NULL); | 5243 ASSERT_TRUE(response != NULL); |
5292 EXPECT_TRUE(response->headers->IsKeepAlive()); | 5244 EXPECT_TRUE(response->headers->IsKeepAlive()); |
5293 | 5245 |
5294 EXPECT_EQ(200, response->headers->response_code()); | 5246 EXPECT_EQ(200, response->headers->response_code()); |
5295 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 5247 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
5296 | 5248 |
5297 std::string response_data; | 5249 std::string response_data; |
5298 rv = ReadTransaction(trans.get(), &response_data); | 5250 rv = ReadTransaction(trans.get(), &response_data); |
5299 EXPECT_EQ(OK, rv); | 5251 EXPECT_EQ(OK, rv); |
5300 EXPECT_EQ("hello!", response_data); | 5252 EXPECT_EQ("hello!", response_data); |
5301 | 5253 |
5302 trans.reset(); | 5254 trans.reset(); |
5303 session->CloseAllConnections(); | 5255 session->CloseAllConnections(); |
5304 } | 5256 } |
5305 | 5257 |
5306 // Test HTTPS connections to a site with a bad certificate, going through an | 5258 // Test HTTPS connections to a site with a bad certificate, going through an |
5307 // HTTPS proxy | 5259 // HTTPS proxy |
5308 TEST_F(HttpNetworkTransactionSpdy3Test, HTTPSBadCertificateViaHttpsProxy) { | 5260 TEST_F(HttpNetworkTransactionSpdy3Test, HTTPSBadCertificateViaHttpsProxy) { |
5309 SessionDependencies session_deps(ProxyService::CreateFixed( | 5261 SpdySessionDependencies session_deps(ProxyService::CreateFixed( |
5310 "https://proxy:70")); | 5262 "https://proxy:70")); |
5311 | 5263 |
5312 HttpRequestInfo request; | 5264 HttpRequestInfo request; |
5313 request.method = "GET"; | 5265 request.method = "GET"; |
5314 request.url = GURL("https://www.google.com/"); | 5266 request.url = GURL("https://www.google.com/"); |
5315 request.load_flags = 0; | 5267 request.load_flags = 0; |
5316 | 5268 |
5317 // Attempt to fetch the URL from a server with a bad cert | 5269 // Attempt to fetch the URL from a server with a bad cert |
5318 MockWrite bad_cert_writes[] = { | 5270 MockWrite bad_cert_writes[] = { |
5319 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 5271 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" |
(...skipping 26 matching lines...) Expand all Loading... |
5346 | 5298 |
5347 StaticSocketDataProvider ssl_bad_certificate( | 5299 StaticSocketDataProvider ssl_bad_certificate( |
5348 bad_cert_reads, arraysize(bad_cert_reads), | 5300 bad_cert_reads, arraysize(bad_cert_reads), |
5349 bad_cert_writes, arraysize(bad_cert_writes)); | 5301 bad_cert_writes, arraysize(bad_cert_writes)); |
5350 StaticSocketDataProvider data(good_cert_reads, arraysize(good_cert_reads), | 5302 StaticSocketDataProvider data(good_cert_reads, arraysize(good_cert_reads), |
5351 good_data_writes, arraysize(good_data_writes)); | 5303 good_data_writes, arraysize(good_data_writes)); |
5352 SSLSocketDataProvider ssl_bad(ASYNC, ERR_CERT_AUTHORITY_INVALID); | 5304 SSLSocketDataProvider ssl_bad(ASYNC, ERR_CERT_AUTHORITY_INVALID); |
5353 SSLSocketDataProvider ssl(ASYNC, OK); | 5305 SSLSocketDataProvider ssl(ASYNC, OK); |
5354 | 5306 |
5355 // SSL to the proxy, then CONNECT request, then SSL with bad certificate | 5307 // SSL to the proxy, then CONNECT request, then SSL with bad certificate |
5356 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 5308 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
5357 session_deps.socket_factory.AddSocketDataProvider(&ssl_bad_certificate); | 5309 session_deps.socket_factory->AddSocketDataProvider(&ssl_bad_certificate); |
5358 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl_bad); | 5310 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_bad); |
5359 | 5311 |
5360 // SSL to the proxy, then CONNECT request, then valid SSL certificate | 5312 // SSL to the proxy, then CONNECT request, then valid SSL certificate |
5361 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 5313 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
5362 session_deps.socket_factory.AddSocketDataProvider(&data); | 5314 session_deps.socket_factory->AddSocketDataProvider(&data); |
5363 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 5315 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
5364 | 5316 |
5365 TestCompletionCallback callback; | 5317 TestCompletionCallback callback; |
5366 | 5318 |
5367 scoped_ptr<HttpTransaction> trans( | 5319 scoped_ptr<HttpTransaction> trans( |
5368 new HttpNetworkTransaction(CreateSession(&session_deps))); | 5320 new HttpNetworkTransaction(CreateSession(&session_deps))); |
5369 | 5321 |
5370 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 5322 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
5371 EXPECT_EQ(ERR_IO_PENDING, rv); | 5323 EXPECT_EQ(ERR_IO_PENDING, rv); |
5372 | 5324 |
5373 rv = callback.WaitForResult(); | 5325 rv = callback.WaitForResult(); |
(...skipping 11 matching lines...) Expand all Loading... |
5385 EXPECT_EQ(100, response->headers->GetContentLength()); | 5337 EXPECT_EQ(100, response->headers->GetContentLength()); |
5386 } | 5338 } |
5387 | 5339 |
5388 TEST_F(HttpNetworkTransactionSpdy3Test, BuildRequest_UserAgent) { | 5340 TEST_F(HttpNetworkTransactionSpdy3Test, BuildRequest_UserAgent) { |
5389 HttpRequestInfo request; | 5341 HttpRequestInfo request; |
5390 request.method = "GET"; | 5342 request.method = "GET"; |
5391 request.url = GURL("http://www.google.com/"); | 5343 request.url = GURL("http://www.google.com/"); |
5392 request.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent, | 5344 request.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent, |
5393 "Chromium Ultra Awesome X Edition"); | 5345 "Chromium Ultra Awesome X Edition"); |
5394 | 5346 |
5395 SessionDependencies session_deps; | 5347 SpdySessionDependencies session_deps; |
5396 scoped_ptr<HttpTransaction> trans( | 5348 scoped_ptr<HttpTransaction> trans( |
5397 new HttpNetworkTransaction(CreateSession(&session_deps))); | 5349 new HttpNetworkTransaction(CreateSession(&session_deps))); |
5398 | 5350 |
5399 MockWrite data_writes[] = { | 5351 MockWrite data_writes[] = { |
5400 MockWrite("GET / HTTP/1.1\r\n" | 5352 MockWrite("GET / HTTP/1.1\r\n" |
5401 "Host: www.google.com\r\n" | 5353 "Host: www.google.com\r\n" |
5402 "Connection: keep-alive\r\n" | 5354 "Connection: keep-alive\r\n" |
5403 "User-Agent: Chromium Ultra Awesome X Edition\r\n\r\n"), | 5355 "User-Agent: Chromium Ultra Awesome X Edition\r\n\r\n"), |
5404 }; | 5356 }; |
5405 | 5357 |
5406 // Lastly, the server responds with the actual content. | 5358 // Lastly, the server responds with the actual content. |
5407 MockRead data_reads[] = { | 5359 MockRead data_reads[] = { |
5408 MockRead("HTTP/1.0 200 OK\r\n"), | 5360 MockRead("HTTP/1.0 200 OK\r\n"), |
5409 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 5361 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
5410 MockRead("Content-Length: 100\r\n\r\n"), | 5362 MockRead("Content-Length: 100\r\n\r\n"), |
5411 MockRead(SYNCHRONOUS, OK), | 5363 MockRead(SYNCHRONOUS, OK), |
5412 }; | 5364 }; |
5413 | 5365 |
5414 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 5366 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
5415 data_writes, arraysize(data_writes)); | 5367 data_writes, arraysize(data_writes)); |
5416 session_deps.socket_factory.AddSocketDataProvider(&data); | 5368 session_deps.socket_factory->AddSocketDataProvider(&data); |
5417 | 5369 |
5418 TestCompletionCallback callback; | 5370 TestCompletionCallback callback; |
5419 | 5371 |
5420 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 5372 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
5421 EXPECT_EQ(ERR_IO_PENDING, rv); | 5373 EXPECT_EQ(ERR_IO_PENDING, rv); |
5422 | 5374 |
5423 rv = callback.WaitForResult(); | 5375 rv = callback.WaitForResult(); |
5424 EXPECT_EQ(OK, rv); | 5376 EXPECT_EQ(OK, rv); |
5425 } | 5377 } |
5426 | 5378 |
5427 TEST_F(HttpNetworkTransactionSpdy3Test, BuildRequest_UserAgentOverTunnel) { | 5379 TEST_F(HttpNetworkTransactionSpdy3Test, BuildRequest_UserAgentOverTunnel) { |
5428 HttpRequestInfo request; | 5380 HttpRequestInfo request; |
5429 request.method = "GET"; | 5381 request.method = "GET"; |
5430 request.url = GURL("https://www.google.com/"); | 5382 request.url = GURL("https://www.google.com/"); |
5431 request.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent, | 5383 request.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent, |
5432 "Chromium Ultra Awesome X Edition"); | 5384 "Chromium Ultra Awesome X Edition"); |
5433 | 5385 |
5434 SessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); | 5386 SpdySessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); |
5435 scoped_ptr<HttpTransaction> trans( | 5387 scoped_ptr<HttpTransaction> trans( |
5436 new HttpNetworkTransaction(CreateSession(&session_deps))); | 5388 new HttpNetworkTransaction(CreateSession(&session_deps))); |
5437 | 5389 |
5438 MockWrite data_writes[] = { | 5390 MockWrite data_writes[] = { |
5439 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 5391 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" |
5440 "Host: www.google.com\r\n" | 5392 "Host: www.google.com\r\n" |
5441 "Proxy-Connection: keep-alive\r\n" | 5393 "Proxy-Connection: keep-alive\r\n" |
5442 "User-Agent: Chromium Ultra Awesome X Edition\r\n\r\n"), | 5394 "User-Agent: Chromium Ultra Awesome X Edition\r\n\r\n"), |
5443 }; | 5395 }; |
5444 MockRead data_reads[] = { | 5396 MockRead data_reads[] = { |
5445 // Return an error, so the transaction stops here (this test isn't | 5397 // Return an error, so the transaction stops here (this test isn't |
5446 // interested in the rest). | 5398 // interested in the rest). |
5447 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), | 5399 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), |
5448 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 5400 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
5449 MockRead("Proxy-Connection: close\r\n\r\n"), | 5401 MockRead("Proxy-Connection: close\r\n\r\n"), |
5450 }; | 5402 }; |
5451 | 5403 |
5452 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 5404 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
5453 data_writes, arraysize(data_writes)); | 5405 data_writes, arraysize(data_writes)); |
5454 session_deps.socket_factory.AddSocketDataProvider(&data); | 5406 session_deps.socket_factory->AddSocketDataProvider(&data); |
5455 | 5407 |
5456 TestCompletionCallback callback; | 5408 TestCompletionCallback callback; |
5457 | 5409 |
5458 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 5410 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
5459 EXPECT_EQ(ERR_IO_PENDING, rv); | 5411 EXPECT_EQ(ERR_IO_PENDING, rv); |
5460 | 5412 |
5461 rv = callback.WaitForResult(); | 5413 rv = callback.WaitForResult(); |
5462 EXPECT_EQ(OK, rv); | 5414 EXPECT_EQ(OK, rv); |
5463 } | 5415 } |
5464 | 5416 |
5465 TEST_F(HttpNetworkTransactionSpdy3Test, BuildRequest_Referer) { | 5417 TEST_F(HttpNetworkTransactionSpdy3Test, BuildRequest_Referer) { |
5466 HttpRequestInfo request; | 5418 HttpRequestInfo request; |
5467 request.method = "GET"; | 5419 request.method = "GET"; |
5468 request.url = GURL("http://www.google.com/"); | 5420 request.url = GURL("http://www.google.com/"); |
5469 request.load_flags = 0; | 5421 request.load_flags = 0; |
5470 request.extra_headers.SetHeader(HttpRequestHeaders::kReferer, | 5422 request.extra_headers.SetHeader(HttpRequestHeaders::kReferer, |
5471 "http://the.previous.site.com/"); | 5423 "http://the.previous.site.com/"); |
5472 | 5424 |
5473 SessionDependencies session_deps; | 5425 SpdySessionDependencies session_deps; |
5474 scoped_ptr<HttpTransaction> trans( | 5426 scoped_ptr<HttpTransaction> trans( |
5475 new HttpNetworkTransaction(CreateSession(&session_deps))); | 5427 new HttpNetworkTransaction(CreateSession(&session_deps))); |
5476 | 5428 |
5477 MockWrite data_writes[] = { | 5429 MockWrite data_writes[] = { |
5478 MockWrite("GET / HTTP/1.1\r\n" | 5430 MockWrite("GET / HTTP/1.1\r\n" |
5479 "Host: www.google.com\r\n" | 5431 "Host: www.google.com\r\n" |
5480 "Connection: keep-alive\r\n" | 5432 "Connection: keep-alive\r\n" |
5481 "Referer: http://the.previous.site.com/\r\n\r\n"), | 5433 "Referer: http://the.previous.site.com/\r\n\r\n"), |
5482 }; | 5434 }; |
5483 | 5435 |
5484 // Lastly, the server responds with the actual content. | 5436 // Lastly, the server responds with the actual content. |
5485 MockRead data_reads[] = { | 5437 MockRead data_reads[] = { |
5486 MockRead("HTTP/1.0 200 OK\r\n"), | 5438 MockRead("HTTP/1.0 200 OK\r\n"), |
5487 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 5439 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
5488 MockRead("Content-Length: 100\r\n\r\n"), | 5440 MockRead("Content-Length: 100\r\n\r\n"), |
5489 MockRead(SYNCHRONOUS, OK), | 5441 MockRead(SYNCHRONOUS, OK), |
5490 }; | 5442 }; |
5491 | 5443 |
5492 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 5444 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
5493 data_writes, arraysize(data_writes)); | 5445 data_writes, arraysize(data_writes)); |
5494 session_deps.socket_factory.AddSocketDataProvider(&data); | 5446 session_deps.socket_factory->AddSocketDataProvider(&data); |
5495 | 5447 |
5496 TestCompletionCallback callback; | 5448 TestCompletionCallback callback; |
5497 | 5449 |
5498 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 5450 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
5499 EXPECT_EQ(ERR_IO_PENDING, rv); | 5451 EXPECT_EQ(ERR_IO_PENDING, rv); |
5500 | 5452 |
5501 rv = callback.WaitForResult(); | 5453 rv = callback.WaitForResult(); |
5502 EXPECT_EQ(OK, rv); | 5454 EXPECT_EQ(OK, rv); |
5503 } | 5455 } |
5504 | 5456 |
5505 TEST_F(HttpNetworkTransactionSpdy3Test, BuildRequest_PostContentLengthZero) { | 5457 TEST_F(HttpNetworkTransactionSpdy3Test, BuildRequest_PostContentLengthZero) { |
5506 HttpRequestInfo request; | 5458 HttpRequestInfo request; |
5507 request.method = "POST"; | 5459 request.method = "POST"; |
5508 request.url = GURL("http://www.google.com/"); | 5460 request.url = GURL("http://www.google.com/"); |
5509 | 5461 |
5510 SessionDependencies session_deps; | 5462 SpdySessionDependencies session_deps; |
5511 scoped_ptr<HttpTransaction> trans( | 5463 scoped_ptr<HttpTransaction> trans( |
5512 new HttpNetworkTransaction(CreateSession(&session_deps))); | 5464 new HttpNetworkTransaction(CreateSession(&session_deps))); |
5513 | 5465 |
5514 MockWrite data_writes[] = { | 5466 MockWrite data_writes[] = { |
5515 MockWrite("POST / HTTP/1.1\r\n" | 5467 MockWrite("POST / HTTP/1.1\r\n" |
5516 "Host: www.google.com\r\n" | 5468 "Host: www.google.com\r\n" |
5517 "Connection: keep-alive\r\n" | 5469 "Connection: keep-alive\r\n" |
5518 "Content-Length: 0\r\n\r\n"), | 5470 "Content-Length: 0\r\n\r\n"), |
5519 }; | 5471 }; |
5520 | 5472 |
5521 // Lastly, the server responds with the actual content. | 5473 // Lastly, the server responds with the actual content. |
5522 MockRead data_reads[] = { | 5474 MockRead data_reads[] = { |
5523 MockRead("HTTP/1.0 200 OK\r\n"), | 5475 MockRead("HTTP/1.0 200 OK\r\n"), |
5524 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 5476 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
5525 MockRead("Content-Length: 100\r\n\r\n"), | 5477 MockRead("Content-Length: 100\r\n\r\n"), |
5526 MockRead(SYNCHRONOUS, OK), | 5478 MockRead(SYNCHRONOUS, OK), |
5527 }; | 5479 }; |
5528 | 5480 |
5529 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 5481 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
5530 data_writes, arraysize(data_writes)); | 5482 data_writes, arraysize(data_writes)); |
5531 session_deps.socket_factory.AddSocketDataProvider(&data); | 5483 session_deps.socket_factory->AddSocketDataProvider(&data); |
5532 | 5484 |
5533 TestCompletionCallback callback; | 5485 TestCompletionCallback callback; |
5534 | 5486 |
5535 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 5487 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
5536 EXPECT_EQ(ERR_IO_PENDING, rv); | 5488 EXPECT_EQ(ERR_IO_PENDING, rv); |
5537 | 5489 |
5538 rv = callback.WaitForResult(); | 5490 rv = callback.WaitForResult(); |
5539 EXPECT_EQ(OK, rv); | 5491 EXPECT_EQ(OK, rv); |
5540 } | 5492 } |
5541 | 5493 |
5542 TEST_F(HttpNetworkTransactionSpdy3Test, BuildRequest_PutContentLengthZero) { | 5494 TEST_F(HttpNetworkTransactionSpdy3Test, BuildRequest_PutContentLengthZero) { |
5543 HttpRequestInfo request; | 5495 HttpRequestInfo request; |
5544 request.method = "PUT"; | 5496 request.method = "PUT"; |
5545 request.url = GURL("http://www.google.com/"); | 5497 request.url = GURL("http://www.google.com/"); |
5546 | 5498 |
5547 SessionDependencies session_deps; | 5499 SpdySessionDependencies session_deps; |
5548 scoped_ptr<HttpTransaction> trans( | 5500 scoped_ptr<HttpTransaction> trans( |
5549 new HttpNetworkTransaction(CreateSession(&session_deps))); | 5501 new HttpNetworkTransaction(CreateSession(&session_deps))); |
5550 | 5502 |
5551 MockWrite data_writes[] = { | 5503 MockWrite data_writes[] = { |
5552 MockWrite("PUT / HTTP/1.1\r\n" | 5504 MockWrite("PUT / HTTP/1.1\r\n" |
5553 "Host: www.google.com\r\n" | 5505 "Host: www.google.com\r\n" |
5554 "Connection: keep-alive\r\n" | 5506 "Connection: keep-alive\r\n" |
5555 "Content-Length: 0\r\n\r\n"), | 5507 "Content-Length: 0\r\n\r\n"), |
5556 }; | 5508 }; |
5557 | 5509 |
5558 // Lastly, the server responds with the actual content. | 5510 // Lastly, the server responds with the actual content. |
5559 MockRead data_reads[] = { | 5511 MockRead data_reads[] = { |
5560 MockRead("HTTP/1.0 200 OK\r\n"), | 5512 MockRead("HTTP/1.0 200 OK\r\n"), |
5561 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 5513 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
5562 MockRead("Content-Length: 100\r\n\r\n"), | 5514 MockRead("Content-Length: 100\r\n\r\n"), |
5563 MockRead(SYNCHRONOUS, OK), | 5515 MockRead(SYNCHRONOUS, OK), |
5564 }; | 5516 }; |
5565 | 5517 |
5566 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 5518 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
5567 data_writes, arraysize(data_writes)); | 5519 data_writes, arraysize(data_writes)); |
5568 session_deps.socket_factory.AddSocketDataProvider(&data); | 5520 session_deps.socket_factory->AddSocketDataProvider(&data); |
5569 | 5521 |
5570 TestCompletionCallback callback; | 5522 TestCompletionCallback callback; |
5571 | 5523 |
5572 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 5524 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
5573 EXPECT_EQ(ERR_IO_PENDING, rv); | 5525 EXPECT_EQ(ERR_IO_PENDING, rv); |
5574 | 5526 |
5575 rv = callback.WaitForResult(); | 5527 rv = callback.WaitForResult(); |
5576 EXPECT_EQ(OK, rv); | 5528 EXPECT_EQ(OK, rv); |
5577 } | 5529 } |
5578 | 5530 |
5579 TEST_F(HttpNetworkTransactionSpdy3Test, BuildRequest_HeadContentLengthZero) { | 5531 TEST_F(HttpNetworkTransactionSpdy3Test, BuildRequest_HeadContentLengthZero) { |
5580 HttpRequestInfo request; | 5532 HttpRequestInfo request; |
5581 request.method = "HEAD"; | 5533 request.method = "HEAD"; |
5582 request.url = GURL("http://www.google.com/"); | 5534 request.url = GURL("http://www.google.com/"); |
5583 | 5535 |
5584 SessionDependencies session_deps; | 5536 SpdySessionDependencies session_deps; |
5585 scoped_ptr<HttpTransaction> trans( | 5537 scoped_ptr<HttpTransaction> trans( |
5586 new HttpNetworkTransaction(CreateSession(&session_deps))); | 5538 new HttpNetworkTransaction(CreateSession(&session_deps))); |
5587 | 5539 |
5588 MockWrite data_writes[] = { | 5540 MockWrite data_writes[] = { |
5589 MockWrite("HEAD / HTTP/1.1\r\n" | 5541 MockWrite("HEAD / HTTP/1.1\r\n" |
5590 "Host: www.google.com\r\n" | 5542 "Host: www.google.com\r\n" |
5591 "Connection: keep-alive\r\n" | 5543 "Connection: keep-alive\r\n" |
5592 "Content-Length: 0\r\n\r\n"), | 5544 "Content-Length: 0\r\n\r\n"), |
5593 }; | 5545 }; |
5594 | 5546 |
5595 // Lastly, the server responds with the actual content. | 5547 // Lastly, the server responds with the actual content. |
5596 MockRead data_reads[] = { | 5548 MockRead data_reads[] = { |
5597 MockRead("HTTP/1.0 200 OK\r\n"), | 5549 MockRead("HTTP/1.0 200 OK\r\n"), |
5598 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 5550 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
5599 MockRead("Content-Length: 100\r\n\r\n"), | 5551 MockRead("Content-Length: 100\r\n\r\n"), |
5600 MockRead(SYNCHRONOUS, OK), | 5552 MockRead(SYNCHRONOUS, OK), |
5601 }; | 5553 }; |
5602 | 5554 |
5603 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 5555 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
5604 data_writes, arraysize(data_writes)); | 5556 data_writes, arraysize(data_writes)); |
5605 session_deps.socket_factory.AddSocketDataProvider(&data); | 5557 session_deps.socket_factory->AddSocketDataProvider(&data); |
5606 | 5558 |
5607 TestCompletionCallback callback; | 5559 TestCompletionCallback callback; |
5608 | 5560 |
5609 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 5561 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
5610 EXPECT_EQ(ERR_IO_PENDING, rv); | 5562 EXPECT_EQ(ERR_IO_PENDING, rv); |
5611 | 5563 |
5612 rv = callback.WaitForResult(); | 5564 rv = callback.WaitForResult(); |
5613 EXPECT_EQ(OK, rv); | 5565 EXPECT_EQ(OK, rv); |
5614 } | 5566 } |
5615 | 5567 |
5616 TEST_F(HttpNetworkTransactionSpdy3Test, BuildRequest_CacheControlNoCache) { | 5568 TEST_F(HttpNetworkTransactionSpdy3Test, BuildRequest_CacheControlNoCache) { |
5617 HttpRequestInfo request; | 5569 HttpRequestInfo request; |
5618 request.method = "GET"; | 5570 request.method = "GET"; |
5619 request.url = GURL("http://www.google.com/"); | 5571 request.url = GURL("http://www.google.com/"); |
5620 request.load_flags = LOAD_BYPASS_CACHE; | 5572 request.load_flags = LOAD_BYPASS_CACHE; |
5621 | 5573 |
5622 SessionDependencies session_deps; | 5574 SpdySessionDependencies session_deps; |
5623 scoped_ptr<HttpTransaction> trans( | 5575 scoped_ptr<HttpTransaction> trans( |
5624 new HttpNetworkTransaction(CreateSession(&session_deps))); | 5576 new HttpNetworkTransaction(CreateSession(&session_deps))); |
5625 | 5577 |
5626 MockWrite data_writes[] = { | 5578 MockWrite data_writes[] = { |
5627 MockWrite("GET / HTTP/1.1\r\n" | 5579 MockWrite("GET / HTTP/1.1\r\n" |
5628 "Host: www.google.com\r\n" | 5580 "Host: www.google.com\r\n" |
5629 "Connection: keep-alive\r\n" | 5581 "Connection: keep-alive\r\n" |
5630 "Pragma: no-cache\r\n" | 5582 "Pragma: no-cache\r\n" |
5631 "Cache-Control: no-cache\r\n\r\n"), | 5583 "Cache-Control: no-cache\r\n\r\n"), |
5632 }; | 5584 }; |
5633 | 5585 |
5634 // Lastly, the server responds with the actual content. | 5586 // Lastly, the server responds with the actual content. |
5635 MockRead data_reads[] = { | 5587 MockRead data_reads[] = { |
5636 MockRead("HTTP/1.0 200 OK\r\n"), | 5588 MockRead("HTTP/1.0 200 OK\r\n"), |
5637 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 5589 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
5638 MockRead("Content-Length: 100\r\n\r\n"), | 5590 MockRead("Content-Length: 100\r\n\r\n"), |
5639 MockRead(SYNCHRONOUS, OK), | 5591 MockRead(SYNCHRONOUS, OK), |
5640 }; | 5592 }; |
5641 | 5593 |
5642 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 5594 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
5643 data_writes, arraysize(data_writes)); | 5595 data_writes, arraysize(data_writes)); |
5644 session_deps.socket_factory.AddSocketDataProvider(&data); | 5596 session_deps.socket_factory->AddSocketDataProvider(&data); |
5645 | 5597 |
5646 TestCompletionCallback callback; | 5598 TestCompletionCallback callback; |
5647 | 5599 |
5648 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 5600 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
5649 EXPECT_EQ(ERR_IO_PENDING, rv); | 5601 EXPECT_EQ(ERR_IO_PENDING, rv); |
5650 | 5602 |
5651 rv = callback.WaitForResult(); | 5603 rv = callback.WaitForResult(); |
5652 EXPECT_EQ(OK, rv); | 5604 EXPECT_EQ(OK, rv); |
5653 } | 5605 } |
5654 | 5606 |
5655 TEST_F(HttpNetworkTransactionSpdy3Test, | 5607 TEST_F(HttpNetworkTransactionSpdy3Test, |
5656 BuildRequest_CacheControlValidateCache) { | 5608 BuildRequest_CacheControlValidateCache) { |
5657 HttpRequestInfo request; | 5609 HttpRequestInfo request; |
5658 request.method = "GET"; | 5610 request.method = "GET"; |
5659 request.url = GURL("http://www.google.com/"); | 5611 request.url = GURL("http://www.google.com/"); |
5660 request.load_flags = LOAD_VALIDATE_CACHE; | 5612 request.load_flags = LOAD_VALIDATE_CACHE; |
5661 | 5613 |
5662 SessionDependencies session_deps; | 5614 SpdySessionDependencies session_deps; |
5663 scoped_ptr<HttpTransaction> trans( | 5615 scoped_ptr<HttpTransaction> trans( |
5664 new HttpNetworkTransaction(CreateSession(&session_deps))); | 5616 new HttpNetworkTransaction(CreateSession(&session_deps))); |
5665 | 5617 |
5666 MockWrite data_writes[] = { | 5618 MockWrite data_writes[] = { |
5667 MockWrite("GET / HTTP/1.1\r\n" | 5619 MockWrite("GET / HTTP/1.1\r\n" |
5668 "Host: www.google.com\r\n" | 5620 "Host: www.google.com\r\n" |
5669 "Connection: keep-alive\r\n" | 5621 "Connection: keep-alive\r\n" |
5670 "Cache-Control: max-age=0\r\n\r\n"), | 5622 "Cache-Control: max-age=0\r\n\r\n"), |
5671 }; | 5623 }; |
5672 | 5624 |
5673 // Lastly, the server responds with the actual content. | 5625 // Lastly, the server responds with the actual content. |
5674 MockRead data_reads[] = { | 5626 MockRead data_reads[] = { |
5675 MockRead("HTTP/1.0 200 OK\r\n"), | 5627 MockRead("HTTP/1.0 200 OK\r\n"), |
5676 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 5628 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
5677 MockRead("Content-Length: 100\r\n\r\n"), | 5629 MockRead("Content-Length: 100\r\n\r\n"), |
5678 MockRead(SYNCHRONOUS, OK), | 5630 MockRead(SYNCHRONOUS, OK), |
5679 }; | 5631 }; |
5680 | 5632 |
5681 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 5633 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
5682 data_writes, arraysize(data_writes)); | 5634 data_writes, arraysize(data_writes)); |
5683 session_deps.socket_factory.AddSocketDataProvider(&data); | 5635 session_deps.socket_factory->AddSocketDataProvider(&data); |
5684 | 5636 |
5685 TestCompletionCallback callback; | 5637 TestCompletionCallback callback; |
5686 | 5638 |
5687 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 5639 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
5688 EXPECT_EQ(ERR_IO_PENDING, rv); | 5640 EXPECT_EQ(ERR_IO_PENDING, rv); |
5689 | 5641 |
5690 rv = callback.WaitForResult(); | 5642 rv = callback.WaitForResult(); |
5691 EXPECT_EQ(OK, rv); | 5643 EXPECT_EQ(OK, rv); |
5692 } | 5644 } |
5693 | 5645 |
5694 TEST_F(HttpNetworkTransactionSpdy3Test, BuildRequest_ExtraHeaders) { | 5646 TEST_F(HttpNetworkTransactionSpdy3Test, BuildRequest_ExtraHeaders) { |
5695 HttpRequestInfo request; | 5647 HttpRequestInfo request; |
5696 request.method = "GET"; | 5648 request.method = "GET"; |
5697 request.url = GURL("http://www.google.com/"); | 5649 request.url = GURL("http://www.google.com/"); |
5698 request.extra_headers.SetHeader("FooHeader", "Bar"); | 5650 request.extra_headers.SetHeader("FooHeader", "Bar"); |
5699 | 5651 |
5700 SessionDependencies session_deps; | 5652 SpdySessionDependencies session_deps; |
5701 scoped_ptr<HttpTransaction> trans( | 5653 scoped_ptr<HttpTransaction> trans( |
5702 new HttpNetworkTransaction(CreateSession(&session_deps))); | 5654 new HttpNetworkTransaction(CreateSession(&session_deps))); |
5703 | 5655 |
5704 MockWrite data_writes[] = { | 5656 MockWrite data_writes[] = { |
5705 MockWrite("GET / HTTP/1.1\r\n" | 5657 MockWrite("GET / HTTP/1.1\r\n" |
5706 "Host: www.google.com\r\n" | 5658 "Host: www.google.com\r\n" |
5707 "Connection: keep-alive\r\n" | 5659 "Connection: keep-alive\r\n" |
5708 "FooHeader: Bar\r\n\r\n"), | 5660 "FooHeader: Bar\r\n\r\n"), |
5709 }; | 5661 }; |
5710 | 5662 |
5711 // Lastly, the server responds with the actual content. | 5663 // Lastly, the server responds with the actual content. |
5712 MockRead data_reads[] = { | 5664 MockRead data_reads[] = { |
5713 MockRead("HTTP/1.0 200 OK\r\n"), | 5665 MockRead("HTTP/1.0 200 OK\r\n"), |
5714 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 5666 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
5715 MockRead("Content-Length: 100\r\n\r\n"), | 5667 MockRead("Content-Length: 100\r\n\r\n"), |
5716 MockRead(SYNCHRONOUS, OK), | 5668 MockRead(SYNCHRONOUS, OK), |
5717 }; | 5669 }; |
5718 | 5670 |
5719 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 5671 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
5720 data_writes, arraysize(data_writes)); | 5672 data_writes, arraysize(data_writes)); |
5721 session_deps.socket_factory.AddSocketDataProvider(&data); | 5673 session_deps.socket_factory->AddSocketDataProvider(&data); |
5722 | 5674 |
5723 TestCompletionCallback callback; | 5675 TestCompletionCallback callback; |
5724 | 5676 |
5725 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 5677 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
5726 EXPECT_EQ(ERR_IO_PENDING, rv); | 5678 EXPECT_EQ(ERR_IO_PENDING, rv); |
5727 | 5679 |
5728 rv = callback.WaitForResult(); | 5680 rv = callback.WaitForResult(); |
5729 EXPECT_EQ(OK, rv); | 5681 EXPECT_EQ(OK, rv); |
5730 } | 5682 } |
5731 | 5683 |
5732 TEST_F(HttpNetworkTransactionSpdy3Test, BuildRequest_ExtraHeadersStripped) { | 5684 TEST_F(HttpNetworkTransactionSpdy3Test, BuildRequest_ExtraHeadersStripped) { |
5733 HttpRequestInfo request; | 5685 HttpRequestInfo request; |
5734 request.method = "GET"; | 5686 request.method = "GET"; |
5735 request.url = GURL("http://www.google.com/"); | 5687 request.url = GURL("http://www.google.com/"); |
5736 request.extra_headers.SetHeader("referer", "www.foo.com"); | 5688 request.extra_headers.SetHeader("referer", "www.foo.com"); |
5737 request.extra_headers.SetHeader("hEllo", "Kitty"); | 5689 request.extra_headers.SetHeader("hEllo", "Kitty"); |
5738 request.extra_headers.SetHeader("FoO", "bar"); | 5690 request.extra_headers.SetHeader("FoO", "bar"); |
5739 | 5691 |
5740 SessionDependencies session_deps; | 5692 SpdySessionDependencies session_deps; |
5741 scoped_ptr<HttpTransaction> trans( | 5693 scoped_ptr<HttpTransaction> trans( |
5742 new HttpNetworkTransaction(CreateSession(&session_deps))); | 5694 new HttpNetworkTransaction(CreateSession(&session_deps))); |
5743 | 5695 |
5744 MockWrite data_writes[] = { | 5696 MockWrite data_writes[] = { |
5745 MockWrite("GET / HTTP/1.1\r\n" | 5697 MockWrite("GET / HTTP/1.1\r\n" |
5746 "Host: www.google.com\r\n" | 5698 "Host: www.google.com\r\n" |
5747 "Connection: keep-alive\r\n" | 5699 "Connection: keep-alive\r\n" |
5748 "referer: www.foo.com\r\n" | 5700 "referer: www.foo.com\r\n" |
5749 "hEllo: Kitty\r\n" | 5701 "hEllo: Kitty\r\n" |
5750 "FoO: bar\r\n\r\n"), | 5702 "FoO: bar\r\n\r\n"), |
5751 }; | 5703 }; |
5752 | 5704 |
5753 // Lastly, the server responds with the actual content. | 5705 // Lastly, the server responds with the actual content. |
5754 MockRead data_reads[] = { | 5706 MockRead data_reads[] = { |
5755 MockRead("HTTP/1.0 200 OK\r\n"), | 5707 MockRead("HTTP/1.0 200 OK\r\n"), |
5756 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 5708 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
5757 MockRead("Content-Length: 100\r\n\r\n"), | 5709 MockRead("Content-Length: 100\r\n\r\n"), |
5758 MockRead(SYNCHRONOUS, OK), | 5710 MockRead(SYNCHRONOUS, OK), |
5759 }; | 5711 }; |
5760 | 5712 |
5761 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 5713 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
5762 data_writes, arraysize(data_writes)); | 5714 data_writes, arraysize(data_writes)); |
5763 session_deps.socket_factory.AddSocketDataProvider(&data); | 5715 session_deps.socket_factory->AddSocketDataProvider(&data); |
5764 | 5716 |
5765 TestCompletionCallback callback; | 5717 TestCompletionCallback callback; |
5766 | 5718 |
5767 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 5719 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
5768 EXPECT_EQ(ERR_IO_PENDING, rv); | 5720 EXPECT_EQ(ERR_IO_PENDING, rv); |
5769 | 5721 |
5770 rv = callback.WaitForResult(); | 5722 rv = callback.WaitForResult(); |
5771 EXPECT_EQ(OK, rv); | 5723 EXPECT_EQ(OK, rv); |
5772 } | 5724 } |
5773 | 5725 |
5774 TEST_F(HttpNetworkTransactionSpdy3Test, SOCKS4_HTTP_GET) { | 5726 TEST_F(HttpNetworkTransactionSpdy3Test, SOCKS4_HTTP_GET) { |
5775 HttpRequestInfo request; | 5727 HttpRequestInfo request; |
5776 request.method = "GET"; | 5728 request.method = "GET"; |
5777 request.url = GURL("http://www.google.com/"); | 5729 request.url = GURL("http://www.google.com/"); |
5778 request.load_flags = 0; | 5730 request.load_flags = 0; |
5779 | 5731 |
5780 SessionDependencies session_deps( | 5732 SpdySessionDependencies session_deps( |
5781 ProxyService::CreateFixed("socks4://myproxy:1080")); | 5733 ProxyService::CreateFixed("socks4://myproxy:1080")); |
5782 | 5734 |
5783 scoped_ptr<HttpTransaction> trans( | 5735 scoped_ptr<HttpTransaction> trans( |
5784 new HttpNetworkTransaction(CreateSession(&session_deps))); | 5736 new HttpNetworkTransaction(CreateSession(&session_deps))); |
5785 | 5737 |
5786 char write_buffer[] = { 0x04, 0x01, 0x00, 0x50, 127, 0, 0, 1, 0 }; | 5738 char write_buffer[] = { 0x04, 0x01, 0x00, 0x50, 127, 0, 0, 1, 0 }; |
5787 char read_buffer[] = { 0x00, 0x5A, 0x00, 0x00, 0, 0, 0, 0 }; | 5739 char read_buffer[] = { 0x00, 0x5A, 0x00, 0x00, 0, 0, 0, 0 }; |
5788 | 5740 |
5789 MockWrite data_writes[] = { | 5741 MockWrite data_writes[] = { |
5790 MockWrite(ASYNC, write_buffer, arraysize(write_buffer)), | 5742 MockWrite(ASYNC, write_buffer, arraysize(write_buffer)), |
5791 MockWrite("GET / HTTP/1.1\r\n" | 5743 MockWrite("GET / HTTP/1.1\r\n" |
5792 "Host: www.google.com\r\n" | 5744 "Host: www.google.com\r\n" |
5793 "Connection: keep-alive\r\n\r\n") | 5745 "Connection: keep-alive\r\n\r\n") |
5794 }; | 5746 }; |
5795 | 5747 |
5796 MockRead data_reads[] = { | 5748 MockRead data_reads[] = { |
5797 MockRead(ASYNC, read_buffer, arraysize(read_buffer)), | 5749 MockRead(ASYNC, read_buffer, arraysize(read_buffer)), |
5798 MockRead("HTTP/1.0 200 OK\r\n"), | 5750 MockRead("HTTP/1.0 200 OK\r\n"), |
5799 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n\r\n"), | 5751 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n\r\n"), |
5800 MockRead("Payload"), | 5752 MockRead("Payload"), |
5801 MockRead(SYNCHRONOUS, OK) | 5753 MockRead(SYNCHRONOUS, OK) |
5802 }; | 5754 }; |
5803 | 5755 |
5804 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 5756 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
5805 data_writes, arraysize(data_writes)); | 5757 data_writes, arraysize(data_writes)); |
5806 session_deps.socket_factory.AddSocketDataProvider(&data); | 5758 session_deps.socket_factory->AddSocketDataProvider(&data); |
5807 | 5759 |
5808 TestCompletionCallback callback; | 5760 TestCompletionCallback callback; |
5809 | 5761 |
5810 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 5762 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
5811 EXPECT_EQ(ERR_IO_PENDING, rv); | 5763 EXPECT_EQ(ERR_IO_PENDING, rv); |
5812 | 5764 |
5813 rv = callback.WaitForResult(); | 5765 rv = callback.WaitForResult(); |
5814 EXPECT_EQ(OK, rv); | 5766 EXPECT_EQ(OK, rv); |
5815 | 5767 |
5816 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5768 const HttpResponseInfo* response = trans->GetResponseInfo(); |
5817 ASSERT_TRUE(response != NULL); | 5769 ASSERT_TRUE(response != NULL); |
5818 | 5770 |
5819 std::string response_text; | 5771 std::string response_text; |
5820 rv = ReadTransaction(trans.get(), &response_text); | 5772 rv = ReadTransaction(trans.get(), &response_text); |
5821 EXPECT_EQ(OK, rv); | 5773 EXPECT_EQ(OK, rv); |
5822 EXPECT_EQ("Payload", response_text); | 5774 EXPECT_EQ("Payload", response_text); |
5823 } | 5775 } |
5824 | 5776 |
5825 TEST_F(HttpNetworkTransactionSpdy3Test, SOCKS4_SSL_GET) { | 5777 TEST_F(HttpNetworkTransactionSpdy3Test, SOCKS4_SSL_GET) { |
5826 HttpRequestInfo request; | 5778 HttpRequestInfo request; |
5827 request.method = "GET"; | 5779 request.method = "GET"; |
5828 request.url = GURL("https://www.google.com/"); | 5780 request.url = GURL("https://www.google.com/"); |
5829 request.load_flags = 0; | 5781 request.load_flags = 0; |
5830 | 5782 |
5831 SessionDependencies session_deps( | 5783 SpdySessionDependencies session_deps( |
5832 ProxyService::CreateFixed("socks4://myproxy:1080")); | 5784 ProxyService::CreateFixed("socks4://myproxy:1080")); |
5833 | 5785 |
5834 scoped_ptr<HttpTransaction> trans( | 5786 scoped_ptr<HttpTransaction> trans( |
5835 new HttpNetworkTransaction(CreateSession(&session_deps))); | 5787 new HttpNetworkTransaction(CreateSession(&session_deps))); |
5836 | 5788 |
5837 unsigned char write_buffer[] = { 0x04, 0x01, 0x01, 0xBB, 127, 0, 0, 1, 0 }; | 5789 unsigned char write_buffer[] = { 0x04, 0x01, 0x01, 0xBB, 127, 0, 0, 1, 0 }; |
5838 unsigned char read_buffer[] = { 0x00, 0x5A, 0x00, 0x00, 0, 0, 0, 0 }; | 5790 unsigned char read_buffer[] = { 0x00, 0x5A, 0x00, 0x00, 0, 0, 0, 0 }; |
5839 | 5791 |
5840 MockWrite data_writes[] = { | 5792 MockWrite data_writes[] = { |
5841 MockWrite(ASYNC, reinterpret_cast<char*>(write_buffer), | 5793 MockWrite(ASYNC, reinterpret_cast<char*>(write_buffer), |
5842 arraysize(write_buffer)), | 5794 arraysize(write_buffer)), |
5843 MockWrite("GET / HTTP/1.1\r\n" | 5795 MockWrite("GET / HTTP/1.1\r\n" |
5844 "Host: www.google.com\r\n" | 5796 "Host: www.google.com\r\n" |
5845 "Connection: keep-alive\r\n\r\n") | 5797 "Connection: keep-alive\r\n\r\n") |
5846 }; | 5798 }; |
5847 | 5799 |
5848 MockRead data_reads[] = { | 5800 MockRead data_reads[] = { |
5849 MockRead(ASYNC, reinterpret_cast<char*>(read_buffer), | 5801 MockRead(ASYNC, reinterpret_cast<char*>(read_buffer), |
5850 arraysize(read_buffer)), | 5802 arraysize(read_buffer)), |
5851 MockRead("HTTP/1.0 200 OK\r\n"), | 5803 MockRead("HTTP/1.0 200 OK\r\n"), |
5852 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n\r\n"), | 5804 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n\r\n"), |
5853 MockRead("Payload"), | 5805 MockRead("Payload"), |
5854 MockRead(SYNCHRONOUS, OK) | 5806 MockRead(SYNCHRONOUS, OK) |
5855 }; | 5807 }; |
5856 | 5808 |
5857 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 5809 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
5858 data_writes, arraysize(data_writes)); | 5810 data_writes, arraysize(data_writes)); |
5859 session_deps.socket_factory.AddSocketDataProvider(&data); | 5811 session_deps.socket_factory->AddSocketDataProvider(&data); |
5860 | 5812 |
5861 SSLSocketDataProvider ssl(ASYNC, OK); | 5813 SSLSocketDataProvider ssl(ASYNC, OK); |
5862 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 5814 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
5863 | 5815 |
5864 TestCompletionCallback callback; | 5816 TestCompletionCallback callback; |
5865 | 5817 |
5866 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 5818 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
5867 EXPECT_EQ(ERR_IO_PENDING, rv); | 5819 EXPECT_EQ(ERR_IO_PENDING, rv); |
5868 | 5820 |
5869 rv = callback.WaitForResult(); | 5821 rv = callback.WaitForResult(); |
5870 EXPECT_EQ(OK, rv); | 5822 EXPECT_EQ(OK, rv); |
5871 | 5823 |
5872 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5824 const HttpResponseInfo* response = trans->GetResponseInfo(); |
5873 ASSERT_TRUE(response != NULL); | 5825 ASSERT_TRUE(response != NULL); |
5874 | 5826 |
5875 std::string response_text; | 5827 std::string response_text; |
5876 rv = ReadTransaction(trans.get(), &response_text); | 5828 rv = ReadTransaction(trans.get(), &response_text); |
5877 EXPECT_EQ(OK, rv); | 5829 EXPECT_EQ(OK, rv); |
5878 EXPECT_EQ("Payload", response_text); | 5830 EXPECT_EQ("Payload", response_text); |
5879 } | 5831 } |
5880 | 5832 |
5881 TEST_F(HttpNetworkTransactionSpdy3Test, SOCKS5_HTTP_GET) { | 5833 TEST_F(HttpNetworkTransactionSpdy3Test, SOCKS5_HTTP_GET) { |
5882 HttpRequestInfo request; | 5834 HttpRequestInfo request; |
5883 request.method = "GET"; | 5835 request.method = "GET"; |
5884 request.url = GURL("http://www.google.com/"); | 5836 request.url = GURL("http://www.google.com/"); |
5885 request.load_flags = 0; | 5837 request.load_flags = 0; |
5886 | 5838 |
5887 SessionDependencies session_deps( | 5839 SpdySessionDependencies session_deps( |
5888 ProxyService::CreateFixed("socks5://myproxy:1080")); | 5840 ProxyService::CreateFixed("socks5://myproxy:1080")); |
5889 | 5841 |
5890 scoped_ptr<HttpTransaction> trans( | 5842 scoped_ptr<HttpTransaction> trans( |
5891 new HttpNetworkTransaction(CreateSession(&session_deps))); | 5843 new HttpNetworkTransaction(CreateSession(&session_deps))); |
5892 | 5844 |
5893 const char kSOCKS5GreetRequest[] = { 0x05, 0x01, 0x00 }; | 5845 const char kSOCKS5GreetRequest[] = { 0x05, 0x01, 0x00 }; |
5894 const char kSOCKS5GreetResponse[] = { 0x05, 0x00 }; | 5846 const char kSOCKS5GreetResponse[] = { 0x05, 0x00 }; |
5895 const char kSOCKS5OkRequest[] = { | 5847 const char kSOCKS5OkRequest[] = { |
5896 0x05, // Version | 5848 0x05, // Version |
5897 0x01, // Command (CONNECT) | 5849 0x01, // Command (CONNECT) |
(...skipping 19 matching lines...) Expand all Loading... |
5917 MockRead(ASYNC, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)), | 5869 MockRead(ASYNC, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)), |
5918 MockRead(ASYNC, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse)), | 5870 MockRead(ASYNC, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse)), |
5919 MockRead("HTTP/1.0 200 OK\r\n"), | 5871 MockRead("HTTP/1.0 200 OK\r\n"), |
5920 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n\r\n"), | 5872 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n\r\n"), |
5921 MockRead("Payload"), | 5873 MockRead("Payload"), |
5922 MockRead(SYNCHRONOUS, OK) | 5874 MockRead(SYNCHRONOUS, OK) |
5923 }; | 5875 }; |
5924 | 5876 |
5925 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 5877 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
5926 data_writes, arraysize(data_writes)); | 5878 data_writes, arraysize(data_writes)); |
5927 session_deps.socket_factory.AddSocketDataProvider(&data); | 5879 session_deps.socket_factory->AddSocketDataProvider(&data); |
5928 | 5880 |
5929 TestCompletionCallback callback; | 5881 TestCompletionCallback callback; |
5930 | 5882 |
5931 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 5883 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
5932 EXPECT_EQ(ERR_IO_PENDING, rv); | 5884 EXPECT_EQ(ERR_IO_PENDING, rv); |
5933 | 5885 |
5934 rv = callback.WaitForResult(); | 5886 rv = callback.WaitForResult(); |
5935 EXPECT_EQ(OK, rv); | 5887 EXPECT_EQ(OK, rv); |
5936 | 5888 |
5937 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5889 const HttpResponseInfo* response = trans->GetResponseInfo(); |
5938 ASSERT_TRUE(response != NULL); | 5890 ASSERT_TRUE(response != NULL); |
5939 | 5891 |
5940 std::string response_text; | 5892 std::string response_text; |
5941 rv = ReadTransaction(trans.get(), &response_text); | 5893 rv = ReadTransaction(trans.get(), &response_text); |
5942 EXPECT_EQ(OK, rv); | 5894 EXPECT_EQ(OK, rv); |
5943 EXPECT_EQ("Payload", response_text); | 5895 EXPECT_EQ("Payload", response_text); |
5944 } | 5896 } |
5945 | 5897 |
5946 TEST_F(HttpNetworkTransactionSpdy3Test, SOCKS5_SSL_GET) { | 5898 TEST_F(HttpNetworkTransactionSpdy3Test, SOCKS5_SSL_GET) { |
5947 HttpRequestInfo request; | 5899 HttpRequestInfo request; |
5948 request.method = "GET"; | 5900 request.method = "GET"; |
5949 request.url = GURL("https://www.google.com/"); | 5901 request.url = GURL("https://www.google.com/"); |
5950 request.load_flags = 0; | 5902 request.load_flags = 0; |
5951 | 5903 |
5952 SessionDependencies session_deps( | 5904 SpdySessionDependencies session_deps( |
5953 ProxyService::CreateFixed("socks5://myproxy:1080")); | 5905 ProxyService::CreateFixed("socks5://myproxy:1080")); |
5954 | 5906 |
5955 scoped_ptr<HttpTransaction> trans( | 5907 scoped_ptr<HttpTransaction> trans( |
5956 new HttpNetworkTransaction(CreateSession(&session_deps))); | 5908 new HttpNetworkTransaction(CreateSession(&session_deps))); |
5957 | 5909 |
5958 const char kSOCKS5GreetRequest[] = { 0x05, 0x01, 0x00 }; | 5910 const char kSOCKS5GreetRequest[] = { 0x05, 0x01, 0x00 }; |
5959 const char kSOCKS5GreetResponse[] = { 0x05, 0x00 }; | 5911 const char kSOCKS5GreetResponse[] = { 0x05, 0x00 }; |
5960 const unsigned char kSOCKS5OkRequest[] = { | 5912 const unsigned char kSOCKS5OkRequest[] = { |
5961 0x05, // Version | 5913 0x05, // Version |
5962 0x01, // Command (CONNECT) | 5914 0x01, // Command (CONNECT) |
(...skipping 21 matching lines...) Expand all Loading... |
5984 MockRead(ASYNC, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)), | 5936 MockRead(ASYNC, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)), |
5985 MockRead(ASYNC, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse)), | 5937 MockRead(ASYNC, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse)), |
5986 MockRead("HTTP/1.0 200 OK\r\n"), | 5938 MockRead("HTTP/1.0 200 OK\r\n"), |
5987 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n\r\n"), | 5939 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n\r\n"), |
5988 MockRead("Payload"), | 5940 MockRead("Payload"), |
5989 MockRead(SYNCHRONOUS, OK) | 5941 MockRead(SYNCHRONOUS, OK) |
5990 }; | 5942 }; |
5991 | 5943 |
5992 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 5944 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
5993 data_writes, arraysize(data_writes)); | 5945 data_writes, arraysize(data_writes)); |
5994 session_deps.socket_factory.AddSocketDataProvider(&data); | 5946 session_deps.socket_factory->AddSocketDataProvider(&data); |
5995 | 5947 |
5996 SSLSocketDataProvider ssl(ASYNC, OK); | 5948 SSLSocketDataProvider ssl(ASYNC, OK); |
5997 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 5949 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
5998 | 5950 |
5999 TestCompletionCallback callback; | 5951 TestCompletionCallback callback; |
6000 | 5952 |
6001 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 5953 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
6002 EXPECT_EQ(ERR_IO_PENDING, rv); | 5954 EXPECT_EQ(ERR_IO_PENDING, rv); |
6003 | 5955 |
6004 rv = callback.WaitForResult(); | 5956 rv = callback.WaitForResult(); |
6005 EXPECT_EQ(OK, rv); | 5957 EXPECT_EQ(OK, rv); |
6006 | 5958 |
6007 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5959 const HttpResponseInfo* response = trans->GetResponseInfo(); |
(...skipping 10 matching lines...) Expand all Loading... |
6018 // Tests that for connection endpoints the group names are correctly set. | 5970 // Tests that for connection endpoints the group names are correctly set. |
6019 | 5971 |
6020 struct GroupNameTest { | 5972 struct GroupNameTest { |
6021 std::string proxy_server; | 5973 std::string proxy_server; |
6022 std::string url; | 5974 std::string url; |
6023 std::string expected_group_name; | 5975 std::string expected_group_name; |
6024 bool ssl; | 5976 bool ssl; |
6025 }; | 5977 }; |
6026 | 5978 |
6027 scoped_refptr<HttpNetworkSession> SetupSessionForGroupNameTests( | 5979 scoped_refptr<HttpNetworkSession> SetupSessionForGroupNameTests( |
6028 SessionDependencies* session_deps) { | 5980 SpdySessionDependencies* session_deps) { |
6029 scoped_refptr<HttpNetworkSession> session(CreateSession(session_deps)); | 5981 scoped_refptr<HttpNetworkSession> session(CreateSession(session_deps)); |
6030 | 5982 |
6031 HttpServerProperties* http_server_properties = | 5983 HttpServerProperties* http_server_properties = |
6032 session->http_server_properties(); | 5984 session->http_server_properties(); |
6033 http_server_properties->SetAlternateProtocol( | 5985 http_server_properties->SetAlternateProtocol( |
6034 HostPortPair("host.with.alternate", 80), 443, | 5986 HostPortPair("host.with.alternate", 80), 443, |
6035 NPN_SPDY_3); | 5987 NPN_SPDY_3); |
6036 | 5988 |
6037 return session; | 5989 return session; |
6038 } | 5990 } |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6087 "", // unused | 6039 "", // unused |
6088 "http://host.with.alternate/direct", | 6040 "http://host.with.alternate/direct", |
6089 "ssl/host.with.alternate:443", | 6041 "ssl/host.with.alternate:443", |
6090 true, | 6042 true, |
6091 }, | 6043 }, |
6092 }; | 6044 }; |
6093 | 6045 |
6094 HttpStreamFactory::set_use_alternate_protocols(true); | 6046 HttpStreamFactory::set_use_alternate_protocols(true); |
6095 | 6047 |
6096 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { | 6048 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
6097 SessionDependencies session_deps( | 6049 SpdySessionDependencies session_deps( |
6098 ProxyService::CreateFixed(tests[i].proxy_server)); | 6050 ProxyService::CreateFixed(tests[i].proxy_server)); |
6099 scoped_refptr<HttpNetworkSession> session( | 6051 scoped_refptr<HttpNetworkSession> session( |
6100 SetupSessionForGroupNameTests(&session_deps)); | 6052 SetupSessionForGroupNameTests(&session_deps)); |
6101 | 6053 |
6102 HttpNetworkSessionPeer peer(session); | 6054 HttpNetworkSessionPeer peer(session); |
6103 CaptureGroupNameTransportSocketPool* transport_conn_pool = | 6055 CaptureGroupNameTransportSocketPool* transport_conn_pool = |
6104 new CaptureGroupNameTransportSocketPool(NULL, NULL); | 6056 new CaptureGroupNameTransportSocketPool(NULL, NULL); |
6105 CaptureGroupNameSSLSocketPool* ssl_conn_pool = | 6057 CaptureGroupNameSSLSocketPool* ssl_conn_pool = |
6106 new CaptureGroupNameSSLSocketPool(NULL, NULL); | 6058 new CaptureGroupNameSSLSocketPool(NULL, NULL); |
6107 MockClientSocketPoolManager* mock_pool_manager = | 6059 MockClientSocketPoolManager* mock_pool_manager = |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6144 "http_proxy", | 6096 "http_proxy", |
6145 "http://host.with.alternate/direct", | 6097 "http://host.with.alternate/direct", |
6146 "ssl/host.with.alternate:443", | 6098 "ssl/host.with.alternate:443", |
6147 true, | 6099 true, |
6148 }, | 6100 }, |
6149 }; | 6101 }; |
6150 | 6102 |
6151 HttpStreamFactory::set_use_alternate_protocols(true); | 6103 HttpStreamFactory::set_use_alternate_protocols(true); |
6152 | 6104 |
6153 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { | 6105 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
6154 SessionDependencies session_deps( | 6106 SpdySessionDependencies session_deps( |
6155 ProxyService::CreateFixed(tests[i].proxy_server)); | 6107 ProxyService::CreateFixed(tests[i].proxy_server)); |
6156 scoped_refptr<HttpNetworkSession> session( | 6108 scoped_refptr<HttpNetworkSession> session( |
6157 SetupSessionForGroupNameTests(&session_deps)); | 6109 SetupSessionForGroupNameTests(&session_deps)); |
6158 | 6110 |
6159 HttpNetworkSessionPeer peer(session); | 6111 HttpNetworkSessionPeer peer(session); |
6160 | 6112 |
6161 HostPortPair proxy_host("http_proxy", 80); | 6113 HostPortPair proxy_host("http_proxy", 80); |
6162 CaptureGroupNameHttpProxySocketPool* http_proxy_pool = | 6114 CaptureGroupNameHttpProxySocketPool* http_proxy_pool = |
6163 new CaptureGroupNameHttpProxySocketPool(NULL, NULL); | 6115 new CaptureGroupNameHttpProxySocketPool(NULL, NULL); |
6164 CaptureGroupNameSSLSocketPool* ssl_conn_pool = | 6116 CaptureGroupNameSSLSocketPool* ssl_conn_pool = |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6216 "socks4://socks_proxy:1080", | 6168 "socks4://socks_proxy:1080", |
6217 "http://host.with.alternate/direct", | 6169 "http://host.with.alternate/direct", |
6218 "socks4/ssl/host.with.alternate:443", | 6170 "socks4/ssl/host.with.alternate:443", |
6219 true, | 6171 true, |
6220 }, | 6172 }, |
6221 }; | 6173 }; |
6222 | 6174 |
6223 HttpStreamFactory::set_use_alternate_protocols(true); | 6175 HttpStreamFactory::set_use_alternate_protocols(true); |
6224 | 6176 |
6225 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { | 6177 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
6226 SessionDependencies session_deps( | 6178 SpdySessionDependencies session_deps( |
6227 ProxyService::CreateFixed(tests[i].proxy_server)); | 6179 ProxyService::CreateFixed(tests[i].proxy_server)); |
6228 scoped_refptr<HttpNetworkSession> session( | 6180 scoped_refptr<HttpNetworkSession> session( |
6229 SetupSessionForGroupNameTests(&session_deps)); | 6181 SetupSessionForGroupNameTests(&session_deps)); |
6230 | 6182 |
6231 HttpNetworkSessionPeer peer(session); | 6183 HttpNetworkSessionPeer peer(session); |
6232 | 6184 |
6233 HostPortPair proxy_host("socks_proxy", 1080); | 6185 HostPortPair proxy_host("socks_proxy", 1080); |
6234 CaptureGroupNameSOCKSSocketPool* socks_conn_pool = | 6186 CaptureGroupNameSOCKSSocketPool* socks_conn_pool = |
6235 new CaptureGroupNameSOCKSSocketPool(NULL, NULL); | 6187 new CaptureGroupNameSOCKSSocketPool(NULL, NULL); |
6236 CaptureGroupNameSSLSocketPool* ssl_conn_pool = | 6188 CaptureGroupNameSSLSocketPool* ssl_conn_pool = |
(...skipping 18 matching lines...) Expand all Loading... |
6255 } | 6207 } |
6256 | 6208 |
6257 HttpStreamFactory::set_use_alternate_protocols(false); | 6209 HttpStreamFactory::set_use_alternate_protocols(false); |
6258 } | 6210 } |
6259 | 6211 |
6260 TEST_F(HttpNetworkTransactionSpdy3Test, ReconsiderProxyAfterFailedConnection) { | 6212 TEST_F(HttpNetworkTransactionSpdy3Test, ReconsiderProxyAfterFailedConnection) { |
6261 HttpRequestInfo request; | 6213 HttpRequestInfo request; |
6262 request.method = "GET"; | 6214 request.method = "GET"; |
6263 request.url = GURL("http://www.google.com/"); | 6215 request.url = GURL("http://www.google.com/"); |
6264 | 6216 |
6265 SessionDependencies session_deps( | 6217 SpdySessionDependencies session_deps( |
6266 ProxyService::CreateFixed("myproxy:70;foobar:80")); | 6218 ProxyService::CreateFixed("myproxy:70;foobar:80")); |
6267 | 6219 |
6268 // This simulates failure resolving all hostnames; that means we will fail | 6220 // This simulates failure resolving all hostnames; that means we will fail |
6269 // connecting to both proxies (myproxy:70 and foobar:80). | 6221 // connecting to both proxies (myproxy:70 and foobar:80). |
6270 session_deps.host_resolver->rules()->AddSimulatedFailure("*"); | 6222 session_deps.host_resolver->rules()->AddSimulatedFailure("*"); |
6271 | 6223 |
6272 scoped_ptr<HttpTransaction> trans( | 6224 scoped_ptr<HttpTransaction> trans( |
6273 new HttpNetworkTransaction(CreateSession(&session_deps))); | 6225 new HttpNetworkTransaction(CreateSession(&session_deps))); |
6274 | 6226 |
6275 TestCompletionCallback callback; | 6227 TestCompletionCallback callback; |
6276 | 6228 |
6277 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6229 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
6278 EXPECT_EQ(ERR_IO_PENDING, rv); | 6230 EXPECT_EQ(ERR_IO_PENDING, rv); |
6279 | 6231 |
6280 rv = callback.WaitForResult(); | 6232 rv = callback.WaitForResult(); |
6281 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, rv); | 6233 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, rv); |
6282 } | 6234 } |
6283 | 6235 |
6284 namespace { | 6236 namespace { |
6285 | 6237 |
6286 // Base test to make sure that when the load flags for a request specify to | 6238 // Base test to make sure that when the load flags for a request specify to |
6287 // bypass the cache, the DNS cache is not used. | 6239 // bypass the cache, the DNS cache is not used. |
6288 void BypassHostCacheOnRefreshHelper(int load_flags) { | 6240 void BypassHostCacheOnRefreshHelper(int load_flags) { |
6289 // Issue a request, asking to bypass the cache(s). | 6241 // Issue a request, asking to bypass the cache(s). |
6290 HttpRequestInfo request; | 6242 HttpRequestInfo request; |
6291 request.method = "GET"; | 6243 request.method = "GET"; |
6292 request.load_flags = load_flags; | 6244 request.load_flags = load_flags; |
6293 request.url = GURL("http://www.google.com/"); | 6245 request.url = GURL("http://www.google.com/"); |
6294 | 6246 |
6295 SessionDependencies session_deps; | 6247 SpdySessionDependencies session_deps; |
6296 | 6248 |
6297 // Select a host resolver that does caching. | 6249 // Select a host resolver that does caching. |
6298 session_deps.host_resolver.reset(new MockCachingHostResolver); | 6250 session_deps.host_resolver.reset(new MockCachingHostResolver); |
6299 | 6251 |
6300 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction( | 6252 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction( |
6301 CreateSession(&session_deps))); | 6253 CreateSession(&session_deps))); |
6302 | 6254 |
6303 // Warm up the host cache so it has an entry for "www.google.com". | 6255 // Warm up the host cache so it has an entry for "www.google.com". |
6304 AddressList addrlist; | 6256 AddressList addrlist; |
6305 TestCompletionCallback callback; | 6257 TestCompletionCallback callback; |
(...skipping 13 matching lines...) Expand all Loading... |
6319 | 6271 |
6320 // Inject a failure the next time that "www.google.com" is resolved. This way | 6272 // Inject a failure the next time that "www.google.com" is resolved. This way |
6321 // we can tell if the next lookup hit the cache, or the "network". | 6273 // we can tell if the next lookup hit the cache, or the "network". |
6322 // (cache --> success, "network" --> failure). | 6274 // (cache --> success, "network" --> failure). |
6323 session_deps.host_resolver->rules()->AddSimulatedFailure("www.google.com"); | 6275 session_deps.host_resolver->rules()->AddSimulatedFailure("www.google.com"); |
6324 | 6276 |
6325 // Connect up a mock socket which will fail with ERR_UNEXPECTED during the | 6277 // Connect up a mock socket which will fail with ERR_UNEXPECTED during the |
6326 // first read -- this won't be reached as the host resolution will fail first. | 6278 // first read -- this won't be reached as the host resolution will fail first. |
6327 MockRead data_reads[] = { MockRead(SYNCHRONOUS, ERR_UNEXPECTED) }; | 6279 MockRead data_reads[] = { MockRead(SYNCHRONOUS, ERR_UNEXPECTED) }; |
6328 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 6280 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
6329 session_deps.socket_factory.AddSocketDataProvider(&data); | 6281 session_deps.socket_factory->AddSocketDataProvider(&data); |
6330 | 6282 |
6331 // Run the request. | 6283 // Run the request. |
6332 rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6284 rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
6333 ASSERT_EQ(ERR_IO_PENDING, rv); | 6285 ASSERT_EQ(ERR_IO_PENDING, rv); |
6334 rv = callback.WaitForResult(); | 6286 rv = callback.WaitForResult(); |
6335 | 6287 |
6336 // If we bypassed the cache, we would have gotten a failure while resolving | 6288 // If we bypassed the cache, we would have gotten a failure while resolving |
6337 // "www.google.com". | 6289 // "www.google.com". |
6338 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv); | 6290 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv); |
6339 } | 6291 } |
6340 | 6292 |
6341 } // namespace | 6293 } // namespace |
6342 | 6294 |
6343 // There are multiple load flags that should trigger the host cache bypass. | 6295 // There are multiple load flags that should trigger the host cache bypass. |
6344 // Test each in isolation: | 6296 // Test each in isolation: |
6345 TEST_F(HttpNetworkTransactionSpdy3Test, BypassHostCacheOnRefresh1) { | 6297 TEST_F(HttpNetworkTransactionSpdy3Test, BypassHostCacheOnRefresh1) { |
6346 BypassHostCacheOnRefreshHelper(LOAD_BYPASS_CACHE); | 6298 BypassHostCacheOnRefreshHelper(LOAD_BYPASS_CACHE); |
6347 } | 6299 } |
6348 | 6300 |
6349 TEST_F(HttpNetworkTransactionSpdy3Test, BypassHostCacheOnRefresh2) { | 6301 TEST_F(HttpNetworkTransactionSpdy3Test, BypassHostCacheOnRefresh2) { |
6350 BypassHostCacheOnRefreshHelper(LOAD_VALIDATE_CACHE); | 6302 BypassHostCacheOnRefreshHelper(LOAD_VALIDATE_CACHE); |
6351 } | 6303 } |
6352 | 6304 |
6353 TEST_F(HttpNetworkTransactionSpdy3Test, BypassHostCacheOnRefresh3) { | 6305 TEST_F(HttpNetworkTransactionSpdy3Test, BypassHostCacheOnRefresh3) { |
6354 BypassHostCacheOnRefreshHelper(LOAD_DISABLE_CACHE); | 6306 BypassHostCacheOnRefreshHelper(LOAD_DISABLE_CACHE); |
6355 } | 6307 } |
6356 | 6308 |
6357 // Make sure we can handle an error when writing the request. | 6309 // Make sure we can handle an error when writing the request. |
6358 TEST_F(HttpNetworkTransactionSpdy3Test, RequestWriteError) { | 6310 TEST_F(HttpNetworkTransactionSpdy3Test, RequestWriteError) { |
6359 SessionDependencies session_deps; | 6311 SpdySessionDependencies session_deps; |
6360 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 6312 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
6361 | 6313 |
6362 HttpRequestInfo request; | 6314 HttpRequestInfo request; |
6363 request.method = "GET"; | 6315 request.method = "GET"; |
6364 request.url = GURL("http://www.foo.com/"); | 6316 request.url = GURL("http://www.foo.com/"); |
6365 request.load_flags = 0; | 6317 request.load_flags = 0; |
6366 | 6318 |
6367 MockWrite write_failure[] = { | 6319 MockWrite write_failure[] = { |
6368 MockWrite(ASYNC, ERR_CONNECTION_RESET), | 6320 MockWrite(ASYNC, ERR_CONNECTION_RESET), |
6369 }; | 6321 }; |
6370 StaticSocketDataProvider data(NULL, 0, | 6322 StaticSocketDataProvider data(NULL, 0, |
6371 write_failure, arraysize(write_failure)); | 6323 write_failure, arraysize(write_failure)); |
6372 session_deps.socket_factory.AddSocketDataProvider(&data); | 6324 session_deps.socket_factory->AddSocketDataProvider(&data); |
6373 | 6325 |
6374 TestCompletionCallback callback; | 6326 TestCompletionCallback callback; |
6375 | 6327 |
6376 scoped_ptr<HttpTransaction> trans( | 6328 scoped_ptr<HttpTransaction> trans( |
6377 new HttpNetworkTransaction(CreateSession(&session_deps))); | 6329 new HttpNetworkTransaction(CreateSession(&session_deps))); |
6378 | 6330 |
6379 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6331 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
6380 EXPECT_EQ(ERR_IO_PENDING, rv); | 6332 EXPECT_EQ(ERR_IO_PENDING, rv); |
6381 | 6333 |
6382 rv = callback.WaitForResult(); | 6334 rv = callback.WaitForResult(); |
6383 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 6335 EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
6384 } | 6336 } |
6385 | 6337 |
6386 // Check that a connection closed after the start of the headers finishes ok. | 6338 // Check that a connection closed after the start of the headers finishes ok. |
6387 TEST_F(HttpNetworkTransactionSpdy3Test, ConnectionClosedAfterStartOfHeaders) { | 6339 TEST_F(HttpNetworkTransactionSpdy3Test, ConnectionClosedAfterStartOfHeaders) { |
6388 SessionDependencies session_deps; | 6340 SpdySessionDependencies session_deps; |
6389 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 6341 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
6390 | 6342 |
6391 HttpRequestInfo request; | 6343 HttpRequestInfo request; |
6392 request.method = "GET"; | 6344 request.method = "GET"; |
6393 request.url = GURL("http://www.foo.com/"); | 6345 request.url = GURL("http://www.foo.com/"); |
6394 request.load_flags = 0; | 6346 request.load_flags = 0; |
6395 | 6347 |
6396 MockRead data_reads[] = { | 6348 MockRead data_reads[] = { |
6397 MockRead("HTTP/1."), | 6349 MockRead("HTTP/1."), |
6398 MockRead(SYNCHRONOUS, OK), | 6350 MockRead(SYNCHRONOUS, OK), |
6399 }; | 6351 }; |
6400 | 6352 |
6401 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 6353 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
6402 session_deps.socket_factory.AddSocketDataProvider(&data); | 6354 session_deps.socket_factory->AddSocketDataProvider(&data); |
6403 | 6355 |
6404 TestCompletionCallback callback; | 6356 TestCompletionCallback callback; |
6405 | 6357 |
6406 scoped_ptr<HttpTransaction> trans( | 6358 scoped_ptr<HttpTransaction> trans( |
6407 new HttpNetworkTransaction(CreateSession(&session_deps))); | 6359 new HttpNetworkTransaction(CreateSession(&session_deps))); |
6408 | 6360 |
6409 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6361 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
6410 EXPECT_EQ(ERR_IO_PENDING, rv); | 6362 EXPECT_EQ(ERR_IO_PENDING, rv); |
6411 | 6363 |
6412 rv = callback.WaitForResult(); | 6364 rv = callback.WaitForResult(); |
6413 EXPECT_EQ(OK, rv); | 6365 EXPECT_EQ(OK, rv); |
6414 | 6366 |
6415 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6367 const HttpResponseInfo* response = trans->GetResponseInfo(); |
6416 ASSERT_TRUE(response != NULL); | 6368 ASSERT_TRUE(response != NULL); |
6417 | 6369 |
6418 EXPECT_TRUE(response->headers != NULL); | 6370 EXPECT_TRUE(response->headers != NULL); |
6419 EXPECT_EQ("HTTP/1.0 200 OK", response->headers->GetStatusLine()); | 6371 EXPECT_EQ("HTTP/1.0 200 OK", response->headers->GetStatusLine()); |
6420 | 6372 |
6421 std::string response_data; | 6373 std::string response_data; |
6422 rv = ReadTransaction(trans.get(), &response_data); | 6374 rv = ReadTransaction(trans.get(), &response_data); |
6423 EXPECT_EQ(OK, rv); | 6375 EXPECT_EQ(OK, rv); |
6424 EXPECT_EQ("", response_data); | 6376 EXPECT_EQ("", response_data); |
6425 } | 6377 } |
6426 | 6378 |
6427 // Make sure that a dropped connection while draining the body for auth | 6379 // Make sure that a dropped connection while draining the body for auth |
6428 // restart does the right thing. | 6380 // restart does the right thing. |
6429 TEST_F(HttpNetworkTransactionSpdy3Test, DrainResetOK) { | 6381 TEST_F(HttpNetworkTransactionSpdy3Test, DrainResetOK) { |
6430 SessionDependencies session_deps; | 6382 SpdySessionDependencies session_deps; |
6431 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 6383 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
6432 | 6384 |
6433 HttpRequestInfo request; | 6385 HttpRequestInfo request; |
6434 request.method = "GET"; | 6386 request.method = "GET"; |
6435 request.url = GURL("http://www.google.com/"); | 6387 request.url = GURL("http://www.google.com/"); |
6436 request.load_flags = 0; | 6388 request.load_flags = 0; |
6437 | 6389 |
6438 MockWrite data_writes1[] = { | 6390 MockWrite data_writes1[] = { |
6439 MockWrite("GET / HTTP/1.1\r\n" | 6391 MockWrite("GET / HTTP/1.1\r\n" |
6440 "Host: www.google.com\r\n" | 6392 "Host: www.google.com\r\n" |
6441 "Connection: keep-alive\r\n\r\n"), | 6393 "Connection: keep-alive\r\n\r\n"), |
6442 }; | 6394 }; |
6443 | 6395 |
6444 MockRead data_reads1[] = { | 6396 MockRead data_reads1[] = { |
6445 MockRead("HTTP/1.1 401 Unauthorized\r\n"), | 6397 MockRead("HTTP/1.1 401 Unauthorized\r\n"), |
6446 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 6398 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
6447 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 6399 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
6448 MockRead("Content-Length: 14\r\n\r\n"), | 6400 MockRead("Content-Length: 14\r\n\r\n"), |
6449 MockRead("Unauth"), | 6401 MockRead("Unauth"), |
6450 MockRead(ASYNC, ERR_CONNECTION_RESET), | 6402 MockRead(ASYNC, ERR_CONNECTION_RESET), |
6451 }; | 6403 }; |
6452 | 6404 |
6453 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 6405 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
6454 data_writes1, arraysize(data_writes1)); | 6406 data_writes1, arraysize(data_writes1)); |
6455 session_deps.socket_factory.AddSocketDataProvider(&data1); | 6407 session_deps.socket_factory->AddSocketDataProvider(&data1); |
6456 | 6408 |
6457 // After calling trans->RestartWithAuth(), this is the request we should | 6409 // After calling trans->RestartWithAuth(), this is the request we should |
6458 // be issuing -- the final header line contains the credentials. | 6410 // be issuing -- the final header line contains the credentials. |
6459 MockWrite data_writes2[] = { | 6411 MockWrite data_writes2[] = { |
6460 MockWrite("GET / HTTP/1.1\r\n" | 6412 MockWrite("GET / HTTP/1.1\r\n" |
6461 "Host: www.google.com\r\n" | 6413 "Host: www.google.com\r\n" |
6462 "Connection: keep-alive\r\n" | 6414 "Connection: keep-alive\r\n" |
6463 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 6415 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
6464 }; | 6416 }; |
6465 | 6417 |
6466 // Lastly, the server responds with the actual content. | 6418 // Lastly, the server responds with the actual content. |
6467 MockRead data_reads2[] = { | 6419 MockRead data_reads2[] = { |
6468 MockRead("HTTP/1.1 200 OK\r\n"), | 6420 MockRead("HTTP/1.1 200 OK\r\n"), |
6469 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 6421 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
6470 MockRead("Content-Length: 100\r\n\r\n"), | 6422 MockRead("Content-Length: 100\r\n\r\n"), |
6471 MockRead(SYNCHRONOUS, OK), | 6423 MockRead(SYNCHRONOUS, OK), |
6472 }; | 6424 }; |
6473 | 6425 |
6474 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 6426 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
6475 data_writes2, arraysize(data_writes2)); | 6427 data_writes2, arraysize(data_writes2)); |
6476 session_deps.socket_factory.AddSocketDataProvider(&data2); | 6428 session_deps.socket_factory->AddSocketDataProvider(&data2); |
6477 | 6429 |
6478 TestCompletionCallback callback1; | 6430 TestCompletionCallback callback1; |
6479 | 6431 |
6480 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 6432 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
6481 | 6433 |
6482 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 6434 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
6483 EXPECT_EQ(ERR_IO_PENDING, rv); | 6435 EXPECT_EQ(ERR_IO_PENDING, rv); |
6484 | 6436 |
6485 rv = callback1.WaitForResult(); | 6437 rv = callback1.WaitForResult(); |
6486 EXPECT_EQ(OK, rv); | 6438 EXPECT_EQ(OK, rv); |
(...skipping 12 matching lines...) Expand all Loading... |
6499 EXPECT_EQ(OK, rv); | 6451 EXPECT_EQ(OK, rv); |
6500 | 6452 |
6501 response = trans->GetResponseInfo(); | 6453 response = trans->GetResponseInfo(); |
6502 ASSERT_TRUE(response != NULL); | 6454 ASSERT_TRUE(response != NULL); |
6503 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 6455 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
6504 EXPECT_EQ(100, response->headers->GetContentLength()); | 6456 EXPECT_EQ(100, response->headers->GetContentLength()); |
6505 } | 6457 } |
6506 | 6458 |
6507 // Test HTTPS connections going through a proxy that sends extra data. | 6459 // Test HTTPS connections going through a proxy that sends extra data. |
6508 TEST_F(HttpNetworkTransactionSpdy3Test, HTTPSViaProxyWithExtraData) { | 6460 TEST_F(HttpNetworkTransactionSpdy3Test, HTTPSViaProxyWithExtraData) { |
6509 SessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); | 6461 SpdySessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); |
6510 | 6462 |
6511 HttpRequestInfo request; | 6463 HttpRequestInfo request; |
6512 request.method = "GET"; | 6464 request.method = "GET"; |
6513 request.url = GURL("https://www.google.com/"); | 6465 request.url = GURL("https://www.google.com/"); |
6514 request.load_flags = 0; | 6466 request.load_flags = 0; |
6515 | 6467 |
6516 MockRead proxy_reads[] = { | 6468 MockRead proxy_reads[] = { |
6517 MockRead("HTTP/1.0 200 Connected\r\n\r\nExtra data"), | 6469 MockRead("HTTP/1.0 200 Connected\r\n\r\nExtra data"), |
6518 MockRead(SYNCHRONOUS, OK) | 6470 MockRead(SYNCHRONOUS, OK) |
6519 }; | 6471 }; |
6520 | 6472 |
6521 StaticSocketDataProvider data(proxy_reads, arraysize(proxy_reads), NULL, 0); | 6473 StaticSocketDataProvider data(proxy_reads, arraysize(proxy_reads), NULL, 0); |
6522 SSLSocketDataProvider ssl(ASYNC, OK); | 6474 SSLSocketDataProvider ssl(ASYNC, OK); |
6523 | 6475 |
6524 session_deps.socket_factory.AddSocketDataProvider(&data); | 6476 session_deps.socket_factory->AddSocketDataProvider(&data); |
6525 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 6477 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
6526 | 6478 |
6527 TestCompletionCallback callback; | 6479 TestCompletionCallback callback; |
6528 | 6480 |
6529 session_deps.socket_factory.ResetNextMockIndexes(); | 6481 session_deps.socket_factory->ResetNextMockIndexes(); |
6530 | 6482 |
6531 scoped_ptr<HttpTransaction> trans( | 6483 scoped_ptr<HttpTransaction> trans( |
6532 new HttpNetworkTransaction(CreateSession(&session_deps))); | 6484 new HttpNetworkTransaction(CreateSession(&session_deps))); |
6533 | 6485 |
6534 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6486 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
6535 EXPECT_EQ(ERR_IO_PENDING, rv); | 6487 EXPECT_EQ(ERR_IO_PENDING, rv); |
6536 | 6488 |
6537 rv = callback.WaitForResult(); | 6489 rv = callback.WaitForResult(); |
6538 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 6490 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); |
6539 } | 6491 } |
6540 | 6492 |
6541 TEST_F(HttpNetworkTransactionSpdy3Test, LargeContentLengthThenClose) { | 6493 TEST_F(HttpNetworkTransactionSpdy3Test, LargeContentLengthThenClose) { |
6542 HttpRequestInfo request; | 6494 HttpRequestInfo request; |
6543 request.method = "GET"; | 6495 request.method = "GET"; |
6544 request.url = GURL("http://www.google.com/"); | 6496 request.url = GURL("http://www.google.com/"); |
6545 request.load_flags = 0; | 6497 request.load_flags = 0; |
6546 | 6498 |
6547 SessionDependencies session_deps; | 6499 SpdySessionDependencies session_deps; |
6548 scoped_ptr<HttpTransaction> trans( | 6500 scoped_ptr<HttpTransaction> trans( |
6549 new HttpNetworkTransaction(CreateSession(&session_deps))); | 6501 new HttpNetworkTransaction(CreateSession(&session_deps))); |
6550 | 6502 |
6551 MockRead data_reads[] = { | 6503 MockRead data_reads[] = { |
6552 MockRead("HTTP/1.0 200 OK\r\nContent-Length:6719476739\r\n\r\n"), | 6504 MockRead("HTTP/1.0 200 OK\r\nContent-Length:6719476739\r\n\r\n"), |
6553 MockRead(SYNCHRONOUS, OK), | 6505 MockRead(SYNCHRONOUS, OK), |
6554 }; | 6506 }; |
6555 | 6507 |
6556 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 6508 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
6557 session_deps.socket_factory.AddSocketDataProvider(&data); | 6509 session_deps.socket_factory->AddSocketDataProvider(&data); |
6558 | 6510 |
6559 TestCompletionCallback callback; | 6511 TestCompletionCallback callback; |
6560 | 6512 |
6561 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6513 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
6562 EXPECT_EQ(ERR_IO_PENDING, rv); | 6514 EXPECT_EQ(ERR_IO_PENDING, rv); |
6563 | 6515 |
6564 EXPECT_EQ(OK, callback.WaitForResult()); | 6516 EXPECT_EQ(OK, callback.WaitForResult()); |
6565 | 6517 |
6566 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6518 const HttpResponseInfo* response = trans->GetResponseInfo(); |
6567 ASSERT_TRUE(response != NULL); | 6519 ASSERT_TRUE(response != NULL); |
(...skipping 16 matching lines...) Expand all Loading... |
6584 scoped_refptr<UploadData> upload_data(new UploadData()); | 6536 scoped_refptr<UploadData> upload_data(new UploadData()); |
6585 upload_data->AppendFileRange(temp_file_path, 0, kuint64max, base::Time()); | 6537 upload_data->AppendFileRange(temp_file_path, 0, kuint64max, base::Time()); |
6586 UploadDataStream upload_data_stream(upload_data); | 6538 UploadDataStream upload_data_stream(upload_data); |
6587 | 6539 |
6588 HttpRequestInfo request; | 6540 HttpRequestInfo request; |
6589 request.method = "POST"; | 6541 request.method = "POST"; |
6590 request.url = GURL("http://www.google.com/upload"); | 6542 request.url = GURL("http://www.google.com/upload"); |
6591 request.upload_data_stream = &upload_data_stream; | 6543 request.upload_data_stream = &upload_data_stream; |
6592 request.load_flags = 0; | 6544 request.load_flags = 0; |
6593 | 6545 |
6594 SessionDependencies session_deps; | 6546 SpdySessionDependencies session_deps; |
6595 scoped_ptr<HttpTransaction> trans( | 6547 scoped_ptr<HttpTransaction> trans( |
6596 new HttpNetworkTransaction(CreateSession(&session_deps))); | 6548 new HttpNetworkTransaction(CreateSession(&session_deps))); |
6597 | 6549 |
6598 MockRead data_reads[] = { | 6550 MockRead data_reads[] = { |
6599 MockRead("HTTP/1.0 200 OK\r\n\r\n"), | 6551 MockRead("HTTP/1.0 200 OK\r\n\r\n"), |
6600 MockRead("hello world"), | 6552 MockRead("hello world"), |
6601 MockRead(SYNCHRONOUS, OK), | 6553 MockRead(SYNCHRONOUS, OK), |
6602 }; | 6554 }; |
6603 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 6555 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
6604 session_deps.socket_factory.AddSocketDataProvider(&data); | 6556 session_deps.socket_factory->AddSocketDataProvider(&data); |
6605 | 6557 |
6606 TestCompletionCallback callback; | 6558 TestCompletionCallback callback; |
6607 | 6559 |
6608 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6560 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
6609 EXPECT_EQ(ERR_IO_PENDING, rv); | 6561 EXPECT_EQ(ERR_IO_PENDING, rv); |
6610 | 6562 |
6611 rv = callback.WaitForResult(); | 6563 rv = callback.WaitForResult(); |
6612 EXPECT_EQ(OK, rv); | 6564 EXPECT_EQ(OK, rv); |
6613 | 6565 |
6614 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6566 const HttpResponseInfo* response = trans->GetResponseInfo(); |
(...skipping 23 matching lines...) Expand all Loading... |
6638 UploadDataStream upload_data_stream(upload_data); | 6590 UploadDataStream upload_data_stream(upload_data); |
6639 | 6591 |
6640 HttpRequestInfo request; | 6592 HttpRequestInfo request; |
6641 request.method = "POST"; | 6593 request.method = "POST"; |
6642 request.url = GURL("http://www.google.com/upload"); | 6594 request.url = GURL("http://www.google.com/upload"); |
6643 request.upload_data_stream = &upload_data_stream; | 6595 request.upload_data_stream = &upload_data_stream; |
6644 request.load_flags = 0; | 6596 request.load_flags = 0; |
6645 | 6597 |
6646 // If we try to upload an unreadable file, the network stack should report | 6598 // If we try to upload an unreadable file, the network stack should report |
6647 // the file size as zero and upload zero bytes for that file. | 6599 // the file size as zero and upload zero bytes for that file. |
6648 SessionDependencies session_deps; | 6600 SpdySessionDependencies session_deps; |
6649 scoped_ptr<HttpTransaction> trans( | 6601 scoped_ptr<HttpTransaction> trans( |
6650 new HttpNetworkTransaction(CreateSession(&session_deps))); | 6602 new HttpNetworkTransaction(CreateSession(&session_deps))); |
6651 | 6603 |
6652 MockRead data_reads[] = { | 6604 MockRead data_reads[] = { |
6653 MockRead("HTTP/1.0 200 OK\r\n\r\n"), | 6605 MockRead("HTTP/1.0 200 OK\r\n\r\n"), |
6654 MockRead(SYNCHRONOUS, OK), | 6606 MockRead(SYNCHRONOUS, OK), |
6655 }; | 6607 }; |
6656 MockWrite data_writes[] = { | 6608 MockWrite data_writes[] = { |
6657 MockWrite("POST /upload HTTP/1.1\r\n" | 6609 MockWrite("POST /upload HTTP/1.1\r\n" |
6658 "Host: www.google.com\r\n" | 6610 "Host: www.google.com\r\n" |
6659 "Connection: keep-alive\r\n" | 6611 "Connection: keep-alive\r\n" |
6660 "Content-Length: 0\r\n\r\n"), | 6612 "Content-Length: 0\r\n\r\n"), |
6661 MockWrite(SYNCHRONOUS, OK), | 6613 MockWrite(SYNCHRONOUS, OK), |
6662 }; | 6614 }; |
6663 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 6615 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
6664 arraysize(data_writes)); | 6616 arraysize(data_writes)); |
6665 session_deps.socket_factory.AddSocketDataProvider(&data); | 6617 session_deps.socket_factory->AddSocketDataProvider(&data); |
6666 | 6618 |
6667 TestCompletionCallback callback; | 6619 TestCompletionCallback callback; |
6668 | 6620 |
6669 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6621 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
6670 EXPECT_EQ(ERR_IO_PENDING, rv); | 6622 EXPECT_EQ(ERR_IO_PENDING, rv); |
6671 | 6623 |
6672 rv = callback.WaitForResult(); | 6624 rv = callback.WaitForResult(); |
6673 EXPECT_EQ(OK, rv); | 6625 EXPECT_EQ(OK, rv); |
6674 | 6626 |
6675 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6627 const HttpResponseInfo* response = trans->GetResponseInfo(); |
(...skipping 15 matching lines...) Expand all Loading... |
6691 scoped_refptr<UploadData> upload_data(new UploadData()); | 6643 scoped_refptr<UploadData> upload_data(new UploadData()); |
6692 upload_data->AppendFileRange(temp_file, 0, kuint64max, base::Time()); | 6644 upload_data->AppendFileRange(temp_file, 0, kuint64max, base::Time()); |
6693 UploadDataStream upload_data_stream(upload_data); | 6645 UploadDataStream upload_data_stream(upload_data); |
6694 | 6646 |
6695 HttpRequestInfo request; | 6647 HttpRequestInfo request; |
6696 request.method = "POST"; | 6648 request.method = "POST"; |
6697 request.url = GURL("http://www.google.com/upload"); | 6649 request.url = GURL("http://www.google.com/upload"); |
6698 request.upload_data_stream = &upload_data_stream; | 6650 request.upload_data_stream = &upload_data_stream; |
6699 request.load_flags = 0; | 6651 request.load_flags = 0; |
6700 | 6652 |
6701 SessionDependencies session_deps; | 6653 SpdySessionDependencies session_deps; |
6702 scoped_ptr<HttpTransaction> trans( | 6654 scoped_ptr<HttpTransaction> trans( |
6703 new HttpNetworkTransaction(CreateSession(&session_deps))); | 6655 new HttpNetworkTransaction(CreateSession(&session_deps))); |
6704 | 6656 |
6705 MockRead data_reads[] = { | 6657 MockRead data_reads[] = { |
6706 MockRead("HTTP/1.1 401 Unauthorized\r\n"), | 6658 MockRead("HTTP/1.1 401 Unauthorized\r\n"), |
6707 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 6659 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
6708 MockRead("Content-Length: 0\r\n\r\n"), // No response body. | 6660 MockRead("Content-Length: 0\r\n\r\n"), // No response body. |
6709 | 6661 |
6710 MockRead("HTTP/1.1 200 OK\r\n"), | 6662 MockRead("HTTP/1.1 200 OK\r\n"), |
6711 MockRead("Content-Length: 0\r\n\r\n"), | 6663 MockRead("Content-Length: 0\r\n\r\n"), |
(...skipping 10 matching lines...) Expand all Loading... |
6722 "Host: www.google.com\r\n" | 6674 "Host: www.google.com\r\n" |
6723 "Connection: keep-alive\r\n" | 6675 "Connection: keep-alive\r\n" |
6724 "Content-Length: 0\r\n" | 6676 "Content-Length: 0\r\n" |
6725 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 6677 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
6726 MockWrite(SYNCHRONOUS, unreadable_contents.c_str(), | 6678 MockWrite(SYNCHRONOUS, unreadable_contents.c_str(), |
6727 temp_file_contents.length()), | 6679 temp_file_contents.length()), |
6728 MockWrite(SYNCHRONOUS, OK), | 6680 MockWrite(SYNCHRONOUS, OK), |
6729 }; | 6681 }; |
6730 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 6682 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, |
6731 arraysize(data_writes)); | 6683 arraysize(data_writes)); |
6732 session_deps.socket_factory.AddSocketDataProvider(&data); | 6684 session_deps.socket_factory->AddSocketDataProvider(&data); |
6733 | 6685 |
6734 TestCompletionCallback callback1; | 6686 TestCompletionCallback callback1; |
6735 | 6687 |
6736 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 6688 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
6737 EXPECT_EQ(ERR_IO_PENDING, rv); | 6689 EXPECT_EQ(ERR_IO_PENDING, rv); |
6738 | 6690 |
6739 rv = callback1.WaitForResult(); | 6691 rv = callback1.WaitForResult(); |
6740 EXPECT_EQ(OK, rv); | 6692 EXPECT_EQ(OK, rv); |
6741 | 6693 |
6742 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6694 const HttpResponseInfo* response = trans->GetResponseInfo(); |
(...skipping 18 matching lines...) Expand all Loading... |
6761 ASSERT_TRUE(response != NULL); | 6713 ASSERT_TRUE(response != NULL); |
6762 EXPECT_TRUE(response->headers != NULL); | 6714 EXPECT_TRUE(response->headers != NULL); |
6763 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 6715 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
6764 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 6716 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
6765 | 6717 |
6766 file_util::Delete(temp_file, false); | 6718 file_util::Delete(temp_file, false); |
6767 } | 6719 } |
6768 | 6720 |
6769 // Tests that changes to Auth realms are treated like auth rejections. | 6721 // Tests that changes to Auth realms are treated like auth rejections. |
6770 TEST_F(HttpNetworkTransactionSpdy3Test, ChangeAuthRealms) { | 6722 TEST_F(HttpNetworkTransactionSpdy3Test, ChangeAuthRealms) { |
6771 SessionDependencies session_deps; | 6723 SpdySessionDependencies session_deps; |
6772 | 6724 |
6773 HttpRequestInfo request; | 6725 HttpRequestInfo request; |
6774 request.method = "GET"; | 6726 request.method = "GET"; |
6775 request.url = GURL("http://www.google.com/"); | 6727 request.url = GURL("http://www.google.com/"); |
6776 request.load_flags = 0; | 6728 request.load_flags = 0; |
6777 | 6729 |
6778 // First transaction will request a resource and receive a Basic challenge | 6730 // First transaction will request a resource and receive a Basic challenge |
6779 // with realm="first_realm". | 6731 // with realm="first_realm". |
6780 MockWrite data_writes1[] = { | 6732 MockWrite data_writes1[] = { |
6781 MockWrite("GET / HTTP/1.1\r\n" | 6733 MockWrite("GET / HTTP/1.1\r\n" |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6837 }; | 6789 }; |
6838 | 6790 |
6839 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 6791 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
6840 data_writes1, arraysize(data_writes1)); | 6792 data_writes1, arraysize(data_writes1)); |
6841 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 6793 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
6842 data_writes2, arraysize(data_writes2)); | 6794 data_writes2, arraysize(data_writes2)); |
6843 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), | 6795 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), |
6844 data_writes3, arraysize(data_writes3)); | 6796 data_writes3, arraysize(data_writes3)); |
6845 StaticSocketDataProvider data4(data_reads4, arraysize(data_reads4), | 6797 StaticSocketDataProvider data4(data_reads4, arraysize(data_reads4), |
6846 data_writes4, arraysize(data_writes4)); | 6798 data_writes4, arraysize(data_writes4)); |
6847 session_deps.socket_factory.AddSocketDataProvider(&data1); | 6799 session_deps.socket_factory->AddSocketDataProvider(&data1); |
6848 session_deps.socket_factory.AddSocketDataProvider(&data2); | 6800 session_deps.socket_factory->AddSocketDataProvider(&data2); |
6849 session_deps.socket_factory.AddSocketDataProvider(&data3); | 6801 session_deps.socket_factory->AddSocketDataProvider(&data3); |
6850 session_deps.socket_factory.AddSocketDataProvider(&data4); | 6802 session_deps.socket_factory->AddSocketDataProvider(&data4); |
6851 | 6803 |
6852 TestCompletionCallback callback1; | 6804 TestCompletionCallback callback1; |
6853 | 6805 |
6854 scoped_ptr<HttpTransaction> trans( | 6806 scoped_ptr<HttpTransaction> trans( |
6855 new HttpNetworkTransaction(CreateSession(&session_deps))); | 6807 new HttpNetworkTransaction(CreateSession(&session_deps))); |
6856 | 6808 |
6857 // Issue the first request with Authorize headers. There should be a | 6809 // Issue the first request with Authorize headers. There should be a |
6858 // password prompt for first_realm waiting to be filled in after the | 6810 // password prompt for first_realm waiting to be filled in after the |
6859 // transaction completes. | 6811 // transaction completes. |
6860 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 6812 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6916 EXPECT_EQ(OK, rv); | 6868 EXPECT_EQ(OK, rv); |
6917 response = trans->GetResponseInfo(); | 6869 response = trans->GetResponseInfo(); |
6918 ASSERT_TRUE(response != NULL); | 6870 ASSERT_TRUE(response != NULL); |
6919 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 6871 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
6920 } | 6872 } |
6921 | 6873 |
6922 TEST_F(HttpNetworkTransactionSpdy3Test, HonorAlternateProtocolHeader) { | 6874 TEST_F(HttpNetworkTransactionSpdy3Test, HonorAlternateProtocolHeader) { |
6923 HttpStreamFactory::set_use_alternate_protocols(true); | 6875 HttpStreamFactory::set_use_alternate_protocols(true); |
6924 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 6876 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
6925 | 6877 |
6926 SessionDependencies session_deps; | 6878 SpdySessionDependencies session_deps; |
6927 | 6879 |
6928 MockRead data_reads[] = { | 6880 MockRead data_reads[] = { |
6929 MockRead("HTTP/1.1 200 OK\r\n"), | 6881 MockRead("HTTP/1.1 200 OK\r\n"), |
6930 MockRead(kAlternateProtocolHttpHeader), | 6882 MockRead(kAlternateProtocolHttpHeader), |
6931 MockRead("hello world"), | 6883 MockRead("hello world"), |
6932 MockRead(SYNCHRONOUS, OK), | 6884 MockRead(SYNCHRONOUS, OK), |
6933 }; | 6885 }; |
6934 | 6886 |
6935 HttpRequestInfo request; | 6887 HttpRequestInfo request; |
6936 request.method = "GET"; | 6888 request.method = "GET"; |
6937 request.url = GURL("http://www.google.com/"); | 6889 request.url = GURL("http://www.google.com/"); |
6938 request.load_flags = 0; | 6890 request.load_flags = 0; |
6939 | 6891 |
6940 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 6892 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
6941 | 6893 |
6942 session_deps.socket_factory.AddSocketDataProvider(&data); | 6894 session_deps.socket_factory->AddSocketDataProvider(&data); |
6943 | 6895 |
6944 TestCompletionCallback callback; | 6896 TestCompletionCallback callback; |
6945 | 6897 |
6946 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 6898 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
6947 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 6899 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
6948 | 6900 |
6949 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6901 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
6950 EXPECT_EQ(ERR_IO_PENDING, rv); | 6902 EXPECT_EQ(ERR_IO_PENDING, rv); |
6951 | 6903 |
6952 HostPortPair http_host_port_pair("www.google.com", 80); | 6904 HostPortPair http_host_port_pair("www.google.com", 80); |
(...skipping 23 matching lines...) Expand all Loading... |
6976 expected_alternate.protocol = NPN_SPDY_3; | 6928 expected_alternate.protocol = NPN_SPDY_3; |
6977 EXPECT_TRUE(expected_alternate.Equals(alternate)); | 6929 EXPECT_TRUE(expected_alternate.Equals(alternate)); |
6978 | 6930 |
6979 HttpStreamFactory::set_use_alternate_protocols(false); | 6931 HttpStreamFactory::set_use_alternate_protocols(false); |
6980 HttpStreamFactory::SetNextProtos(std::vector<std::string>()); | 6932 HttpStreamFactory::SetNextProtos(std::vector<std::string>()); |
6981 } | 6933 } |
6982 | 6934 |
6983 TEST_F(HttpNetworkTransactionSpdy3Test, | 6935 TEST_F(HttpNetworkTransactionSpdy3Test, |
6984 MarkBrokenAlternateProtocolAndFallback) { | 6936 MarkBrokenAlternateProtocolAndFallback) { |
6985 HttpStreamFactory::set_use_alternate_protocols(true); | 6937 HttpStreamFactory::set_use_alternate_protocols(true); |
6986 SessionDependencies session_deps; | 6938 SpdySessionDependencies session_deps; |
6987 | 6939 |
6988 HttpRequestInfo request; | 6940 HttpRequestInfo request; |
6989 request.method = "GET"; | 6941 request.method = "GET"; |
6990 request.url = GURL("http://www.google.com/"); | 6942 request.url = GURL("http://www.google.com/"); |
6991 request.load_flags = 0; | 6943 request.load_flags = 0; |
6992 | 6944 |
6993 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); | 6945 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
6994 StaticSocketDataProvider first_data; | 6946 StaticSocketDataProvider first_data; |
6995 first_data.set_connect_data(mock_connect); | 6947 first_data.set_connect_data(mock_connect); |
6996 session_deps.socket_factory.AddSocketDataProvider(&first_data); | 6948 session_deps.socket_factory->AddSocketDataProvider(&first_data); |
6997 | 6949 |
6998 MockRead data_reads[] = { | 6950 MockRead data_reads[] = { |
6999 MockRead("HTTP/1.1 200 OK\r\n\r\n"), | 6951 MockRead("HTTP/1.1 200 OK\r\n\r\n"), |
7000 MockRead("hello world"), | 6952 MockRead("hello world"), |
7001 MockRead(ASYNC, OK), | 6953 MockRead(ASYNC, OK), |
7002 }; | 6954 }; |
7003 StaticSocketDataProvider second_data( | 6955 StaticSocketDataProvider second_data( |
7004 data_reads, arraysize(data_reads), NULL, 0); | 6956 data_reads, arraysize(data_reads), NULL, 0); |
7005 session_deps.socket_factory.AddSocketDataProvider(&second_data); | 6957 session_deps.socket_factory->AddSocketDataProvider(&second_data); |
7006 | 6958 |
7007 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 6959 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
7008 | 6960 |
7009 HttpServerProperties* http_server_properties = | 6961 HttpServerProperties* http_server_properties = |
7010 session->http_server_properties(); | 6962 session->http_server_properties(); |
7011 // Port must be < 1024, or the header will be ignored (since initial port was | 6963 // Port must be < 1024, or the header will be ignored (since initial port was |
7012 // port 80 (another restricted port). | 6964 // port 80 (another restricted port). |
7013 http_server_properties->SetAlternateProtocol( | 6965 http_server_properties->SetAlternateProtocol( |
7014 HostPortPair::FromURL(request.url), | 6966 HostPortPair::FromURL(request.url), |
7015 666 /* port is ignored by MockConnect anyway */, | 6967 666 /* port is ignored by MockConnect anyway */, |
(...skipping 24 matching lines...) Expand all Loading... |
7040 HttpStreamFactory::set_use_alternate_protocols(false); | 6992 HttpStreamFactory::set_use_alternate_protocols(false); |
7041 } | 6993 } |
7042 | 6994 |
7043 TEST_F(HttpNetworkTransactionSpdy3Test, | 6995 TEST_F(HttpNetworkTransactionSpdy3Test, |
7044 AlternateProtocolPortRestrictedBlocked) { | 6996 AlternateProtocolPortRestrictedBlocked) { |
7045 // Ensure that we're not allowed to redirect traffic via an alternate | 6997 // Ensure that we're not allowed to redirect traffic via an alternate |
7046 // protocol to an unrestricted (port >= 1024) when the original traffic was | 6998 // protocol to an unrestricted (port >= 1024) when the original traffic was |
7047 // on a restricted port (port < 1024). Ensure that we can redirect in all | 6999 // on a restricted port (port < 1024). Ensure that we can redirect in all |
7048 // other cases. | 7000 // other cases. |
7049 HttpStreamFactory::set_use_alternate_protocols(true); | 7001 HttpStreamFactory::set_use_alternate_protocols(true); |
7050 SessionDependencies session_deps; | 7002 SpdySessionDependencies session_deps; |
7051 | 7003 |
7052 HttpRequestInfo restricted_port_request; | 7004 HttpRequestInfo restricted_port_request; |
7053 restricted_port_request.method = "GET"; | 7005 restricted_port_request.method = "GET"; |
7054 restricted_port_request.url = GURL("http://www.google.com:1023/"); | 7006 restricted_port_request.url = GURL("http://www.google.com:1023/"); |
7055 restricted_port_request.load_flags = 0; | 7007 restricted_port_request.load_flags = 0; |
7056 | 7008 |
7057 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); | 7009 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
7058 StaticSocketDataProvider first_data; | 7010 StaticSocketDataProvider first_data; |
7059 first_data.set_connect_data(mock_connect); | 7011 first_data.set_connect_data(mock_connect); |
7060 session_deps.socket_factory.AddSocketDataProvider(&first_data); | 7012 session_deps.socket_factory->AddSocketDataProvider(&first_data); |
7061 | 7013 |
7062 MockRead data_reads[] = { | 7014 MockRead data_reads[] = { |
7063 MockRead("HTTP/1.1 200 OK\r\n\r\n"), | 7015 MockRead("HTTP/1.1 200 OK\r\n\r\n"), |
7064 MockRead("hello world"), | 7016 MockRead("hello world"), |
7065 MockRead(ASYNC, OK), | 7017 MockRead(ASYNC, OK), |
7066 }; | 7018 }; |
7067 StaticSocketDataProvider second_data( | 7019 StaticSocketDataProvider second_data( |
7068 data_reads, arraysize(data_reads), NULL, 0); | 7020 data_reads, arraysize(data_reads), NULL, 0); |
7069 session_deps.socket_factory.AddSocketDataProvider(&second_data); | 7021 session_deps.socket_factory->AddSocketDataProvider(&second_data); |
7070 | 7022 |
7071 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 7023 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
7072 | 7024 |
7073 HttpServerProperties* http_server_properties = | 7025 HttpServerProperties* http_server_properties = |
7074 session->http_server_properties(); | 7026 session->http_server_properties(); |
7075 const int kUnrestrictedAlternatePort = 1024; | 7027 const int kUnrestrictedAlternatePort = 1024; |
7076 http_server_properties->SetAlternateProtocol( | 7028 http_server_properties->SetAlternateProtocol( |
7077 HostPortPair::FromURL(restricted_port_request.url), | 7029 HostPortPair::FromURL(restricted_port_request.url), |
7078 kUnrestrictedAlternatePort, | 7030 kUnrestrictedAlternatePort, |
7079 NPN_SPDY_3); | 7031 NPN_SPDY_3); |
(...skipping 10 matching lines...) Expand all Loading... |
7090 HttpStreamFactory::set_use_alternate_protocols(false); | 7042 HttpStreamFactory::set_use_alternate_protocols(false); |
7091 } | 7043 } |
7092 | 7044 |
7093 TEST_F(HttpNetworkTransactionSpdy3Test, | 7045 TEST_F(HttpNetworkTransactionSpdy3Test, |
7094 AlternateProtocolPortRestrictedAllowed) { | 7046 AlternateProtocolPortRestrictedAllowed) { |
7095 // Ensure that we're not allowed to redirect traffic via an alternate | 7047 // Ensure that we're not allowed to redirect traffic via an alternate |
7096 // protocol to an unrestricted (port >= 1024) when the original traffic was | 7048 // protocol to an unrestricted (port >= 1024) when the original traffic was |
7097 // on a restricted port (port < 1024). Ensure that we can redirect in all | 7049 // on a restricted port (port < 1024). Ensure that we can redirect in all |
7098 // other cases. | 7050 // other cases. |
7099 HttpStreamFactory::set_use_alternate_protocols(true); | 7051 HttpStreamFactory::set_use_alternate_protocols(true); |
7100 SessionDependencies session_deps; | 7052 SpdySessionDependencies session_deps; |
7101 | 7053 |
7102 HttpRequestInfo restricted_port_request; | 7054 HttpRequestInfo restricted_port_request; |
7103 restricted_port_request.method = "GET"; | 7055 restricted_port_request.method = "GET"; |
7104 restricted_port_request.url = GURL("http://www.google.com:1023/"); | 7056 restricted_port_request.url = GURL("http://www.google.com:1023/"); |
7105 restricted_port_request.load_flags = 0; | 7057 restricted_port_request.load_flags = 0; |
7106 | 7058 |
7107 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); | 7059 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
7108 StaticSocketDataProvider first_data; | 7060 StaticSocketDataProvider first_data; |
7109 first_data.set_connect_data(mock_connect); | 7061 first_data.set_connect_data(mock_connect); |
7110 session_deps.socket_factory.AddSocketDataProvider(&first_data); | 7062 session_deps.socket_factory->AddSocketDataProvider(&first_data); |
7111 | 7063 |
7112 MockRead data_reads[] = { | 7064 MockRead data_reads[] = { |
7113 MockRead("HTTP/1.1 200 OK\r\n\r\n"), | 7065 MockRead("HTTP/1.1 200 OK\r\n\r\n"), |
7114 MockRead("hello world"), | 7066 MockRead("hello world"), |
7115 MockRead(ASYNC, OK), | 7067 MockRead(ASYNC, OK), |
7116 }; | 7068 }; |
7117 StaticSocketDataProvider second_data( | 7069 StaticSocketDataProvider second_data( |
7118 data_reads, arraysize(data_reads), NULL, 0); | 7070 data_reads, arraysize(data_reads), NULL, 0); |
7119 session_deps.socket_factory.AddSocketDataProvider(&second_data); | 7071 session_deps.socket_factory->AddSocketDataProvider(&second_data); |
7120 | 7072 |
7121 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 7073 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
7122 | 7074 |
7123 HttpServerProperties* http_server_properties = | 7075 HttpServerProperties* http_server_properties = |
7124 session->http_server_properties(); | 7076 session->http_server_properties(); |
7125 const int kRestrictedAlternatePort = 80; | 7077 const int kRestrictedAlternatePort = 80; |
7126 http_server_properties->SetAlternateProtocol( | 7078 http_server_properties->SetAlternateProtocol( |
7127 HostPortPair::FromURL(restricted_port_request.url), | 7079 HostPortPair::FromURL(restricted_port_request.url), |
7128 kRestrictedAlternatePort, | 7080 kRestrictedAlternatePort, |
7129 NPN_SPDY_3); | 7081 NPN_SPDY_3); |
(...skipping 10 matching lines...) Expand all Loading... |
7140 HttpStreamFactory::set_use_alternate_protocols(false); | 7092 HttpStreamFactory::set_use_alternate_protocols(false); |
7141 } | 7093 } |
7142 | 7094 |
7143 TEST_F(HttpNetworkTransactionSpdy3Test, | 7095 TEST_F(HttpNetworkTransactionSpdy3Test, |
7144 AlternateProtocolPortUnrestrictedAllowed1) { | 7096 AlternateProtocolPortUnrestrictedAllowed1) { |
7145 // Ensure that we're not allowed to redirect traffic via an alternate | 7097 // Ensure that we're not allowed to redirect traffic via an alternate |
7146 // protocol to an unrestricted (port >= 1024) when the original traffic was | 7098 // protocol to an unrestricted (port >= 1024) when the original traffic was |
7147 // on a restricted port (port < 1024). Ensure that we can redirect in all | 7099 // on a restricted port (port < 1024). Ensure that we can redirect in all |
7148 // other cases. | 7100 // other cases. |
7149 HttpStreamFactory::set_use_alternate_protocols(true); | 7101 HttpStreamFactory::set_use_alternate_protocols(true); |
7150 SessionDependencies session_deps; | 7102 SpdySessionDependencies session_deps; |
7151 | 7103 |
7152 HttpRequestInfo unrestricted_port_request; | 7104 HttpRequestInfo unrestricted_port_request; |
7153 unrestricted_port_request.method = "GET"; | 7105 unrestricted_port_request.method = "GET"; |
7154 unrestricted_port_request.url = GURL("http://www.google.com:1024/"); | 7106 unrestricted_port_request.url = GURL("http://www.google.com:1024/"); |
7155 unrestricted_port_request.load_flags = 0; | 7107 unrestricted_port_request.load_flags = 0; |
7156 | 7108 |
7157 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); | 7109 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
7158 StaticSocketDataProvider first_data; | 7110 StaticSocketDataProvider first_data; |
7159 first_data.set_connect_data(mock_connect); | 7111 first_data.set_connect_data(mock_connect); |
7160 session_deps.socket_factory.AddSocketDataProvider(&first_data); | 7112 session_deps.socket_factory->AddSocketDataProvider(&first_data); |
7161 | 7113 |
7162 MockRead data_reads[] = { | 7114 MockRead data_reads[] = { |
7163 MockRead("HTTP/1.1 200 OK\r\n\r\n"), | 7115 MockRead("HTTP/1.1 200 OK\r\n\r\n"), |
7164 MockRead("hello world"), | 7116 MockRead("hello world"), |
7165 MockRead(ASYNC, OK), | 7117 MockRead(ASYNC, OK), |
7166 }; | 7118 }; |
7167 StaticSocketDataProvider second_data( | 7119 StaticSocketDataProvider second_data( |
7168 data_reads, arraysize(data_reads), NULL, 0); | 7120 data_reads, arraysize(data_reads), NULL, 0); |
7169 session_deps.socket_factory.AddSocketDataProvider(&second_data); | 7121 session_deps.socket_factory->AddSocketDataProvider(&second_data); |
7170 | 7122 |
7171 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 7123 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
7172 | 7124 |
7173 HttpServerProperties* http_server_properties = | 7125 HttpServerProperties* http_server_properties = |
7174 session->http_server_properties(); | 7126 session->http_server_properties(); |
7175 const int kRestrictedAlternatePort = 80; | 7127 const int kRestrictedAlternatePort = 80; |
7176 http_server_properties->SetAlternateProtocol( | 7128 http_server_properties->SetAlternateProtocol( |
7177 HostPortPair::FromURL(unrestricted_port_request.url), | 7129 HostPortPair::FromURL(unrestricted_port_request.url), |
7178 kRestrictedAlternatePort, | 7130 kRestrictedAlternatePort, |
7179 NPN_SPDY_3); | 7131 NPN_SPDY_3); |
(...skipping 10 matching lines...) Expand all Loading... |
7190 HttpStreamFactory::set_use_alternate_protocols(false); | 7142 HttpStreamFactory::set_use_alternate_protocols(false); |
7191 } | 7143 } |
7192 | 7144 |
7193 TEST_F(HttpNetworkTransactionSpdy3Test, | 7145 TEST_F(HttpNetworkTransactionSpdy3Test, |
7194 AlternateProtocolPortUnrestrictedAllowed2) { | 7146 AlternateProtocolPortUnrestrictedAllowed2) { |
7195 // Ensure that we're not allowed to redirect traffic via an alternate | 7147 // Ensure that we're not allowed to redirect traffic via an alternate |
7196 // protocol to an unrestricted (port >= 1024) when the original traffic was | 7148 // protocol to an unrestricted (port >= 1024) when the original traffic was |
7197 // on a restricted port (port < 1024). Ensure that we can redirect in all | 7149 // on a restricted port (port < 1024). Ensure that we can redirect in all |
7198 // other cases. | 7150 // other cases. |
7199 HttpStreamFactory::set_use_alternate_protocols(true); | 7151 HttpStreamFactory::set_use_alternate_protocols(true); |
7200 SessionDependencies session_deps; | 7152 SpdySessionDependencies session_deps; |
7201 | 7153 |
7202 HttpRequestInfo unrestricted_port_request; | 7154 HttpRequestInfo unrestricted_port_request; |
7203 unrestricted_port_request.method = "GET"; | 7155 unrestricted_port_request.method = "GET"; |
7204 unrestricted_port_request.url = GURL("http://www.google.com:1024/"); | 7156 unrestricted_port_request.url = GURL("http://www.google.com:1024/"); |
7205 unrestricted_port_request.load_flags = 0; | 7157 unrestricted_port_request.load_flags = 0; |
7206 | 7158 |
7207 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); | 7159 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
7208 StaticSocketDataProvider first_data; | 7160 StaticSocketDataProvider first_data; |
7209 first_data.set_connect_data(mock_connect); | 7161 first_data.set_connect_data(mock_connect); |
7210 session_deps.socket_factory.AddSocketDataProvider(&first_data); | 7162 session_deps.socket_factory->AddSocketDataProvider(&first_data); |
7211 | 7163 |
7212 MockRead data_reads[] = { | 7164 MockRead data_reads[] = { |
7213 MockRead("HTTP/1.1 200 OK\r\n\r\n"), | 7165 MockRead("HTTP/1.1 200 OK\r\n\r\n"), |
7214 MockRead("hello world"), | 7166 MockRead("hello world"), |
7215 MockRead(ASYNC, OK), | 7167 MockRead(ASYNC, OK), |
7216 }; | 7168 }; |
7217 StaticSocketDataProvider second_data( | 7169 StaticSocketDataProvider second_data( |
7218 data_reads, arraysize(data_reads), NULL, 0); | 7170 data_reads, arraysize(data_reads), NULL, 0); |
7219 session_deps.socket_factory.AddSocketDataProvider(&second_data); | 7171 session_deps.socket_factory->AddSocketDataProvider(&second_data); |
7220 | 7172 |
7221 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 7173 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
7222 | 7174 |
7223 HttpServerProperties* http_server_properties = | 7175 HttpServerProperties* http_server_properties = |
7224 session->http_server_properties(); | 7176 session->http_server_properties(); |
7225 const int kUnrestrictedAlternatePort = 1024; | 7177 const int kUnrestrictedAlternatePort = 1024; |
7226 http_server_properties->SetAlternateProtocol( | 7178 http_server_properties->SetAlternateProtocol( |
7227 HostPortPair::FromURL(unrestricted_port_request.url), | 7179 HostPortPair::FromURL(unrestricted_port_request.url), |
7228 kUnrestrictedAlternatePort, | 7180 kUnrestrictedAlternatePort, |
7229 NPN_SPDY_3); | 7181 NPN_SPDY_3); |
7230 | 7182 |
7231 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 7183 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
7232 TestCompletionCallback callback; | 7184 TestCompletionCallback callback; |
7233 | 7185 |
7234 int rv = trans->Start( | 7186 int rv = trans->Start( |
7235 &unrestricted_port_request, callback.callback(), BoundNetLog()); | 7187 &unrestricted_port_request, callback.callback(), BoundNetLog()); |
7236 EXPECT_EQ(ERR_IO_PENDING, rv); | 7188 EXPECT_EQ(ERR_IO_PENDING, rv); |
7237 // Valid change to an unrestricted port should pass. | 7189 // Valid change to an unrestricted port should pass. |
7238 EXPECT_EQ(OK, callback.WaitForResult()); | 7190 EXPECT_EQ(OK, callback.WaitForResult()); |
7239 | 7191 |
7240 HttpStreamFactory::set_use_alternate_protocols(false); | 7192 HttpStreamFactory::set_use_alternate_protocols(false); |
7241 } | 7193 } |
7242 | 7194 |
7243 TEST_F(HttpNetworkTransactionSpdy3Test, AlternateProtocolUnsafeBlocked) { | 7195 TEST_F(HttpNetworkTransactionSpdy3Test, AlternateProtocolUnsafeBlocked) { |
7244 // Ensure that we're not allowed to redirect traffic via an alternate | 7196 // Ensure that we're not allowed to redirect traffic via an alternate |
7245 // protocol to an unsafe port, and that we resume the second | 7197 // protocol to an unsafe port, and that we resume the second |
7246 // HttpStreamFactoryImpl::Job once the alternate protocol request fails. | 7198 // HttpStreamFactoryImpl::Job once the alternate protocol request fails. |
7247 HttpStreamFactory::set_use_alternate_protocols(true); | 7199 HttpStreamFactory::set_use_alternate_protocols(true); |
7248 SessionDependencies session_deps; | 7200 SpdySessionDependencies session_deps; |
7249 | 7201 |
7250 HttpRequestInfo request; | 7202 HttpRequestInfo request; |
7251 request.method = "GET"; | 7203 request.method = "GET"; |
7252 request.url = GURL("http://www.google.com/"); | 7204 request.url = GURL("http://www.google.com/"); |
7253 request.load_flags = 0; | 7205 request.load_flags = 0; |
7254 | 7206 |
7255 // The alternate protocol request will error out before we attempt to connect, | 7207 // The alternate protocol request will error out before we attempt to connect, |
7256 // so only the standard HTTP request will try to connect. | 7208 // so only the standard HTTP request will try to connect. |
7257 MockRead data_reads[] = { | 7209 MockRead data_reads[] = { |
7258 MockRead("HTTP/1.1 200 OK\r\n\r\n"), | 7210 MockRead("HTTP/1.1 200 OK\r\n\r\n"), |
7259 MockRead("hello world"), | 7211 MockRead("hello world"), |
7260 MockRead(ASYNC, OK), | 7212 MockRead(ASYNC, OK), |
7261 }; | 7213 }; |
7262 StaticSocketDataProvider data( | 7214 StaticSocketDataProvider data( |
7263 data_reads, arraysize(data_reads), NULL, 0); | 7215 data_reads, arraysize(data_reads), NULL, 0); |
7264 session_deps.socket_factory.AddSocketDataProvider(&data); | 7216 session_deps.socket_factory->AddSocketDataProvider(&data); |
7265 | 7217 |
7266 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 7218 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
7267 | 7219 |
7268 HttpServerProperties* http_server_properties = | 7220 HttpServerProperties* http_server_properties = |
7269 session->http_server_properties(); | 7221 session->http_server_properties(); |
7270 const int kUnsafePort = 7; | 7222 const int kUnsafePort = 7; |
7271 http_server_properties->SetAlternateProtocol( | 7223 http_server_properties->SetAlternateProtocol( |
7272 HostPortPair::FromURL(request.url), | 7224 HostPortPair::FromURL(request.url), |
7273 kUnsafePort, | 7225 kUnsafePort, |
7274 NPN_SPDY_3); | 7226 NPN_SPDY_3); |
(...skipping 15 matching lines...) Expand all Loading... |
7290 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 7242 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
7291 | 7243 |
7292 std::string response_data; | 7244 std::string response_data; |
7293 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 7245 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
7294 EXPECT_EQ("hello world", response_data); | 7246 EXPECT_EQ("hello world", response_data); |
7295 } | 7247 } |
7296 | 7248 |
7297 TEST_F(HttpNetworkTransactionSpdy3Test, UseAlternateProtocolForNpnSpdy) { | 7249 TEST_F(HttpNetworkTransactionSpdy3Test, UseAlternateProtocolForNpnSpdy) { |
7298 HttpStreamFactory::set_use_alternate_protocols(true); | 7250 HttpStreamFactory::set_use_alternate_protocols(true); |
7299 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 7251 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
7300 SessionDependencies session_deps; | 7252 SpdySessionDependencies session_deps; |
7301 | 7253 |
7302 HttpRequestInfo request; | 7254 HttpRequestInfo request; |
7303 request.method = "GET"; | 7255 request.method = "GET"; |
7304 request.url = GURL("http://www.google.com/"); | 7256 request.url = GURL("http://www.google.com/"); |
7305 request.load_flags = 0; | 7257 request.load_flags = 0; |
7306 | 7258 |
7307 MockRead data_reads[] = { | 7259 MockRead data_reads[] = { |
7308 MockRead("HTTP/1.1 200 OK\r\n"), | 7260 MockRead("HTTP/1.1 200 OK\r\n"), |
7309 MockRead(kAlternateProtocolHttpHeader), | 7261 MockRead(kAlternateProtocolHttpHeader), |
7310 MockRead("hello world"), | 7262 MockRead("hello world"), |
7311 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 7263 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
7312 MockRead(ASYNC, OK), | 7264 MockRead(ASYNC, OK), |
7313 }; | 7265 }; |
7314 | 7266 |
7315 StaticSocketDataProvider first_transaction( | 7267 StaticSocketDataProvider first_transaction( |
7316 data_reads, arraysize(data_reads), NULL, 0); | 7268 data_reads, arraysize(data_reads), NULL, 0); |
7317 session_deps.socket_factory.AddSocketDataProvider(&first_transaction); | 7269 session_deps.socket_factory->AddSocketDataProvider(&first_transaction); |
7318 | 7270 |
7319 SSLSocketDataProvider ssl(ASYNC, OK); | 7271 SSLSocketDataProvider ssl(ASYNC, OK); |
7320 ssl.SetNextProto(kProtoSPDY3); | 7272 ssl.SetNextProto(kProtoSPDY3); |
7321 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 7273 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
7322 | 7274 |
7323 scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); | 7275 scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); |
7324 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; | 7276 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; |
7325 | 7277 |
7326 scoped_ptr<SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); | 7278 scoped_ptr<SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); |
7327 scoped_ptr<SpdyFrame> data(ConstructSpdyBodyFrame(1, true)); | 7279 scoped_ptr<SpdyFrame> data(ConstructSpdyBodyFrame(1, true)); |
7328 MockRead spdy_reads[] = { | 7280 MockRead spdy_reads[] = { |
7329 CreateMockRead(*resp), | 7281 CreateMockRead(*resp), |
7330 CreateMockRead(*data), | 7282 CreateMockRead(*data), |
7331 MockRead(ASYNC, 0, 0), | 7283 MockRead(ASYNC, 0, 0), |
7332 }; | 7284 }; |
7333 | 7285 |
7334 DelayedSocketData spdy_data( | 7286 DelayedSocketData spdy_data( |
7335 1, // wait for one write to finish before reading. | 7287 1, // wait for one write to finish before reading. |
7336 spdy_reads, arraysize(spdy_reads), | 7288 spdy_reads, arraysize(spdy_reads), |
7337 spdy_writes, arraysize(spdy_writes)); | 7289 spdy_writes, arraysize(spdy_writes)); |
7338 session_deps.socket_factory.AddSocketDataProvider(&spdy_data); | 7290 session_deps.socket_factory->AddSocketDataProvider(&spdy_data); |
7339 | 7291 |
7340 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); | 7292 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); |
7341 StaticSocketDataProvider hanging_non_alternate_protocol_socket( | 7293 StaticSocketDataProvider hanging_non_alternate_protocol_socket( |
7342 NULL, 0, NULL, 0); | 7294 NULL, 0, NULL, 0); |
7343 hanging_non_alternate_protocol_socket.set_connect_data( | 7295 hanging_non_alternate_protocol_socket.set_connect_data( |
7344 never_finishing_connect); | 7296 never_finishing_connect); |
7345 session_deps.socket_factory.AddSocketDataProvider( | 7297 session_deps.socket_factory->AddSocketDataProvider( |
7346 &hanging_non_alternate_protocol_socket); | 7298 &hanging_non_alternate_protocol_socket); |
7347 | 7299 |
7348 TestCompletionCallback callback; | 7300 TestCompletionCallback callback; |
7349 | 7301 |
7350 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 7302 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
7351 scoped_ptr<HttpNetworkTransaction> trans(new HttpNetworkTransaction(session)); | 7303 scoped_ptr<HttpNetworkTransaction> trans(new HttpNetworkTransaction(session)); |
7352 | 7304 |
7353 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7305 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
7354 EXPECT_EQ(ERR_IO_PENDING, rv); | 7306 EXPECT_EQ(ERR_IO_PENDING, rv); |
7355 EXPECT_EQ(OK, callback.WaitForResult()); | 7307 EXPECT_EQ(OK, callback.WaitForResult()); |
(...skipping 23 matching lines...) Expand all Loading... |
7379 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 7331 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
7380 EXPECT_EQ("hello!", response_data); | 7332 EXPECT_EQ("hello!", response_data); |
7381 | 7333 |
7382 HttpStreamFactory::SetNextProtos(std::vector<std::string>()); | 7334 HttpStreamFactory::SetNextProtos(std::vector<std::string>()); |
7383 HttpStreamFactory::set_use_alternate_protocols(false); | 7335 HttpStreamFactory::set_use_alternate_protocols(false); |
7384 } | 7336 } |
7385 | 7337 |
7386 TEST_F(HttpNetworkTransactionSpdy3Test, AlternateProtocolWithSpdyLateBinding) { | 7338 TEST_F(HttpNetworkTransactionSpdy3Test, AlternateProtocolWithSpdyLateBinding) { |
7387 HttpStreamFactory::set_use_alternate_protocols(true); | 7339 HttpStreamFactory::set_use_alternate_protocols(true); |
7388 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 7340 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
7389 SessionDependencies session_deps; | 7341 SpdySessionDependencies session_deps; |
7390 | 7342 |
7391 HttpRequestInfo request; | 7343 HttpRequestInfo request; |
7392 request.method = "GET"; | 7344 request.method = "GET"; |
7393 request.url = GURL("http://www.google.com/"); | 7345 request.url = GURL("http://www.google.com/"); |
7394 request.load_flags = 0; | 7346 request.load_flags = 0; |
7395 | 7347 |
7396 MockRead data_reads[] = { | 7348 MockRead data_reads[] = { |
7397 MockRead("HTTP/1.1 200 OK\r\n"), | 7349 MockRead("HTTP/1.1 200 OK\r\n"), |
7398 MockRead(kAlternateProtocolHttpHeader), | 7350 MockRead(kAlternateProtocolHttpHeader), |
7399 MockRead("hello world"), | 7351 MockRead("hello world"), |
7400 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 7352 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
7401 MockRead(ASYNC, OK), | 7353 MockRead(ASYNC, OK), |
7402 }; | 7354 }; |
7403 | 7355 |
7404 StaticSocketDataProvider first_transaction( | 7356 StaticSocketDataProvider first_transaction( |
7405 data_reads, arraysize(data_reads), NULL, 0); | 7357 data_reads, arraysize(data_reads), NULL, 0); |
7406 // Socket 1 is the HTTP transaction with the Alternate-Protocol header. | 7358 // Socket 1 is the HTTP transaction with the Alternate-Protocol header. |
7407 session_deps.socket_factory.AddSocketDataProvider(&first_transaction); | 7359 session_deps.socket_factory->AddSocketDataProvider(&first_transaction); |
7408 | 7360 |
7409 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); | 7361 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); |
7410 StaticSocketDataProvider hanging_socket( | 7362 StaticSocketDataProvider hanging_socket( |
7411 NULL, 0, NULL, 0); | 7363 NULL, 0, NULL, 0); |
7412 hanging_socket.set_connect_data(never_finishing_connect); | 7364 hanging_socket.set_connect_data(never_finishing_connect); |
7413 // Socket 2 and 3 are the hanging Alternate-Protocol and | 7365 // Socket 2 and 3 are the hanging Alternate-Protocol and |
7414 // non-Alternate-Protocol jobs from the 2nd transaction. | 7366 // non-Alternate-Protocol jobs from the 2nd transaction. |
7415 session_deps.socket_factory.AddSocketDataProvider(&hanging_socket); | 7367 session_deps.socket_factory->AddSocketDataProvider(&hanging_socket); |
7416 session_deps.socket_factory.AddSocketDataProvider(&hanging_socket); | 7368 session_deps.socket_factory->AddSocketDataProvider(&hanging_socket); |
7417 | 7369 |
7418 SSLSocketDataProvider ssl(ASYNC, OK); | 7370 SSLSocketDataProvider ssl(ASYNC, OK); |
7419 ssl.SetNextProto(kProtoSPDY3); | 7371 ssl.SetNextProto(kProtoSPDY3); |
7420 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 7372 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
7421 | 7373 |
7422 scoped_ptr<SpdyFrame> req1(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); | 7374 scoped_ptr<SpdyFrame> req1(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); |
7423 scoped_ptr<SpdyFrame> req2(ConstructSpdyGet(NULL, 0, false, 3, LOWEST)); | 7375 scoped_ptr<SpdyFrame> req2(ConstructSpdyGet(NULL, 0, false, 3, LOWEST)); |
7424 MockWrite spdy_writes[] = { | 7376 MockWrite spdy_writes[] = { |
7425 CreateMockWrite(*req1), | 7377 CreateMockWrite(*req1), |
7426 CreateMockWrite(*req2), | 7378 CreateMockWrite(*req2), |
7427 }; | 7379 }; |
7428 scoped_ptr<SpdyFrame> resp1(ConstructSpdyGetSynReply(NULL, 0, 1)); | 7380 scoped_ptr<SpdyFrame> resp1(ConstructSpdyGetSynReply(NULL, 0, 1)); |
7429 scoped_ptr<SpdyFrame> data1(ConstructSpdyBodyFrame(1, true)); | 7381 scoped_ptr<SpdyFrame> data1(ConstructSpdyBodyFrame(1, true)); |
7430 scoped_ptr<SpdyFrame> resp2(ConstructSpdyGetSynReply(NULL, 0, 3)); | 7382 scoped_ptr<SpdyFrame> resp2(ConstructSpdyGetSynReply(NULL, 0, 3)); |
7431 scoped_ptr<SpdyFrame> data2(ConstructSpdyBodyFrame(3, true)); | 7383 scoped_ptr<SpdyFrame> data2(ConstructSpdyBodyFrame(3, true)); |
7432 MockRead spdy_reads[] = { | 7384 MockRead spdy_reads[] = { |
7433 CreateMockRead(*resp1), | 7385 CreateMockRead(*resp1), |
7434 CreateMockRead(*data1), | 7386 CreateMockRead(*data1), |
7435 CreateMockRead(*resp2), | 7387 CreateMockRead(*resp2), |
7436 CreateMockRead(*data2), | 7388 CreateMockRead(*data2), |
7437 MockRead(ASYNC, 0, 0), | 7389 MockRead(ASYNC, 0, 0), |
7438 }; | 7390 }; |
7439 | 7391 |
7440 DelayedSocketData spdy_data( | 7392 DelayedSocketData spdy_data( |
7441 2, // wait for writes to finish before reading. | 7393 2, // wait for writes to finish before reading. |
7442 spdy_reads, arraysize(spdy_reads), | 7394 spdy_reads, arraysize(spdy_reads), |
7443 spdy_writes, arraysize(spdy_writes)); | 7395 spdy_writes, arraysize(spdy_writes)); |
7444 // Socket 4 is the successful Alternate-Protocol for transaction 3. | 7396 // Socket 4 is the successful Alternate-Protocol for transaction 3. |
7445 session_deps.socket_factory.AddSocketDataProvider(&spdy_data); | 7397 session_deps.socket_factory->AddSocketDataProvider(&spdy_data); |
7446 | 7398 |
7447 // Socket 5 is the unsuccessful non-Alternate-Protocol for transaction 3. | 7399 // Socket 5 is the unsuccessful non-Alternate-Protocol for transaction 3. |
7448 session_deps.socket_factory.AddSocketDataProvider(&hanging_socket); | 7400 session_deps.socket_factory->AddSocketDataProvider(&hanging_socket); |
7449 | 7401 |
7450 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 7402 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
7451 TestCompletionCallback callback1; | 7403 TestCompletionCallback callback1; |
7452 HttpNetworkTransaction trans1(session); | 7404 HttpNetworkTransaction trans1(session); |
7453 | 7405 |
7454 int rv = trans1.Start(&request, callback1.callback(), BoundNetLog()); | 7406 int rv = trans1.Start(&request, callback1.callback(), BoundNetLog()); |
7455 EXPECT_EQ(ERR_IO_PENDING, rv); | 7407 EXPECT_EQ(ERR_IO_PENDING, rv); |
7456 EXPECT_EQ(OK, callback1.WaitForResult()); | 7408 EXPECT_EQ(OK, callback1.WaitForResult()); |
7457 | 7409 |
7458 const HttpResponseInfo* response = trans1.GetResponseInfo(); | 7410 const HttpResponseInfo* response = trans1.GetResponseInfo(); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7495 ASSERT_EQ(OK, ReadTransaction(&trans3, &response_data)); | 7447 ASSERT_EQ(OK, ReadTransaction(&trans3, &response_data)); |
7496 EXPECT_EQ("hello!", response_data); | 7448 EXPECT_EQ("hello!", response_data); |
7497 | 7449 |
7498 HttpStreamFactory::SetNextProtos(std::vector<std::string>()); | 7450 HttpStreamFactory::SetNextProtos(std::vector<std::string>()); |
7499 HttpStreamFactory::set_use_alternate_protocols(false); | 7451 HttpStreamFactory::set_use_alternate_protocols(false); |
7500 } | 7452 } |
7501 | 7453 |
7502 TEST_F(HttpNetworkTransactionSpdy3Test, StallAlternateProtocolForNpnSpdy) { | 7454 TEST_F(HttpNetworkTransactionSpdy3Test, StallAlternateProtocolForNpnSpdy) { |
7503 HttpStreamFactory::set_use_alternate_protocols(true); | 7455 HttpStreamFactory::set_use_alternate_protocols(true); |
7504 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 7456 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
7505 SessionDependencies session_deps; | 7457 SpdySessionDependencies session_deps; |
7506 | 7458 |
7507 HttpRequestInfo request; | 7459 HttpRequestInfo request; |
7508 request.method = "GET"; | 7460 request.method = "GET"; |
7509 request.url = GURL("http://www.google.com/"); | 7461 request.url = GURL("http://www.google.com/"); |
7510 request.load_flags = 0; | 7462 request.load_flags = 0; |
7511 | 7463 |
7512 MockRead data_reads[] = { | 7464 MockRead data_reads[] = { |
7513 MockRead("HTTP/1.1 200 OK\r\n"), | 7465 MockRead("HTTP/1.1 200 OK\r\n"), |
7514 MockRead(kAlternateProtocolHttpHeader), | 7466 MockRead(kAlternateProtocolHttpHeader), |
7515 MockRead("hello world"), | 7467 MockRead("hello world"), |
7516 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 7468 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
7517 MockRead(ASYNC, OK), | 7469 MockRead(ASYNC, OK), |
7518 }; | 7470 }; |
7519 | 7471 |
7520 StaticSocketDataProvider first_transaction( | 7472 StaticSocketDataProvider first_transaction( |
7521 data_reads, arraysize(data_reads), NULL, 0); | 7473 data_reads, arraysize(data_reads), NULL, 0); |
7522 session_deps.socket_factory.AddSocketDataProvider(&first_transaction); | 7474 session_deps.socket_factory->AddSocketDataProvider(&first_transaction); |
7523 | 7475 |
7524 SSLSocketDataProvider ssl(ASYNC, OK); | 7476 SSLSocketDataProvider ssl(ASYNC, OK); |
7525 ssl.SetNextProto(kProtoSPDY3); | 7477 ssl.SetNextProto(kProtoSPDY3); |
7526 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 7478 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
7527 | 7479 |
7528 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); | 7480 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); |
7529 StaticSocketDataProvider hanging_alternate_protocol_socket( | 7481 StaticSocketDataProvider hanging_alternate_protocol_socket( |
7530 NULL, 0, NULL, 0); | 7482 NULL, 0, NULL, 0); |
7531 hanging_alternate_protocol_socket.set_connect_data( | 7483 hanging_alternate_protocol_socket.set_connect_data( |
7532 never_finishing_connect); | 7484 never_finishing_connect); |
7533 session_deps.socket_factory.AddSocketDataProvider( | 7485 session_deps.socket_factory->AddSocketDataProvider( |
7534 &hanging_alternate_protocol_socket); | 7486 &hanging_alternate_protocol_socket); |
7535 | 7487 |
7536 // 2nd request is just a copy of the first one, over HTTP again. | 7488 // 2nd request is just a copy of the first one, over HTTP again. |
7537 session_deps.socket_factory.AddSocketDataProvider(&first_transaction); | 7489 session_deps.socket_factory->AddSocketDataProvider(&first_transaction); |
7538 | 7490 |
7539 TestCompletionCallback callback; | 7491 TestCompletionCallback callback; |
7540 | 7492 |
7541 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 7493 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
7542 scoped_ptr<HttpNetworkTransaction> trans(new HttpNetworkTransaction(session)); | 7494 scoped_ptr<HttpNetworkTransaction> trans(new HttpNetworkTransaction(session)); |
7543 | 7495 |
7544 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7496 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
7545 EXPECT_EQ(ERR_IO_PENDING, rv); | 7497 EXPECT_EQ(ERR_IO_PENDING, rv); |
7546 EXPECT_EQ(OK, callback.WaitForResult()); | 7498 EXPECT_EQ(OK, callback.WaitForResult()); |
7547 | 7499 |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7627 UseAlternateProtocolForTunneledNpnSpdy) { | 7579 UseAlternateProtocolForTunneledNpnSpdy) { |
7628 HttpStreamFactory::set_use_alternate_protocols(true); | 7580 HttpStreamFactory::set_use_alternate_protocols(true); |
7629 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 7581 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
7630 | 7582 |
7631 ProxyConfig proxy_config; | 7583 ProxyConfig proxy_config; |
7632 proxy_config.set_auto_detect(true); | 7584 proxy_config.set_auto_detect(true); |
7633 proxy_config.set_pac_url(GURL("http://fooproxyurl")); | 7585 proxy_config.set_pac_url(GURL("http://fooproxyurl")); |
7634 | 7586 |
7635 CapturingProxyResolver* capturing_proxy_resolver = | 7587 CapturingProxyResolver* capturing_proxy_resolver = |
7636 new CapturingProxyResolver(); | 7588 new CapturingProxyResolver(); |
7637 SessionDependencies session_deps(new ProxyService( | 7589 SpdySessionDependencies session_deps(new ProxyService( |
7638 new ProxyConfigServiceFixed(proxy_config), capturing_proxy_resolver, | 7590 new ProxyConfigServiceFixed(proxy_config), capturing_proxy_resolver, |
7639 NULL)); | 7591 NULL)); |
7640 | 7592 |
7641 HttpRequestInfo request; | 7593 HttpRequestInfo request; |
7642 request.method = "GET"; | 7594 request.method = "GET"; |
7643 request.url = GURL("http://www.google.com/"); | 7595 request.url = GURL("http://www.google.com/"); |
7644 request.load_flags = 0; | 7596 request.load_flags = 0; |
7645 | 7597 |
7646 MockRead data_reads[] = { | 7598 MockRead data_reads[] = { |
7647 MockRead("HTTP/1.1 200 OK\r\n"), | 7599 MockRead("HTTP/1.1 200 OK\r\n"), |
7648 MockRead(kAlternateProtocolHttpHeader), | 7600 MockRead(kAlternateProtocolHttpHeader), |
7649 MockRead("hello world"), | 7601 MockRead("hello world"), |
7650 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 7602 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
7651 MockRead(ASYNC, OK), | 7603 MockRead(ASYNC, OK), |
7652 }; | 7604 }; |
7653 | 7605 |
7654 StaticSocketDataProvider first_transaction( | 7606 StaticSocketDataProvider first_transaction( |
7655 data_reads, arraysize(data_reads), NULL, 0); | 7607 data_reads, arraysize(data_reads), NULL, 0); |
7656 session_deps.socket_factory.AddSocketDataProvider(&first_transaction); | 7608 session_deps.socket_factory->AddSocketDataProvider(&first_transaction); |
7657 | 7609 |
7658 SSLSocketDataProvider ssl(ASYNC, OK); | 7610 SSLSocketDataProvider ssl(ASYNC, OK); |
7659 ssl.SetNextProto(kProtoSPDY3); | 7611 ssl.SetNextProto(kProtoSPDY3); |
7660 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 7612 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
7661 | 7613 |
7662 scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); | 7614 scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); |
7663 MockWrite spdy_writes[] = { | 7615 MockWrite spdy_writes[] = { |
7664 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 7616 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" |
7665 "Host: www.google.com\r\n" | 7617 "Host: www.google.com\r\n" |
7666 "Proxy-Connection: keep-alive\r\n\r\n"), // 0 | 7618 "Proxy-Connection: keep-alive\r\n\r\n"), // 0 |
7667 CreateMockWrite(*req) // 3 | 7619 CreateMockWrite(*req) // 3 |
7668 }; | 7620 }; |
7669 | 7621 |
7670 const char kCONNECTResponse[] = "HTTP/1.1 200 Connected\r\n\r\n"; | 7622 const char kCONNECTResponse[] = "HTTP/1.1 200 Connected\r\n\r\n"; |
7671 | 7623 |
7672 scoped_ptr<SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); | 7624 scoped_ptr<SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); |
7673 scoped_ptr<SpdyFrame> data(ConstructSpdyBodyFrame(1, true)); | 7625 scoped_ptr<SpdyFrame> data(ConstructSpdyBodyFrame(1, true)); |
7674 MockRead spdy_reads[] = { | 7626 MockRead spdy_reads[] = { |
7675 MockRead(ASYNC, kCONNECTResponse, arraysize(kCONNECTResponse) - 1, 1), // 1 | 7627 MockRead(ASYNC, kCONNECTResponse, arraysize(kCONNECTResponse) - 1, 1), // 1 |
7676 CreateMockRead(*resp.get(), 4), // 2, 4 | 7628 CreateMockRead(*resp.get(), 4), // 2, 4 |
7677 CreateMockRead(*data.get(), 4), // 5 | 7629 CreateMockRead(*data.get(), 4), // 5 |
7678 MockRead(ASYNC, 0, 0, 4), // 6 | 7630 MockRead(ASYNC, 0, 0, 4), // 6 |
7679 }; | 7631 }; |
7680 | 7632 |
7681 OrderedSocketData spdy_data( | 7633 OrderedSocketData spdy_data( |
7682 spdy_reads, arraysize(spdy_reads), | 7634 spdy_reads, arraysize(spdy_reads), |
7683 spdy_writes, arraysize(spdy_writes)); | 7635 spdy_writes, arraysize(spdy_writes)); |
7684 session_deps.socket_factory.AddSocketDataProvider(&spdy_data); | 7636 session_deps.socket_factory->AddSocketDataProvider(&spdy_data); |
7685 | 7637 |
7686 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); | 7638 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); |
7687 StaticSocketDataProvider hanging_non_alternate_protocol_socket( | 7639 StaticSocketDataProvider hanging_non_alternate_protocol_socket( |
7688 NULL, 0, NULL, 0); | 7640 NULL, 0, NULL, 0); |
7689 hanging_non_alternate_protocol_socket.set_connect_data( | 7641 hanging_non_alternate_protocol_socket.set_connect_data( |
7690 never_finishing_connect); | 7642 never_finishing_connect); |
7691 session_deps.socket_factory.AddSocketDataProvider( | 7643 session_deps.socket_factory->AddSocketDataProvider( |
7692 &hanging_non_alternate_protocol_socket); | 7644 &hanging_non_alternate_protocol_socket); |
7693 | 7645 |
7694 TestCompletionCallback callback; | 7646 TestCompletionCallback callback; |
7695 | 7647 |
7696 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 7648 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
7697 scoped_ptr<HttpNetworkTransaction> trans(new HttpNetworkTransaction(session)); | 7649 scoped_ptr<HttpNetworkTransaction> trans(new HttpNetworkTransaction(session)); |
7698 | 7650 |
7699 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7651 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
7700 EXPECT_EQ(ERR_IO_PENDING, rv); | 7652 EXPECT_EQ(ERR_IO_PENDING, rv); |
7701 EXPECT_EQ(OK, callback.WaitForResult()); | 7653 EXPECT_EQ(OK, callback.WaitForResult()); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7733 capturing_proxy_resolver->resolved()[1].spec()); | 7685 capturing_proxy_resolver->resolved()[1].spec()); |
7734 | 7686 |
7735 HttpStreamFactory::SetNextProtos(std::vector<std::string>()); | 7687 HttpStreamFactory::SetNextProtos(std::vector<std::string>()); |
7736 HttpStreamFactory::set_use_alternate_protocols(false); | 7688 HttpStreamFactory::set_use_alternate_protocols(false); |
7737 } | 7689 } |
7738 | 7690 |
7739 TEST_F(HttpNetworkTransactionSpdy3Test, | 7691 TEST_F(HttpNetworkTransactionSpdy3Test, |
7740 UseAlternateProtocolForNpnSpdyWithExistingSpdySession) { | 7692 UseAlternateProtocolForNpnSpdyWithExistingSpdySession) { |
7741 HttpStreamFactory::set_use_alternate_protocols(true); | 7693 HttpStreamFactory::set_use_alternate_protocols(true); |
7742 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 7694 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
7743 SessionDependencies session_deps; | 7695 SpdySessionDependencies session_deps; |
7744 | 7696 |
7745 HttpRequestInfo request; | 7697 HttpRequestInfo request; |
7746 request.method = "GET"; | 7698 request.method = "GET"; |
7747 request.url = GURL("http://www.google.com/"); | 7699 request.url = GURL("http://www.google.com/"); |
7748 request.load_flags = 0; | 7700 request.load_flags = 0; |
7749 | 7701 |
7750 MockRead data_reads[] = { | 7702 MockRead data_reads[] = { |
7751 MockRead("HTTP/1.1 200 OK\r\n"), | 7703 MockRead("HTTP/1.1 200 OK\r\n"), |
7752 MockRead(kAlternateProtocolHttpHeader), | 7704 MockRead(kAlternateProtocolHttpHeader), |
7753 MockRead("hello world"), | 7705 MockRead("hello world"), |
7754 MockRead(ASYNC, OK), | 7706 MockRead(ASYNC, OK), |
7755 }; | 7707 }; |
7756 | 7708 |
7757 StaticSocketDataProvider first_transaction( | 7709 StaticSocketDataProvider first_transaction( |
7758 data_reads, arraysize(data_reads), NULL, 0); | 7710 data_reads, arraysize(data_reads), NULL, 0); |
7759 session_deps.socket_factory.AddSocketDataProvider(&first_transaction); | 7711 session_deps.socket_factory->AddSocketDataProvider(&first_transaction); |
7760 | 7712 |
7761 SSLSocketDataProvider ssl(ASYNC, OK); | 7713 SSLSocketDataProvider ssl(ASYNC, OK); |
7762 ssl.SetNextProto(kProtoSPDY3); | 7714 ssl.SetNextProto(kProtoSPDY3); |
7763 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 7715 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
7764 | 7716 |
7765 scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); | 7717 scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); |
7766 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; | 7718 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; |
7767 | 7719 |
7768 scoped_ptr<SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); | 7720 scoped_ptr<SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); |
7769 scoped_ptr<SpdyFrame> data(ConstructSpdyBodyFrame(1, true)); | 7721 scoped_ptr<SpdyFrame> data(ConstructSpdyBodyFrame(1, true)); |
7770 MockRead spdy_reads[] = { | 7722 MockRead spdy_reads[] = { |
7771 CreateMockRead(*resp), | 7723 CreateMockRead(*resp), |
7772 CreateMockRead(*data), | 7724 CreateMockRead(*data), |
7773 MockRead(ASYNC, 0, 0), | 7725 MockRead(ASYNC, 0, 0), |
7774 }; | 7726 }; |
7775 | 7727 |
7776 DelayedSocketData spdy_data( | 7728 DelayedSocketData spdy_data( |
7777 1, // wait for one write to finish before reading. | 7729 1, // wait for one write to finish before reading. |
7778 spdy_reads, arraysize(spdy_reads), | 7730 spdy_reads, arraysize(spdy_reads), |
7779 spdy_writes, arraysize(spdy_writes)); | 7731 spdy_writes, arraysize(spdy_writes)); |
7780 session_deps.socket_factory.AddSocketDataProvider(&spdy_data); | 7732 session_deps.socket_factory->AddSocketDataProvider(&spdy_data); |
7781 | 7733 |
7782 TestCompletionCallback callback; | 7734 TestCompletionCallback callback; |
7783 | 7735 |
7784 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 7736 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
7785 | 7737 |
7786 scoped_ptr<HttpNetworkTransaction> trans(new HttpNetworkTransaction(session)); | 7738 scoped_ptr<HttpNetworkTransaction> trans(new HttpNetworkTransaction(session)); |
7787 | 7739 |
7788 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7740 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
7789 EXPECT_EQ(ERR_IO_PENDING, rv); | 7741 EXPECT_EQ(ERR_IO_PENDING, rv); |
7790 EXPECT_EQ(OK, callback.WaitForResult()); | 7742 EXPECT_EQ(OK, callback.WaitForResult()); |
(...skipping 25 matching lines...) Expand all Loading... |
7816 session->GetTransportSocketPool( | 7768 session->GetTransportSocketPool( |
7817 HttpNetworkSession::NORMAL_SOCKET_POOL), | 7769 HttpNetworkSession::NORMAL_SOCKET_POOL), |
7818 BoundNetLog())); | 7770 BoundNetLog())); |
7819 EXPECT_EQ(OK, callback.WaitForResult()); | 7771 EXPECT_EQ(OK, callback.WaitForResult()); |
7820 | 7772 |
7821 SSLConfig ssl_config; | 7773 SSLConfig ssl_config; |
7822 session->ssl_config_service()->GetSSLConfig(&ssl_config); | 7774 session->ssl_config_service()->GetSSLConfig(&ssl_config); |
7823 scoped_ptr<ClientSocketHandle> ssl_connection(new ClientSocketHandle); | 7775 scoped_ptr<ClientSocketHandle> ssl_connection(new ClientSocketHandle); |
7824 SSLClientSocketContext context; | 7776 SSLClientSocketContext context; |
7825 context.cert_verifier = session_deps.cert_verifier.get(); | 7777 context.cert_verifier = session_deps.cert_verifier.get(); |
7826 ssl_connection->set_socket(session_deps.socket_factory.CreateSSLClientSocket( | 7778 ssl_connection->set_socket(session_deps.socket_factory->CreateSSLClientSocket( |
7827 connection.release(), HostPortPair("" , 443), ssl_config, context)); | 7779 connection.release(), HostPortPair("" , 443), ssl_config, context)); |
7828 EXPECT_EQ(ERR_IO_PENDING, | 7780 EXPECT_EQ(ERR_IO_PENDING, |
7829 ssl_connection->socket()->Connect(callback.callback())); | 7781 ssl_connection->socket()->Connect(callback.callback())); |
7830 EXPECT_EQ(OK, callback.WaitForResult()); | 7782 EXPECT_EQ(OK, callback.WaitForResult()); |
7831 | 7783 |
7832 EXPECT_EQ(OK, spdy_session->InitializeWithSocket(ssl_connection.release(), | 7784 EXPECT_EQ(OK, spdy_session->InitializeWithSocket(ssl_connection.release(), |
7833 true, OK)); | 7785 true, OK)); |
7834 | 7786 |
7835 trans.reset(new HttpNetworkTransaction(session)); | 7787 trans.reset(new HttpNetworkTransaction(session)); |
7836 | 7788 |
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8148 TestRound(kConnectProxyAuth, kProxyConnected, OK, | 8100 TestRound(kConnectProxyAuth, kProxyConnected, OK, |
8149 &kGet, &kServerChallenge), | 8101 &kGet, &kServerChallenge), |
8150 TestRound(kGetAuth, kSuccess, OK)}}, | 8102 TestRound(kGetAuth, kSuccess, OK)}}, |
8151 { kProxy, AUTH_ASYNC, OK, kSecureServer, AUTH_ASYNC, kAuthErr, 3, 1, | 8103 { kProxy, AUTH_ASYNC, OK, kSecureServer, AUTH_ASYNC, kAuthErr, 3, 1, |
8152 { TestRound(kConnect, kProxyChallenge, OK), | 8104 { TestRound(kConnect, kProxyChallenge, OK), |
8153 TestRound(kConnectProxyAuth, kProxyConnected, OK, | 8105 TestRound(kConnectProxyAuth, kProxyConnected, OK, |
8154 &kGet, &kServerChallenge), | 8106 &kGet, &kServerChallenge), |
8155 TestRound(kGetAuth, kFailure, kAuthErr)}}, | 8107 TestRound(kGetAuth, kFailure, kAuthErr)}}, |
8156 }; | 8108 }; |
8157 | 8109 |
8158 SessionDependencies session_deps; | 8110 SpdySessionDependencies session_deps; |
8159 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_configs); ++i) { | 8111 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_configs); ++i) { |
8160 HttpAuthHandlerMock::Factory* auth_factory( | 8112 HttpAuthHandlerMock::Factory* auth_factory( |
8161 new HttpAuthHandlerMock::Factory()); | 8113 new HttpAuthHandlerMock::Factory()); |
8162 session_deps.http_auth_handler_factory.reset(auth_factory); | 8114 session_deps.http_auth_handler_factory.reset(auth_factory); |
8163 const TestConfig& test_config = test_configs[i]; | 8115 const TestConfig& test_config = test_configs[i]; |
8164 | 8116 |
8165 // Set up authentication handlers as necessary. | 8117 // Set up authentication handlers as necessary. |
8166 if (test_config.proxy_auth_timing != AUTH_NONE) { | 8118 if (test_config.proxy_auth_timing != AUTH_NONE) { |
8167 for (int n = 0; n < 2; n++) { | 8119 for (int n = 0; n < 2; n++) { |
8168 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock()); | 8120 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock()); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8220 | 8172 |
8221 MockWrite writes[2]; | 8173 MockWrite writes[2]; |
8222 writes[0] = read_write_round.write; | 8174 writes[0] = read_write_round.write; |
8223 size_t length_writes = 1; | 8175 size_t length_writes = 1; |
8224 if (read_write_round.extra_write) { | 8176 if (read_write_round.extra_write) { |
8225 writes[1] = *read_write_round.extra_write; | 8177 writes[1] = *read_write_round.extra_write; |
8226 length_writes = 2; | 8178 length_writes = 2; |
8227 } | 8179 } |
8228 StaticSocketDataProvider data_provider( | 8180 StaticSocketDataProvider data_provider( |
8229 reads, length_reads, writes, length_writes); | 8181 reads, length_reads, writes, length_writes); |
8230 session_deps.socket_factory.AddSocketDataProvider(&data_provider); | 8182 session_deps.socket_factory->AddSocketDataProvider(&data_provider); |
8231 | 8183 |
8232 // Add an SSL sequence if necessary. | 8184 // Add an SSL sequence if necessary. |
8233 SSLSocketDataProvider ssl_socket_data_provider(SYNCHRONOUS, OK); | 8185 SSLSocketDataProvider ssl_socket_data_provider(SYNCHRONOUS, OK); |
8234 if (round >= test_config.first_ssl_round) | 8186 if (round >= test_config.first_ssl_round) |
8235 session_deps.socket_factory.AddSSLSocketDataProvider( | 8187 session_deps.socket_factory->AddSSLSocketDataProvider( |
8236 &ssl_socket_data_provider); | 8188 &ssl_socket_data_provider); |
8237 | 8189 |
8238 // Start or restart the transaction. | 8190 // Start or restart the transaction. |
8239 TestCompletionCallback callback; | 8191 TestCompletionCallback callback; |
8240 int rv; | 8192 int rv; |
8241 if (round == 0) { | 8193 if (round == 0) { |
8242 rv = trans.Start(&request, callback.callback(), BoundNetLog()); | 8194 rv = trans.Start(&request, callback.callback(), BoundNetLog()); |
8243 } else { | 8195 } else { |
8244 rv = trans.RestartWithAuth( | 8196 rv = trans.RestartWithAuth( |
8245 AuthCredentials(kFoo, kBar), callback.callback()); | 8197 AuthCredentials(kFoo, kBar), callback.callback()); |
(...skipping 15 matching lines...) Expand all Loading... |
8261 EXPECT_FALSE(response->auth_challenge.get() == NULL); | 8213 EXPECT_FALSE(response->auth_challenge.get() == NULL); |
8262 } else { | 8214 } else { |
8263 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 8215 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
8264 } | 8216 } |
8265 } | 8217 } |
8266 } | 8218 } |
8267 } | 8219 } |
8268 | 8220 |
8269 TEST_F(HttpNetworkTransactionSpdy3Test, MultiRoundAuth) { | 8221 TEST_F(HttpNetworkTransactionSpdy3Test, MultiRoundAuth) { |
8270 // Do multi-round authentication and make sure it works correctly. | 8222 // Do multi-round authentication and make sure it works correctly. |
8271 SessionDependencies session_deps; | 8223 SpdySessionDependencies session_deps; |
8272 HttpAuthHandlerMock::Factory* auth_factory( | 8224 HttpAuthHandlerMock::Factory* auth_factory( |
8273 new HttpAuthHandlerMock::Factory()); | 8225 new HttpAuthHandlerMock::Factory()); |
8274 session_deps.http_auth_handler_factory.reset(auth_factory); | 8226 session_deps.http_auth_handler_factory.reset(auth_factory); |
8275 session_deps.proxy_service.reset(ProxyService::CreateDirect()); | 8227 session_deps.proxy_service.reset(ProxyService::CreateDirect()); |
8276 session_deps.host_resolver->rules()->AddRule("www.example.com", "10.0.0.1"); | 8228 session_deps.host_resolver->rules()->AddRule("www.example.com", "10.0.0.1"); |
8277 session_deps.host_resolver->set_synchronous_mode(true); | 8229 session_deps.host_resolver->set_synchronous_mode(true); |
8278 | 8230 |
8279 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock()); | 8231 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock()); |
8280 auth_handler->set_connection_based(true); | 8232 auth_handler->set_connection_based(true); |
8281 std::string auth_challenge = "Mock realm=server"; | 8233 std::string auth_challenge = "Mock realm=server"; |
(...skipping 16 matching lines...) Expand all Loading... |
8298 // Use a TCP Socket Pool with only one connection per group. This is used | 8250 // Use a TCP Socket Pool with only one connection per group. This is used |
8299 // to validate that the TCP socket is not released to the pool between | 8251 // to validate that the TCP socket is not released to the pool between |
8300 // each round of multi-round authentication. | 8252 // each round of multi-round authentication. |
8301 HttpNetworkSessionPeer session_peer(session); | 8253 HttpNetworkSessionPeer session_peer(session); |
8302 ClientSocketPoolHistograms transport_pool_histograms("SmallTCP"); | 8254 ClientSocketPoolHistograms transport_pool_histograms("SmallTCP"); |
8303 TransportClientSocketPool* transport_pool = new TransportClientSocketPool( | 8255 TransportClientSocketPool* transport_pool = new TransportClientSocketPool( |
8304 50, // Max sockets for pool | 8256 50, // Max sockets for pool |
8305 1, // Max sockets per group | 8257 1, // Max sockets per group |
8306 &transport_pool_histograms, | 8258 &transport_pool_histograms, |
8307 session_deps.host_resolver.get(), | 8259 session_deps.host_resolver.get(), |
8308 &session_deps.socket_factory, | 8260 session_deps.socket_factory.get(), |
8309 session_deps.net_log); | 8261 session_deps.net_log); |
8310 MockClientSocketPoolManager* mock_pool_manager = | 8262 MockClientSocketPoolManager* mock_pool_manager = |
8311 new MockClientSocketPoolManager; | 8263 new MockClientSocketPoolManager; |
8312 mock_pool_manager->SetTransportSocketPool(transport_pool); | 8264 mock_pool_manager->SetTransportSocketPool(transport_pool); |
8313 session_peer.SetClientSocketPoolManager(mock_pool_manager); | 8265 session_peer.SetClientSocketPoolManager(mock_pool_manager); |
8314 | 8266 |
8315 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 8267 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
8316 TestCompletionCallback callback; | 8268 TestCompletionCallback callback; |
8317 | 8269 |
8318 const MockWrite kGet( | 8270 const MockWrite kGet( |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8356 kServerChallenge, | 8308 kServerChallenge, |
8357 // Third round | 8309 // Third round |
8358 kServerChallenge, | 8310 kServerChallenge, |
8359 // Fourth round | 8311 // Fourth round |
8360 kSuccess, | 8312 kSuccess, |
8361 // Competing response | 8313 // Competing response |
8362 kSuccess, | 8314 kSuccess, |
8363 }; | 8315 }; |
8364 StaticSocketDataProvider data_provider(reads, arraysize(reads), | 8316 StaticSocketDataProvider data_provider(reads, arraysize(reads), |
8365 writes, arraysize(writes)); | 8317 writes, arraysize(writes)); |
8366 session_deps.socket_factory.AddSocketDataProvider(&data_provider); | 8318 session_deps.socket_factory->AddSocketDataProvider(&data_provider); |
8367 | 8319 |
8368 const char* const kSocketGroup = "www.example.com:80"; | 8320 const char* const kSocketGroup = "www.example.com:80"; |
8369 | 8321 |
8370 // First round of authentication. | 8322 // First round of authentication. |
8371 auth_handler->SetGenerateExpectation(false, OK); | 8323 auth_handler->SetGenerateExpectation(false, OK); |
8372 rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8324 rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
8373 if (rv == ERR_IO_PENDING) | 8325 if (rv == ERR_IO_PENDING) |
8374 rv = callback.WaitForResult(); | 8326 rv = callback.WaitForResult(); |
8375 EXPECT_EQ(OK, rv); | 8327 EXPECT_EQ(OK, rv); |
8376 response = trans->GetResponseInfo(); | 8328 response = trans->GetResponseInfo(); |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8479 | 8431 |
8480 // Test that we restart a connection when we see a decompression failure from | 8432 // Test that we restart a connection when we see a decompression failure from |
8481 // the peer during the handshake. (In the real world we'll restart with SSLv3 | 8433 // the peer during the handshake. (In the real world we'll restart with SSLv3 |
8482 // and we won't offer DEFLATE in that case.) | 8434 // and we won't offer DEFLATE in that case.) |
8483 TEST_F(HttpNetworkTransactionSpdy3Test, RestartAfterTLSDecompressionFailure) { | 8435 TEST_F(HttpNetworkTransactionSpdy3Test, RestartAfterTLSDecompressionFailure) { |
8484 HttpRequestInfo request; | 8436 HttpRequestInfo request; |
8485 request.method = "GET"; | 8437 request.method = "GET"; |
8486 request.url = GURL("https://tlsdecompressionfailure.example.com/"); | 8438 request.url = GURL("https://tlsdecompressionfailure.example.com/"); |
8487 request.load_flags = 0; | 8439 request.load_flags = 0; |
8488 | 8440 |
8489 SessionDependencies session_deps; | 8441 SpdySessionDependencies session_deps; |
8490 TLSDecompressionFailureSocketDataProvider socket_data_provider1( | 8442 TLSDecompressionFailureSocketDataProvider socket_data_provider1( |
8491 false /* fail all reads */); | 8443 false /* fail all reads */); |
8492 TLSDecompressionFailureSocketDataProvider socket_data_provider2(false); | 8444 TLSDecompressionFailureSocketDataProvider socket_data_provider2(false); |
8493 SSLSocketDataProvider ssl_socket_data_provider1( | 8445 SSLSocketDataProvider ssl_socket_data_provider1( |
8494 SYNCHRONOUS, ERR_SSL_DECOMPRESSION_FAILURE_ALERT); | 8446 SYNCHRONOUS, ERR_SSL_DECOMPRESSION_FAILURE_ALERT); |
8495 SSLSocketDataProvider ssl_socket_data_provider2(SYNCHRONOUS, OK); | 8447 SSLSocketDataProvider ssl_socket_data_provider2(SYNCHRONOUS, OK); |
8496 session_deps.socket_factory.AddSocketDataProvider(&socket_data_provider1); | 8448 session_deps.socket_factory->AddSocketDataProvider(&socket_data_provider1); |
8497 session_deps.socket_factory.AddSocketDataProvider(&socket_data_provider2); | 8449 session_deps.socket_factory->AddSocketDataProvider(&socket_data_provider2); |
8498 session_deps.socket_factory.AddSSLSocketDataProvider( | 8450 session_deps.socket_factory->AddSSLSocketDataProvider( |
8499 &ssl_socket_data_provider1); | 8451 &ssl_socket_data_provider1); |
8500 session_deps.socket_factory.AddSSLSocketDataProvider( | 8452 session_deps.socket_factory->AddSSLSocketDataProvider( |
8501 &ssl_socket_data_provider2); | 8453 &ssl_socket_data_provider2); |
8502 | 8454 |
8503 // Work around http://crbug.com/37454 | 8455 // Work around http://crbug.com/37454 |
8504 StaticSocketDataProvider bug37454_connection; | 8456 StaticSocketDataProvider bug37454_connection; |
8505 bug37454_connection.set_connect_data(MockConnect(ASYNC, ERR_UNEXPECTED)); | 8457 bug37454_connection.set_connect_data(MockConnect(ASYNC, ERR_UNEXPECTED)); |
8506 session_deps.socket_factory.AddSocketDataProvider(&bug37454_connection); | 8458 session_deps.socket_factory->AddSocketDataProvider(&bug37454_connection); |
8507 | 8459 |
8508 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 8460 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
8509 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 8461 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
8510 TestCompletionCallback callback; | 8462 TestCompletionCallback callback; |
8511 | 8463 |
8512 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8464 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
8513 EXPECT_EQ(ERR_IO_PENDING, rv); | 8465 EXPECT_EQ(ERR_IO_PENDING, rv); |
8514 EXPECT_EQ(OK, callback.WaitForResult()); | 8466 EXPECT_EQ(OK, callback.WaitForResult()); |
8515 | 8467 |
8516 const HttpResponseInfo* response = trans->GetResponseInfo(); | 8468 const HttpResponseInfo* response = trans->GetResponseInfo(); |
(...skipping 10 matching lines...) Expand all Loading... |
8527 // peer while reading the first bytes from the connection. This occurs when the | 8479 // peer while reading the first bytes from the connection. This occurs when the |
8528 // peer cannot handle DEFLATE but we're using False Start, so we don't notice | 8480 // peer cannot handle DEFLATE but we're using False Start, so we don't notice |
8529 // in the handshake. | 8481 // in the handshake. |
8530 TEST_F(HttpNetworkTransactionSpdy3Test, | 8482 TEST_F(HttpNetworkTransactionSpdy3Test, |
8531 RestartAfterTLSDecompressionFailureWithFalseStart) { | 8483 RestartAfterTLSDecompressionFailureWithFalseStart) { |
8532 HttpRequestInfo request; | 8484 HttpRequestInfo request; |
8533 request.method = "GET"; | 8485 request.method = "GET"; |
8534 request.url = GURL("https://tlsdecompressionfailure2.example.com/"); | 8486 request.url = GURL("https://tlsdecompressionfailure2.example.com/"); |
8535 request.load_flags = 0; | 8487 request.load_flags = 0; |
8536 | 8488 |
8537 SessionDependencies session_deps; | 8489 SpdySessionDependencies session_deps; |
8538 TLSDecompressionFailureSocketDataProvider socket_data_provider1( | 8490 TLSDecompressionFailureSocketDataProvider socket_data_provider1( |
8539 true /* fail all reads */); | 8491 true /* fail all reads */); |
8540 TLSDecompressionFailureSocketDataProvider socket_data_provider2(false); | 8492 TLSDecompressionFailureSocketDataProvider socket_data_provider2(false); |
8541 SSLSocketDataProvider ssl_socket_data_provider1(SYNCHRONOUS, OK); | 8493 SSLSocketDataProvider ssl_socket_data_provider1(SYNCHRONOUS, OK); |
8542 SSLSocketDataProvider ssl_socket_data_provider2(SYNCHRONOUS, OK); | 8494 SSLSocketDataProvider ssl_socket_data_provider2(SYNCHRONOUS, OK); |
8543 session_deps.socket_factory.AddSocketDataProvider(&socket_data_provider1); | 8495 session_deps.socket_factory->AddSocketDataProvider(&socket_data_provider1); |
8544 session_deps.socket_factory.AddSocketDataProvider(&socket_data_provider2); | 8496 session_deps.socket_factory->AddSocketDataProvider(&socket_data_provider2); |
8545 session_deps.socket_factory.AddSSLSocketDataProvider( | 8497 session_deps.socket_factory->AddSSLSocketDataProvider( |
8546 &ssl_socket_data_provider1); | 8498 &ssl_socket_data_provider1); |
8547 session_deps.socket_factory.AddSSLSocketDataProvider( | 8499 session_deps.socket_factory->AddSSLSocketDataProvider( |
8548 &ssl_socket_data_provider2); | 8500 &ssl_socket_data_provider2); |
8549 | 8501 |
8550 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 8502 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
8551 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 8503 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
8552 TestCompletionCallback callback; | 8504 TestCompletionCallback callback; |
8553 | 8505 |
8554 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8506 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
8555 EXPECT_EQ(ERR_IO_PENDING, rv); | 8507 EXPECT_EQ(ERR_IO_PENDING, rv); |
8556 EXPECT_EQ(OK, callback.WaitForResult()); | 8508 EXPECT_EQ(OK, callback.WaitForResult()); |
8557 | 8509 |
8558 const HttpResponseInfo* response = trans->GetResponseInfo(); | 8510 const HttpResponseInfo* response = trans->GetResponseInfo(); |
8559 ASSERT_TRUE(response != NULL); | 8511 ASSERT_TRUE(response != NULL); |
8560 ASSERT_TRUE(response->headers != NULL); | 8512 ASSERT_TRUE(response->headers != NULL); |
8561 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 8513 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
8562 | 8514 |
8563 std::string response_data; | 8515 std::string response_data; |
8564 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 8516 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
8565 EXPECT_EQ("ok.", response_data); | 8517 EXPECT_EQ("ok.", response_data); |
8566 } | 8518 } |
8567 | 8519 |
8568 // This tests the case that a request is issued via http instead of spdy after | 8520 // This tests the case that a request is issued via http instead of spdy after |
8569 // npn is negotiated. | 8521 // npn is negotiated. |
8570 TEST_F(HttpNetworkTransactionSpdy3Test, NpnWithHttpOverSSL) { | 8522 TEST_F(HttpNetworkTransactionSpdy3Test, NpnWithHttpOverSSL) { |
8571 HttpStreamFactory::set_use_alternate_protocols(true); | 8523 HttpStreamFactory::set_use_alternate_protocols(true); |
8572 HttpStreamFactory::SetNextProtos( | 8524 HttpStreamFactory::SetNextProtos( |
8573 MakeNextProtos("http/1.1", "http1.1", NULL)); | 8525 MakeNextProtos("http/1.1", "http1.1", NULL)); |
8574 SessionDependencies session_deps; | 8526 SpdySessionDependencies session_deps; |
8575 HttpRequestInfo request; | 8527 HttpRequestInfo request; |
8576 request.method = "GET"; | 8528 request.method = "GET"; |
8577 request.url = GURL("https://www.google.com/"); | 8529 request.url = GURL("https://www.google.com/"); |
8578 request.load_flags = 0; | 8530 request.load_flags = 0; |
8579 | 8531 |
8580 MockWrite data_writes[] = { | 8532 MockWrite data_writes[] = { |
8581 MockWrite("GET / HTTP/1.1\r\n" | 8533 MockWrite("GET / HTTP/1.1\r\n" |
8582 "Host: www.google.com\r\n" | 8534 "Host: www.google.com\r\n" |
8583 "Connection: keep-alive\r\n\r\n"), | 8535 "Connection: keep-alive\r\n\r\n"), |
8584 }; | 8536 }; |
8585 | 8537 |
8586 MockRead data_reads[] = { | 8538 MockRead data_reads[] = { |
8587 MockRead("HTTP/1.1 200 OK\r\n"), | 8539 MockRead("HTTP/1.1 200 OK\r\n"), |
8588 MockRead(kAlternateProtocolHttpHeader), | 8540 MockRead(kAlternateProtocolHttpHeader), |
8589 MockRead("hello world"), | 8541 MockRead("hello world"), |
8590 MockRead(SYNCHRONOUS, OK), | 8542 MockRead(SYNCHRONOUS, OK), |
8591 }; | 8543 }; |
8592 | 8544 |
8593 SSLSocketDataProvider ssl(ASYNC, OK); | 8545 SSLSocketDataProvider ssl(ASYNC, OK); |
8594 ssl.next_proto_status = SSLClientSocket::kNextProtoNegotiated; | 8546 ssl.next_proto_status = SSLClientSocket::kNextProtoNegotiated; |
8595 ssl.next_proto = "http/1.1"; | 8547 ssl.next_proto = "http/1.1"; |
8596 ssl.protocol_negotiated = kProtoHTTP11; | 8548 ssl.protocol_negotiated = kProtoHTTP11; |
8597 | 8549 |
8598 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 8550 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
8599 | 8551 |
8600 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 8552 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
8601 data_writes, arraysize(data_writes)); | 8553 data_writes, arraysize(data_writes)); |
8602 session_deps.socket_factory.AddSocketDataProvider(&data); | 8554 session_deps.socket_factory->AddSocketDataProvider(&data); |
8603 | 8555 |
8604 TestCompletionCallback callback; | 8556 TestCompletionCallback callback; |
8605 | 8557 |
8606 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 8558 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
8607 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 8559 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
8608 | 8560 |
8609 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8561 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
8610 | 8562 |
8611 EXPECT_EQ(ERR_IO_PENDING, rv); | 8563 EXPECT_EQ(ERR_IO_PENDING, rv); |
8612 EXPECT_EQ(OK, callback.WaitForResult()); | 8564 EXPECT_EQ(OK, callback.WaitForResult()); |
(...skipping 13 matching lines...) Expand all Loading... |
8626 HttpStreamFactory::SetNextProtos(std::vector<std::string>()); | 8578 HttpStreamFactory::SetNextProtos(std::vector<std::string>()); |
8627 HttpStreamFactory::set_use_alternate_protocols(false); | 8579 HttpStreamFactory::set_use_alternate_protocols(false); |
8628 } | 8580 } |
8629 | 8581 |
8630 TEST_F(HttpNetworkTransactionSpdy3Test, SpdyPostNPNServerHangup) { | 8582 TEST_F(HttpNetworkTransactionSpdy3Test, SpdyPostNPNServerHangup) { |
8631 // Simulate the SSL handshake completing with an NPN negotiation | 8583 // Simulate the SSL handshake completing with an NPN negotiation |
8632 // followed by an immediate server closing of the socket. | 8584 // followed by an immediate server closing of the socket. |
8633 // Fix crash: http://crbug.com/46369 | 8585 // Fix crash: http://crbug.com/46369 |
8634 HttpStreamFactory::set_use_alternate_protocols(true); | 8586 HttpStreamFactory::set_use_alternate_protocols(true); |
8635 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 8587 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
8636 SessionDependencies session_deps; | 8588 SpdySessionDependencies session_deps; |
8637 | 8589 |
8638 HttpRequestInfo request; | 8590 HttpRequestInfo request; |
8639 request.method = "GET"; | 8591 request.method = "GET"; |
8640 request.url = GURL("https://www.google.com/"); | 8592 request.url = GURL("https://www.google.com/"); |
8641 request.load_flags = 0; | 8593 request.load_flags = 0; |
8642 | 8594 |
8643 SSLSocketDataProvider ssl(ASYNC, OK); | 8595 SSLSocketDataProvider ssl(ASYNC, OK); |
8644 ssl.SetNextProto(kProtoSPDY3); | 8596 ssl.SetNextProto(kProtoSPDY3); |
8645 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 8597 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
8646 | 8598 |
8647 scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); | 8599 scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); |
8648 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; | 8600 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; |
8649 | 8601 |
8650 MockRead spdy_reads[] = { | 8602 MockRead spdy_reads[] = { |
8651 MockRead(SYNCHRONOUS, 0, 0) // Not async - return 0 immediately. | 8603 MockRead(SYNCHRONOUS, 0, 0) // Not async - return 0 immediately. |
8652 }; | 8604 }; |
8653 | 8605 |
8654 DelayedSocketData spdy_data( | 8606 DelayedSocketData spdy_data( |
8655 0, // don't wait in this case, immediate hangup. | 8607 0, // don't wait in this case, immediate hangup. |
8656 spdy_reads, arraysize(spdy_reads), | 8608 spdy_reads, arraysize(spdy_reads), |
8657 spdy_writes, arraysize(spdy_writes)); | 8609 spdy_writes, arraysize(spdy_writes)); |
8658 session_deps.socket_factory.AddSocketDataProvider(&spdy_data); | 8610 session_deps.socket_factory->AddSocketDataProvider(&spdy_data); |
8659 | 8611 |
8660 TestCompletionCallback callback; | 8612 TestCompletionCallback callback; |
8661 | 8613 |
8662 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 8614 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
8663 scoped_ptr<HttpNetworkTransaction> trans(new HttpNetworkTransaction(session)); | 8615 scoped_ptr<HttpNetworkTransaction> trans(new HttpNetworkTransaction(session)); |
8664 | 8616 |
8665 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8617 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
8666 EXPECT_EQ(ERR_IO_PENDING, rv); | 8618 EXPECT_EQ(ERR_IO_PENDING, rv); |
8667 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult()); | 8619 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult()); |
8668 | 8620 |
8669 HttpStreamFactory::SetNextProtos(std::vector<std::string>()); | 8621 HttpStreamFactory::SetNextProtos(std::vector<std::string>()); |
8670 HttpStreamFactory::set_use_alternate_protocols(false); | 8622 HttpStreamFactory::set_use_alternate_protocols(false); |
8671 } | 8623 } |
8672 | 8624 |
8673 TEST_F(HttpNetworkTransactionSpdy3Test, SpdyAlternateProtocolThroughProxy) { | 8625 TEST_F(HttpNetworkTransactionSpdy3Test, SpdyAlternateProtocolThroughProxy) { |
8674 // This test ensures that the URL passed into the proxy is upgraded | 8626 // This test ensures that the URL passed into the proxy is upgraded |
8675 // to https when doing an Alternate Protocol upgrade. | 8627 // to https when doing an Alternate Protocol upgrade. |
8676 HttpStreamFactory::set_use_alternate_protocols(true); | 8628 HttpStreamFactory::set_use_alternate_protocols(true); |
8677 HttpStreamFactory::SetNextProtos( | 8629 HttpStreamFactory::SetNextProtos( |
8678 MakeNextProtos( | 8630 MakeNextProtos( |
8679 "http/1.1", "http1.1", "spdy/2", "spdy/3", "spdy", NULL)); | 8631 "http/1.1", "http1.1", "spdy/2", "spdy/3", "spdy", NULL)); |
8680 | 8632 |
8681 SessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); | 8633 SpdySessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); |
8682 HttpAuthHandlerMock::Factory* auth_factory = | 8634 HttpAuthHandlerMock::Factory* auth_factory = |
8683 new HttpAuthHandlerMock::Factory(); | 8635 new HttpAuthHandlerMock::Factory(); |
8684 HttpAuthHandlerMock* auth_handler = new HttpAuthHandlerMock(); | 8636 HttpAuthHandlerMock* auth_handler = new HttpAuthHandlerMock(); |
8685 auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_PROXY); | 8637 auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_PROXY); |
8686 auth_factory->set_do_init_from_challenge(true); | 8638 auth_factory->set_do_init_from_challenge(true); |
8687 session_deps.http_auth_handler_factory.reset(auth_factory); | 8639 session_deps.http_auth_handler_factory.reset(auth_factory); |
8688 | 8640 |
8689 HttpRequestInfo request; | 8641 HttpRequestInfo request; |
8690 request.method = "GET"; | 8642 request.method = "GET"; |
8691 request.url = GURL("http://www.google.com"); | 8643 request.url = GURL("http://www.google.com"); |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8772 | 8724 |
8773 SSLSocketDataProvider ssl(ASYNC, OK); | 8725 SSLSocketDataProvider ssl(ASYNC, OK); |
8774 ssl.SetNextProto(kProtoSPDY3); | 8726 ssl.SetNextProto(kProtoSPDY3); |
8775 | 8727 |
8776 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); | 8728 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); |
8777 StaticSocketDataProvider hanging_non_alternate_protocol_socket( | 8729 StaticSocketDataProvider hanging_non_alternate_protocol_socket( |
8778 NULL, 0, NULL, 0); | 8730 NULL, 0, NULL, 0); |
8779 hanging_non_alternate_protocol_socket.set_connect_data( | 8731 hanging_non_alternate_protocol_socket.set_connect_data( |
8780 never_finishing_connect); | 8732 never_finishing_connect); |
8781 | 8733 |
8782 session_deps.socket_factory.AddSocketDataProvider(&data_1); | 8734 session_deps.socket_factory->AddSocketDataProvider(&data_1); |
8783 session_deps.socket_factory.AddSocketDataProvider(&data_2); | 8735 session_deps.socket_factory->AddSocketDataProvider(&data_2); |
8784 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 8736 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
8785 session_deps.socket_factory.AddSocketDataProvider( | 8737 session_deps.socket_factory->AddSocketDataProvider( |
8786 &hanging_non_alternate_protocol_socket); | 8738 &hanging_non_alternate_protocol_socket); |
8787 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 8739 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
8788 | 8740 |
8789 // First round should work and provide the Alternate-Protocol state. | 8741 // First round should work and provide the Alternate-Protocol state. |
8790 TestCompletionCallback callback_1; | 8742 TestCompletionCallback callback_1; |
8791 scoped_ptr<HttpTransaction> trans_1(new HttpNetworkTransaction(session)); | 8743 scoped_ptr<HttpTransaction> trans_1(new HttpNetworkTransaction(session)); |
8792 int rv = trans_1->Start(&request, callback_1.callback(), BoundNetLog()); | 8744 int rv = trans_1->Start(&request, callback_1.callback(), BoundNetLog()); |
8793 EXPECT_EQ(ERR_IO_PENDING, rv); | 8745 EXPECT_EQ(ERR_IO_PENDING, rv); |
8794 EXPECT_EQ(OK, callback_1.WaitForResult()); | 8746 EXPECT_EQ(OK, callback_1.WaitForResult()); |
8795 | 8747 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8833 MockRead(SYNCHRONOUS, "HTTP/1.0 200 OK\r\n\r\n"), | 8785 MockRead(SYNCHRONOUS, "HTTP/1.0 200 OK\r\n\r\n"), |
8834 MockRead(SYNCHRONOUS, "hello world"), | 8786 MockRead(SYNCHRONOUS, "hello world"), |
8835 MockRead(SYNCHRONOUS, OK), | 8787 MockRead(SYNCHRONOUS, OK), |
8836 }; | 8788 }; |
8837 | 8789 |
8838 HttpRequestInfo request; | 8790 HttpRequestInfo request; |
8839 request.method = "GET"; | 8791 request.method = "GET"; |
8840 request.url = GURL("http://www.google.com/"); | 8792 request.url = GURL("http://www.google.com/"); |
8841 request.load_flags = 0; | 8793 request.load_flags = 0; |
8842 | 8794 |
8843 SessionDependencies session_deps; | 8795 SpdySessionDependencies session_deps; |
8844 session_deps.host_resolver->set_synchronous_mode(true); | 8796 session_deps.host_resolver->set_synchronous_mode(true); |
8845 scoped_ptr<HttpTransaction> trans( | 8797 scoped_ptr<HttpTransaction> trans( |
8846 new HttpNetworkTransaction(CreateSession(&session_deps))); | 8798 new HttpNetworkTransaction(CreateSession(&session_deps))); |
8847 | 8799 |
8848 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 8800 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
8849 data.set_connect_data(mock_connect); | 8801 data.set_connect_data(mock_connect); |
8850 session_deps.socket_factory.AddSocketDataProvider(&data); | 8802 session_deps.socket_factory->AddSocketDataProvider(&data); |
8851 | 8803 |
8852 TestCompletionCallback callback; | 8804 TestCompletionCallback callback; |
8853 | 8805 |
8854 CapturingBoundNetLog log; | 8806 CapturingBoundNetLog log; |
8855 int rv = trans->Start(&request, callback.callback(), log.bound()); | 8807 int rv = trans->Start(&request, callback.callback(), log.bound()); |
8856 EXPECT_EQ(ERR_IO_PENDING, rv); | 8808 EXPECT_EQ(ERR_IO_PENDING, rv); |
8857 trans.reset(); // Cancel the transaction here. | 8809 trans.reset(); // Cancel the transaction here. |
8858 | 8810 |
8859 MessageLoop::current()->RunUntilIdle(); | 8811 MessageLoop::current()->RunUntilIdle(); |
8860 } | 8812 } |
8861 | 8813 |
8862 // Test a basic GET request through a proxy. | 8814 // Test a basic GET request through a proxy. |
8863 TEST_F(HttpNetworkTransactionSpdy3Test, ProxyGet) { | 8815 TEST_F(HttpNetworkTransactionSpdy3Test, ProxyGet) { |
8864 SessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); | 8816 SpdySessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); |
8865 CapturingBoundNetLog log; | 8817 CapturingBoundNetLog log; |
8866 session_deps.net_log = log.bound().net_log(); | 8818 session_deps.net_log = log.bound().net_log(); |
8867 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 8819 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
8868 | 8820 |
8869 HttpRequestInfo request; | 8821 HttpRequestInfo request; |
8870 request.method = "GET"; | 8822 request.method = "GET"; |
8871 request.url = GURL("http://www.google.com/"); | 8823 request.url = GURL("http://www.google.com/"); |
8872 | 8824 |
8873 MockWrite data_writes1[] = { | 8825 MockWrite data_writes1[] = { |
8874 MockWrite("GET http://www.google.com/ HTTP/1.1\r\n" | 8826 MockWrite("GET http://www.google.com/ HTTP/1.1\r\n" |
8875 "Host: www.google.com\r\n" | 8827 "Host: www.google.com\r\n" |
8876 "Proxy-Connection: keep-alive\r\n\r\n"), | 8828 "Proxy-Connection: keep-alive\r\n\r\n"), |
8877 }; | 8829 }; |
8878 | 8830 |
8879 MockRead data_reads1[] = { | 8831 MockRead data_reads1[] = { |
8880 MockRead("HTTP/1.1 200 OK\r\n"), | 8832 MockRead("HTTP/1.1 200 OK\r\n"), |
8881 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 8833 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
8882 MockRead("Content-Length: 100\r\n\r\n"), | 8834 MockRead("Content-Length: 100\r\n\r\n"), |
8883 MockRead(SYNCHRONOUS, OK), | 8835 MockRead(SYNCHRONOUS, OK), |
8884 }; | 8836 }; |
8885 | 8837 |
8886 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 8838 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
8887 data_writes1, arraysize(data_writes1)); | 8839 data_writes1, arraysize(data_writes1)); |
8888 session_deps.socket_factory.AddSocketDataProvider(&data1); | 8840 session_deps.socket_factory->AddSocketDataProvider(&data1); |
8889 | 8841 |
8890 TestCompletionCallback callback1; | 8842 TestCompletionCallback callback1; |
8891 | 8843 |
8892 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 8844 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
8893 | 8845 |
8894 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 8846 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
8895 EXPECT_EQ(ERR_IO_PENDING, rv); | 8847 EXPECT_EQ(ERR_IO_PENDING, rv); |
8896 | 8848 |
8897 rv = callback1.WaitForResult(); | 8849 rv = callback1.WaitForResult(); |
8898 EXPECT_EQ(OK, rv); | 8850 EXPECT_EQ(OK, rv); |
8899 | 8851 |
8900 const HttpResponseInfo* response = trans->GetResponseInfo(); | 8852 const HttpResponseInfo* response = trans->GetResponseInfo(); |
8901 ASSERT_TRUE(response != NULL); | 8853 ASSERT_TRUE(response != NULL); |
8902 | 8854 |
8903 EXPECT_TRUE(response->headers->IsKeepAlive()); | 8855 EXPECT_TRUE(response->headers->IsKeepAlive()); |
8904 EXPECT_EQ(200, response->headers->response_code()); | 8856 EXPECT_EQ(200, response->headers->response_code()); |
8905 EXPECT_EQ(100, response->headers->GetContentLength()); | 8857 EXPECT_EQ(100, response->headers->GetContentLength()); |
8906 EXPECT_TRUE(response->was_fetched_via_proxy); | 8858 EXPECT_TRUE(response->was_fetched_via_proxy); |
8907 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 8859 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
8908 } | 8860 } |
8909 | 8861 |
8910 // Test a basic HTTPS GET request through a proxy. | 8862 // Test a basic HTTPS GET request through a proxy. |
8911 TEST_F(HttpNetworkTransactionSpdy3Test, ProxyTunnelGet) { | 8863 TEST_F(HttpNetworkTransactionSpdy3Test, ProxyTunnelGet) { |
8912 SessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); | 8864 SpdySessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); |
8913 CapturingBoundNetLog log; | 8865 CapturingBoundNetLog log; |
8914 session_deps.net_log = log.bound().net_log(); | 8866 session_deps.net_log = log.bound().net_log(); |
8915 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 8867 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
8916 | 8868 |
8917 HttpRequestInfo request; | 8869 HttpRequestInfo request; |
8918 request.method = "GET"; | 8870 request.method = "GET"; |
8919 request.url = GURL("https://www.google.com/"); | 8871 request.url = GURL("https://www.google.com/"); |
8920 | 8872 |
8921 // Since we have proxy, should try to establish tunnel. | 8873 // Since we have proxy, should try to establish tunnel. |
8922 MockWrite data_writes1[] = { | 8874 MockWrite data_writes1[] = { |
(...skipping 10 matching lines...) Expand all Loading... |
8933 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), | 8885 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), |
8934 | 8886 |
8935 MockRead("HTTP/1.1 200 OK\r\n"), | 8887 MockRead("HTTP/1.1 200 OK\r\n"), |
8936 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 8888 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
8937 MockRead("Content-Length: 100\r\n\r\n"), | 8889 MockRead("Content-Length: 100\r\n\r\n"), |
8938 MockRead(SYNCHRONOUS, OK), | 8890 MockRead(SYNCHRONOUS, OK), |
8939 }; | 8891 }; |
8940 | 8892 |
8941 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 8893 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
8942 data_writes1, arraysize(data_writes1)); | 8894 data_writes1, arraysize(data_writes1)); |
8943 session_deps.socket_factory.AddSocketDataProvider(&data1); | 8895 session_deps.socket_factory->AddSocketDataProvider(&data1); |
8944 SSLSocketDataProvider ssl(ASYNC, OK); | 8896 SSLSocketDataProvider ssl(ASYNC, OK); |
8945 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 8897 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
8946 | 8898 |
8947 TestCompletionCallback callback1; | 8899 TestCompletionCallback callback1; |
8948 | 8900 |
8949 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 8901 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
8950 | 8902 |
8951 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 8903 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
8952 EXPECT_EQ(ERR_IO_PENDING, rv); | 8904 EXPECT_EQ(ERR_IO_PENDING, rv); |
8953 | 8905 |
8954 rv = callback1.WaitForResult(); | 8906 rv = callback1.WaitForResult(); |
8955 EXPECT_EQ(OK, rv); | 8907 EXPECT_EQ(OK, rv); |
(...skipping 13 matching lines...) Expand all Loading... |
8969 EXPECT_TRUE(response->headers->IsKeepAlive()); | 8921 EXPECT_TRUE(response->headers->IsKeepAlive()); |
8970 EXPECT_EQ(200, response->headers->response_code()); | 8922 EXPECT_EQ(200, response->headers->response_code()); |
8971 EXPECT_EQ(100, response->headers->GetContentLength()); | 8923 EXPECT_EQ(100, response->headers->GetContentLength()); |
8972 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 8924 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
8973 EXPECT_TRUE(response->was_fetched_via_proxy); | 8925 EXPECT_TRUE(response->was_fetched_via_proxy); |
8974 } | 8926 } |
8975 | 8927 |
8976 // Test a basic HTTPS GET request through a proxy, but the server hangs up | 8928 // Test a basic HTTPS GET request through a proxy, but the server hangs up |
8977 // while establishing the tunnel. | 8929 // while establishing the tunnel. |
8978 TEST_F(HttpNetworkTransactionSpdy3Test, ProxyTunnelGetHangup) { | 8930 TEST_F(HttpNetworkTransactionSpdy3Test, ProxyTunnelGetHangup) { |
8979 SessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); | 8931 SpdySessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); |
8980 CapturingBoundNetLog log; | 8932 CapturingBoundNetLog log; |
8981 session_deps.net_log = log.bound().net_log(); | 8933 session_deps.net_log = log.bound().net_log(); |
8982 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 8934 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
8983 | 8935 |
8984 HttpRequestInfo request; | 8936 HttpRequestInfo request; |
8985 request.method = "GET"; | 8937 request.method = "GET"; |
8986 request.url = GURL("https://www.google.com/"); | 8938 request.url = GURL("https://www.google.com/"); |
8987 | 8939 |
8988 // Since we have proxy, should try to establish tunnel. | 8940 // Since we have proxy, should try to establish tunnel. |
8989 MockWrite data_writes1[] = { | 8941 MockWrite data_writes1[] = { |
8990 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 8942 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" |
8991 "Host: www.google.com\r\n" | 8943 "Host: www.google.com\r\n" |
8992 "Proxy-Connection: keep-alive\r\n\r\n"), | 8944 "Proxy-Connection: keep-alive\r\n\r\n"), |
8993 | 8945 |
8994 MockWrite("GET / HTTP/1.1\r\n" | 8946 MockWrite("GET / HTTP/1.1\r\n" |
8995 "Host: www.google.com\r\n" | 8947 "Host: www.google.com\r\n" |
8996 "Connection: keep-alive\r\n\r\n"), | 8948 "Connection: keep-alive\r\n\r\n"), |
8997 }; | 8949 }; |
8998 | 8950 |
8999 MockRead data_reads1[] = { | 8951 MockRead data_reads1[] = { |
9000 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 8952 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
9001 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), | 8953 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), |
9002 MockRead(ASYNC, 0, 0), // EOF | 8954 MockRead(ASYNC, 0, 0), // EOF |
9003 }; | 8955 }; |
9004 | 8956 |
9005 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 8957 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), |
9006 data_writes1, arraysize(data_writes1)); | 8958 data_writes1, arraysize(data_writes1)); |
9007 session_deps.socket_factory.AddSocketDataProvider(&data1); | 8959 session_deps.socket_factory->AddSocketDataProvider(&data1); |
9008 SSLSocketDataProvider ssl(ASYNC, OK); | 8960 SSLSocketDataProvider ssl(ASYNC, OK); |
9009 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 8961 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
9010 | 8962 |
9011 TestCompletionCallback callback1; | 8963 TestCompletionCallback callback1; |
9012 | 8964 |
9013 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 8965 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
9014 | 8966 |
9015 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 8967 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
9016 EXPECT_EQ(ERR_IO_PENDING, rv); | 8968 EXPECT_EQ(ERR_IO_PENDING, rv); |
9017 | 8969 |
9018 rv = callback1.WaitForResult(); | 8970 rv = callback1.WaitForResult(); |
9019 EXPECT_EQ(ERR_EMPTY_RESPONSE, rv); | 8971 EXPECT_EQ(ERR_EMPTY_RESPONSE, rv); |
9020 CapturingNetLog::CapturedEntryList entries; | 8972 CapturingNetLog::CapturedEntryList entries; |
9021 log.GetEntries(&entries); | 8973 log.GetEntries(&entries); |
9022 size_t pos = ExpectLogContainsSomewhere( | 8974 size_t pos = ExpectLogContainsSomewhere( |
9023 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 8975 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
9024 NetLog::PHASE_NONE); | 8976 NetLog::PHASE_NONE); |
9025 ExpectLogContainsSomewhere( | 8977 ExpectLogContainsSomewhere( |
9026 entries, pos, | 8978 entries, pos, |
9027 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 8979 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
9028 NetLog::PHASE_NONE); | 8980 NetLog::PHASE_NONE); |
9029 } | 8981 } |
9030 | 8982 |
9031 // Test for crbug.com/55424. | 8983 // Test for crbug.com/55424. |
9032 TEST_F(HttpNetworkTransactionSpdy3Test, PreconnectWithExistingSpdySession) { | 8984 TEST_F(HttpNetworkTransactionSpdy3Test, PreconnectWithExistingSpdySession) { |
9033 SessionDependencies session_deps; | 8985 SpdySessionDependencies session_deps; |
9034 | 8986 |
9035 scoped_ptr<SpdyFrame> req(ConstructSpdyGet( | 8987 scoped_ptr<SpdyFrame> req(ConstructSpdyGet( |
9036 "https://www.google.com", false, 1, LOWEST)); | 8988 "https://www.google.com", false, 1, LOWEST)); |
9037 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; | 8989 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; |
9038 | 8990 |
9039 scoped_ptr<SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); | 8991 scoped_ptr<SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); |
9040 scoped_ptr<SpdyFrame> data(ConstructSpdyBodyFrame(1, true)); | 8992 scoped_ptr<SpdyFrame> data(ConstructSpdyBodyFrame(1, true)); |
9041 MockRead spdy_reads[] = { | 8993 MockRead spdy_reads[] = { |
9042 CreateMockRead(*resp), | 8994 CreateMockRead(*resp), |
9043 CreateMockRead(*data), | 8995 CreateMockRead(*data), |
9044 MockRead(ASYNC, 0, 0), | 8996 MockRead(ASYNC, 0, 0), |
9045 }; | 8997 }; |
9046 | 8998 |
9047 DelayedSocketData spdy_data( | 8999 DelayedSocketData spdy_data( |
9048 1, // wait for one write to finish before reading. | 9000 1, // wait for one write to finish before reading. |
9049 spdy_reads, arraysize(spdy_reads), | 9001 spdy_reads, arraysize(spdy_reads), |
9050 spdy_writes, arraysize(spdy_writes)); | 9002 spdy_writes, arraysize(spdy_writes)); |
9051 session_deps.socket_factory.AddSocketDataProvider(&spdy_data); | 9003 session_deps.socket_factory->AddSocketDataProvider(&spdy_data); |
9052 | 9004 |
9053 SSLSocketDataProvider ssl(ASYNC, OK); | 9005 SSLSocketDataProvider ssl(ASYNC, OK); |
9054 ssl.SetNextProto(kProtoSPDY3); | 9006 ssl.SetNextProto(kProtoSPDY3); |
9055 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 9007 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
9056 | 9008 |
9057 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 9009 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
9058 | 9010 |
9059 // Set up an initial SpdySession in the pool to reuse. | 9011 // Set up an initial SpdySession in the pool to reuse. |
9060 HostPortPair host_port_pair("www.google.com", 443); | 9012 HostPortPair host_port_pair("www.google.com", 443); |
9061 HostPortProxyPair pair(host_port_pair, ProxyServer::Direct()); | 9013 HostPortProxyPair pair(host_port_pair, ProxyServer::Direct()); |
9062 scoped_refptr<SpdySession> spdy_session = | 9014 scoped_refptr<SpdySession> spdy_session = |
9063 session->spdy_session_pool()->Get(pair, BoundNetLog()); | 9015 session->spdy_session_pool()->Get(pair, BoundNetLog()); |
9064 scoped_refptr<TransportSocketParams> transport_params( | 9016 scoped_refptr<TransportSocketParams> transport_params( |
9065 new TransportSocketParams(host_port_pair, MEDIUM, false, false, | 9017 new TransportSocketParams(host_port_pair, MEDIUM, false, false, |
(...skipping 28 matching lines...) Expand all Loading... |
9094 } | 9046 } |
9095 | 9047 |
9096 // Given a net error, cause that error to be returned from the first Write() | 9048 // Given a net error, cause that error to be returned from the first Write() |
9097 // call and verify that the HttpTransaction fails with that error. | 9049 // call and verify that the HttpTransaction fails with that error. |
9098 static void CheckErrorIsPassedBack(int error, IoMode mode) { | 9050 static void CheckErrorIsPassedBack(int error, IoMode mode) { |
9099 net::HttpRequestInfo request_info; | 9051 net::HttpRequestInfo request_info; |
9100 request_info.url = GURL("https://www.example.com/"); | 9052 request_info.url = GURL("https://www.example.com/"); |
9101 request_info.method = "GET"; | 9053 request_info.method = "GET"; |
9102 request_info.load_flags = net::LOAD_NORMAL; | 9054 request_info.load_flags = net::LOAD_NORMAL; |
9103 | 9055 |
9104 SessionDependencies session_deps; | 9056 SpdySessionDependencies session_deps; |
9105 | 9057 |
9106 SSLSocketDataProvider ssl_data(mode, OK); | 9058 SSLSocketDataProvider ssl_data(mode, OK); |
9107 net::MockWrite data_writes[] = { | 9059 net::MockWrite data_writes[] = { |
9108 net::MockWrite(mode, error), | 9060 net::MockWrite(mode, error), |
9109 }; | 9061 }; |
9110 net::StaticSocketDataProvider data(NULL, 0, | 9062 net::StaticSocketDataProvider data(NULL, 0, |
9111 data_writes, arraysize(data_writes)); | 9063 data_writes, arraysize(data_writes)); |
9112 session_deps.socket_factory.AddSocketDataProvider(&data); | 9064 session_deps.socket_factory->AddSocketDataProvider(&data); |
9113 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl_data); | 9065 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_data); |
9114 | 9066 |
9115 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 9067 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
9116 scoped_ptr<HttpNetworkTransaction> trans(new HttpNetworkTransaction(session)); | 9068 scoped_ptr<HttpNetworkTransaction> trans(new HttpNetworkTransaction(session)); |
9117 | 9069 |
9118 TestCompletionCallback callback; | 9070 TestCompletionCallback callback; |
9119 int rv = trans->Start(&request_info, callback.callback(), net::BoundNetLog()); | 9071 int rv = trans->Start(&request_info, callback.callback(), net::BoundNetLog()); |
9120 if (rv == net::ERR_IO_PENDING) | 9072 if (rv == net::ERR_IO_PENDING) |
9121 rv = callback.WaitForResult(); | 9073 rv = callback.WaitForResult(); |
9122 ASSERT_EQ(error, rv); | 9074 ASSERT_EQ(error, rv); |
9123 } | 9075 } |
(...skipping 17 matching lines...) Expand all Loading... |
9141 // 2) TLS False Start is disabled. | 9093 // 2) TLS False Start is disabled. |
9142 // 3) The initial TLS handshake requests a client certificate. | 9094 // 3) The initial TLS handshake requests a client certificate. |
9143 // 4) The client supplies an invalid/unacceptable certificate. | 9095 // 4) The client supplies an invalid/unacceptable certificate. |
9144 TEST_F(HttpNetworkTransactionSpdy3Test, | 9096 TEST_F(HttpNetworkTransactionSpdy3Test, |
9145 ClientAuthCertCache_Direct_NoFalseStart) { | 9097 ClientAuthCertCache_Direct_NoFalseStart) { |
9146 net::HttpRequestInfo request_info; | 9098 net::HttpRequestInfo request_info; |
9147 request_info.url = GURL("https://www.example.com/"); | 9099 request_info.url = GURL("https://www.example.com/"); |
9148 request_info.method = "GET"; | 9100 request_info.method = "GET"; |
9149 request_info.load_flags = net::LOAD_NORMAL; | 9101 request_info.load_flags = net::LOAD_NORMAL; |
9150 | 9102 |
9151 SessionDependencies session_deps; | 9103 SpdySessionDependencies session_deps; |
9152 | 9104 |
9153 scoped_refptr<SSLCertRequestInfo> cert_request(new SSLCertRequestInfo()); | 9105 scoped_refptr<SSLCertRequestInfo> cert_request(new SSLCertRequestInfo()); |
9154 cert_request->host_and_port = "www.example.com:443"; | 9106 cert_request->host_and_port = "www.example.com:443"; |
9155 | 9107 |
9156 // [ssl_]data1 contains the data for the first SSL handshake. When a | 9108 // [ssl_]data1 contains the data for the first SSL handshake. When a |
9157 // CertificateRequest is received for the first time, the handshake will | 9109 // CertificateRequest is received for the first time, the handshake will |
9158 // be aborted to allow the caller to provide a certificate. | 9110 // be aborted to allow the caller to provide a certificate. |
9159 SSLSocketDataProvider ssl_data1(ASYNC, net::ERR_SSL_CLIENT_AUTH_CERT_NEEDED); | 9111 SSLSocketDataProvider ssl_data1(ASYNC, net::ERR_SSL_CLIENT_AUTH_CERT_NEEDED); |
9160 ssl_data1.cert_request_info = cert_request.get(); | 9112 ssl_data1.cert_request_info = cert_request.get(); |
9161 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl_data1); | 9113 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_data1); |
9162 net::StaticSocketDataProvider data1(NULL, 0, NULL, 0); | 9114 net::StaticSocketDataProvider data1(NULL, 0, NULL, 0); |
9163 session_deps.socket_factory.AddSocketDataProvider(&data1); | 9115 session_deps.socket_factory->AddSocketDataProvider(&data1); |
9164 | 9116 |
9165 // [ssl_]data2 contains the data for the second SSL handshake. When TLS | 9117 // [ssl_]data2 contains the data for the second SSL handshake. When TLS |
9166 // False Start is not being used, the result of the SSL handshake will be | 9118 // False Start is not being used, the result of the SSL handshake will be |
9167 // returned as part of the SSLClientSocket::Connect() call. This test | 9119 // returned as part of the SSLClientSocket::Connect() call. This test |
9168 // matches the result of a server sending a handshake_failure alert, | 9120 // matches the result of a server sending a handshake_failure alert, |
9169 // rather than a Finished message, because it requires a client | 9121 // rather than a Finished message, because it requires a client |
9170 // certificate and none was supplied. | 9122 // certificate and none was supplied. |
9171 SSLSocketDataProvider ssl_data2(ASYNC, net::ERR_SSL_PROTOCOL_ERROR); | 9123 SSLSocketDataProvider ssl_data2(ASYNC, net::ERR_SSL_PROTOCOL_ERROR); |
9172 ssl_data2.cert_request_info = cert_request.get(); | 9124 ssl_data2.cert_request_info = cert_request.get(); |
9173 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl_data2); | 9125 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_data2); |
9174 net::StaticSocketDataProvider data2(NULL, 0, NULL, 0); | 9126 net::StaticSocketDataProvider data2(NULL, 0, NULL, 0); |
9175 session_deps.socket_factory.AddSocketDataProvider(&data2); | 9127 session_deps.socket_factory->AddSocketDataProvider(&data2); |
9176 | 9128 |
9177 // [ssl_]data3 contains the data for the third SSL handshake. When a | 9129 // [ssl_]data3 contains the data for the third SSL handshake. When a |
9178 // connection to a server fails during an SSL handshake, | 9130 // connection to a server fails during an SSL handshake, |
9179 // HttpNetworkTransaction will attempt to fallback to TLSv1 if the previous | 9131 // HttpNetworkTransaction will attempt to fallback to TLSv1 if the previous |
9180 // connection was attempted with TLSv1.1. This is transparent to the caller | 9132 // connection was attempted with TLSv1.1. This is transparent to the caller |
9181 // of the HttpNetworkTransaction. Because this test failure is due to | 9133 // of the HttpNetworkTransaction. Because this test failure is due to |
9182 // requiring a client certificate, this fallback handshake should also | 9134 // requiring a client certificate, this fallback handshake should also |
9183 // fail. | 9135 // fail. |
9184 SSLSocketDataProvider ssl_data3(ASYNC, net::ERR_SSL_PROTOCOL_ERROR); | 9136 SSLSocketDataProvider ssl_data3(ASYNC, net::ERR_SSL_PROTOCOL_ERROR); |
9185 ssl_data3.cert_request_info = cert_request.get(); | 9137 ssl_data3.cert_request_info = cert_request.get(); |
9186 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl_data3); | 9138 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_data3); |
9187 net::StaticSocketDataProvider data3(NULL, 0, NULL, 0); | 9139 net::StaticSocketDataProvider data3(NULL, 0, NULL, 0); |
9188 session_deps.socket_factory.AddSocketDataProvider(&data3); | 9140 session_deps.socket_factory->AddSocketDataProvider(&data3); |
9189 | 9141 |
9190 // [ssl_]data4 contains the data for the fourth SSL handshake. When a | 9142 // [ssl_]data4 contains the data for the fourth SSL handshake. When a |
9191 // connection to a server fails during an SSL handshake, | 9143 // connection to a server fails during an SSL handshake, |
9192 // HttpNetworkTransaction will attempt to fallback to SSLv3 if the previous | 9144 // HttpNetworkTransaction will attempt to fallback to SSLv3 if the previous |
9193 // connection was attempted with TLSv1. This is transparent to the caller | 9145 // connection was attempted with TLSv1. This is transparent to the caller |
9194 // of the HttpNetworkTransaction. Because this test failure is due to | 9146 // of the HttpNetworkTransaction. Because this test failure is due to |
9195 // requiring a client certificate, this fallback handshake should also | 9147 // requiring a client certificate, this fallback handshake should also |
9196 // fail. | 9148 // fail. |
9197 SSLSocketDataProvider ssl_data4(ASYNC, net::ERR_SSL_PROTOCOL_ERROR); | 9149 SSLSocketDataProvider ssl_data4(ASYNC, net::ERR_SSL_PROTOCOL_ERROR); |
9198 ssl_data4.cert_request_info = cert_request.get(); | 9150 ssl_data4.cert_request_info = cert_request.get(); |
9199 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl_data4); | 9151 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_data4); |
9200 net::StaticSocketDataProvider data4(NULL, 0, NULL, 0); | 9152 net::StaticSocketDataProvider data4(NULL, 0, NULL, 0); |
9201 session_deps.socket_factory.AddSocketDataProvider(&data4); | 9153 session_deps.socket_factory->AddSocketDataProvider(&data4); |
9202 | 9154 |
9203 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 9155 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
9204 scoped_ptr<HttpNetworkTransaction> trans(new HttpNetworkTransaction(session)); | 9156 scoped_ptr<HttpNetworkTransaction> trans(new HttpNetworkTransaction(session)); |
9205 | 9157 |
9206 // Begin the SSL handshake with the peer. This consumes ssl_data1. | 9158 // Begin the SSL handshake with the peer. This consumes ssl_data1. |
9207 TestCompletionCallback callback; | 9159 TestCompletionCallback callback; |
9208 int rv = trans->Start(&request_info, callback.callback(), net::BoundNetLog()); | 9160 int rv = trans->Start(&request_info, callback.callback(), net::BoundNetLog()); |
9209 ASSERT_EQ(net::ERR_IO_PENDING, rv); | 9161 ASSERT_EQ(net::ERR_IO_PENDING, rv); |
9210 | 9162 |
9211 // Complete the SSL handshake, which should abort due to requiring a | 9163 // Complete the SSL handshake, which should abort due to requiring a |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9244 // 1) No proxy is involved. | 9196 // 1) No proxy is involved. |
9245 // 2) TLS False Start is enabled. | 9197 // 2) TLS False Start is enabled. |
9246 // 3) The initial TLS handshake requests a client certificate. | 9198 // 3) The initial TLS handshake requests a client certificate. |
9247 // 4) The client supplies an invalid/unacceptable certificate. | 9199 // 4) The client supplies an invalid/unacceptable certificate. |
9248 TEST_F(HttpNetworkTransactionSpdy3Test, ClientAuthCertCache_Direct_FalseStart) { | 9200 TEST_F(HttpNetworkTransactionSpdy3Test, ClientAuthCertCache_Direct_FalseStart) { |
9249 net::HttpRequestInfo request_info; | 9201 net::HttpRequestInfo request_info; |
9250 request_info.url = GURL("https://www.example.com/"); | 9202 request_info.url = GURL("https://www.example.com/"); |
9251 request_info.method = "GET"; | 9203 request_info.method = "GET"; |
9252 request_info.load_flags = net::LOAD_NORMAL; | 9204 request_info.load_flags = net::LOAD_NORMAL; |
9253 | 9205 |
9254 SessionDependencies session_deps; | 9206 SpdySessionDependencies session_deps; |
9255 | 9207 |
9256 scoped_refptr<SSLCertRequestInfo> cert_request(new SSLCertRequestInfo()); | 9208 scoped_refptr<SSLCertRequestInfo> cert_request(new SSLCertRequestInfo()); |
9257 cert_request->host_and_port = "www.example.com:443"; | 9209 cert_request->host_and_port = "www.example.com:443"; |
9258 | 9210 |
9259 // When TLS False Start is used, SSLClientSocket::Connect() calls will | 9211 // When TLS False Start is used, SSLClientSocket::Connect() calls will |
9260 // return successfully after reading up to the peer's Certificate message. | 9212 // return successfully after reading up to the peer's Certificate message. |
9261 // This is to allow the caller to call SSLClientSocket::Write(), which can | 9213 // This is to allow the caller to call SSLClientSocket::Write(), which can |
9262 // enqueue application data to be sent in the same packet as the | 9214 // enqueue application data to be sent in the same packet as the |
9263 // ChangeCipherSpec and Finished messages. | 9215 // ChangeCipherSpec and Finished messages. |
9264 // The actual handshake will be finished when SSLClientSocket::Read() is | 9216 // The actual handshake will be finished when SSLClientSocket::Read() is |
9265 // called, which expects to process the peer's ChangeCipherSpec and | 9217 // called, which expects to process the peer's ChangeCipherSpec and |
9266 // Finished messages. If there was an error negotiating with the peer, | 9218 // Finished messages. If there was an error negotiating with the peer, |
9267 // such as due to the peer requiring a client certificate when none was | 9219 // such as due to the peer requiring a client certificate when none was |
9268 // supplied, the alert sent by the peer won't be processed until Read() is | 9220 // supplied, the alert sent by the peer won't be processed until Read() is |
9269 // called. | 9221 // called. |
9270 | 9222 |
9271 // Like the non-False Start case, when a client certificate is requested by | 9223 // Like the non-False Start case, when a client certificate is requested by |
9272 // the peer, the handshake is aborted during the Connect() call. | 9224 // the peer, the handshake is aborted during the Connect() call. |
9273 // [ssl_]data1 represents the initial SSL handshake with the peer. | 9225 // [ssl_]data1 represents the initial SSL handshake with the peer. |
9274 SSLSocketDataProvider ssl_data1(ASYNC, net::ERR_SSL_CLIENT_AUTH_CERT_NEEDED); | 9226 SSLSocketDataProvider ssl_data1(ASYNC, net::ERR_SSL_CLIENT_AUTH_CERT_NEEDED); |
9275 ssl_data1.cert_request_info = cert_request.get(); | 9227 ssl_data1.cert_request_info = cert_request.get(); |
9276 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl_data1); | 9228 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_data1); |
9277 net::StaticSocketDataProvider data1(NULL, 0, NULL, 0); | 9229 net::StaticSocketDataProvider data1(NULL, 0, NULL, 0); |
9278 session_deps.socket_factory.AddSocketDataProvider(&data1); | 9230 session_deps.socket_factory->AddSocketDataProvider(&data1); |
9279 | 9231 |
9280 // When a client certificate is supplied, Connect() will not be aborted | 9232 // When a client certificate is supplied, Connect() will not be aborted |
9281 // when the peer requests the certificate. Instead, the handshake will | 9233 // when the peer requests the certificate. Instead, the handshake will |
9282 // artificially succeed, allowing the caller to write the HTTP request to | 9234 // artificially succeed, allowing the caller to write the HTTP request to |
9283 // the socket. The handshake messages are not processed until Read() is | 9235 // the socket. The handshake messages are not processed until Read() is |
9284 // called, which then detects that the handshake was aborted, due to the | 9236 // called, which then detects that the handshake was aborted, due to the |
9285 // peer sending a handshake_failure because it requires a client | 9237 // peer sending a handshake_failure because it requires a client |
9286 // certificate. | 9238 // certificate. |
9287 SSLSocketDataProvider ssl_data2(ASYNC, net::OK); | 9239 SSLSocketDataProvider ssl_data2(ASYNC, net::OK); |
9288 ssl_data2.cert_request_info = cert_request.get(); | 9240 ssl_data2.cert_request_info = cert_request.get(); |
9289 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl_data2); | 9241 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_data2); |
9290 net::MockRead data2_reads[] = { | 9242 net::MockRead data2_reads[] = { |
9291 net::MockRead(ASYNC /* async */, net::ERR_SSL_PROTOCOL_ERROR), | 9243 net::MockRead(ASYNC /* async */, net::ERR_SSL_PROTOCOL_ERROR), |
9292 }; | 9244 }; |
9293 net::StaticSocketDataProvider data2( | 9245 net::StaticSocketDataProvider data2( |
9294 data2_reads, arraysize(data2_reads), NULL, 0); | 9246 data2_reads, arraysize(data2_reads), NULL, 0); |
9295 session_deps.socket_factory.AddSocketDataProvider(&data2); | 9247 session_deps.socket_factory->AddSocketDataProvider(&data2); |
9296 | 9248 |
9297 // As described in ClientAuthCertCache_Direct_NoFalseStart, [ssl_]data3 is | 9249 // As described in ClientAuthCertCache_Direct_NoFalseStart, [ssl_]data3 is |
9298 // the data for the SSL handshake once the TLSv1.1 connection falls back to | 9250 // the data for the SSL handshake once the TLSv1.1 connection falls back to |
9299 // TLSv1. It has the same behaviour as [ssl_]data2. | 9251 // TLSv1. It has the same behaviour as [ssl_]data2. |
9300 SSLSocketDataProvider ssl_data3(ASYNC, net::OK); | 9252 SSLSocketDataProvider ssl_data3(ASYNC, net::OK); |
9301 ssl_data3.cert_request_info = cert_request.get(); | 9253 ssl_data3.cert_request_info = cert_request.get(); |
9302 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl_data3); | 9254 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_data3); |
9303 net::StaticSocketDataProvider data3( | 9255 net::StaticSocketDataProvider data3( |
9304 data2_reads, arraysize(data2_reads), NULL, 0); | 9256 data2_reads, arraysize(data2_reads), NULL, 0); |
9305 session_deps.socket_factory.AddSocketDataProvider(&data3); | 9257 session_deps.socket_factory->AddSocketDataProvider(&data3); |
9306 | 9258 |
9307 // [ssl_]data4 is the data for the SSL handshake once the TLSv1 connection | 9259 // [ssl_]data4 is the data for the SSL handshake once the TLSv1 connection |
9308 // falls back to SSLv3. It has the same behaviour as [ssl_]data2. | 9260 // falls back to SSLv3. It has the same behaviour as [ssl_]data2. |
9309 SSLSocketDataProvider ssl_data4(ASYNC, net::OK); | 9261 SSLSocketDataProvider ssl_data4(ASYNC, net::OK); |
9310 ssl_data4.cert_request_info = cert_request.get(); | 9262 ssl_data4.cert_request_info = cert_request.get(); |
9311 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl_data4); | 9263 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_data4); |
9312 net::StaticSocketDataProvider data4( | 9264 net::StaticSocketDataProvider data4( |
9313 data2_reads, arraysize(data2_reads), NULL, 0); | 9265 data2_reads, arraysize(data2_reads), NULL, 0); |
9314 session_deps.socket_factory.AddSocketDataProvider(&data4); | 9266 session_deps.socket_factory->AddSocketDataProvider(&data4); |
9315 | 9267 |
9316 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 9268 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
9317 scoped_ptr<HttpNetworkTransaction> trans(new HttpNetworkTransaction(session)); | 9269 scoped_ptr<HttpNetworkTransaction> trans(new HttpNetworkTransaction(session)); |
9318 | 9270 |
9319 // Begin the initial SSL handshake. | 9271 // Begin the initial SSL handshake. |
9320 TestCompletionCallback callback; | 9272 TestCompletionCallback callback; |
9321 int rv = trans->Start(&request_info, callback.callback(), net::BoundNetLog()); | 9273 int rv = trans->Start(&request_info, callback.callback(), net::BoundNetLog()); |
9322 ASSERT_EQ(net::ERR_IO_PENDING, rv); | 9274 ASSERT_EQ(net::ERR_IO_PENDING, rv); |
9323 | 9275 |
9324 // Complete the SSL handshake, which should abort due to requiring a | 9276 // Complete the SSL handshake, which should abort due to requiring a |
(...skipping 30 matching lines...) Expand all Loading... |
9355 | 9307 |
9356 // Ensure that a client certificate is removed from the SSL client auth | 9308 // Ensure that a client certificate is removed from the SSL client auth |
9357 // cache when: | 9309 // cache when: |
9358 // 1) An HTTPS proxy is involved. | 9310 // 1) An HTTPS proxy is involved. |
9359 // 3) The HTTPS proxy requests a client certificate. | 9311 // 3) The HTTPS proxy requests a client certificate. |
9360 // 4) The client supplies an invalid/unacceptable certificate for the | 9312 // 4) The client supplies an invalid/unacceptable certificate for the |
9361 // proxy. | 9313 // proxy. |
9362 // The test is repeated twice, first for connecting to an HTTPS endpoint, | 9314 // The test is repeated twice, first for connecting to an HTTPS endpoint, |
9363 // then for connecting to an HTTP endpoint. | 9315 // then for connecting to an HTTP endpoint. |
9364 TEST_F(HttpNetworkTransactionSpdy3Test, ClientAuthCertCache_Proxy_Fail) { | 9316 TEST_F(HttpNetworkTransactionSpdy3Test, ClientAuthCertCache_Proxy_Fail) { |
9365 SessionDependencies session_deps( | 9317 SpdySessionDependencies session_deps( |
9366 ProxyService::CreateFixed("https://proxy:70")); | 9318 ProxyService::CreateFixed("https://proxy:70")); |
9367 CapturingBoundNetLog log; | 9319 CapturingBoundNetLog log; |
9368 session_deps.net_log = log.bound().net_log(); | 9320 session_deps.net_log = log.bound().net_log(); |
9369 | 9321 |
9370 scoped_refptr<SSLCertRequestInfo> cert_request(new SSLCertRequestInfo()); | 9322 scoped_refptr<SSLCertRequestInfo> cert_request(new SSLCertRequestInfo()); |
9371 cert_request->host_and_port = "proxy:70"; | 9323 cert_request->host_and_port = "proxy:70"; |
9372 | 9324 |
9373 // See ClientAuthCertCache_Direct_NoFalseStart for the explanation of | 9325 // See ClientAuthCertCache_Direct_NoFalseStart for the explanation of |
9374 // [ssl_]data[1-3]. Rather than represending the endpoint | 9326 // [ssl_]data[1-3]. Rather than represending the endpoint |
9375 // (www.example.com:443), they represent failures with the HTTPS proxy | 9327 // (www.example.com:443), they represent failures with the HTTPS proxy |
9376 // (proxy:70). | 9328 // (proxy:70). |
9377 SSLSocketDataProvider ssl_data1(ASYNC, net::ERR_SSL_CLIENT_AUTH_CERT_NEEDED); | 9329 SSLSocketDataProvider ssl_data1(ASYNC, net::ERR_SSL_CLIENT_AUTH_CERT_NEEDED); |
9378 ssl_data1.cert_request_info = cert_request.get(); | 9330 ssl_data1.cert_request_info = cert_request.get(); |
9379 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl_data1); | 9331 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_data1); |
9380 net::StaticSocketDataProvider data1(NULL, 0, NULL, 0); | 9332 net::StaticSocketDataProvider data1(NULL, 0, NULL, 0); |
9381 session_deps.socket_factory.AddSocketDataProvider(&data1); | 9333 session_deps.socket_factory->AddSocketDataProvider(&data1); |
9382 | 9334 |
9383 SSLSocketDataProvider ssl_data2(ASYNC, net::ERR_SSL_PROTOCOL_ERROR); | 9335 SSLSocketDataProvider ssl_data2(ASYNC, net::ERR_SSL_PROTOCOL_ERROR); |
9384 ssl_data2.cert_request_info = cert_request.get(); | 9336 ssl_data2.cert_request_info = cert_request.get(); |
9385 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl_data2); | 9337 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_data2); |
9386 net::StaticSocketDataProvider data2(NULL, 0, NULL, 0); | 9338 net::StaticSocketDataProvider data2(NULL, 0, NULL, 0); |
9387 session_deps.socket_factory.AddSocketDataProvider(&data2); | 9339 session_deps.socket_factory->AddSocketDataProvider(&data2); |
9388 | 9340 |
9389 // TODO(wtc): find out why this unit test doesn't need [ssl_]data3. | 9341 // TODO(wtc): find out why this unit test doesn't need [ssl_]data3. |
9390 #if 0 | 9342 #if 0 |
9391 SSLSocketDataProvider ssl_data3(ASYNC, net::ERR_SSL_PROTOCOL_ERROR); | 9343 SSLSocketDataProvider ssl_data3(ASYNC, net::ERR_SSL_PROTOCOL_ERROR); |
9392 ssl_data3.cert_request_info = cert_request.get(); | 9344 ssl_data3.cert_request_info = cert_request.get(); |
9393 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl_data3); | 9345 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_data3); |
9394 net::StaticSocketDataProvider data3(NULL, 0, NULL, 0); | 9346 net::StaticSocketDataProvider data3(NULL, 0, NULL, 0); |
9395 session_deps.socket_factory.AddSocketDataProvider(&data3); | 9347 session_deps.socket_factory->AddSocketDataProvider(&data3); |
9396 #endif | 9348 #endif |
9397 | 9349 |
9398 net::HttpRequestInfo requests[2]; | 9350 net::HttpRequestInfo requests[2]; |
9399 requests[0].url = GURL("https://www.example.com/"); | 9351 requests[0].url = GURL("https://www.example.com/"); |
9400 requests[0].method = "GET"; | 9352 requests[0].method = "GET"; |
9401 requests[0].load_flags = net::LOAD_NORMAL; | 9353 requests[0].load_flags = net::LOAD_NORMAL; |
9402 | 9354 |
9403 requests[1].url = GURL("http://www.example.com/"); | 9355 requests[1].url = GURL("http://www.example.com/"); |
9404 requests[1].method = "GET"; | 9356 requests[1].method = "GET"; |
9405 requests[1].load_flags = net::LOAD_NORMAL; | 9357 requests[1].load_flags = net::LOAD_NORMAL; |
9406 | 9358 |
9407 for (size_t i = 0; i < arraysize(requests); ++i) { | 9359 for (size_t i = 0; i < arraysize(requests); ++i) { |
9408 session_deps.socket_factory.ResetNextMockIndexes(); | 9360 session_deps.socket_factory->ResetNextMockIndexes(); |
9409 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 9361 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
9410 scoped_ptr<HttpNetworkTransaction> trans( | 9362 scoped_ptr<HttpNetworkTransaction> trans( |
9411 new HttpNetworkTransaction(session)); | 9363 new HttpNetworkTransaction(session)); |
9412 | 9364 |
9413 // Begin the SSL handshake with the proxy. | 9365 // Begin the SSL handshake with the proxy. |
9414 TestCompletionCallback callback; | 9366 TestCompletionCallback callback; |
9415 int rv = trans->Start( | 9367 int rv = trans->Start( |
9416 &requests[i], callback.callback(), net::BoundNetLog()); | 9368 &requests[i], callback.callback(), net::BoundNetLog()); |
9417 ASSERT_EQ(net::ERR_IO_PENDING, rv); | 9369 ASSERT_EQ(net::ERR_IO_PENDING, rv); |
9418 | 9370 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9452 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup("www.example.com:443", | 9404 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup("www.example.com:443", |
9453 &client_cert)); | 9405 &client_cert)); |
9454 } | 9406 } |
9455 } | 9407 } |
9456 | 9408 |
9457 TEST_F(HttpNetworkTransactionSpdy3Test, UseIPConnectionPooling) { | 9409 TEST_F(HttpNetworkTransactionSpdy3Test, UseIPConnectionPooling) { |
9458 HttpStreamFactory::set_use_alternate_protocols(true); | 9410 HttpStreamFactory::set_use_alternate_protocols(true); |
9459 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 9411 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
9460 | 9412 |
9461 // Set up a special HttpNetworkSession with a MockCachingHostResolver. | 9413 // Set up a special HttpNetworkSession with a MockCachingHostResolver. |
9462 SessionDependencies session_deps; | 9414 SpdySessionDependencies session_deps; |
9463 MockCachingHostResolver host_resolver; | 9415 session_deps.host_resolver.reset(new MockCachingHostResolver()); |
9464 net::HttpNetworkSession::Params params; | 9416 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
9465 params.client_socket_factory = &session_deps.socket_factory; | |
9466 params.host_resolver = &host_resolver; | |
9467 params.cert_verifier = session_deps.cert_verifier.get(); | |
9468 params.proxy_service = session_deps.proxy_service.get(); | |
9469 params.ssl_config_service = session_deps.ssl_config_service; | |
9470 params.http_auth_handler_factory = | |
9471 session_deps.http_auth_handler_factory.get(); | |
9472 params.http_server_properties = &session_deps.http_server_properties; | |
9473 params.net_log = session_deps.net_log; | |
9474 scoped_refptr<HttpNetworkSession> session(new HttpNetworkSession(params)); | |
9475 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); | 9417 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); |
9476 pool_peer.DisableDomainAuthenticationVerification(); | 9418 pool_peer.DisableDomainAuthenticationVerification(); |
9477 pool_peer.EnableSendingInitialSettings(false); | |
9478 | 9419 |
9479 SSLSocketDataProvider ssl(ASYNC, OK); | 9420 SSLSocketDataProvider ssl(ASYNC, OK); |
9480 ssl.SetNextProto(kProtoSPDY3); | 9421 ssl.SetNextProto(kProtoSPDY3); |
9481 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 9422 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
9482 | 9423 |
9483 scoped_ptr<SpdyFrame> host1_req(ConstructSpdyGet( | 9424 scoped_ptr<SpdyFrame> host1_req(ConstructSpdyGet( |
9484 "https://www.google.com", false, 1, LOWEST)); | 9425 "https://www.google.com", false, 1, LOWEST)); |
9485 scoped_ptr<SpdyFrame> host2_req(ConstructSpdyGet( | 9426 scoped_ptr<SpdyFrame> host2_req(ConstructSpdyGet( |
9486 "https://www.gmail.com", false, 3, LOWEST)); | 9427 "https://www.gmail.com", false, 3, LOWEST)); |
9487 MockWrite spdy_writes[] = { | 9428 MockWrite spdy_writes[] = { |
9488 CreateMockWrite(*host1_req, 1), | 9429 CreateMockWrite(*host1_req, 1), |
9489 CreateMockWrite(*host2_req, 4), | 9430 CreateMockWrite(*host2_req, 4), |
9490 }; | 9431 }; |
9491 scoped_ptr<SpdyFrame> host1_resp(ConstructSpdyGetSynReply(NULL, 0, 1)); | 9432 scoped_ptr<SpdyFrame> host1_resp(ConstructSpdyGetSynReply(NULL, 0, 1)); |
9492 scoped_ptr<SpdyFrame> host1_resp_body(ConstructSpdyBodyFrame(1, true)); | 9433 scoped_ptr<SpdyFrame> host1_resp_body(ConstructSpdyBodyFrame(1, true)); |
9493 scoped_ptr<SpdyFrame> host2_resp(ConstructSpdyGetSynReply(NULL, 0, 3)); | 9434 scoped_ptr<SpdyFrame> host2_resp(ConstructSpdyGetSynReply(NULL, 0, 3)); |
9494 scoped_ptr<SpdyFrame> host2_resp_body(ConstructSpdyBodyFrame(3, true)); | 9435 scoped_ptr<SpdyFrame> host2_resp_body(ConstructSpdyBodyFrame(3, true)); |
9495 MockRead spdy_reads[] = { | 9436 MockRead spdy_reads[] = { |
9496 CreateMockRead(*host1_resp, 2), | 9437 CreateMockRead(*host1_resp, 2), |
9497 CreateMockRead(*host1_resp_body, 3), | 9438 CreateMockRead(*host1_resp_body, 3), |
9498 CreateMockRead(*host2_resp, 5), | 9439 CreateMockRead(*host2_resp, 5), |
9499 CreateMockRead(*host2_resp_body, 6), | 9440 CreateMockRead(*host2_resp_body, 6), |
9500 MockRead(ASYNC, 0, 7), | 9441 MockRead(ASYNC, 0, 7), |
9501 }; | 9442 }; |
9502 | 9443 |
9503 IPAddressNumber ip; | 9444 IPAddressNumber ip; |
9504 ASSERT_TRUE(ParseIPLiteralToNumber("127.0.0.1", &ip)); | 9445 ASSERT_TRUE(ParseIPLiteralToNumber("127.0.0.1", &ip)); |
9505 IPEndPoint peer_addr = IPEndPoint(ip, 443); | 9446 IPEndPoint peer_addr = IPEndPoint(ip, 443); |
9506 MockConnect connect(ASYNC, OK, peer_addr); | 9447 MockConnect connect(ASYNC, OK, peer_addr); |
9507 OrderedSocketData spdy_data( | 9448 OrderedSocketData spdy_data( |
9508 connect, | 9449 connect, |
9509 spdy_reads, arraysize(spdy_reads), | 9450 spdy_reads, arraysize(spdy_reads), |
9510 spdy_writes, arraysize(spdy_writes)); | 9451 spdy_writes, arraysize(spdy_writes)); |
9511 session_deps.socket_factory.AddSocketDataProvider(&spdy_data); | 9452 session_deps.socket_factory->AddSocketDataProvider(&spdy_data); |
9512 | 9453 |
9513 TestCompletionCallback callback; | 9454 TestCompletionCallback callback; |
9514 HttpRequestInfo request1; | 9455 HttpRequestInfo request1; |
9515 request1.method = "GET"; | 9456 request1.method = "GET"; |
9516 request1.url = GURL("https://www.google.com/"); | 9457 request1.url = GURL("https://www.google.com/"); |
9517 request1.load_flags = 0; | 9458 request1.load_flags = 0; |
9518 HttpNetworkTransaction trans1(session); | 9459 HttpNetworkTransaction trans1(session); |
9519 | 9460 |
9520 int rv = trans1.Start(&request1, callback.callback(), BoundNetLog()); | 9461 int rv = trans1.Start(&request1, callback.callback(), BoundNetLog()); |
9521 EXPECT_EQ(ERR_IO_PENDING, rv); | 9462 EXPECT_EQ(ERR_IO_PENDING, rv); |
9522 EXPECT_EQ(OK, callback.WaitForResult()); | 9463 EXPECT_EQ(OK, callback.WaitForResult()); |
9523 | 9464 |
9524 const HttpResponseInfo* response = trans1.GetResponseInfo(); | 9465 const HttpResponseInfo* response = trans1.GetResponseInfo(); |
9525 ASSERT_TRUE(response != NULL); | 9466 ASSERT_TRUE(response != NULL); |
9526 ASSERT_TRUE(response->headers != NULL); | 9467 ASSERT_TRUE(response->headers != NULL); |
9527 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 9468 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
9528 | 9469 |
9529 std::string response_data; | 9470 std::string response_data; |
9530 ASSERT_EQ(OK, ReadTransaction(&trans1, &response_data)); | 9471 ASSERT_EQ(OK, ReadTransaction(&trans1, &response_data)); |
9531 EXPECT_EQ("hello!", response_data); | 9472 EXPECT_EQ("hello!", response_data); |
9532 | 9473 |
9533 // Preload www.gmail.com into HostCache. | 9474 // Preload www.gmail.com into HostCache. |
9534 HostPortPair host_port("www.gmail.com", 443); | 9475 HostPortPair host_port("www.gmail.com", 443); |
9535 HostResolver::RequestInfo resolve_info(host_port); | 9476 HostResolver::RequestInfo resolve_info(host_port); |
9536 AddressList ignored; | 9477 AddressList ignored; |
9537 rv = host_resolver.Resolve(resolve_info, &ignored, callback.callback(), NULL, | 9478 rv = session_deps.host_resolver->Resolve(resolve_info, &ignored, |
9538 BoundNetLog()); | 9479 callback.callback(), NULL, |
| 9480 BoundNetLog()); |
9539 EXPECT_EQ(ERR_IO_PENDING, rv); | 9481 EXPECT_EQ(ERR_IO_PENDING, rv); |
9540 rv = callback.WaitForResult(); | 9482 rv = callback.WaitForResult(); |
9541 EXPECT_EQ(OK, rv); | 9483 EXPECT_EQ(OK, rv); |
9542 | 9484 |
9543 HttpRequestInfo request2; | 9485 HttpRequestInfo request2; |
9544 request2.method = "GET"; | 9486 request2.method = "GET"; |
9545 request2.url = GURL("https://www.gmail.com/"); | 9487 request2.url = GURL("https://www.gmail.com/"); |
9546 request2.load_flags = 0; | 9488 request2.load_flags = 0; |
9547 HttpNetworkTransaction trans2(session); | 9489 HttpNetworkTransaction trans2(session); |
9548 | 9490 |
(...skipping 12 matching lines...) Expand all Loading... |
9561 | 9503 |
9562 HttpStreamFactory::SetNextProtos(std::vector<std::string>()); | 9504 HttpStreamFactory::SetNextProtos(std::vector<std::string>()); |
9563 HttpStreamFactory::set_use_alternate_protocols(false); | 9505 HttpStreamFactory::set_use_alternate_protocols(false); |
9564 } | 9506 } |
9565 | 9507 |
9566 TEST_F(HttpNetworkTransactionSpdy3Test, UseIPConnectionPoolingAfterResolution) { | 9508 TEST_F(HttpNetworkTransactionSpdy3Test, UseIPConnectionPoolingAfterResolution) { |
9567 HttpStreamFactory::set_use_alternate_protocols(true); | 9509 HttpStreamFactory::set_use_alternate_protocols(true); |
9568 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 9510 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
9569 | 9511 |
9570 // Set up a special HttpNetworkSession with a MockCachingHostResolver. | 9512 // Set up a special HttpNetworkSession with a MockCachingHostResolver. |
9571 SessionDependencies session_deps; | 9513 SpdySessionDependencies session_deps; |
9572 MockCachingHostResolver host_resolver; | 9514 session_deps.host_resolver.reset(new MockCachingHostResolver()); |
9573 net::HttpNetworkSession::Params params; | 9515 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
9574 params.client_socket_factory = &session_deps.socket_factory; | |
9575 params.host_resolver = &host_resolver; | |
9576 params.cert_verifier = session_deps.cert_verifier.get(); | |
9577 params.proxy_service = session_deps.proxy_service.get(); | |
9578 params.ssl_config_service = session_deps.ssl_config_service; | |
9579 params.http_auth_handler_factory = | |
9580 session_deps.http_auth_handler_factory.get(); | |
9581 params.http_server_properties = &session_deps.http_server_properties; | |
9582 params.net_log = session_deps.net_log; | |
9583 scoped_refptr<HttpNetworkSession> session(new HttpNetworkSession(params)); | |
9584 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); | 9516 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); |
9585 pool_peer.DisableDomainAuthenticationVerification(); | 9517 pool_peer.DisableDomainAuthenticationVerification(); |
9586 pool_peer.EnableSendingInitialSettings(false); | |
9587 | 9518 |
9588 SSLSocketDataProvider ssl(ASYNC, OK); | 9519 SSLSocketDataProvider ssl(ASYNC, OK); |
9589 ssl.SetNextProto(kProtoSPDY3); | 9520 ssl.SetNextProto(kProtoSPDY3); |
9590 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 9521 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
9591 | 9522 |
9592 scoped_ptr<SpdyFrame> host1_req(ConstructSpdyGet( | 9523 scoped_ptr<SpdyFrame> host1_req(ConstructSpdyGet( |
9593 "https://www.google.com", false, 1, LOWEST)); | 9524 "https://www.google.com", false, 1, LOWEST)); |
9594 scoped_ptr<SpdyFrame> host2_req(ConstructSpdyGet( | 9525 scoped_ptr<SpdyFrame> host2_req(ConstructSpdyGet( |
9595 "https://www.gmail.com", false, 3, LOWEST)); | 9526 "https://www.gmail.com", false, 3, LOWEST)); |
9596 MockWrite spdy_writes[] = { | 9527 MockWrite spdy_writes[] = { |
9597 CreateMockWrite(*host1_req, 1), | 9528 CreateMockWrite(*host1_req, 1), |
9598 CreateMockWrite(*host2_req, 4), | 9529 CreateMockWrite(*host2_req, 4), |
9599 }; | 9530 }; |
9600 scoped_ptr<SpdyFrame> host1_resp(ConstructSpdyGetSynReply(NULL, 0, 1)); | 9531 scoped_ptr<SpdyFrame> host1_resp(ConstructSpdyGetSynReply(NULL, 0, 1)); |
9601 scoped_ptr<SpdyFrame> host1_resp_body(ConstructSpdyBodyFrame(1, true)); | 9532 scoped_ptr<SpdyFrame> host1_resp_body(ConstructSpdyBodyFrame(1, true)); |
9602 scoped_ptr<SpdyFrame> host2_resp(ConstructSpdyGetSynReply(NULL, 0, 3)); | 9533 scoped_ptr<SpdyFrame> host2_resp(ConstructSpdyGetSynReply(NULL, 0, 3)); |
9603 scoped_ptr<SpdyFrame> host2_resp_body(ConstructSpdyBodyFrame(3, true)); | 9534 scoped_ptr<SpdyFrame> host2_resp_body(ConstructSpdyBodyFrame(3, true)); |
9604 MockRead spdy_reads[] = { | 9535 MockRead spdy_reads[] = { |
9605 CreateMockRead(*host1_resp, 2), | 9536 CreateMockRead(*host1_resp, 2), |
9606 CreateMockRead(*host1_resp_body, 3), | 9537 CreateMockRead(*host1_resp_body, 3), |
9607 CreateMockRead(*host2_resp, 5), | 9538 CreateMockRead(*host2_resp, 5), |
9608 CreateMockRead(*host2_resp_body, 6), | 9539 CreateMockRead(*host2_resp_body, 6), |
9609 MockRead(ASYNC, 0, 7), | 9540 MockRead(ASYNC, 0, 7), |
9610 }; | 9541 }; |
9611 | 9542 |
9612 IPAddressNumber ip; | 9543 IPAddressNumber ip; |
9613 ASSERT_TRUE(ParseIPLiteralToNumber("127.0.0.1", &ip)); | 9544 ASSERT_TRUE(ParseIPLiteralToNumber("127.0.0.1", &ip)); |
9614 IPEndPoint peer_addr = IPEndPoint(ip, 443); | 9545 IPEndPoint peer_addr = IPEndPoint(ip, 443); |
9615 MockConnect connect(ASYNC, OK, peer_addr); | 9546 MockConnect connect(ASYNC, OK, peer_addr); |
9616 OrderedSocketData spdy_data( | 9547 OrderedSocketData spdy_data( |
9617 connect, | 9548 connect, |
9618 spdy_reads, arraysize(spdy_reads), | 9549 spdy_reads, arraysize(spdy_reads), |
9619 spdy_writes, arraysize(spdy_writes)); | 9550 spdy_writes, arraysize(spdy_writes)); |
9620 session_deps.socket_factory.AddSocketDataProvider(&spdy_data); | 9551 session_deps.socket_factory->AddSocketDataProvider(&spdy_data); |
9621 | 9552 |
9622 TestCompletionCallback callback; | 9553 TestCompletionCallback callback; |
9623 HttpRequestInfo request1; | 9554 HttpRequestInfo request1; |
9624 request1.method = "GET"; | 9555 request1.method = "GET"; |
9625 request1.url = GURL("https://www.google.com/"); | 9556 request1.url = GURL("https://www.google.com/"); |
9626 request1.load_flags = 0; | 9557 request1.load_flags = 0; |
9627 HttpNetworkTransaction trans1(session); | 9558 HttpNetworkTransaction trans1(session); |
9628 | 9559 |
9629 int rv = trans1.Start(&request1, callback.callback(), BoundNetLog()); | 9560 int rv = trans1.Start(&request1, callback.callback(), BoundNetLog()); |
9630 EXPECT_EQ(ERR_IO_PENDING, rv); | 9561 EXPECT_EQ(ERR_IO_PENDING, rv); |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9701 MockCachingHostResolver host_resolver_; | 9632 MockCachingHostResolver host_resolver_; |
9702 const HostPortPair host_port_; | 9633 const HostPortPair host_port_; |
9703 }; | 9634 }; |
9704 | 9635 |
9705 TEST_F(HttpNetworkTransactionSpdy3Test, | 9636 TEST_F(HttpNetworkTransactionSpdy3Test, |
9706 UseIPConnectionPoolingWithHostCacheExpiration) { | 9637 UseIPConnectionPoolingWithHostCacheExpiration) { |
9707 HttpStreamFactory::set_use_alternate_protocols(true); | 9638 HttpStreamFactory::set_use_alternate_protocols(true); |
9708 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 9639 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
9709 | 9640 |
9710 // Set up a special HttpNetworkSession with a OneTimeCachingHostResolver. | 9641 // Set up a special HttpNetworkSession with a OneTimeCachingHostResolver. |
9711 SessionDependencies session_deps; | |
9712 OneTimeCachingHostResolver host_resolver(HostPortPair("www.gmail.com", 443)); | 9642 OneTimeCachingHostResolver host_resolver(HostPortPair("www.gmail.com", 443)); |
9713 net::HttpNetworkSession::Params params; | 9643 SpdySessionDependencies session_deps; |
9714 params.client_socket_factory = &session_deps.socket_factory; | 9644 HttpNetworkSession::Params params = |
| 9645 SpdySessionDependencies::CreateSessionParams(&session_deps); |
9715 params.host_resolver = &host_resolver; | 9646 params.host_resolver = &host_resolver; |
9716 params.cert_verifier = session_deps.cert_verifier.get(); | 9647 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
9717 params.proxy_service = session_deps.proxy_service.get(); | |
9718 params.ssl_config_service = session_deps.ssl_config_service; | |
9719 params.http_auth_handler_factory = | |
9720 session_deps.http_auth_handler_factory.get(); | |
9721 params.http_server_properties = &session_deps.http_server_properties; | |
9722 params.net_log = session_deps.net_log; | |
9723 scoped_refptr<HttpNetworkSession> session(new HttpNetworkSession(params)); | |
9724 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); | 9648 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); |
9725 pool_peer.DisableDomainAuthenticationVerification(); | 9649 pool_peer.DisableDomainAuthenticationVerification(); |
9726 pool_peer.EnableSendingInitialSettings(false); | |
9727 | 9650 |
9728 SSLSocketDataProvider ssl(ASYNC, OK); | 9651 SSLSocketDataProvider ssl(ASYNC, OK); |
9729 ssl.SetNextProto(kProtoSPDY3); | 9652 ssl.SetNextProto(kProtoSPDY3); |
9730 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 9653 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
9731 | 9654 |
9732 scoped_ptr<SpdyFrame> host1_req(ConstructSpdyGet( | 9655 scoped_ptr<SpdyFrame> host1_req(ConstructSpdyGet( |
9733 "https://www.google.com", false, 1, LOWEST)); | 9656 "https://www.google.com", false, 1, LOWEST)); |
9734 scoped_ptr<SpdyFrame> host2_req(ConstructSpdyGet( | 9657 scoped_ptr<SpdyFrame> host2_req(ConstructSpdyGet( |
9735 "https://www.gmail.com", false, 3, LOWEST)); | 9658 "https://www.gmail.com", false, 3, LOWEST)); |
9736 MockWrite spdy_writes[] = { | 9659 MockWrite spdy_writes[] = { |
9737 CreateMockWrite(*host1_req, 1), | 9660 CreateMockWrite(*host1_req, 1), |
9738 CreateMockWrite(*host2_req, 4), | 9661 CreateMockWrite(*host2_req, 4), |
9739 }; | 9662 }; |
9740 scoped_ptr<SpdyFrame> host1_resp(ConstructSpdyGetSynReply(NULL, 0, 1)); | 9663 scoped_ptr<SpdyFrame> host1_resp(ConstructSpdyGetSynReply(NULL, 0, 1)); |
9741 scoped_ptr<SpdyFrame> host1_resp_body(ConstructSpdyBodyFrame(1, true)); | 9664 scoped_ptr<SpdyFrame> host1_resp_body(ConstructSpdyBodyFrame(1, true)); |
9742 scoped_ptr<SpdyFrame> host2_resp(ConstructSpdyGetSynReply(NULL, 0, 3)); | 9665 scoped_ptr<SpdyFrame> host2_resp(ConstructSpdyGetSynReply(NULL, 0, 3)); |
9743 scoped_ptr<SpdyFrame> host2_resp_body(ConstructSpdyBodyFrame(3, true)); | 9666 scoped_ptr<SpdyFrame> host2_resp_body(ConstructSpdyBodyFrame(3, true)); |
9744 MockRead spdy_reads[] = { | 9667 MockRead spdy_reads[] = { |
9745 CreateMockRead(*host1_resp, 2), | 9668 CreateMockRead(*host1_resp, 2), |
9746 CreateMockRead(*host1_resp_body, 3), | 9669 CreateMockRead(*host1_resp_body, 3), |
9747 CreateMockRead(*host2_resp, 5), | 9670 CreateMockRead(*host2_resp, 5), |
9748 CreateMockRead(*host2_resp_body, 6), | 9671 CreateMockRead(*host2_resp_body, 6), |
9749 MockRead(ASYNC, 0, 7), | 9672 MockRead(ASYNC, 0, 7), |
9750 }; | 9673 }; |
9751 | 9674 |
9752 IPAddressNumber ip; | 9675 IPAddressNumber ip; |
9753 ASSERT_TRUE(ParseIPLiteralToNumber("127.0.0.1", &ip)); | 9676 ASSERT_TRUE(ParseIPLiteralToNumber("127.0.0.1", &ip)); |
9754 IPEndPoint peer_addr = IPEndPoint(ip, 443); | 9677 IPEndPoint peer_addr = IPEndPoint(ip, 443); |
9755 MockConnect connect(ASYNC, OK, peer_addr); | 9678 MockConnect connect(ASYNC, OK, peer_addr); |
9756 OrderedSocketData spdy_data( | 9679 OrderedSocketData spdy_data( |
9757 connect, | 9680 connect, |
9758 spdy_reads, arraysize(spdy_reads), | 9681 spdy_reads, arraysize(spdy_reads), |
9759 spdy_writes, arraysize(spdy_writes)); | 9682 spdy_writes, arraysize(spdy_writes)); |
9760 session_deps.socket_factory.AddSocketDataProvider(&spdy_data); | 9683 session_deps.socket_factory->AddSocketDataProvider(&spdy_data); |
9761 | 9684 |
9762 TestCompletionCallback callback; | 9685 TestCompletionCallback callback; |
9763 HttpRequestInfo request1; | 9686 HttpRequestInfo request1; |
9764 request1.method = "GET"; | 9687 request1.method = "GET"; |
9765 request1.url = GURL("https://www.google.com/"); | 9688 request1.url = GURL("https://www.google.com/"); |
9766 request1.load_flags = 0; | 9689 request1.load_flags = 0; |
9767 HttpNetworkTransaction trans1(session); | 9690 HttpNetworkTransaction trans1(session); |
9768 | 9691 |
9769 int rv = trans1.Start(&request1, callback.callback(), BoundNetLog()); | 9692 int rv = trans1.Start(&request1, callback.callback(), BoundNetLog()); |
9770 EXPECT_EQ(ERR_IO_PENDING, rv); | 9693 EXPECT_EQ(ERR_IO_PENDING, rv); |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9895 MockRead reads2[] = { | 9818 MockRead reads2[] = { |
9896 MockRead(ASYNC, 5, "HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), | 9819 MockRead(ASYNC, 5, "HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), |
9897 MockRead(ASYNC, 6, "hello"), | 9820 MockRead(ASYNC, 6, "hello"), |
9898 MockRead(ASYNC, 7, OK), | 9821 MockRead(ASYNC, 7, OK), |
9899 }; | 9822 }; |
9900 | 9823 |
9901 DelayedSocketData data2( | 9824 DelayedSocketData data2( |
9902 1, reads2, arraysize(reads2), | 9825 1, reads2, arraysize(reads2), |
9903 writes2, arraysize(writes2)); | 9826 writes2, arraysize(writes2)); |
9904 | 9827 |
9905 SessionDependencies session_deps; | 9828 SpdySessionDependencies session_deps; |
9906 SSLSocketDataProvider ssl(ASYNC, OK); | 9829 SSLSocketDataProvider ssl(ASYNC, OK); |
9907 ssl.SetNextProto(kProtoSPDY3); | 9830 ssl.SetNextProto(kProtoSPDY3); |
9908 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 9831 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
9909 session_deps.socket_factory.AddSocketDataProvider(&data1); | 9832 session_deps.socket_factory->AddSocketDataProvider(&data1); |
9910 session_deps.socket_factory.AddSocketDataProvider(&data2); | 9833 session_deps.socket_factory->AddSocketDataProvider(&data2); |
9911 | 9834 |
9912 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 9835 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
9913 | 9836 |
9914 // Start the first transaction to set up the SpdySession | 9837 // Start the first transaction to set up the SpdySession |
9915 HttpRequestInfo request1; | 9838 HttpRequestInfo request1; |
9916 request1.method = "GET"; | 9839 request1.method = "GET"; |
9917 request1.url = GURL(https_url); | 9840 request1.url = GURL(https_url); |
9918 request1.priority = LOWEST; | 9841 request1.priority = LOWEST; |
9919 request1.load_flags = 0; | 9842 request1.load_flags = 0; |
9920 HttpNetworkTransaction trans1(session); | 9843 HttpNetworkTransaction trans1(session); |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10054 CreateMockRead(*resp1, 2), | 9977 CreateMockRead(*resp1, 2), |
10055 CreateMockRead(*body1, 3), | 9978 CreateMockRead(*body1, 3), |
10056 CreateMockRead(*resp2, 5), | 9979 CreateMockRead(*resp2, 5), |
10057 CreateMockRead(*body2, 6), | 9980 CreateMockRead(*body2, 6), |
10058 MockRead(ASYNC, ERR_IO_PENDING, 7) | 9981 MockRead(ASYNC, ERR_IO_PENDING, 7) |
10059 }; | 9982 }; |
10060 | 9983 |
10061 OrderedSocketData data(reads, arraysize(reads), | 9984 OrderedSocketData data(reads, arraysize(reads), |
10062 writes, arraysize(writes)); | 9985 writes, arraysize(writes)); |
10063 | 9986 |
10064 SessionDependencies session_deps; | 9987 SpdySessionDependencies session_deps; |
10065 SSLSocketDataProvider ssl(ASYNC, OK); | 9988 SSLSocketDataProvider ssl(ASYNC, OK); |
10066 ssl.SetNextProto(kProtoSPDY3); | 9989 ssl.SetNextProto(kProtoSPDY3); |
10067 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); | 9990 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
10068 session_deps.socket_factory.AddSocketDataProvider(&data); | 9991 session_deps.socket_factory->AddSocketDataProvider(&data); |
10069 | 9992 |
10070 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 9993 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
10071 | 9994 |
10072 // Start the first transaction to set up the SpdySession | 9995 // Start the first transaction to set up the SpdySession |
10073 HttpRequestInfo request1; | 9996 HttpRequestInfo request1; |
10074 request1.method = "GET"; | 9997 request1.method = "GET"; |
10075 request1.url = GURL(https_url); | 9998 request1.url = GURL(https_url); |
10076 request1.priority = LOWEST; | 9999 request1.priority = LOWEST; |
10077 request1.load_flags = 0; | 10000 request1.load_flags = 0; |
10078 HttpNetworkTransaction trans1(session); | 10001 HttpNetworkTransaction trans1(session); |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10220 trans2.Start(&request2, callback2.callback(), BoundNetLog())); | 10143 trans2.Start(&request2, callback2.callback(), BoundNetLog())); |
10221 MessageLoop::current()->RunUntilIdle(); | 10144 MessageLoop::current()->RunUntilIdle(); |
10222 data2->RunFor(3); | 10145 data2->RunFor(3); |
10223 | 10146 |
10224 ASSERT_TRUE(callback2.have_result()); | 10147 ASSERT_TRUE(callback2.have_result()); |
10225 EXPECT_EQ(OK, callback2.WaitForResult()); | 10148 EXPECT_EQ(OK, callback2.WaitForResult()); |
10226 EXPECT_TRUE(trans2.GetResponseInfo()->was_fetched_via_spdy); | 10149 EXPECT_TRUE(trans2.GetResponseInfo()->was_fetched_via_spdy); |
10227 } | 10150 } |
10228 | 10151 |
10229 } // namespace net | 10152 } // namespace net |
OLD | NEW |