| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/http/http_network_transaction.h" | 5 #include "net/http/http_network_transaction.h" |
| 6 | 6 |
| 7 #include <math.h> // ceil | 7 #include <math.h> // ceil |
| 8 #include <stdarg.h> | 8 #include <stdarg.h> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 370 CaptureGroupNameSSLSocketPool::CaptureGroupNameSocketPool( | 370 CaptureGroupNameSSLSocketPool::CaptureGroupNameSocketPool( |
| 371 HostResolver* host_resolver, | 371 HostResolver* host_resolver, |
| 372 CertVerifier* cert_verifier) | 372 CertVerifier* cert_verifier) |
| 373 : SSLClientSocketPool(0, 0, NULL, host_resolver, cert_verifier, NULL, | 373 : SSLClientSocketPool(0, 0, NULL, host_resolver, cert_verifier, NULL, |
| 374 NULL, NULL, "", NULL, NULL, NULL, NULL, NULL, NULL) {} | 374 NULL, NULL, "", NULL, NULL, NULL, NULL, NULL, NULL) {} |
| 375 | 375 |
| 376 //----------------------------------------------------------------------------- | 376 //----------------------------------------------------------------------------- |
| 377 | 377 |
| 378 // This is the expected return from a current server advertising SPDY. | 378 // This is the expected return from a current server advertising SPDY. |
| 379 static const char kAlternateProtocolHttpHeader[] = | 379 static const char kAlternateProtocolHttpHeader[] = |
| 380 "Alternate-Protocol: 443:npn-spdy/2.1\r\n\r\n"; | 380 "Alternate-Protocol: 443:npn-spdy/2\r\n\r\n"; |
| 381 | 381 |
| 382 // Helper functions for validating that AuthChallengeInfo's are correctly | 382 // Helper functions for validating that AuthChallengeInfo's are correctly |
| 383 // configured for common cases. | 383 // configured for common cases. |
| 384 bool CheckBasicServerAuth(const AuthChallengeInfo* auth_challenge) { | 384 bool CheckBasicServerAuth(const AuthChallengeInfo* auth_challenge) { |
| 385 if (!auth_challenge) | 385 if (!auth_challenge) |
| 386 return false; | 386 return false; |
| 387 EXPECT_FALSE(auth_challenge->is_proxy); | 387 EXPECT_FALSE(auth_challenge->is_proxy); |
| 388 EXPECT_EQ("www.google.com:80", auth_challenge->challenger.ToString()); | 388 EXPECT_EQ("www.google.com:80", auth_challenge->challenger.ToString()); |
| 389 EXPECT_EQ("MyRealm1", auth_challenge->realm); | 389 EXPECT_EQ("MyRealm1", auth_challenge->realm); |
| 390 EXPECT_EQ("basic", auth_challenge->scheme); | 390 EXPECT_EQ("basic", auth_challenge->scheme); |
| (...skipping 5082 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5473 }; | 5473 }; |
| 5474 | 5474 |
| 5475 scoped_refptr<HttpNetworkSession> SetupSessionForGroupNameTests( | 5475 scoped_refptr<HttpNetworkSession> SetupSessionForGroupNameTests( |
| 5476 SessionDependencies* session_deps) { | 5476 SessionDependencies* session_deps) { |
| 5477 scoped_refptr<HttpNetworkSession> session(CreateSession(session_deps)); | 5477 scoped_refptr<HttpNetworkSession> session(CreateSession(session_deps)); |
| 5478 | 5478 |
| 5479 HttpServerProperties* http_server_properties = | 5479 HttpServerProperties* http_server_properties = |
| 5480 session->http_server_properties(); | 5480 session->http_server_properties(); |
| 5481 http_server_properties->SetAlternateProtocol( | 5481 http_server_properties->SetAlternateProtocol( |
| 5482 HostPortPair("host.with.alternate", 80), 443, | 5482 HostPortPair("host.with.alternate", 80), 443, |
| 5483 NPN_SPDY_21); | 5483 NPN_SPDY_2); |
| 5484 | 5484 |
| 5485 return session; | 5485 return session; |
| 5486 } | 5486 } |
| 5487 | 5487 |
| 5488 int GroupNameTransactionHelper( | 5488 int GroupNameTransactionHelper( |
| 5489 const std::string& url, | 5489 const std::string& url, |
| 5490 const scoped_refptr<HttpNetworkSession>& session) { | 5490 const scoped_refptr<HttpNetworkSession>& session) { |
| 5491 HttpRequestInfo request; | 5491 HttpRequestInfo request; |
| 5492 request.method = "GET"; | 5492 request.method = "GET"; |
| 5493 request.url = GURL(url); | 5493 request.url = GURL(url); |
| (...skipping 919 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6413 | 6413 |
| 6414 std::string response_data; | 6414 std::string response_data; |
| 6415 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 6415 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
| 6416 EXPECT_EQ("hello world", response_data); | 6416 EXPECT_EQ("hello world", response_data); |
| 6417 | 6417 |
| 6418 ASSERT_TRUE(http_server_properties.HasAlternateProtocol(http_host_port_pair)); | 6418 ASSERT_TRUE(http_server_properties.HasAlternateProtocol(http_host_port_pair)); |
| 6419 const PortAlternateProtocolPair alternate = | 6419 const PortAlternateProtocolPair alternate = |
| 6420 http_server_properties.GetAlternateProtocol(http_host_port_pair); | 6420 http_server_properties.GetAlternateProtocol(http_host_port_pair); |
| 6421 PortAlternateProtocolPair expected_alternate; | 6421 PortAlternateProtocolPair expected_alternate; |
| 6422 expected_alternate.port = 443; | 6422 expected_alternate.port = 443; |
| 6423 expected_alternate.protocol = NPN_SPDY_21; | 6423 expected_alternate.protocol = NPN_SPDY_2; |
| 6424 EXPECT_TRUE(expected_alternate.Equals(alternate)); | 6424 EXPECT_TRUE(expected_alternate.Equals(alternate)); |
| 6425 | 6425 |
| 6426 HttpStreamFactory::set_use_alternate_protocols(false); | 6426 HttpStreamFactory::set_use_alternate_protocols(false); |
| 6427 HttpStreamFactory::set_next_protos(std::vector<std::string>()); | 6427 HttpStreamFactory::set_next_protos(std::vector<std::string>()); |
| 6428 } | 6428 } |
| 6429 | 6429 |
| 6430 TEST_F(HttpNetworkTransactionTest, MarkBrokenAlternateProtocolAndFallback) { | 6430 TEST_F(HttpNetworkTransactionTest, MarkBrokenAlternateProtocolAndFallback) { |
| 6431 HttpStreamFactory::set_use_alternate_protocols(true); | 6431 HttpStreamFactory::set_use_alternate_protocols(true); |
| 6432 SessionDependencies session_deps; | 6432 SessionDependencies session_deps; |
| 6433 | 6433 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 6452 | 6452 |
| 6453 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 6453 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
| 6454 | 6454 |
| 6455 HttpServerProperties* http_server_properties = | 6455 HttpServerProperties* http_server_properties = |
| 6456 session->http_server_properties(); | 6456 session->http_server_properties(); |
| 6457 // Port must be < 1024, or the header will be ignored (since initial port was | 6457 // Port must be < 1024, or the header will be ignored (since initial port was |
| 6458 // port 80 (another restricted port). | 6458 // port 80 (another restricted port). |
| 6459 http_server_properties->SetAlternateProtocol( | 6459 http_server_properties->SetAlternateProtocol( |
| 6460 HostPortPair::FromURL(request.url), | 6460 HostPortPair::FromURL(request.url), |
| 6461 666 /* port is ignored by MockConnect anyway */, | 6461 666 /* port is ignored by MockConnect anyway */, |
| 6462 NPN_SPDY_21); | 6462 NPN_SPDY_2); |
| 6463 | 6463 |
| 6464 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 6464 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
| 6465 TestCompletionCallback callback; | 6465 TestCompletionCallback callback; |
| 6466 | 6466 |
| 6467 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6467 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 6468 EXPECT_EQ(ERR_IO_PENDING, rv); | 6468 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 6469 EXPECT_EQ(OK, callback.WaitForResult()); | 6469 EXPECT_EQ(OK, callback.WaitForResult()); |
| 6470 | 6470 |
| 6471 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6471 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 6472 ASSERT_TRUE(response != NULL); | 6472 ASSERT_TRUE(response != NULL); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6514 session_deps.socket_factory.AddSocketDataProvider(&second_data); | 6514 session_deps.socket_factory.AddSocketDataProvider(&second_data); |
| 6515 | 6515 |
| 6516 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 6516 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
| 6517 | 6517 |
| 6518 HttpServerProperties* http_server_properties = | 6518 HttpServerProperties* http_server_properties = |
| 6519 session->http_server_properties(); | 6519 session->http_server_properties(); |
| 6520 const int kUnrestrictedAlternatePort = 1024; | 6520 const int kUnrestrictedAlternatePort = 1024; |
| 6521 http_server_properties->SetAlternateProtocol( | 6521 http_server_properties->SetAlternateProtocol( |
| 6522 HostPortPair::FromURL(restricted_port_request.url), | 6522 HostPortPair::FromURL(restricted_port_request.url), |
| 6523 kUnrestrictedAlternatePort, | 6523 kUnrestrictedAlternatePort, |
| 6524 NPN_SPDY_21); | 6524 NPN_SPDY_2); |
| 6525 | 6525 |
| 6526 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 6526 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
| 6527 TestCompletionCallback callback; | 6527 TestCompletionCallback callback; |
| 6528 | 6528 |
| 6529 int rv = trans->Start( | 6529 int rv = trans->Start( |
| 6530 &restricted_port_request, callback.callback(), BoundNetLog()); | 6530 &restricted_port_request, callback.callback(), BoundNetLog()); |
| 6531 EXPECT_EQ(ERR_IO_PENDING, rv); | 6531 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 6532 // Invalid change to unrestricted port should fail. | 6532 // Invalid change to unrestricted port should fail. |
| 6533 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback.WaitForResult()); | 6533 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback.WaitForResult()); |
| 6534 | 6534 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 6563 session_deps.socket_factory.AddSocketDataProvider(&second_data); | 6563 session_deps.socket_factory.AddSocketDataProvider(&second_data); |
| 6564 | 6564 |
| 6565 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 6565 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
| 6566 | 6566 |
| 6567 HttpServerProperties* http_server_properties = | 6567 HttpServerProperties* http_server_properties = |
| 6568 session->http_server_properties(); | 6568 session->http_server_properties(); |
| 6569 const int kRestrictedAlternatePort = 80; | 6569 const int kRestrictedAlternatePort = 80; |
| 6570 http_server_properties->SetAlternateProtocol( | 6570 http_server_properties->SetAlternateProtocol( |
| 6571 HostPortPair::FromURL(restricted_port_request.url), | 6571 HostPortPair::FromURL(restricted_port_request.url), |
| 6572 kRestrictedAlternatePort, | 6572 kRestrictedAlternatePort, |
| 6573 NPN_SPDY_21); | 6573 NPN_SPDY_2); |
| 6574 | 6574 |
| 6575 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 6575 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
| 6576 TestCompletionCallback callback; | 6576 TestCompletionCallback callback; |
| 6577 | 6577 |
| 6578 int rv = trans->Start( | 6578 int rv = trans->Start( |
| 6579 &restricted_port_request, callback.callback(), BoundNetLog()); | 6579 &restricted_port_request, callback.callback(), BoundNetLog()); |
| 6580 EXPECT_EQ(ERR_IO_PENDING, rv); | 6580 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 6581 // Valid change to restricted port should pass. | 6581 // Valid change to restricted port should pass. |
| 6582 EXPECT_EQ(OK, callback.WaitForResult()); | 6582 EXPECT_EQ(OK, callback.WaitForResult()); |
| 6583 | 6583 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 6612 session_deps.socket_factory.AddSocketDataProvider(&second_data); | 6612 session_deps.socket_factory.AddSocketDataProvider(&second_data); |
| 6613 | 6613 |
| 6614 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 6614 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
| 6615 | 6615 |
| 6616 HttpServerProperties* http_server_properties = | 6616 HttpServerProperties* http_server_properties = |
| 6617 session->http_server_properties(); | 6617 session->http_server_properties(); |
| 6618 const int kRestrictedAlternatePort = 80; | 6618 const int kRestrictedAlternatePort = 80; |
| 6619 http_server_properties->SetAlternateProtocol( | 6619 http_server_properties->SetAlternateProtocol( |
| 6620 HostPortPair::FromURL(unrestricted_port_request.url), | 6620 HostPortPair::FromURL(unrestricted_port_request.url), |
| 6621 kRestrictedAlternatePort, | 6621 kRestrictedAlternatePort, |
| 6622 NPN_SPDY_21); | 6622 NPN_SPDY_2); |
| 6623 | 6623 |
| 6624 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 6624 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
| 6625 TestCompletionCallback callback; | 6625 TestCompletionCallback callback; |
| 6626 | 6626 |
| 6627 int rv = trans->Start( | 6627 int rv = trans->Start( |
| 6628 &unrestricted_port_request, callback.callback(), BoundNetLog()); | 6628 &unrestricted_port_request, callback.callback(), BoundNetLog()); |
| 6629 EXPECT_EQ(ERR_IO_PENDING, rv); | 6629 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 6630 // Valid change to restricted port should pass. | 6630 // Valid change to restricted port should pass. |
| 6631 EXPECT_EQ(OK, callback.WaitForResult()); | 6631 EXPECT_EQ(OK, callback.WaitForResult()); |
| 6632 | 6632 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 6661 session_deps.socket_factory.AddSocketDataProvider(&second_data); | 6661 session_deps.socket_factory.AddSocketDataProvider(&second_data); |
| 6662 | 6662 |
| 6663 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 6663 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
| 6664 | 6664 |
| 6665 HttpServerProperties* http_server_properties = | 6665 HttpServerProperties* http_server_properties = |
| 6666 session->http_server_properties(); | 6666 session->http_server_properties(); |
| 6667 const int kUnrestrictedAlternatePort = 1024; | 6667 const int kUnrestrictedAlternatePort = 1024; |
| 6668 http_server_properties->SetAlternateProtocol( | 6668 http_server_properties->SetAlternateProtocol( |
| 6669 HostPortPair::FromURL(unrestricted_port_request.url), | 6669 HostPortPair::FromURL(unrestricted_port_request.url), |
| 6670 kUnrestrictedAlternatePort, | 6670 kUnrestrictedAlternatePort, |
| 6671 NPN_SPDY_21); | 6671 NPN_SPDY_2); |
| 6672 | 6672 |
| 6673 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 6673 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
| 6674 TestCompletionCallback callback; | 6674 TestCompletionCallback callback; |
| 6675 | 6675 |
| 6676 int rv = trans->Start( | 6676 int rv = trans->Start( |
| 6677 &unrestricted_port_request, callback.callback(), BoundNetLog()); | 6677 &unrestricted_port_request, callback.callback(), BoundNetLog()); |
| 6678 EXPECT_EQ(ERR_IO_PENDING, rv); | 6678 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 6679 // Valid change to an unrestricted port should pass. | 6679 // Valid change to an unrestricted port should pass. |
| 6680 EXPECT_EQ(OK, callback.WaitForResult()); | 6680 EXPECT_EQ(OK, callback.WaitForResult()); |
| 6681 | 6681 |
| (...skipping 1473 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8155 // First round goes unauthenticated through the proxy. | 8155 // First round goes unauthenticated through the proxy. |
| 8156 MockWrite data_writes_1[] = { | 8156 MockWrite data_writes_1[] = { |
| 8157 MockWrite("GET http://www.google.com/ HTTP/1.1\r\n" | 8157 MockWrite("GET http://www.google.com/ HTTP/1.1\r\n" |
| 8158 "Host: www.google.com\r\n" | 8158 "Host: www.google.com\r\n" |
| 8159 "Proxy-Connection: keep-alive\r\n" | 8159 "Proxy-Connection: keep-alive\r\n" |
| 8160 "\r\n"), | 8160 "\r\n"), |
| 8161 }; | 8161 }; |
| 8162 MockRead data_reads_1[] = { | 8162 MockRead data_reads_1[] = { |
| 8163 MockRead(false, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 8163 MockRead(false, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| 8164 MockRead("HTTP/1.1 200 OK\r\n" | 8164 MockRead("HTTP/1.1 200 OK\r\n" |
| 8165 "Alternate-Protocol: 443:npn-spdy/2.1\r\n" | 8165 "Alternate-Protocol: 443:npn-spdy/2\r\n" |
| 8166 "Proxy-Connection: close\r\n" | 8166 "Proxy-Connection: close\r\n" |
| 8167 "\r\n"), | 8167 "\r\n"), |
| 8168 }; | 8168 }; |
| 8169 StaticSocketDataProvider data_1(data_reads_1, arraysize(data_reads_1), | 8169 StaticSocketDataProvider data_1(data_reads_1, arraysize(data_reads_1), |
| 8170 data_writes_1, arraysize(data_writes_1)); | 8170 data_writes_1, arraysize(data_writes_1)); |
| 8171 | 8171 |
| 8172 // Second round tries to tunnel to www.google.com due to the | 8172 // Second round tries to tunnel to www.google.com due to the |
| 8173 // Alternate-Protocol announcement in the first round. It fails due | 8173 // Alternate-Protocol announcement in the first round. It fails due |
| 8174 // to a proxy authentication challenge. | 8174 // to a proxy authentication challenge. |
| 8175 // After the failure, a tunnel is established to www.google.com using | 8175 // After the failure, a tunnel is established to www.google.com using |
| (...skipping 1062 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9238 StaticSocketDataProvider* data[] = { &data1, &data2 }; | 9238 StaticSocketDataProvider* data[] = { &data1, &data2 }; |
| 9239 | 9239 |
| 9240 SimpleGetHelperResult out = SimpleGetHelperForData(data, arraysize(data)); | 9240 SimpleGetHelperResult out = SimpleGetHelperForData(data, arraysize(data)); |
| 9241 | 9241 |
| 9242 EXPECT_EQ(OK, out.rv); | 9242 EXPECT_EQ(OK, out.rv); |
| 9243 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); | 9243 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); |
| 9244 EXPECT_EQ("hello world", out.response_data); | 9244 EXPECT_EQ("hello world", out.response_data); |
| 9245 } | 9245 } |
| 9246 | 9246 |
| 9247 } // namespace net | 9247 } // namespace net |
| OLD | NEW |