OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/http/http_network_transaction.h" | 5 #include "net/http/http_network_transaction.h" |
6 | 6 |
7 #include <math.h> // ceil | 7 #include <math.h> // ceil |
8 #include <stdarg.h> | 8 #include <stdarg.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 | 10 |
(...skipping 9196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9207 std::string expected_group_name; | 9207 std::string expected_group_name; |
9208 bool ssl; | 9208 bool ssl; |
9209 }; | 9209 }; |
9210 | 9210 |
9211 std::unique_ptr<HttpNetworkSession> SetupSessionForGroupNameTests( | 9211 std::unique_ptr<HttpNetworkSession> SetupSessionForGroupNameTests( |
9212 SpdySessionDependencies* session_deps_) { | 9212 SpdySessionDependencies* session_deps_) { |
9213 std::unique_ptr<HttpNetworkSession> session(CreateSession(session_deps_)); | 9213 std::unique_ptr<HttpNetworkSession> session(CreateSession(session_deps_)); |
9214 | 9214 |
9215 HttpServerProperties* http_server_properties = | 9215 HttpServerProperties* http_server_properties = |
9216 session->http_server_properties(); | 9216 session->http_server_properties(); |
9217 AlternativeService alternative_service(kProtoHTTP2, "", 444); | 9217 AlternativeService alternative_service( |
| 9218 AlternateProtocolFromNextProto(kProtoHTTP2), "", 444); |
9218 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 9219 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
9219 http_server_properties->SetAlternativeService( | 9220 http_server_properties->SetAlternativeService( |
9220 url::SchemeHostPort("https", "host.with.alternate", 443), | 9221 url::SchemeHostPort("https", "host.with.alternate", 443), |
9221 alternative_service, expiration); | 9222 alternative_service, expiration); |
9222 | 9223 |
9223 return session; | 9224 return session; |
9224 } | 9225 } |
9225 | 9226 |
9226 int GroupNameTransactionHelper(const std::string& url, | 9227 int GroupNameTransactionHelper(const std::string& url, |
9227 HttpNetworkSession* session) { | 9228 HttpNetworkSession* session) { |
(...skipping 857 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10085 EXPECT_FALSE(response->was_fetched_via_spdy); | 10086 EXPECT_FALSE(response->was_fetched_via_spdy); |
10086 EXPECT_FALSE(response->was_alpn_negotiated); | 10087 EXPECT_FALSE(response->was_alpn_negotiated); |
10087 | 10088 |
10088 std::string response_data; | 10089 std::string response_data; |
10089 ASSERT_THAT(ReadTransaction(&trans, &response_data), IsOk()); | 10090 ASSERT_THAT(ReadTransaction(&trans, &response_data), IsOk()); |
10090 EXPECT_EQ("hello world", response_data); | 10091 EXPECT_EQ("hello world", response_data); |
10091 | 10092 |
10092 alternative_service_vector = | 10093 alternative_service_vector = |
10093 http_server_properties->GetAlternativeServices(test_server); | 10094 http_server_properties->GetAlternativeServices(test_server); |
10094 ASSERT_EQ(1u, alternative_service_vector.size()); | 10095 ASSERT_EQ(1u, alternative_service_vector.size()); |
10095 EXPECT_EQ(kProtoHTTP2, alternative_service_vector[0].protocol); | 10096 EXPECT_EQ(AlternateProtocolFromNextProto(kProtoHTTP2), |
| 10097 alternative_service_vector[0].protocol); |
10096 EXPECT_EQ("mail.example.org", alternative_service_vector[0].host); | 10098 EXPECT_EQ("mail.example.org", alternative_service_vector[0].host); |
10097 EXPECT_EQ(443, alternative_service_vector[0].port); | 10099 EXPECT_EQ(443, alternative_service_vector[0].port); |
10098 } | 10100 } |
10099 | 10101 |
10100 // Regression test for https://crbug.com/615497. | 10102 // Regression test for https://crbug.com/615497. |
10101 TEST_F(HttpNetworkTransactionTest, | 10103 TEST_F(HttpNetworkTransactionTest, |
10102 DoNotParseAlternativeServiceHeaderOnInsecureRequest) { | 10104 DoNotParseAlternativeServiceHeaderOnInsecureRequest) { |
10103 MockRead data_reads[] = { | 10105 MockRead data_reads[] = { |
10104 MockRead("HTTP/1.1 200 OK\r\n"), | 10106 MockRead("HTTP/1.1 200 OK\r\n"), |
10105 MockRead(kAlternativeServiceHttpHeader), | 10107 MockRead(kAlternativeServiceHttpHeader), |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10173 MockRead(ASYNC, OK), | 10175 MockRead(ASYNC, OK), |
10174 }; | 10176 }; |
10175 StaticSocketDataProvider second_data(data_reads, arraysize(data_reads), NULL, | 10177 StaticSocketDataProvider second_data(data_reads, arraysize(data_reads), NULL, |
10176 0); | 10178 0); |
10177 session_deps_.socket_factory->AddSocketDataProvider(&second_data); | 10179 session_deps_.socket_factory->AddSocketDataProvider(&second_data); |
10178 | 10180 |
10179 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10181 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
10180 | 10182 |
10181 HttpServerProperties* http_server_properties = | 10183 HttpServerProperties* http_server_properties = |
10182 session->http_server_properties(); | 10184 session->http_server_properties(); |
10183 AlternativeService alternative_service(kProtoHTTP2, "different.example.org", | 10185 AlternativeService alternative_service( |
10184 444); | 10186 AlternateProtocolFromNextProto(kProtoHTTP2), "different.example.org", |
| 10187 444); |
10185 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 10188 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
10186 http_server_properties->SetAlternativeService( | 10189 http_server_properties->SetAlternativeService( |
10187 url::SchemeHostPort(request.url), alternative_service, expiration); | 10190 url::SchemeHostPort(request.url), alternative_service, expiration); |
10188 | 10191 |
10189 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 10192 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
10190 TestCompletionCallback callback; | 10193 TestCompletionCallback callback; |
10191 | 10194 |
10192 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); | 10195 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); |
10193 // Alternative service is not used, request fails. | 10196 // Alternative service is not used, request fails. |
10194 EXPECT_THAT(callback.GetResult(rv), IsError(ERR_CONNECTION_REFUSED)); | 10197 EXPECT_THAT(callback.GetResult(rv), IsError(ERR_CONNECTION_REFUSED)); |
(...skipping 18 matching lines...) Expand all Loading... |
10213 MockRead(ASYNC, OK), | 10216 MockRead(ASYNC, OK), |
10214 }; | 10217 }; |
10215 StaticSocketDataProvider second_data(data_reads, arraysize(data_reads), NULL, | 10218 StaticSocketDataProvider second_data(data_reads, arraysize(data_reads), NULL, |
10216 0); | 10219 0); |
10217 session_deps_.socket_factory->AddSocketDataProvider(&second_data); | 10220 session_deps_.socket_factory->AddSocketDataProvider(&second_data); |
10218 | 10221 |
10219 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10222 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
10220 | 10223 |
10221 HttpServerProperties* http_server_properties = | 10224 HttpServerProperties* http_server_properties = |
10222 session->http_server_properties(); | 10225 session->http_server_properties(); |
10223 AlternativeService alternative_service(kProtoHTTP2, "", 444); | 10226 AlternativeService alternative_service( |
| 10227 AlternateProtocolFromNextProto(kProtoHTTP2), "", 444); |
10224 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 10228 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
10225 http_server_properties->SetAlternativeService( | 10229 http_server_properties->SetAlternativeService( |
10226 url::SchemeHostPort(request.url), alternative_service, expiration); | 10230 url::SchemeHostPort(request.url), alternative_service, expiration); |
10227 | 10231 |
10228 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 10232 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
10229 TestCompletionCallback callback; | 10233 TestCompletionCallback callback; |
10230 | 10234 |
10231 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); | 10235 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); |
10232 // Alternative service is not used, request fails. | 10236 // Alternative service is not used, request fails. |
10233 EXPECT_THAT(callback.GetResult(rv), IsError(ERR_CONNECTION_REFUSED)); | 10237 EXPECT_THAT(callback.GetResult(rv), IsError(ERR_CONNECTION_REFUSED)); |
10234 } | 10238 } |
10235 | 10239 |
10236 TEST_F(HttpNetworkTransactionTest, ClearAlternativeServices) { | 10240 TEST_F(HttpNetworkTransactionTest, ClearAlternativeServices) { |
10237 // Set an alternative service for origin. | 10241 // Set an alternative service for origin. |
10238 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10242 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
10239 HttpServerProperties* http_server_properties = | 10243 HttpServerProperties* http_server_properties = |
10240 session->http_server_properties(); | 10244 session->http_server_properties(); |
10241 url::SchemeHostPort test_server("https", "www.example.org", 443); | 10245 url::SchemeHostPort test_server("https", "www.example.org", 443); |
10242 AlternativeService alternative_service(kProtoQUIC, "", 80); | 10246 AlternativeService alternative_service(QUIC, "", 80); |
10243 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 10247 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
10244 http_server_properties->SetAlternativeService( | 10248 http_server_properties->SetAlternativeService( |
10245 test_server, alternative_service, expiration); | 10249 test_server, alternative_service, expiration); |
10246 AlternativeServiceVector alternative_service_vector = | 10250 AlternativeServiceVector alternative_service_vector = |
10247 http_server_properties->GetAlternativeServices(test_server); | 10251 http_server_properties->GetAlternativeServices(test_server); |
10248 EXPECT_EQ(1u, alternative_service_vector.size()); | 10252 EXPECT_EQ(1u, alternative_service_vector.size()); |
10249 | 10253 |
10250 // Send a clear header. | 10254 // Send a clear header. |
10251 MockRead data_reads[] = { | 10255 MockRead data_reads[] = { |
10252 MockRead("HTTP/1.1 200 OK\r\n"), | 10256 MockRead("HTTP/1.1 200 OK\r\n"), |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10331 EXPECT_FALSE(response->was_fetched_via_spdy); | 10335 EXPECT_FALSE(response->was_fetched_via_spdy); |
10332 EXPECT_FALSE(response->was_alpn_negotiated); | 10336 EXPECT_FALSE(response->was_alpn_negotiated); |
10333 | 10337 |
10334 std::string response_data; | 10338 std::string response_data; |
10335 ASSERT_THAT(ReadTransaction(&trans, &response_data), IsOk()); | 10339 ASSERT_THAT(ReadTransaction(&trans, &response_data), IsOk()); |
10336 EXPECT_EQ("hello world", response_data); | 10340 EXPECT_EQ("hello world", response_data); |
10337 | 10341 |
10338 alternative_service_vector = | 10342 alternative_service_vector = |
10339 http_server_properties->GetAlternativeServices(test_server); | 10343 http_server_properties->GetAlternativeServices(test_server); |
10340 ASSERT_EQ(2u, alternative_service_vector.size()); | 10344 ASSERT_EQ(2u, alternative_service_vector.size()); |
10341 EXPECT_EQ(kProtoHTTP2, alternative_service_vector[0].protocol); | 10345 EXPECT_EQ(AlternateProtocolFromNextProto(kProtoHTTP2), |
| 10346 alternative_service_vector[0].protocol); |
10342 EXPECT_EQ("www.example.com", alternative_service_vector[0].host); | 10347 EXPECT_EQ("www.example.com", alternative_service_vector[0].host); |
10343 EXPECT_EQ(443, alternative_service_vector[0].port); | 10348 EXPECT_EQ(443, alternative_service_vector[0].port); |
10344 EXPECT_EQ(kProtoHTTP2, alternative_service_vector[1].protocol); | 10349 EXPECT_EQ(AlternateProtocolFromNextProto(kProtoHTTP2), |
| 10350 alternative_service_vector[1].protocol); |
10345 EXPECT_EQ("www.example.org", alternative_service_vector[1].host); | 10351 EXPECT_EQ("www.example.org", alternative_service_vector[1].host); |
10346 EXPECT_EQ(1234, alternative_service_vector[1].port); | 10352 EXPECT_EQ(1234, alternative_service_vector[1].port); |
10347 } | 10353 } |
10348 | 10354 |
10349 TEST_F(HttpNetworkTransactionTest, IdentifyQuicBroken) { | 10355 TEST_F(HttpNetworkTransactionTest, IdentifyQuicBroken) { |
10350 url::SchemeHostPort server("https", "origin.example.org", 443); | 10356 url::SchemeHostPort server("https", "origin.example.org", 443); |
10351 HostPortPair alternative("alternative.example.org", 443); | 10357 HostPortPair alternative("alternative.example.org", 443); |
10352 std::string origin_url = "https://origin.example.org:443"; | 10358 std::string origin_url = "https://origin.example.org:443"; |
10353 std::string alternative_url = "https://alternative.example.org:443"; | 10359 std::string alternative_url = "https://alternative.example.org:443"; |
10354 | 10360 |
(...skipping 20 matching lines...) Expand all Loading... |
10375 session_deps_.socket_factory->AddSocketDataProvider(&http_data); | 10381 session_deps_.socket_factory->AddSocketDataProvider(&http_data); |
10376 | 10382 |
10377 StaticSocketDataProvider data_refused; | 10383 StaticSocketDataProvider data_refused; |
10378 data_refused.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_REFUSED)); | 10384 data_refused.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_REFUSED)); |
10379 session_deps_.socket_factory->AddSocketDataProvider(&data_refused); | 10385 session_deps_.socket_factory->AddSocketDataProvider(&data_refused); |
10380 | 10386 |
10381 // Set up a QUIC alternative service for server. | 10387 // Set up a QUIC alternative service for server. |
10382 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10388 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
10383 HttpServerProperties* http_server_properties = | 10389 HttpServerProperties* http_server_properties = |
10384 session->http_server_properties(); | 10390 session->http_server_properties(); |
10385 AlternativeService alternative_service(kProtoQUIC, alternative); | 10391 AlternativeService alternative_service(QUIC, alternative); |
10386 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 10392 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
10387 http_server_properties->SetAlternativeService(server, alternative_service, | 10393 http_server_properties->SetAlternativeService(server, alternative_service, |
10388 expiration); | 10394 expiration); |
10389 // Mark the QUIC alternative service as broken. | 10395 // Mark the QUIC alternative service as broken. |
10390 http_server_properties->MarkAlternativeServiceBroken(alternative_service); | 10396 http_server_properties->MarkAlternativeServiceBroken(alternative_service); |
10391 | 10397 |
10392 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 10398 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
10393 HttpRequestInfo request; | 10399 HttpRequestInfo request; |
10394 request.method = "GET"; | 10400 request.method = "GET"; |
10395 request.url = GURL(origin_url); | 10401 request.url = GURL(origin_url); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10437 session_deps_.socket_factory->AddSocketDataProvider(&data_refused); | 10443 session_deps_.socket_factory->AddSocketDataProvider(&data_refused); |
10438 | 10444 |
10439 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10445 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
10440 HttpServerProperties* http_server_properties = | 10446 HttpServerProperties* http_server_properties = |
10441 session->http_server_properties(); | 10447 session->http_server_properties(); |
10442 | 10448 |
10443 // Set up two QUIC alternative services for server. | 10449 // Set up two QUIC alternative services for server. |
10444 AlternativeServiceInfoVector alternative_service_info_vector; | 10450 AlternativeServiceInfoVector alternative_service_info_vector; |
10445 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 10451 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
10446 | 10452 |
10447 AlternativeService alternative_service1(kProtoQUIC, alternative1); | 10453 AlternativeService alternative_service1(QUIC, alternative1); |
10448 AlternativeServiceInfo alternative_service_info1(alternative_service1, | 10454 AlternativeServiceInfo alternative_service_info1(alternative_service1, |
10449 expiration); | 10455 expiration); |
10450 alternative_service_info_vector.push_back(alternative_service_info1); | 10456 alternative_service_info_vector.push_back(alternative_service_info1); |
10451 AlternativeService alternative_service2(kProtoQUIC, alternative2); | 10457 AlternativeService alternative_service2(QUIC, alternative2); |
10452 AlternativeServiceInfo alternative_service_info2(alternative_service2, | 10458 AlternativeServiceInfo alternative_service_info2(alternative_service2, |
10453 expiration); | 10459 expiration); |
10454 alternative_service_info_vector.push_back(alternative_service_info2); | 10460 alternative_service_info_vector.push_back(alternative_service_info2); |
10455 | 10461 |
10456 http_server_properties->SetAlternativeServices( | 10462 http_server_properties->SetAlternativeServices( |
10457 server, alternative_service_info_vector); | 10463 server, alternative_service_info_vector); |
10458 | 10464 |
10459 // Mark one of the QUIC alternative service as broken. | 10465 // Mark one of the QUIC alternative service as broken. |
10460 http_server_properties->MarkAlternativeServiceBroken(alternative_service1); | 10466 http_server_properties->MarkAlternativeServiceBroken(alternative_service1); |
10461 | 10467 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10498 session_deps_.socket_factory->AddSocketDataProvider(&second_data); | 10504 session_deps_.socket_factory->AddSocketDataProvider(&second_data); |
10499 | 10505 |
10500 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10506 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
10501 | 10507 |
10502 HttpServerProperties* http_server_properties = | 10508 HttpServerProperties* http_server_properties = |
10503 session->http_server_properties(); | 10509 session->http_server_properties(); |
10504 const url::SchemeHostPort server(request.url); | 10510 const url::SchemeHostPort server(request.url); |
10505 // Port must be < 1024, or the header will be ignored (since initial port was | 10511 // Port must be < 1024, or the header will be ignored (since initial port was |
10506 // port 80 (another restricted port). | 10512 // port 80 (another restricted port). |
10507 const AlternativeService alternative_service( | 10513 const AlternativeService alternative_service( |
10508 kProtoHTTP2, "www.example.org", | 10514 AlternateProtocolFromNextProto(kProtoHTTP2), "www.example.org", |
10509 666); // Port is ignored by MockConnect anyway. | 10515 666); // Port is ignored by MockConnect anyway. |
10510 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 10516 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
10511 http_server_properties->SetAlternativeService(server, alternative_service, | 10517 http_server_properties->SetAlternativeService(server, alternative_service, |
10512 expiration); | 10518 expiration); |
10513 | 10519 |
10514 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 10520 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
10515 TestCompletionCallback callback; | 10521 TestCompletionCallback callback; |
10516 | 10522 |
10517 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); | 10523 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); |
10518 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 10524 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10560 session_deps_.socket_factory->AddSocketDataProvider(&second_data); | 10566 session_deps_.socket_factory->AddSocketDataProvider(&second_data); |
10561 SSLSocketDataProvider ssl_http11(ASYNC, OK); | 10567 SSLSocketDataProvider ssl_http11(ASYNC, OK); |
10562 ssl_http11.next_proto = kProtoHTTP11; | 10568 ssl_http11.next_proto = kProtoHTTP11; |
10563 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11); | 10569 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11); |
10564 | 10570 |
10565 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10571 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
10566 | 10572 |
10567 HttpServerProperties* http_server_properties = | 10573 HttpServerProperties* http_server_properties = |
10568 session->http_server_properties(); | 10574 session->http_server_properties(); |
10569 const int kUnrestrictedAlternatePort = 1024; | 10575 const int kUnrestrictedAlternatePort = 1024; |
10570 AlternativeService alternative_service(kProtoHTTP2, "www.example.org", | 10576 AlternativeService alternative_service( |
10571 kUnrestrictedAlternatePort); | 10577 AlternateProtocolFromNextProto(kProtoHTTP2), "www.example.org", |
| 10578 kUnrestrictedAlternatePort); |
10572 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 10579 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
10573 http_server_properties->SetAlternativeService( | 10580 http_server_properties->SetAlternativeService( |
10574 url::SchemeHostPort(restricted_port_request.url), alternative_service, | 10581 url::SchemeHostPort(restricted_port_request.url), alternative_service, |
10575 expiration); | 10582 expiration); |
10576 | 10583 |
10577 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 10584 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
10578 TestCompletionCallback callback; | 10585 TestCompletionCallback callback; |
10579 | 10586 |
10580 int rv = trans.Start(&restricted_port_request, callback.callback(), | 10587 int rv = trans.Start(&restricted_port_request, callback.callback(), |
10581 NetLogWithSource()); | 10588 NetLogWithSource()); |
(...skipping 28 matching lines...) Expand all Loading... |
10610 session_deps_.socket_factory->AddSocketDataProvider(&second_data); | 10617 session_deps_.socket_factory->AddSocketDataProvider(&second_data); |
10611 SSLSocketDataProvider ssl_http11(ASYNC, OK); | 10618 SSLSocketDataProvider ssl_http11(ASYNC, OK); |
10612 ssl_http11.next_proto = kProtoHTTP11; | 10619 ssl_http11.next_proto = kProtoHTTP11; |
10613 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11); | 10620 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11); |
10614 | 10621 |
10615 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10622 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
10616 | 10623 |
10617 HttpServerProperties* http_server_properties = | 10624 HttpServerProperties* http_server_properties = |
10618 session->http_server_properties(); | 10625 session->http_server_properties(); |
10619 const int kUnrestrictedAlternatePort = 1024; | 10626 const int kUnrestrictedAlternatePort = 1024; |
10620 AlternativeService alternative_service(kProtoHTTP2, "www.example.org", | 10627 AlternativeService alternative_service( |
10621 kUnrestrictedAlternatePort); | 10628 AlternateProtocolFromNextProto(kProtoHTTP2), "www.example.org", |
| 10629 kUnrestrictedAlternatePort); |
10622 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 10630 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
10623 http_server_properties->SetAlternativeService( | 10631 http_server_properties->SetAlternativeService( |
10624 url::SchemeHostPort(restricted_port_request.url), alternative_service, | 10632 url::SchemeHostPort(restricted_port_request.url), alternative_service, |
10625 expiration); | 10633 expiration); |
10626 | 10634 |
10627 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 10635 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
10628 TestCompletionCallback callback; | 10636 TestCompletionCallback callback; |
10629 | 10637 |
10630 EXPECT_EQ(ERR_IO_PENDING, | 10638 EXPECT_EQ(ERR_IO_PENDING, |
10631 trans.Start(&restricted_port_request, callback.callback(), | 10639 trans.Start(&restricted_port_request, callback.callback(), |
(...skipping 27 matching lines...) Expand all Loading... |
10659 session_deps_.socket_factory->AddSocketDataProvider(&second_data); | 10667 session_deps_.socket_factory->AddSocketDataProvider(&second_data); |
10660 | 10668 |
10661 SSLSocketDataProvider ssl(ASYNC, OK); | 10669 SSLSocketDataProvider ssl(ASYNC, OK); |
10662 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 10670 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
10663 | 10671 |
10664 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10672 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
10665 | 10673 |
10666 HttpServerProperties* http_server_properties = | 10674 HttpServerProperties* http_server_properties = |
10667 session->http_server_properties(); | 10675 session->http_server_properties(); |
10668 const int kRestrictedAlternatePort = 80; | 10676 const int kRestrictedAlternatePort = 80; |
10669 AlternativeService alternative_service(kProtoHTTP2, "www.example.org", | 10677 AlternativeService alternative_service( |
10670 kRestrictedAlternatePort); | 10678 AlternateProtocolFromNextProto(kProtoHTTP2), "www.example.org", |
| 10679 kRestrictedAlternatePort); |
10671 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 10680 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
10672 http_server_properties->SetAlternativeService( | 10681 http_server_properties->SetAlternativeService( |
10673 url::SchemeHostPort(restricted_port_request.url), alternative_service, | 10682 url::SchemeHostPort(restricted_port_request.url), alternative_service, |
10674 expiration); | 10683 expiration); |
10675 | 10684 |
10676 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 10685 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
10677 TestCompletionCallback callback; | 10686 TestCompletionCallback callback; |
10678 | 10687 |
10679 int rv = trans.Start(&restricted_port_request, callback.callback(), | 10688 int rv = trans.Start(&restricted_port_request, callback.callback(), |
10680 NetLogWithSource()); | 10689 NetLogWithSource()); |
(...skipping 27 matching lines...) Expand all Loading... |
10708 session_deps_.socket_factory->AddSocketDataProvider(&second_data); | 10717 session_deps_.socket_factory->AddSocketDataProvider(&second_data); |
10709 SSLSocketDataProvider ssl_http11(ASYNC, OK); | 10718 SSLSocketDataProvider ssl_http11(ASYNC, OK); |
10710 ssl_http11.next_proto = kProtoHTTP11; | 10719 ssl_http11.next_proto = kProtoHTTP11; |
10711 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11); | 10720 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11); |
10712 | 10721 |
10713 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10722 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
10714 | 10723 |
10715 HttpServerProperties* http_server_properties = | 10724 HttpServerProperties* http_server_properties = |
10716 session->http_server_properties(); | 10725 session->http_server_properties(); |
10717 const int kRestrictedAlternatePort = 80; | 10726 const int kRestrictedAlternatePort = 80; |
10718 AlternativeService alternative_service(kProtoHTTP2, "www.example.org", | 10727 AlternativeService alternative_service( |
10719 kRestrictedAlternatePort); | 10728 AlternateProtocolFromNextProto(kProtoHTTP2), "www.example.org", |
| 10729 kRestrictedAlternatePort); |
10720 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 10730 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
10721 http_server_properties->SetAlternativeService( | 10731 http_server_properties->SetAlternativeService( |
10722 url::SchemeHostPort(unrestricted_port_request.url), alternative_service, | 10732 url::SchemeHostPort(unrestricted_port_request.url), alternative_service, |
10723 expiration); | 10733 expiration); |
10724 | 10734 |
10725 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 10735 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
10726 TestCompletionCallback callback; | 10736 TestCompletionCallback callback; |
10727 | 10737 |
10728 int rv = trans.Start(&unrestricted_port_request, callback.callback(), | 10738 int rv = trans.Start(&unrestricted_port_request, callback.callback(), |
10729 NetLogWithSource()); | 10739 NetLogWithSource()); |
(...skipping 27 matching lines...) Expand all Loading... |
10757 session_deps_.socket_factory->AddSocketDataProvider(&second_data); | 10767 session_deps_.socket_factory->AddSocketDataProvider(&second_data); |
10758 | 10768 |
10759 SSLSocketDataProvider ssl(ASYNC, OK); | 10769 SSLSocketDataProvider ssl(ASYNC, OK); |
10760 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 10770 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
10761 | 10771 |
10762 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10772 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
10763 | 10773 |
10764 HttpServerProperties* http_server_properties = | 10774 HttpServerProperties* http_server_properties = |
10765 session->http_server_properties(); | 10775 session->http_server_properties(); |
10766 const int kUnrestrictedAlternatePort = 1025; | 10776 const int kUnrestrictedAlternatePort = 1025; |
10767 AlternativeService alternative_service(kProtoHTTP2, "www.example.org", | 10777 AlternativeService alternative_service( |
10768 kUnrestrictedAlternatePort); | 10778 AlternateProtocolFromNextProto(kProtoHTTP2), "www.example.org", |
| 10779 kUnrestrictedAlternatePort); |
10769 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 10780 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
10770 http_server_properties->SetAlternativeService( | 10781 http_server_properties->SetAlternativeService( |
10771 url::SchemeHostPort(unrestricted_port_request.url), alternative_service, | 10782 url::SchemeHostPort(unrestricted_port_request.url), alternative_service, |
10772 expiration); | 10783 expiration); |
10773 | 10784 |
10774 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 10785 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
10775 TestCompletionCallback callback; | 10786 TestCompletionCallback callback; |
10776 | 10787 |
10777 int rv = trans.Start(&unrestricted_port_request, callback.callback(), | 10788 int rv = trans.Start(&unrestricted_port_request, callback.callback(), |
10778 NetLogWithSource()); | 10789 NetLogWithSource()); |
(...skipping 19 matching lines...) Expand all Loading... |
10798 }; | 10809 }; |
10799 StaticSocketDataProvider data( | 10810 StaticSocketDataProvider data( |
10800 data_reads, arraysize(data_reads), NULL, 0); | 10811 data_reads, arraysize(data_reads), NULL, 0); |
10801 session_deps_.socket_factory->AddSocketDataProvider(&data); | 10812 session_deps_.socket_factory->AddSocketDataProvider(&data); |
10802 | 10813 |
10803 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10814 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
10804 | 10815 |
10805 HttpServerProperties* http_server_properties = | 10816 HttpServerProperties* http_server_properties = |
10806 session->http_server_properties(); | 10817 session->http_server_properties(); |
10807 const int kUnsafePort = 7; | 10818 const int kUnsafePort = 7; |
10808 AlternativeService alternative_service(kProtoHTTP2, "www.example.org", | 10819 AlternativeService alternative_service( |
10809 kUnsafePort); | 10820 AlternateProtocolFromNextProto(kProtoHTTP2), "www.example.org", |
| 10821 kUnsafePort); |
10810 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 10822 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
10811 http_server_properties->SetAlternativeService( | 10823 http_server_properties->SetAlternativeService( |
10812 url::SchemeHostPort(request.url), alternative_service, expiration); | 10824 url::SchemeHostPort(request.url), alternative_service, expiration); |
10813 | 10825 |
10814 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 10826 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
10815 TestCompletionCallback callback; | 10827 TestCompletionCallback callback; |
10816 | 10828 |
10817 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); | 10829 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); |
10818 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 10830 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
10819 // The HTTP request should succeed. | 10831 // The HTTP request should succeed. |
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11157 | 11169 |
11158 session_deps_.net_log = &net_log; | 11170 session_deps_.net_log = &net_log; |
11159 | 11171 |
11160 // Configure alternative service with a hostname that is not bypassed by the | 11172 // Configure alternative service with a hostname that is not bypassed by the |
11161 // proxy. | 11173 // proxy. |
11162 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 11174 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
11163 HttpServerProperties* http_server_properties = | 11175 HttpServerProperties* http_server_properties = |
11164 session->http_server_properties(); | 11176 session->http_server_properties(); |
11165 url::SchemeHostPort server("https", "www.example.org", 443); | 11177 url::SchemeHostPort server("https", "www.example.org", 443); |
11166 HostPortPair alternative("www.example.com", 443); | 11178 HostPortPair alternative("www.example.com", 443); |
11167 AlternativeService alternative_service(kProtoHTTP2, alternative); | 11179 AlternativeService alternative_service( |
| 11180 AlternateProtocolFromNextProto(kProtoHTTP2), alternative); |
11168 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 11181 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
11169 http_server_properties->SetAlternativeService(server, alternative_service, | 11182 http_server_properties->SetAlternativeService(server, alternative_service, |
11170 expiration); | 11183 expiration); |
11171 | 11184 |
11172 // Non-alternative job should hang. | 11185 // Non-alternative job should hang. |
11173 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); | 11186 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); |
11174 StaticSocketDataProvider hanging_alternate_protocol_socket(nullptr, 0, | 11187 StaticSocketDataProvider hanging_alternate_protocol_socket(nullptr, 0, |
11175 nullptr, 0); | 11188 nullptr, 0); |
11176 hanging_alternate_protocol_socket.set_connect_data(never_finishing_connect); | 11189 hanging_alternate_protocol_socket.set_connect_data(never_finishing_connect); |
11177 session_deps_.socket_factory->AddSocketDataProvider( | 11190 session_deps_.socket_factory->AddSocketDataProvider( |
(...skipping 2507 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13685 // negotiated. In order to test this, a failed connection to the server is | 13698 // negotiated. In order to test this, a failed connection to the server is |
13686 // mocked. This way the request relies on the alternate Job. | 13699 // mocked. This way the request relies on the alternate Job. |
13687 StaticSocketDataProvider data_refused; | 13700 StaticSocketDataProvider data_refused; |
13688 data_refused.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_REFUSED)); | 13701 data_refused.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_REFUSED)); |
13689 session_deps_.socket_factory->AddSocketDataProvider(&data_refused); | 13702 session_deps_.socket_factory->AddSocketDataProvider(&data_refused); |
13690 | 13703 |
13691 // Set up alternative service for server. | 13704 // Set up alternative service for server. |
13692 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 13705 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
13693 HttpServerProperties* http_server_properties = | 13706 HttpServerProperties* http_server_properties = |
13694 session->http_server_properties(); | 13707 session->http_server_properties(); |
13695 AlternativeService alternative_service(kProtoHTTP2, alternative); | 13708 AlternativeService alternative_service( |
| 13709 AlternateProtocolFromNextProto(kProtoHTTP2), alternative); |
13696 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 13710 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
13697 http_server_properties->SetAlternativeService(server, alternative_service, | 13711 http_server_properties->SetAlternativeService(server, alternative_service, |
13698 expiration); | 13712 expiration); |
13699 | 13713 |
13700 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 13714 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
13701 HttpRequestInfo request; | 13715 HttpRequestInfo request; |
13702 request.method = "GET"; | 13716 request.method = "GET"; |
13703 request.url = GURL("https://www.example.org:443"); | 13717 request.url = GURL("https://www.example.org:443"); |
13704 TestCompletionCallback callback; | 13718 TestCompletionCallback callback; |
13705 | 13719 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13752 MockRead("another"), | 13766 MockRead("another"), |
13753 }; | 13767 }; |
13754 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), | 13768 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), |
13755 http_writes, arraysize(http_writes)); | 13769 http_writes, arraysize(http_writes)); |
13756 session_deps_.socket_factory->AddSocketDataProvider(&http_data); | 13770 session_deps_.socket_factory->AddSocketDataProvider(&http_data); |
13757 | 13771 |
13758 // Set up alternative service for server. | 13772 // Set up alternative service for server. |
13759 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 13773 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
13760 HttpServerProperties* http_server_properties = | 13774 HttpServerProperties* http_server_properties = |
13761 session->http_server_properties(); | 13775 session->http_server_properties(); |
13762 AlternativeService alternative_service(kProtoHTTP2, alternative); | 13776 AlternativeService alternative_service( |
| 13777 AlternateProtocolFromNextProto(kProtoHTTP2), alternative); |
13763 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 13778 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
13764 http_server_properties->SetAlternativeService(server, alternative_service, | 13779 http_server_properties->SetAlternativeService(server, alternative_service, |
13765 expiration); | 13780 expiration); |
13766 | 13781 |
13767 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); | 13782 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); |
13768 HttpRequestInfo request1; | 13783 HttpRequestInfo request1; |
13769 request1.method = "GET"; | 13784 request1.method = "GET"; |
13770 request1.url = GURL("https://www.example.org:443"); | 13785 request1.url = GURL("https://www.example.org:443"); |
13771 request1.load_flags = 0; | 13786 request1.load_flags = 0; |
13772 TestCompletionCallback callback1; | 13787 TestCompletionCallback callback1; |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13859 // existing HTTP/1.1 connection. In order to test this, a failed connection | 13874 // existing HTTP/1.1 connection. In order to test this, a failed connection |
13860 // to the server is mocked. This way |request2| relies on the alternate Job. | 13875 // to the server is mocked. This way |request2| relies on the alternate Job. |
13861 StaticSocketDataProvider data_refused; | 13876 StaticSocketDataProvider data_refused; |
13862 data_refused.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_REFUSED)); | 13877 data_refused.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_REFUSED)); |
13863 session_deps_.socket_factory->AddSocketDataProvider(&data_refused); | 13878 session_deps_.socket_factory->AddSocketDataProvider(&data_refused); |
13864 | 13879 |
13865 // Set up alternative service for server. | 13880 // Set up alternative service for server. |
13866 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 13881 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
13867 HttpServerProperties* http_server_properties = | 13882 HttpServerProperties* http_server_properties = |
13868 session->http_server_properties(); | 13883 session->http_server_properties(); |
13869 AlternativeService alternative_service(kProtoHTTP2, alternative); | 13884 AlternativeService alternative_service( |
| 13885 AlternateProtocolFromNextProto(kProtoHTTP2), alternative); |
13870 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 13886 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
13871 http_server_properties->SetAlternativeService(server, alternative_service, | 13887 http_server_properties->SetAlternativeService(server, alternative_service, |
13872 expiration); | 13888 expiration); |
13873 | 13889 |
13874 // First transaction to alternative to open an HTTP/1.1 socket. | 13890 // First transaction to alternative to open an HTTP/1.1 socket. |
13875 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); | 13891 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); |
13876 HttpRequestInfo request1; | 13892 HttpRequestInfo request1; |
13877 request1.method = "GET"; | 13893 request1.method = "GET"; |
13878 request1.url = GURL(alternative_url); | 13894 request1.url = GURL(alternative_url); |
13879 request1.load_flags = 0; | 13895 request1.load_flags = 0; |
(...skipping 2500 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16380 base::RunLoop().RunUntilIdle(); | 16396 base::RunLoop().RunUntilIdle(); |
16381 | 16397 |
16382 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); | 16398 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); |
16383 HttpRequestHeaders headers; | 16399 HttpRequestHeaders headers; |
16384 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); | 16400 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); |
16385 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding)); | 16401 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding)); |
16386 } | 16402 } |
16387 #endif // !defined(OS_IOS) | 16403 #endif // !defined(OS_IOS) |
16388 | 16404 |
16389 } // namespace net | 16405 } // namespace net |
OLD | NEW |