| 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 <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "base/compiler_specific.h" | 7 #include "base/compiler_specific.h" |
| 8 #include "base/macros.h" | 8 #include "base/macros.h" |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
| (...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 521 void AddQuicAlternateProtocolMapping( | 521 void AddQuicAlternateProtocolMapping( |
| 522 MockCryptoClientStream::HandshakeMode handshake_mode) { | 522 MockCryptoClientStream::HandshakeMode handshake_mode) { |
| 523 crypto_client_stream_factory_.set_handshake_mode(handshake_mode); | 523 crypto_client_stream_factory_.set_handshake_mode(handshake_mode); |
| 524 HostPortPair host_port_pair = HostPortPair::FromURL(request_.url); | 524 HostPortPair host_port_pair = HostPortPair::FromURL(request_.url); |
| 525 AlternativeService alternative_service(QUIC, host_port_pair.host(), 443); | 525 AlternativeService alternative_service(QUIC, host_port_pair.host(), 443); |
| 526 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 526 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 527 http_server_properties_.SetAlternativeService( | 527 http_server_properties_.SetAlternativeService( |
| 528 host_port_pair, alternative_service, 1.0, expiration); | 528 host_port_pair, alternative_service, 1.0, expiration); |
| 529 } | 529 } |
| 530 | 530 |
| 531 void AddQuicRemoteAlternativeServiceMapping( |
| 532 MockCryptoClientStream::HandshakeMode handshake_mode, |
| 533 const HostPortPair& alternative) { |
| 534 crypto_client_stream_factory_.set_handshake_mode(handshake_mode); |
| 535 HostPortPair host_port_pair = HostPortPair::FromURL(request_.url); |
| 536 AlternativeService alternative_service(QUIC, alternative.host(), |
| 537 alternative.port()); |
| 538 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 539 http_server_properties_.SetAlternativeService( |
| 540 host_port_pair, alternative_service, 1.0, expiration); |
| 541 } |
| 542 |
| 531 void ExpectBrokenAlternateProtocolMapping() { | 543 void ExpectBrokenAlternateProtocolMapping() { |
| 532 const HostPortPair origin = HostPortPair::FromURL(request_.url); | 544 const HostPortPair origin = HostPortPair::FromURL(request_.url); |
| 533 const AlternativeServiceVector alternative_service_vector = | 545 const AlternativeServiceVector alternative_service_vector = |
| 534 http_server_properties_.GetAlternativeServices(origin); | 546 http_server_properties_.GetAlternativeServices(origin); |
| 535 EXPECT_EQ(1u, alternative_service_vector.size()); | 547 EXPECT_EQ(1u, alternative_service_vector.size()); |
| 536 EXPECT_TRUE(http_server_properties_.IsAlternativeServiceBroken( | 548 EXPECT_TRUE(http_server_properties_.IsAlternativeServiceBroken( |
| 537 alternative_service_vector[0])); | 549 alternative_service_vector[0])); |
| 538 } | 550 } |
| 539 | 551 |
| 540 void ExpectQuicAlternateProtocolMapping() { | 552 void ExpectQuicAlternateProtocolMapping() { |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 736 verify_details2.cert_verify_result.verified_cert = cert; | 748 verify_details2.cert_verify_result.verified_cert = cert; |
| 737 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details2); | 749 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details2); |
| 738 | 750 |
| 739 request_.url = GURL("http://" + origin_host); | 751 request_.url = GURL("http://" + origin_host); |
| 740 AddHangingNonAlternateProtocolSocketData(); | 752 AddHangingNonAlternateProtocolSocketData(); |
| 741 CreateSessionWithNextProtos(); | 753 CreateSessionWithNextProtos(); |
| 742 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); | 754 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); |
| 743 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); | 755 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); |
| 744 } | 756 } |
| 745 | 757 |
| 758 TEST_P(QuicNetworkTransactionTest, AlternativeServicesDifferentHost) { |
| 759 params_.enable_alternative_service_with_different_host = true; |
| 760 HostPortPair origin("www.example.org", 443); |
| 761 HostPortPair alternative("mail.example.org", 443); |
| 762 |
| 763 base::FilePath certs_dir = GetTestCertsDirectory(); |
| 764 scoped_refptr<X509Certificate> cert( |
| 765 ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem")); |
| 766 ASSERT_TRUE(cert.get()); |
| 767 // TODO(rch): the connection should be "to" the origin, so if the cert is |
| 768 // valid for the origin but not the alternative, that should work too. |
| 769 bool common_name_fallback_used; |
| 770 EXPECT_TRUE(cert->VerifyNameMatch(origin.host(), &common_name_fallback_used)); |
| 771 EXPECT_TRUE( |
| 772 cert->VerifyNameMatch(alternative.host(), &common_name_fallback_used)); |
| 773 ProofVerifyDetailsChromium verify_details; |
| 774 verify_details.cert_verify_result.verified_cert = cert; |
| 775 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
| 776 |
| 777 maker_.set_hostname(origin.host()); |
| 778 MockQuicData mock_quic_data; |
| 779 mock_quic_data.AddWrite( |
| 780 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, |
| 781 GetRequestHeaders("GET", "https", "/"))); |
| 782 mock_quic_data.AddRead(ConstructResponseHeadersPacket( |
| 783 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
| 784 mock_quic_data.AddRead( |
| 785 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
| 786 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
| 787 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 788 mock_quic_data.AddRead(ASYNC, 0); |
| 789 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 790 |
| 791 request_.url = GURL("https://" + origin.host()); |
| 792 AddQuicRemoteAlternativeServiceMapping( |
| 793 MockCryptoClientStream::CONFIRM_HANDSHAKE, alternative); |
| 794 AddHangingNonAlternateProtocolSocketData(); |
| 795 CreateSessionWithNextProtos(); |
| 796 |
| 797 SendRequestAndExpectQuicResponse("hello!"); |
| 798 } |
| 799 |
| 746 TEST_P(QuicNetworkTransactionTest, ForceQuicWithErrorConnecting) { | 800 TEST_P(QuicNetworkTransactionTest, ForceQuicWithErrorConnecting) { |
| 747 params_.origin_to_force_quic_on = | 801 params_.origin_to_force_quic_on = |
| 748 HostPortPair::FromString("mail.example.org:443"); | 802 HostPortPair::FromString("mail.example.org:443"); |
| 749 | 803 |
| 750 MockQuicData mock_quic_data1; | 804 MockQuicData mock_quic_data1; |
| 751 mock_quic_data1.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); | 805 mock_quic_data1.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); |
| 752 | 806 |
| 753 MockQuicData mock_quic_data2; | 807 MockQuicData mock_quic_data2; |
| 754 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_); | 808 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_); |
| 755 mock_quic_data2.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); | 809 mock_quic_data2.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); |
| (...skipping 1525 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2281 scoped_ptr<HttpNetworkTransaction> trans( | 2335 scoped_ptr<HttpNetworkTransaction> trans( |
| 2282 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 2336 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
| 2283 TestCompletionCallback callback; | 2337 TestCompletionCallback callback; |
| 2284 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 2338 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
| 2285 EXPECT_EQ(ERR_IO_PENDING, rv); | 2339 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2286 EXPECT_NE(OK, callback.WaitForResult()); | 2340 EXPECT_NE(OK, callback.WaitForResult()); |
| 2287 } | 2341 } |
| 2288 | 2342 |
| 2289 } // namespace test | 2343 } // namespace test |
| 2290 } // namespace net | 2344 } // namespace net |
| OLD | NEW |