Chromium Code Reviews| Index: net/http/http_network_transaction_unittest.cc |
| diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc |
| index 0a70755c9e0ac192d39df51910a8cffb689b01ef..a4b3592fff8152f6689d4c8836d1a0d5d424b323 100644 |
| --- a/net/http/http_network_transaction_unittest.cc |
| +++ b/net/http/http_network_transaction_unittest.cc |
| @@ -285,6 +285,7 @@ class HttpNetworkTransactionTest |
| old_max_pool_sockets_(ClientSocketPoolManager::max_sockets_per_pool( |
| HttpNetworkSession::NORMAL_SOCKET_POOL)) { |
| session_deps_.enable_priority_dependencies = GetDependenciesFromPriority(); |
| + session_deps_.enable_http2_alternative_service_with_different_host = true; |
| } |
| struct SimpleGetHelperResult { |
| @@ -328,7 +329,7 @@ class HttpNetworkTransactionTest |
| std::string GetAlternativeServiceHttpHeader() { |
| return std::string("Alt-Svc: ") + GetAlternateProtocolFromParam() + |
| - "=\"www.example.org:443\"\r\n"; |
| + "=\"mail.example.org:443\"\r\n"; |
| } |
| // Either |write_failure| specifies a write failure or |read_failure| |
| @@ -4511,7 +4512,7 @@ TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyGet) { |
| // fetch http://www.example.org/ via SPDY |
| std::unique_ptr<SpdySerializedFrame> req( |
| - spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, false)); |
| + spdy_util_.ConstructSpdyGet("http://www.example.org/", 1, LOWEST)); |
| MockWrite spdy_writes[] = {CreateMockWrite(*req, 0)}; |
| std::unique_ptr<SpdySerializedFrame> resp( |
| @@ -4573,7 +4574,7 @@ TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyGetWithSessionRace) { |
| // Fetch http://www.example.org/ through the SPDY proxy. |
| std::unique_ptr<SpdySerializedFrame> req( |
| - spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, false)); |
| + spdy_util_.ConstructSpdyGet("http://www.example.org/", 1, LOWEST)); |
| MockWrite spdy_writes[] = {CreateMockWrite(*req, 0)}; |
| std::unique_ptr<SpdySerializedFrame> resp( |
| @@ -4644,6 +4645,7 @@ TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyGetWithProxyAuth) { |
| // The first request will be a bare GET, the second request will be a |
| // GET with a Proxy-Authorization header. |
| + spdy_util_.set_default_url(request.url); |
| std::unique_ptr<SpdySerializedFrame> req_get( |
| spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, false)); |
| spdy_util_.UpdateWithStreamDestruction(1); |
| @@ -8013,7 +8015,7 @@ TEST_P(HttpNetworkTransactionTest, CrossOriginSPDYProxyPush) { |
| std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| std::unique_ptr<SpdySerializedFrame> stream1_syn( |
| - spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, false)); |
| + spdy_util_.ConstructSpdyGet("http://www.example.org/", 1, LOWEST)); |
| MockWrite spdy_writes[] = { |
| CreateMockWrite(*stream1_syn, 0, ASYNC), |
| @@ -8126,7 +8128,7 @@ TEST_P(HttpNetworkTransactionTest, CrossOriginProxyPushCorrectness) { |
| std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| std::unique_ptr<SpdySerializedFrame> stream1_syn( |
| - spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, false)); |
| + spdy_util_.ConstructSpdyGet("http://www.example.org/", 1, LOWEST)); |
| std::unique_ptr<SpdySerializedFrame> push_rst( |
| spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); |
| @@ -8208,7 +8210,7 @@ TEST_P(HttpNetworkTransactionTest, SameOriginProxyPushCorrectness) { |
| std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| std::unique_ptr<SpdySerializedFrame> stream1_syn( |
| - spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, false)); |
| + spdy_util_.ConstructSpdyGet("http://www.example.org/", 1, LOWEST)); |
| MockWrite spdy_writes[] = { |
| CreateMockWrite(*stream1_syn, 0, ASYNC), |
| @@ -9953,13 +9955,15 @@ TEST_P(HttpNetworkTransactionTest, HonorAlternativeServiceHeader) { |
| HttpRequestInfo request; |
| request.method = "GET"; |
| - request.url = GURL("http://www.example.org/"); |
| + request.url = GURL("https://www.example.org/"); |
| request.load_flags = 0; |
| StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| - |
| session_deps_.socket_factory->AddSocketDataProvider(&data); |
| + SSLSocketDataProvider ssl(ASYNC, OK); |
| + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| + |
| TestCompletionCallback callback; |
| std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| @@ -9969,7 +9973,7 @@ TEST_P(HttpNetworkTransactionTest, HonorAlternativeServiceHeader) { |
| int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| - url::SchemeHostPort test_server("http", "www.example.org", 80); |
| + url::SchemeHostPort test_server(request.url); |
| HttpServerProperties* http_server_properties = |
| session->http_server_properties(); |
| AlternativeServiceVector alternative_service_vector = |
| @@ -9994,15 +9998,13 @@ TEST_P(HttpNetworkTransactionTest, HonorAlternativeServiceHeader) { |
| ASSERT_EQ(1u, alternative_service_vector.size()); |
| EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()), |
| alternative_service_vector[0].protocol); |
| - EXPECT_EQ("www.example.org", alternative_service_vector[0].host); |
| + EXPECT_EQ("mail.example.org", alternative_service_vector[0].host); |
| EXPECT_EQ(443, alternative_service_vector[0].port); |
| } |
| // Regression test for https://crbug.com/615497. |
| TEST_P(HttpNetworkTransactionTest, |
| DoNotParseAlternativeServiceHeaderOnInsecureRequest) { |
| - session_deps_.enable_alternative_service_for_insecure_origins = false; |
| - |
| std::string alternative_service_http_header = |
| GetAlternativeServiceHttpHeader(); |
| @@ -10060,15 +10062,20 @@ TEST_P(HttpNetworkTransactionTest, |
| // TODO(bnc): Remove when https://crbug.com/615413 is fixed. |
| TEST_P(HttpNetworkTransactionTest, |
| DisableHTTP2AlternativeServicesWithDifferentHost) { |
| + session_deps_.enable_http2_alternative_service_with_different_host = false; |
| + |
| HttpRequestInfo request; |
| request.method = "GET"; |
| - request.url = GURL("http://www.example.org/"); |
| + request.url = GURL("https://www.example.org/"); |
| request.load_flags = 0; |
| MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
| StaticSocketDataProvider first_data; |
| first_data.set_connect_data(mock_connect); |
| session_deps_.socket_factory->AddSocketDataProvider(&first_data); |
| + SSLSocketDataProvider ssl_http11(ASYNC, OK); |
| + ssl_http11.SetNextProto(kProtoHTTP11); |
| + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11); |
| MockRead data_reads[] = { |
| MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"), |
| @@ -10102,8 +10109,6 @@ TEST_P(HttpNetworkTransactionTest, |
| // Alternative Services should be disabled for http origin. |
| TEST_P(HttpNetworkTransactionTest, |
| DisableAlternativeServicesForInsecureOrigin) { |
| - session_deps_.enable_alternative_service_for_insecure_origins = false; |
| - |
| HttpRequestInfo request; |
| request.method = "GET"; |
| request.url = GURL("http://www.example.org/"); |
| @@ -10146,7 +10151,7 @@ TEST_P(HttpNetworkTransactionTest, ClearAlternativeServices) { |
| std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| HttpServerProperties* http_server_properties = |
| session->http_server_properties(); |
| - url::SchemeHostPort test_server("http", "www.example.org", 80); |
| + url::SchemeHostPort test_server("https", "www.example.org", 443); |
| AlternativeService alternative_service(QUIC, "", 80); |
| base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| http_server_properties->SetAlternativeService( |
| @@ -10166,9 +10171,12 @@ TEST_P(HttpNetworkTransactionTest, ClearAlternativeServices) { |
| StaticSocketDataProvider data(data_reads, arraysize(data_reads), nullptr, 0); |
| session_deps_.socket_factory->AddSocketDataProvider(&data); |
| + SSLSocketDataProvider ssl(ASYNC, OK); |
| + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| + |
| HttpRequestInfo request; |
| request.method = "GET"; |
| - request.url = GURL("http://www.example.org/"); |
| + request.url = GURL("https://www.example.org/"); |
| request.load_flags = 0; |
| TestCompletionCallback callback; |
| @@ -10195,12 +10203,12 @@ TEST_P(HttpNetworkTransactionTest, ClearAlternativeServices) { |
| EXPECT_TRUE(alternative_service_vector.empty()); |
| } |
| -TEST_P(HttpNetworkTransactionTest, HonorMultipleAlternativeServiceHeader) { |
| +TEST_P(HttpNetworkTransactionTest, HonorMultipleAlternativeServiceHeaders) { |
| MockRead data_reads[] = { |
| MockRead("HTTP/1.1 200 OK\r\n"), |
| MockRead("Alt-Svc: "), |
| MockRead(GetAlternateProtocolFromParam()), |
| - MockRead("=\"www.example.com:443\";p=\"1.0\","), |
| + MockRead("=\"www.example.com:443\","), |
| MockRead(GetAlternateProtocolFromParam()), |
| MockRead("=\":1234\"\r\n\r\n"), |
| MockRead("hello world"), |
| @@ -10209,13 +10217,15 @@ TEST_P(HttpNetworkTransactionTest, HonorMultipleAlternativeServiceHeader) { |
| HttpRequestInfo request; |
| request.method = "GET"; |
| - request.url = GURL("http://www.example.org/"); |
| + request.url = GURL("https://www.example.org/"); |
| request.load_flags = 0; |
| StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| - |
| session_deps_.socket_factory->AddSocketDataProvider(&data); |
| + SSLSocketDataProvider ssl(ASYNC, OK); |
| + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| + |
| TestCompletionCallback callback; |
| std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| @@ -10225,7 +10235,7 @@ TEST_P(HttpNetworkTransactionTest, HonorMultipleAlternativeServiceHeader) { |
| int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| - url::SchemeHostPort test_server("http", "www.example.org", 80); |
| + url::SchemeHostPort test_server("https", "www.example.org", 443); |
| HttpServerProperties* http_server_properties = |
| session->http_server_properties(); |
| AlternativeServiceVector alternative_service_vector = |
| @@ -10258,51 +10268,6 @@ TEST_P(HttpNetworkTransactionTest, HonorMultipleAlternativeServiceHeader) { |
| EXPECT_EQ(1234, alternative_service_vector[1].port); |
| } |
| -// When |enable_http2_alternative_service_with_different_host| is false, do not |
| -// observe alternative service entries that point to a different host. |
| -TEST_P(HttpNetworkTransactionTest, DisableAlternativeServiceToDifferentHost) { |
|
Bence
2016/06/28 20:09:20
After changing to https, this is totally redundant
|
| - session_deps_.enable_http2_alternative_service_with_different_host = false; |
| - |
| - HttpRequestInfo request; |
| - request.method = "GET"; |
| - request.url = GURL("http://www.example.org/"); |
| - request.load_flags = 0; |
| - |
| - MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
| - StaticSocketDataProvider first_data; |
| - first_data.set_connect_data(mock_connect); |
| - session_deps_.socket_factory->AddSocketDataProvider(&first_data); |
| - |
| - MockRead data_reads[] = { |
| - MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"), |
| - MockRead(ASYNC, OK), |
| - }; |
| - StaticSocketDataProvider second_data(data_reads, arraysize(data_reads), |
| - nullptr, 0); |
| - session_deps_.socket_factory->AddSocketDataProvider(&second_data); |
| - |
| - std::unique_ptr<HttpNetworkSession> session = CreateSession(&session_deps_); |
| - |
| - HttpServerProperties* http_server_properties = |
| - session->http_server_properties(); |
| - AlternativeService alternative_service( |
| - AlternateProtocolFromNextProto(GetProtocol()), "different.example.org", |
| - 80); |
| - base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| - http_server_properties->SetAlternativeService( |
| - url::SchemeHostPort(request.url), alternative_service, expiration); |
| - |
| - std::unique_ptr<HttpTransaction> trans( |
| - new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| - TestCompletionCallback callback; |
| - |
| - int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| - // The connetion to origin was refused, and the alternative service should not |
| - // be used (even though mock data are there), therefore the request should |
| - // fail. |
| - EXPECT_EQ(ERR_CONNECTION_REFUSED, callback.GetResult(rv)); |
| -} |
| - |
| TEST_P(HttpNetworkTransactionTest, IdentifyQuicBroken) { |
| url::SchemeHostPort server("https", "origin.example.org", 443); |
| HostPortPair alternative("alternative.example.org", 443); |
| @@ -10440,13 +10405,16 @@ TEST_P(HttpNetworkTransactionTest, |
| MarkBrokenAlternateProtocolAndFallback) { |
| HttpRequestInfo request; |
| request.method = "GET"; |
| - request.url = GURL("http://www.example.org/"); |
| + request.url = GURL("https://www.example.org/"); |
| request.load_flags = 0; |
| MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
| StaticSocketDataProvider first_data; |
| first_data.set_connect_data(mock_connect); |
| session_deps_.socket_factory->AddSocketDataProvider(&first_data); |
| + SSLSocketDataProvider ssl_http11(ASYNC, OK); |
| + ssl_http11.SetNextProto(kProtoHTTP11); |
| + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11); |
| MockRead data_reads[] = { |
| MockRead("HTTP/1.1 200 OK\r\n\r\n"), |
| @@ -10504,7 +10472,7 @@ TEST_P(HttpNetworkTransactionTest, |
| AlternateProtocolPortRestrictedBlocked) { |
| HttpRequestInfo restricted_port_request; |
| restricted_port_request.method = "GET"; |
| - restricted_port_request.url = GURL("http://www.example.org:1023/"); |
| + restricted_port_request.url = GURL("https://www.example.org:1023/"); |
| restricted_port_request.load_flags = 0; |
| MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
| @@ -10520,6 +10488,9 @@ TEST_P(HttpNetworkTransactionTest, |
| StaticSocketDataProvider second_data( |
| data_reads, arraysize(data_reads), NULL, 0); |
| session_deps_.socket_factory->AddSocketDataProvider(&second_data); |
| + SSLSocketDataProvider ssl_http11(ASYNC, OK); |
| + ssl_http11.SetNextProto(kProtoHTTP11); |
| + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11); |
| std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| @@ -10555,7 +10526,7 @@ TEST_P(HttpNetworkTransactionTest, |
| HttpRequestInfo restricted_port_request; |
| restricted_port_request.method = "GET"; |
| - restricted_port_request.url = GURL("http://www.example.org:1023/"); |
| + restricted_port_request.url = GURL("https://www.example.org:1023/"); |
| restricted_port_request.load_flags = 0; |
| MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
| @@ -10571,6 +10542,9 @@ TEST_P(HttpNetworkTransactionTest, |
| StaticSocketDataProvider second_data( |
| data_reads, arraysize(data_reads), NULL, 0); |
| session_deps_.socket_factory->AddSocketDataProvider(&second_data); |
| + SSLSocketDataProvider ssl_http11(ASYNC, OK); |
| + ssl_http11.SetNextProto(kProtoHTTP11); |
| + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11); |
| std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| @@ -10604,7 +10578,7 @@ TEST_P(HttpNetworkTransactionTest, |
| AlternateProtocolPortRestrictedAllowed) { |
| HttpRequestInfo restricted_port_request; |
| restricted_port_request.method = "GET"; |
| - restricted_port_request.url = GURL("http://www.example.org:1023/"); |
| + restricted_port_request.url = GURL("https://www.example.org:1023/"); |
| restricted_port_request.load_flags = 0; |
| MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
| @@ -10621,6 +10595,9 @@ TEST_P(HttpNetworkTransactionTest, |
| data_reads, arraysize(data_reads), NULL, 0); |
| session_deps_.socket_factory->AddSocketDataProvider(&second_data); |
| + SSLSocketDataProvider ssl(ASYNC, OK); |
| + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| + |
| std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| HttpServerProperties* http_server_properties = |
| @@ -10654,7 +10631,7 @@ TEST_P(HttpNetworkTransactionTest, |
| AlternateProtocolPortUnrestrictedAllowed1) { |
| HttpRequestInfo unrestricted_port_request; |
| unrestricted_port_request.method = "GET"; |
| - unrestricted_port_request.url = GURL("http://www.example.org:1024/"); |
| + unrestricted_port_request.url = GURL("https://www.example.org:1024/"); |
| unrestricted_port_request.load_flags = 0; |
| MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
| @@ -10670,6 +10647,9 @@ TEST_P(HttpNetworkTransactionTest, |
| StaticSocketDataProvider second_data( |
| data_reads, arraysize(data_reads), NULL, 0); |
| session_deps_.socket_factory->AddSocketDataProvider(&second_data); |
| + SSLSocketDataProvider ssl_http11(ASYNC, OK); |
| + ssl_http11.SetNextProto(kProtoHTTP11); |
| + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11); |
| std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| @@ -10703,7 +10683,7 @@ TEST_P(HttpNetworkTransactionTest, |
| AlternateProtocolPortUnrestrictedAllowed2) { |
| HttpRequestInfo unrestricted_port_request; |
| unrestricted_port_request.method = "GET"; |
| - unrestricted_port_request.url = GURL("http://www.example.org:1024/"); |
| + unrestricted_port_request.url = GURL("https://www.example.org:1024/"); |
| unrestricted_port_request.load_flags = 0; |
| MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
| @@ -10720,6 +10700,9 @@ TEST_P(HttpNetworkTransactionTest, |
| data_reads, arraysize(data_reads), NULL, 0); |
| session_deps_.socket_factory->AddSocketDataProvider(&second_data); |
| + SSLSocketDataProvider ssl(ASYNC, OK); |
| + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| + |
| std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| HttpServerProperties* http_server_properties = |
| @@ -10798,7 +10781,7 @@ TEST_P(HttpNetworkTransactionTest, AlternateProtocolUnsafeBlocked) { |
| TEST_P(HttpNetworkTransactionTest, UseAlternateProtocolForNpnSpdy) { |
| HttpRequestInfo request; |
| request.method = "GET"; |
| - request.url = GURL("http://www.example.org/"); |
| + request.url = GURL("https://www.example.org/"); |
| request.load_flags = 0; |
| std::string alternative_service_http_header = |
| @@ -10815,15 +10798,19 @@ TEST_P(HttpNetworkTransactionTest, UseAlternateProtocolForNpnSpdy) { |
| StaticSocketDataProvider first_transaction( |
| data_reads, arraysize(data_reads), NULL, 0); |
| session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); |
| + SSLSocketDataProvider ssl_http11(ASYNC, OK); |
| + ssl_http11.SetNextProto(kProtoHTTP11); |
| + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11); |
| - SSLSocketDataProvider ssl(ASYNC, OK); |
| - ssl.SetNextProto(GetProtocol()); |
| - ssl.cert = ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
| - ASSERT_TRUE(ssl.cert.get()); |
| - session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| + SSLSocketDataProvider ssl_http2(ASYNC, OK); |
| + ssl_http2.SetNextProto(GetProtocol()); |
| + ssl_http2.cert = |
| + ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
| + ASSERT_TRUE(ssl_http2.cert.get()); |
| + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http2); |
| std::unique_ptr<SpdySerializedFrame> req( |
| - spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| + spdy_util_.ConstructSpdyGet("https://www.example.org/", 1, LOWEST)); |
| MockWrite spdy_writes[] = {CreateMockWrite(*req, 0)}; |
| std::unique_ptr<SpdySerializedFrame> resp( |
| @@ -10885,9 +10872,10 @@ TEST_P(HttpNetworkTransactionTest, UseAlternateProtocolForNpnSpdy) { |
| TEST_P(HttpNetworkTransactionTest, AlternateProtocolWithSpdyLateBinding) { |
| HttpRequestInfo request; |
| request.method = "GET"; |
| - request.url = GURL("http://www.example.org/"); |
| + request.url = GURL("https://www.example.org/"); |
| request.load_flags = 0; |
| + // First transaction receives Alt-Svc header over HTTP/1.1. |
| std::string alternative_service_http_header = |
| GetAlternativeServiceHttpHeader(); |
| @@ -10900,32 +10888,31 @@ TEST_P(HttpNetworkTransactionTest, AlternateProtocolWithSpdyLateBinding) { |
| MockRead(ASYNC, OK), |
| }; |
| - StaticSocketDataProvider first_transaction( |
| - data_reads, arraysize(data_reads), NULL, 0); |
| - // Socket 1 is the HTTP transaction with the Alternate-Protocol header. |
| - session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); |
| + StaticSocketDataProvider http11_data(data_reads, arraysize(data_reads), NULL, |
| + 0); |
| + session_deps_.socket_factory->AddSocketDataProvider(&http11_data); |
| + |
| + SSLSocketDataProvider ssl_http11(ASYNC, OK); |
| + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11); |
| + // Second transaction starts an alternative and a non-alternative Job. |
| + // Both sockets hang. |
| MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); |
| StaticSocketDataProvider hanging_socket1(NULL, 0, NULL, 0); |
| hanging_socket1.set_connect_data(never_finishing_connect); |
| - // Socket 2 and 3 are the hanging Alternate-Protocol and |
| - // non-Alternate-Protocol jobs from the 2nd transaction. |
| session_deps_.socket_factory->AddSocketDataProvider(&hanging_socket1); |
| StaticSocketDataProvider hanging_socket2(NULL, 0, NULL, 0); |
| hanging_socket2.set_connect_data(never_finishing_connect); |
| session_deps_.socket_factory->AddSocketDataProvider(&hanging_socket2); |
| - SSLSocketDataProvider ssl(ASYNC, OK); |
| - ssl.SetNextProto(GetProtocol()); |
| - ssl.cert = ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
| - ASSERT_TRUE(ssl.cert); |
| - session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| - |
| + // Third transaction starts an alternative and a non-alternative job. |
| + // The non-alternative job hangs, but the alternative one succeeds. |
| + // The second transaction, still pending, binds to this socket. |
| std::unique_ptr<SpdySerializedFrame> req1( |
| - spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| + spdy_util_.ConstructSpdyGet("https://www.example.org/", 1, LOWEST)); |
| std::unique_ptr<SpdySerializedFrame> req2( |
| - spdy_util_.ConstructSpdyGet(nullptr, 0, 3, LOWEST, true)); |
| + spdy_util_.ConstructSpdyGet("https://www.example.org/", 3, LOWEST)); |
| MockWrite spdy_writes[] = { |
| CreateMockWrite(*req1, 0), CreateMockWrite(*req2, 1), |
| }; |
| @@ -10947,10 +10934,15 @@ TEST_P(HttpNetworkTransactionTest, AlternateProtocolWithSpdyLateBinding) { |
| SequencedSocketData spdy_data(spdy_reads, arraysize(spdy_reads), spdy_writes, |
| arraysize(spdy_writes)); |
| - // Socket 4 is the successful Alternate-Protocol for transaction 3. |
| session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
| - // Socket 5 is the unsuccessful non-Alternate-Protocol for transaction 3. |
| + SSLSocketDataProvider ssl_http2(ASYNC, OK); |
| + ssl_http2.SetNextProto(GetProtocol()); |
| + ssl_http2.cert = |
| + ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
| + ASSERT_TRUE(ssl_http2.cert); |
| + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http2); |
| + |
| StaticSocketDataProvider hanging_socket3(NULL, 0, NULL, 0); |
| hanging_socket3.set_connect_data(never_finishing_connect); |
| session_deps_.socket_factory->AddSocketDataProvider(&hanging_socket3); |
| @@ -11007,7 +10999,7 @@ TEST_P(HttpNetworkTransactionTest, AlternateProtocolWithSpdyLateBinding) { |
| TEST_P(HttpNetworkTransactionTest, StallAlternativeServiceForNpnSpdy) { |
| HttpRequestInfo request; |
| request.method = "GET"; |
| - request.url = GURL("http://www.example.org/"); |
| + request.url = GURL("https://www.example.org/"); |
| request.load_flags = 0; |
| std::string alternative_service_http_header = |
| @@ -11027,7 +11019,6 @@ TEST_P(HttpNetworkTransactionTest, StallAlternativeServiceForNpnSpdy) { |
| session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); |
| SSLSocketDataProvider ssl(ASYNC, OK); |
| - ssl.SetNextProto(GetProtocol()); |
| session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); |
| @@ -11038,10 +11029,11 @@ TEST_P(HttpNetworkTransactionTest, StallAlternativeServiceForNpnSpdy) { |
| session_deps_.socket_factory->AddSocketDataProvider( |
| &hanging_alternate_protocol_socket); |
| - // 2nd request is just a copy of the first one, over HTTP again. |
| + // 2nd request is just a copy of the first one, over HTTP/1.1 again. |
| StaticSocketDataProvider second_transaction(data_reads, arraysize(data_reads), |
| NULL, 0); |
| session_deps_.socket_factory->AddSocketDataProvider(&second_transaction); |
| + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| TestCompletionCallback callback; |
| @@ -11145,7 +11137,7 @@ TEST_P(HttpNetworkTransactionTest, UseAlternativeServiceForTunneledNpnSpdy) { |
| HttpRequestInfo request; |
| request.method = "GET"; |
| - request.url = GURL("http://www.example.org/"); |
| + request.url = GURL("https://www.example.org/"); |
| request.load_flags = 0; |
| std::string alternative_service_http_header = |
| @@ -11163,15 +11155,19 @@ TEST_P(HttpNetworkTransactionTest, UseAlternativeServiceForTunneledNpnSpdy) { |
| StaticSocketDataProvider first_transaction( |
| data_reads, arraysize(data_reads), NULL, 0); |
| session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); |
| + SSLSocketDataProvider ssl_http11(ASYNC, OK); |
| + ssl_http11.SetNextProto(kProtoHTTP11); |
| + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11); |
| - SSLSocketDataProvider ssl(ASYNC, OK); |
| - ssl.SetNextProto(GetProtocol()); |
| - ssl.cert = ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
| - ASSERT_TRUE(ssl.cert); |
| - session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| + SSLSocketDataProvider ssl_http2(ASYNC, OK); |
| + ssl_http2.SetNextProto(GetProtocol()); |
| + ssl_http2.cert = |
| + ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
| + ASSERT_TRUE(ssl_http2.cert); |
| + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http2); |
| std::unique_ptr<SpdySerializedFrame> req( |
| - spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| + spdy_util_.ConstructSpdyGet("https://www.example.org/", 1, LOWEST)); |
| MockWrite spdy_writes[] = { |
| MockWrite(ASYNC, 0, |
| "CONNECT www.example.org:443 HTTP/1.1\r\n" |
| @@ -11216,9 +11212,9 @@ TEST_P(HttpNetworkTransactionTest, UseAlternativeServiceForTunneledNpnSpdy) { |
| const HttpResponseInfo* response = trans->GetResponseInfo(); |
| ASSERT_TRUE(response); |
| ASSERT_TRUE(response->headers); |
| - EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| + EXPECT_EQ("HTTP/0.9 200 OK", response->headers->GetStatusLine()); |
| EXPECT_FALSE(response->was_fetched_via_spdy); |
| - EXPECT_FALSE(response->was_npn_negotiated); |
| + EXPECT_TRUE(response->was_npn_negotiated); |
| std::string response_data; |
| ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
| @@ -11239,8 +11235,8 @@ TEST_P(HttpNetworkTransactionTest, UseAlternativeServiceForTunneledNpnSpdy) { |
| ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
| EXPECT_EQ("hello!", response_data); |
| - ASSERT_EQ(3u, capturing_proxy_resolver.resolved().size()); |
| - EXPECT_EQ("http://www.example.org/", |
| + ASSERT_EQ(2u, capturing_proxy_resolver.resolved().size()); |
| + EXPECT_EQ("https://www.example.org/", |
| capturing_proxy_resolver.resolved()[0].spec()); |
| EXPECT_EQ("https://www.example.org/", |
| capturing_proxy_resolver.resolved()[1].spec()); |
| @@ -11255,7 +11251,7 @@ TEST_P(HttpNetworkTransactionTest, |
| UseAlternativeServiceForNpnSpdyWithExistingSpdySession) { |
| HttpRequestInfo request; |
| request.method = "GET"; |
| - request.url = GURL("http://www.example.org/"); |
| + request.url = GURL("https://www.example.org/"); |
| request.load_flags = 0; |
| std::string alternative_service_http_header = |
| @@ -11272,15 +11268,19 @@ TEST_P(HttpNetworkTransactionTest, |
| StaticSocketDataProvider first_transaction( |
| data_reads, arraysize(data_reads), NULL, 0); |
| session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); |
| + SSLSocketDataProvider ssl_http11(ASYNC, OK); |
| + ssl_http11.SetNextProto(kProtoHTTP11); |
| + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http11); |
| - SSLSocketDataProvider ssl(ASYNC, OK); |
| - ssl.SetNextProto(GetProtocol()); |
| - ssl.cert = ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
| - ASSERT_TRUE(ssl.cert); |
| - session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| + SSLSocketDataProvider ssl_http2(ASYNC, OK); |
| + ssl_http2.SetNextProto(GetProtocol()); |
| + ssl_http2.cert = |
| + ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
| + ASSERT_TRUE(ssl_http2.cert); |
| + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_http2); |
| std::unique_ptr<SpdySerializedFrame> req( |
| - spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| + spdy_util_.ConstructSpdyGet("https://www.example.org/", 1, LOWEST)); |
| MockWrite spdy_writes[] = {CreateMockWrite(*req, 0)}; |
| std::unique_ptr<SpdySerializedFrame> resp( |
| @@ -12068,166 +12068,6 @@ class UrlRecordingHttpAuthHandlerMock : public HttpAuthHandlerMock { |
| GURL* url_; |
| }; |
| -// This test ensures that the URL passed into the proxy is upgraded to https |
| -// when doing an Alternate Protocol upgrade. |
| -TEST_P(HttpNetworkTransactionTest, SpdyAlternativeServiceThroughProxy) { |
|
Bence
2016/06/28 20:09:20
Alternative Service is not allowed for http scheme
|
| - session_deps_.proxy_service = |
| - ProxyService::CreateFixedFromPacResult("PROXY myproxy:70"); |
| - TestNetLog net_log; |
| - session_deps_.net_log = &net_log; |
| - GURL request_url; |
| - { |
| - HttpAuthHandlerMock::Factory* auth_factory = |
| - new HttpAuthHandlerMock::Factory(); |
| - UrlRecordingHttpAuthHandlerMock* auth_handler = |
| - new UrlRecordingHttpAuthHandlerMock(&request_url); |
| - auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_PROXY); |
| - auth_factory->set_do_init_from_challenge(true); |
| - session_deps_.http_auth_handler_factory.reset(auth_factory); |
| - } |
| - |
| - HttpRequestInfo request; |
| - request.method = "GET"; |
| - request.url = GURL("http://www.example.org"); |
| - request.load_flags = 0; |
| - |
| - // First round goes unauthenticated through the proxy. |
| - MockWrite data_writes_1[] = { |
| - MockWrite( |
| - "GET http://www.example.org/ HTTP/1.1\r\n" |
| - "Host: www.example.org\r\n" |
| - "Proxy-Connection: keep-alive\r\n" |
| - "\r\n"), |
| - }; |
| - MockRead data_reads_1[] = { |
| - MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| - MockRead("HTTP/1.1 200 OK\r\n"), |
| - MockRead("Alt-Svc: "), |
| - MockRead(GetAlternateProtocolFromParam()), |
| - MockRead("=\":443\"\r\n"), |
| - MockRead("Proxy-Connection: close\r\n"), |
| - MockRead("\r\n"), |
| - }; |
| - StaticSocketDataProvider data_1(data_reads_1, arraysize(data_reads_1), |
| - data_writes_1, arraysize(data_writes_1)); |
| - |
| - // Second round tries to tunnel to www.example.org due to the |
| - // Alternate-Protocol announcement in the first round. It fails due |
| - // to a proxy authentication challenge. |
| - // After the failure, a tunnel is established to www.example.org using |
| - // Proxy-Authorization headers. There is then a SPDY request round. |
| - // |
| - // NOTE: Despite the "Proxy-Connection: Close", these are done on the |
| - // same MockTCPClientSocket since the underlying HttpNetworkClientSocket |
| - // does a Disconnect and Connect on the same socket, rather than trying |
| - // to obtain a new one. |
| - // |
| - // NOTE: Originally, the proxy response to the second CONNECT request |
| - // simply returned another 407 so the unit test could skip the SSL connection |
| - // establishment and SPDY framing issues. Alas, the |
| - // retry-http-when-alternate-protocol fails logic kicks in, which was more |
| - // complicated to set up expectations for than the SPDY session. |
| - |
| - std::unique_ptr<SpdySerializedFrame> req( |
| - spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| - std::unique_ptr<SpdySerializedFrame> resp( |
| - spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| - std::unique_ptr<SpdySerializedFrame> data( |
| - spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| - |
| - MockWrite data_writes_2[] = { |
| - // First connection attempt without Proxy-Authorization. |
| - MockWrite(ASYNC, 0, |
| - "CONNECT www.example.org:443 HTTP/1.1\r\n" |
| - "Host: www.example.org:443\r\n" |
| - "Proxy-Connection: keep-alive\r\n" |
| - "\r\n"), |
| - |
| - // Second connection attempt with Proxy-Authorization. |
| - MockWrite(ASYNC, 2, |
| - "CONNECT www.example.org:443 HTTP/1.1\r\n" |
| - "Host: www.example.org:443\r\n" |
| - "Proxy-Connection: keep-alive\r\n" |
| - "Proxy-Authorization: auth_token\r\n" |
| - "\r\n"), |
| - |
| - // SPDY request |
| - CreateMockWrite(*req, 4), |
| - }; |
| - MockRead data_reads_2[] = { |
| - // First connection attempt fails |
| - MockRead(ASYNC, 1, |
| - "HTTP/1.1 407 Unauthorized\r\n" |
| - "Proxy-Authenticate: Mock\r\n" |
| - "Content-Length: 0\r\n" |
| - "Proxy-Connection: keep-alive\r\n" |
| - "\r\n"), |
| - |
| - // Second connection attempt passes |
| - MockRead(ASYNC, 3, "HTTP/1.1 200 Connected\r\n\r\n"), |
| - |
| - // SPDY response |
| - CreateMockRead(*resp.get(), 5), CreateMockRead(*data.get(), 6), |
| - MockRead(ASYNC, 0, 0, 7), |
| - }; |
| - SequencedSocketData data_2(data_reads_2, arraysize(data_reads_2), |
| - data_writes_2, arraysize(data_writes_2)); |
| - |
| - SSLSocketDataProvider ssl(ASYNC, OK); |
| - ssl.SetNextProto(GetProtocol()); |
| - ssl.cert = ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
| - ASSERT_TRUE(ssl.cert); |
| - |
| - MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); |
| - StaticSocketDataProvider hanging_non_alternate_protocol_socket( |
| - NULL, 0, NULL, 0); |
| - hanging_non_alternate_protocol_socket.set_connect_data( |
| - never_finishing_connect); |
| - |
| - session_deps_.socket_factory->AddSocketDataProvider(&data_1); |
| - session_deps_.socket_factory->AddSocketDataProvider(&data_2); |
| - session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| - session_deps_.socket_factory->AddSocketDataProvider( |
| - &hanging_non_alternate_protocol_socket); |
| - std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| - |
| - // First round should work and provide the Alternate-Protocol state. |
| - TestCompletionCallback callback_1; |
| - std::unique_ptr<HttpTransaction> trans_1( |
| - new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| - int rv = trans_1->Start(&request, callback_1.callback(), BoundNetLog()); |
| - EXPECT_EQ(ERR_IO_PENDING, rv); |
| - EXPECT_EQ(OK, callback_1.WaitForResult()); |
| - |
| - // Second round should attempt a tunnel connect and get an auth challenge. |
| - TestCompletionCallback callback_2; |
| - std::unique_ptr<HttpTransaction> trans_2( |
| - new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| - rv = trans_2->Start(&request, callback_2.callback(), BoundNetLog()); |
| - EXPECT_EQ(ERR_IO_PENDING, rv); |
| - EXPECT_EQ(OK, callback_2.WaitForResult()); |
| - const HttpResponseInfo* response = trans_2->GetResponseInfo(); |
| - ASSERT_TRUE(response); |
| - ASSERT_TRUE(response->auth_challenge); |
| - |
| - // Restart with auth. Tunnel should work and response received. |
| - TestCompletionCallback callback_3; |
| - rv = trans_2->RestartWithAuth( |
| - AuthCredentials(kFoo, kBar), callback_3.callback()); |
| - EXPECT_EQ(ERR_IO_PENDING, rv); |
| - EXPECT_EQ(OK, callback_3.WaitForResult()); |
| - |
| - // After all that work, these two lines (or actually, just the scheme) are |
| - // what this test is all about. Make sure it happens correctly. |
| - EXPECT_EQ("https", request_url.scheme()); |
| - EXPECT_EQ("www.example.org", request_url.host()); |
| - |
| - LoadTimingInfo load_timing_info; |
| - EXPECT_TRUE(trans_2->GetLoadTimingInfo(&load_timing_info)); |
| - TestLoadTimingNotReusedWithPac(load_timing_info, |
| - CONNECT_TIMING_HAS_SSL_TIMES); |
| -} |
| - |
| // Test that if we cancel the transaction as the connection is completing, that |
| // everything tears down correctly. |
| TEST_P(HttpNetworkTransactionTest, SimpleCancel) { |