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 |