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