| 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 <algorithm> | 5 #include <algorithm> |
| 6 #include <memory> | 6 #include <memory> |
| 7 #include <ostream> | 7 #include <ostream> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 493 bool should_include_version, | 493 bool should_include_version, |
| 494 bool fin, | 494 bool fin, |
| 495 SpdyHeaderBlock headers, | 495 SpdyHeaderBlock headers, |
| 496 QuicStreamOffset* offset) { | 496 QuicStreamOffset* offset) { |
| 497 return server_maker_.MakeResponseHeadersPacketWithOffsetTracking( | 497 return server_maker_.MakeResponseHeadersPacketWithOffsetTracking( |
| 498 packet_number, stream_id, should_include_version, fin, | 498 packet_number, stream_id, should_include_version, fin, |
| 499 std::move(headers), offset); | 499 std::move(headers), offset); |
| 500 } | 500 } |
| 501 | 501 |
| 502 void CreateSession() { | 502 void CreateSession() { |
| 503 params_.enable_quic = true; | 503 session_params_.enable_quic = true; |
| 504 params_.quic_clock = &clock_; | 504 session_params_.quic_supported_versions = SupportedVersions(version_); |
| 505 params_.quic_random = &random_generator_; | 505 |
| 506 params_.client_socket_factory = &socket_factory_; | 506 session_context_.quic_clock = &clock_; |
| 507 params_.quic_crypto_client_stream_factory = &crypto_client_stream_factory_; | 507 session_context_.quic_random = &random_generator_; |
| 508 params_.host_resolver = &host_resolver_; | 508 session_context_.client_socket_factory = &socket_factory_; |
| 509 params_.cert_verifier = &cert_verifier_; | 509 session_context_.quic_crypto_client_stream_factory = |
| 510 params_.transport_security_state = &transport_security_state_; | 510 &crypto_client_stream_factory_; |
| 511 params_.cert_transparency_verifier = cert_transparency_verifier_.get(); | 511 session_context_.host_resolver = &host_resolver_; |
| 512 params_.ct_policy_enforcer = &ct_policy_enforcer_; | 512 session_context_.cert_verifier = &cert_verifier_; |
| 513 params_.socket_performance_watcher_factory = | 513 session_context_.transport_security_state = &transport_security_state_; |
| 514 session_context_.cert_transparency_verifier = |
| 515 cert_transparency_verifier_.get(); |
| 516 session_context_.ct_policy_enforcer = &ct_policy_enforcer_; |
| 517 session_context_.socket_performance_watcher_factory = |
| 514 &test_socket_performance_watcher_factory_; | 518 &test_socket_performance_watcher_factory_; |
| 515 params_.proxy_service = proxy_service_.get(); | 519 session_context_.proxy_service = proxy_service_.get(); |
| 516 params_.ssl_config_service = ssl_config_service_.get(); | 520 session_context_.ssl_config_service = ssl_config_service_.get(); |
| 517 params_.http_auth_handler_factory = auth_handler_factory_.get(); | 521 session_context_.http_auth_handler_factory = auth_handler_factory_.get(); |
| 518 params_.http_server_properties = &http_server_properties_; | 522 session_context_.http_server_properties = &http_server_properties_; |
| 519 params_.quic_supported_versions = SupportedVersions(version_); | 523 session_context_.net_log = net_log_.bound().net_log(); |
| 520 params_.net_log = net_log_.bound().net_log(); | |
| 521 | 524 |
| 522 session_.reset(new HttpNetworkSession(params_)); | 525 session_.reset(new HttpNetworkSession(session_params_, session_context_)); |
| 523 session_->quic_stream_factory()->set_require_confirmation(false); | 526 session_->quic_stream_factory()->set_require_confirmation(false); |
| 524 } | 527 } |
| 525 | 528 |
| 526 void CheckWasQuicResponse(HttpNetworkTransaction* trans) { | 529 void CheckWasQuicResponse(HttpNetworkTransaction* trans) { |
| 527 const HttpResponseInfo* response = trans->GetResponseInfo(); | 530 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 528 ASSERT_TRUE(response != nullptr); | 531 ASSERT_TRUE(response != nullptr); |
| 529 ASSERT_TRUE(response->headers.get() != nullptr); | 532 ASSERT_TRUE(response->headers.get() != nullptr); |
| 530 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 533 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 531 EXPECT_TRUE(response->was_fetched_via_spdy); | 534 EXPECT_TRUE(response->was_fetched_via_spdy); |
| 532 EXPECT_TRUE(response->was_alpn_negotiated); | 535 EXPECT_TRUE(response->was_alpn_negotiated); |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 690 socket_factory_.AddSocketDataProvider(&http_data_1); | 693 socket_factory_.AddSocketDataProvider(&http_data_1); |
| 691 socket_factory_.AddSocketDataProvider(&http_data_2); | 694 socket_factory_.AddSocketDataProvider(&http_data_2); |
| 692 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 695 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
| 693 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 696 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
| 694 | 697 |
| 695 TestProxyDelegate test_proxy_delegate; | 698 TestProxyDelegate test_proxy_delegate; |
| 696 // Proxy URL is different from the request URL. | 699 // Proxy URL is different from the request URL. |
| 697 test_proxy_delegate.set_alternative_proxy_server( | 700 test_proxy_delegate.set_alternative_proxy_server( |
| 698 ProxyServer::FromPacString("QUIC myproxy.org:443")); | 701 ProxyServer::FromPacString("QUIC myproxy.org:443")); |
| 699 | 702 |
| 700 params_.proxy_delegate = &test_proxy_delegate; | 703 session_context_.proxy_delegate = &test_proxy_delegate; |
| 701 proxy_service_ = | 704 proxy_service_ = |
| 702 ProxyService::CreateFixedFromPacResult("HTTPS myproxy.org:443"); | 705 ProxyService::CreateFixedFromPacResult("HTTPS myproxy.org:443"); |
| 703 | 706 |
| 704 CreateSession(); | 707 CreateSession(); |
| 705 EXPECT_TRUE(test_proxy_delegate.alternative_proxy_server().is_valid()); | 708 EXPECT_TRUE(test_proxy_delegate.alternative_proxy_server().is_valid()); |
| 706 | 709 |
| 707 // The first request should be fetched via the HTTPS proxy. | 710 // The first request should be fetched via the HTTPS proxy. |
| 708 SendRequestAndExpectHttpResponseFromProxy("hello from http", true, 443); | 711 SendRequestAndExpectHttpResponseFromProxy("hello from http", true, 443); |
| 709 | 712 |
| 710 // Even through the alternative proxy server job failed, the proxy should | 713 // Even through the alternative proxy server job failed, the proxy should |
| (...skipping 29 matching lines...) Expand all Loading... |
| 740 MockCertVerifier cert_verifier_; | 743 MockCertVerifier cert_verifier_; |
| 741 TransportSecurityState transport_security_state_; | 744 TransportSecurityState transport_security_state_; |
| 742 std::unique_ptr<CTVerifier> cert_transparency_verifier_; | 745 std::unique_ptr<CTVerifier> cert_transparency_verifier_; |
| 743 CTPolicyEnforcer ct_policy_enforcer_; | 746 CTPolicyEnforcer ct_policy_enforcer_; |
| 744 TestSocketPerformanceWatcherFactory test_socket_performance_watcher_factory_; | 747 TestSocketPerformanceWatcherFactory test_socket_performance_watcher_factory_; |
| 745 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_; | 748 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_; |
| 746 std::unique_ptr<ProxyService> proxy_service_; | 749 std::unique_ptr<ProxyService> proxy_service_; |
| 747 std::unique_ptr<HttpAuthHandlerFactory> auth_handler_factory_; | 750 std::unique_ptr<HttpAuthHandlerFactory> auth_handler_factory_; |
| 748 MockRandom random_generator_; | 751 MockRandom random_generator_; |
| 749 HttpServerPropertiesImpl http_server_properties_; | 752 HttpServerPropertiesImpl http_server_properties_; |
| 750 HttpNetworkSession::Params params_; | 753 HttpNetworkSession::Params session_params_; |
| 754 HttpNetworkSession::Context session_context_; |
| 751 HttpRequestInfo request_; | 755 HttpRequestInfo request_; |
| 752 BoundTestNetLog net_log_; | 756 BoundTestNetLog net_log_; |
| 753 std::vector<std::unique_ptr<StaticSocketDataProvider>> hanging_data_; | 757 std::vector<std::unique_ptr<StaticSocketDataProvider>> hanging_data_; |
| 754 SSLSocketDataProvider ssl_data_; | 758 SSLSocketDataProvider ssl_data_; |
| 755 | 759 |
| 756 private: | 760 private: |
| 757 void SendRequestAndExpectQuicResponseMaybeFromProxy( | 761 void SendRequestAndExpectQuicResponseMaybeFromProxy( |
| 758 const std::string& expected, | 762 const std::string& expected, |
| 759 bool used_proxy, | 763 bool used_proxy, |
| 760 uint16_t port) { | 764 uint16_t port) { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 774 EXPECT_TRUE(trans.GetResponseInfo()->proxy_server.is_direct()); | 778 EXPECT_TRUE(trans.GetResponseInfo()->proxy_server.is_direct()); |
| 775 } | 779 } |
| 776 } | 780 } |
| 777 }; | 781 }; |
| 778 | 782 |
| 779 INSTANTIATE_TEST_CASE_P(Version, | 783 INSTANTIATE_TEST_CASE_P(Version, |
| 780 QuicNetworkTransactionTest, | 784 QuicNetworkTransactionTest, |
| 781 ::testing::ValuesIn(AllSupportedVersions())); | 785 ::testing::ValuesIn(AllSupportedVersions())); |
| 782 | 786 |
| 783 TEST_P(QuicNetworkTransactionTest, SocketWatcherEnabled) { | 787 TEST_P(QuicNetworkTransactionTest, SocketWatcherEnabled) { |
| 784 params_.origins_to_force_quic_on.insert( | 788 session_params_.origins_to_force_quic_on.insert( |
| 785 HostPortPair::FromString("mail.example.org:443")); | 789 HostPortPair::FromString("mail.example.org:443")); |
| 786 | 790 |
| 787 MockQuicData mock_quic_data; | 791 MockQuicData mock_quic_data; |
| 788 QuicStreamOffset header_stream_offset = 0; | 792 QuicStreamOffset header_stream_offset = 0; |
| 789 mock_quic_data.AddWrite( | 793 mock_quic_data.AddWrite( |
| 790 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 794 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 791 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 795 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 792 2, GetNthClientInitiatedStreamId(0), true, true, | 796 2, GetNthClientInitiatedStreamId(0), true, true, |
| 793 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 797 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 794 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 798 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| (...skipping 10 matching lines...) Expand all Loading... |
| 805 test_socket_performance_watcher_factory_.set_should_notify_updated_rtt(true); | 809 test_socket_performance_watcher_factory_.set_should_notify_updated_rtt(true); |
| 806 | 810 |
| 807 EXPECT_FALSE( | 811 EXPECT_FALSE( |
| 808 test_socket_performance_watcher_factory_.rtt_notification_received()); | 812 test_socket_performance_watcher_factory_.rtt_notification_received()); |
| 809 SendRequestAndExpectQuicResponse("hello!"); | 813 SendRequestAndExpectQuicResponse("hello!"); |
| 810 EXPECT_TRUE( | 814 EXPECT_TRUE( |
| 811 test_socket_performance_watcher_factory_.rtt_notification_received()); | 815 test_socket_performance_watcher_factory_.rtt_notification_received()); |
| 812 } | 816 } |
| 813 | 817 |
| 814 TEST_P(QuicNetworkTransactionTest, SocketWatcherDisabled) { | 818 TEST_P(QuicNetworkTransactionTest, SocketWatcherDisabled) { |
| 815 params_.origins_to_force_quic_on.insert( | 819 session_params_.origins_to_force_quic_on.insert( |
| 816 HostPortPair::FromString("mail.example.org:443")); | 820 HostPortPair::FromString("mail.example.org:443")); |
| 817 | 821 |
| 818 MockQuicData mock_quic_data; | 822 MockQuicData mock_quic_data; |
| 819 QuicStreamOffset header_stream_offset = 0; | 823 QuicStreamOffset header_stream_offset = 0; |
| 820 mock_quic_data.AddWrite( | 824 mock_quic_data.AddWrite( |
| 821 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 825 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 822 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 826 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 823 2, GetNthClientInitiatedStreamId(0), true, true, | 827 2, GetNthClientInitiatedStreamId(0), true, true, |
| 824 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 828 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 825 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 829 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| (...skipping 10 matching lines...) Expand all Loading... |
| 836 test_socket_performance_watcher_factory_.set_should_notify_updated_rtt(false); | 840 test_socket_performance_watcher_factory_.set_should_notify_updated_rtt(false); |
| 837 | 841 |
| 838 EXPECT_FALSE( | 842 EXPECT_FALSE( |
| 839 test_socket_performance_watcher_factory_.rtt_notification_received()); | 843 test_socket_performance_watcher_factory_.rtt_notification_received()); |
| 840 SendRequestAndExpectQuicResponse("hello!"); | 844 SendRequestAndExpectQuicResponse("hello!"); |
| 841 EXPECT_FALSE( | 845 EXPECT_FALSE( |
| 842 test_socket_performance_watcher_factory_.rtt_notification_received()); | 846 test_socket_performance_watcher_factory_.rtt_notification_received()); |
| 843 } | 847 } |
| 844 | 848 |
| 845 TEST_P(QuicNetworkTransactionTest, ForceQuic) { | 849 TEST_P(QuicNetworkTransactionTest, ForceQuic) { |
| 846 params_.origins_to_force_quic_on.insert( | 850 session_params_.origins_to_force_quic_on.insert( |
| 847 HostPortPair::FromString("mail.example.org:443")); | 851 HostPortPair::FromString("mail.example.org:443")); |
| 848 | 852 |
| 849 MockQuicData mock_quic_data; | 853 MockQuicData mock_quic_data; |
| 850 QuicStreamOffset header_stream_offset = 0; | 854 QuicStreamOffset header_stream_offset = 0; |
| 851 mock_quic_data.AddWrite( | 855 mock_quic_data.AddWrite( |
| 852 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 856 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 853 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 857 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 854 2, GetNthClientInitiatedStreamId(0), true, true, | 858 2, GetNthClientInitiatedStreamId(0), true, true, |
| 855 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 859 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 856 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 860 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 900 entries, 0, NetLogEventType::QUIC_SESSION_STREAM_FRAME_RECEIVED, | 904 entries, 0, NetLogEventType::QUIC_SESSION_STREAM_FRAME_RECEIVED, |
| 901 NetLogEventPhase::NONE); | 905 NetLogEventPhase::NONE); |
| 902 EXPECT_LT(0, pos); | 906 EXPECT_LT(0, pos); |
| 903 | 907 |
| 904 int log_stream_id; | 908 int log_stream_id; |
| 905 ASSERT_TRUE(entries[pos].GetIntegerValue("stream_id", &log_stream_id)); | 909 ASSERT_TRUE(entries[pos].GetIntegerValue("stream_id", &log_stream_id)); |
| 906 EXPECT_EQ(3, log_stream_id); | 910 EXPECT_EQ(3, log_stream_id); |
| 907 } | 911 } |
| 908 | 912 |
| 909 TEST_P(QuicNetworkTransactionTest, LargeResponseHeaders) { | 913 TEST_P(QuicNetworkTransactionTest, LargeResponseHeaders) { |
| 910 params_.origins_to_force_quic_on.insert( | 914 session_params_.origins_to_force_quic_on.insert( |
| 911 HostPortPair::FromString("mail.example.org:443")); | 915 HostPortPair::FromString("mail.example.org:443")); |
| 912 | 916 |
| 913 MockQuicData mock_quic_data; | 917 MockQuicData mock_quic_data; |
| 914 QuicStreamOffset header_stream_offset = 0; | 918 QuicStreamOffset header_stream_offset = 0; |
| 915 mock_quic_data.AddWrite( | 919 mock_quic_data.AddWrite( |
| 916 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 920 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 917 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 921 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 918 2, GetNthClientInitiatedStreamId(0), true, true, | 922 2, GetNthClientInitiatedStreamId(0), true, true, |
| 919 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 923 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 920 SpdyHeaderBlock response_headers = GetResponseHeaders("200 OK"); | 924 SpdyHeaderBlock response_headers = GetResponseHeaders("200 OK"); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 950 ConstructClientAckPacket(4, packet_number, 3, 1)); | 954 ConstructClientAckPacket(4, packet_number, 3, 1)); |
| 951 | 955 |
| 952 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 956 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 953 | 957 |
| 954 CreateSession(); | 958 CreateSession(); |
| 955 | 959 |
| 956 SendRequestAndExpectQuicResponse("hello!"); | 960 SendRequestAndExpectQuicResponse("hello!"); |
| 957 } | 961 } |
| 958 | 962 |
| 959 TEST_P(QuicNetworkTransactionTest, TooLargeResponseHeaders) { | 963 TEST_P(QuicNetworkTransactionTest, TooLargeResponseHeaders) { |
| 960 params_.origins_to_force_quic_on.insert( | 964 session_params_.origins_to_force_quic_on.insert( |
| 961 HostPortPair::FromString("mail.example.org:443")); | 965 HostPortPair::FromString("mail.example.org:443")); |
| 962 | 966 |
| 963 MockQuicData mock_quic_data; | 967 MockQuicData mock_quic_data; |
| 964 QuicStreamOffset header_stream_offset = 0; | 968 QuicStreamOffset header_stream_offset = 0; |
| 965 mock_quic_data.AddWrite( | 969 mock_quic_data.AddWrite( |
| 966 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 970 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 967 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 971 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 968 2, GetNthClientInitiatedStreamId(0), true, true, | 972 2, GetNthClientInitiatedStreamId(0), true, true, |
| 969 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 973 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 970 SpdyHeaderBlock response_headers = GetResponseHeaders("200 OK"); | 974 SpdyHeaderBlock response_headers = GetResponseHeaders("200 OK"); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1006 CreateSession(); | 1010 CreateSession(); |
| 1007 | 1011 |
| 1008 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session_.get()); | 1012 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session_.get()); |
| 1009 TestCompletionCallback callback; | 1013 TestCompletionCallback callback; |
| 1010 int rv = trans.Start(&request_, callback.callback(), net_log_.bound()); | 1014 int rv = trans.Start(&request_, callback.callback(), net_log_.bound()); |
| 1011 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 1015 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1012 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_QUIC_PROTOCOL_ERROR)); | 1016 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_QUIC_PROTOCOL_ERROR)); |
| 1013 } | 1017 } |
| 1014 | 1018 |
| 1015 TEST_P(QuicNetworkTransactionTest, ForceQuicForAll) { | 1019 TEST_P(QuicNetworkTransactionTest, ForceQuicForAll) { |
| 1016 params_.origins_to_force_quic_on.insert(HostPortPair()); | 1020 session_params_.origins_to_force_quic_on.insert(HostPortPair()); |
| 1017 | 1021 |
| 1018 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); | 1022 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); |
| 1019 | 1023 |
| 1020 MockQuicData mock_quic_data; | 1024 MockQuicData mock_quic_data; |
| 1021 QuicStreamOffset header_stream_offset = 0; | 1025 QuicStreamOffset header_stream_offset = 0; |
| 1022 mock_quic_data.AddWrite( | 1026 mock_quic_data.AddWrite( |
| 1023 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 1027 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 1024 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 1028 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 1025 2, GetNthClientInitiatedStreamId(0), true, true, | 1029 2, GetNthClientInitiatedStreamId(0), true, true, |
| 1026 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 1030 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 1027 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 1031 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 1028 1, GetNthClientInitiatedStreamId(0), false, false, | 1032 1, GetNthClientInitiatedStreamId(0), false, false, |
| 1029 GetResponseHeaders("200 OK"))); | 1033 GetResponseHeaders("200 OK"))); |
| 1030 mock_quic_data.AddRead(ConstructServerDataPacket( | 1034 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 1031 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); | 1035 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| 1032 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 1036 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| 1033 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read | 1037 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read |
| 1034 | 1038 |
| 1035 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1039 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 1036 | 1040 |
| 1037 CreateSession(); | 1041 CreateSession(); |
| 1038 | 1042 |
| 1039 SendRequestAndExpectQuicResponse("hello!"); | 1043 SendRequestAndExpectQuicResponse("hello!"); |
| 1040 EXPECT_TRUE( | 1044 EXPECT_TRUE( |
| 1041 test_socket_performance_watcher_factory_.rtt_notification_received()); | 1045 test_socket_performance_watcher_factory_.rtt_notification_received()); |
| 1042 } | 1046 } |
| 1043 | 1047 |
| 1044 TEST_P(QuicNetworkTransactionTest, QuicProxy) { | 1048 TEST_P(QuicNetworkTransactionTest, QuicProxy) { |
| 1045 params_.enable_quic = true; | 1049 session_params_.enable_quic = true; |
| 1046 proxy_service_ = | 1050 proxy_service_ = |
| 1047 ProxyService::CreateFixedFromPacResult("QUIC mail.example.org:70"); | 1051 ProxyService::CreateFixedFromPacResult("QUIC mail.example.org:70"); |
| 1048 | 1052 |
| 1049 MockQuicData mock_quic_data; | 1053 MockQuicData mock_quic_data; |
| 1050 QuicStreamOffset header_stream_offset = 0; | 1054 QuicStreamOffset header_stream_offset = 0; |
| 1051 mock_quic_data.AddWrite( | 1055 mock_quic_data.AddWrite( |
| 1052 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 1056 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 1053 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 1057 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 1054 2, GetNthClientInitiatedStreamId(0), true, true, | 1058 2, GetNthClientInitiatedStreamId(0), true, true, |
| 1055 GetRequestHeaders("GET", "http", "/"), &header_stream_offset)); | 1059 GetRequestHeaders("GET", "http", "/"), &header_stream_offset)); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1077 test_socket_performance_watcher_factory_.rtt_notification_received()); | 1081 test_socket_performance_watcher_factory_.rtt_notification_received()); |
| 1078 } | 1082 } |
| 1079 | 1083 |
| 1080 // Regression test for https://crbug.com/492458. Test that for an HTTP | 1084 // Regression test for https://crbug.com/492458. Test that for an HTTP |
| 1081 // connection through a QUIC proxy, the certificate exhibited by the proxy is | 1085 // connection through a QUIC proxy, the certificate exhibited by the proxy is |
| 1082 // checked against the proxy hostname, not the origin hostname. | 1086 // checked against the proxy hostname, not the origin hostname. |
| 1083 TEST_P(QuicNetworkTransactionTest, QuicProxyWithCert) { | 1087 TEST_P(QuicNetworkTransactionTest, QuicProxyWithCert) { |
| 1084 const std::string origin_host = "mail.example.com"; | 1088 const std::string origin_host = "mail.example.com"; |
| 1085 const std::string proxy_host = "www.example.org"; | 1089 const std::string proxy_host = "www.example.org"; |
| 1086 | 1090 |
| 1087 params_.enable_quic = true; | 1091 session_params_.enable_quic = true; |
| 1088 proxy_service_ = | 1092 proxy_service_ = |
| 1089 ProxyService::CreateFixedFromPacResult("QUIC " + proxy_host + ":70"); | 1093 ProxyService::CreateFixedFromPacResult("QUIC " + proxy_host + ":70"); |
| 1090 | 1094 |
| 1091 client_maker_.set_hostname(origin_host); | 1095 client_maker_.set_hostname(origin_host); |
| 1092 MockQuicData mock_quic_data; | 1096 MockQuicData mock_quic_data; |
| 1093 QuicStreamOffset header_stream_offset = 0; | 1097 QuicStreamOffset header_stream_offset = 0; |
| 1094 mock_quic_data.AddWrite( | 1098 mock_quic_data.AddWrite( |
| 1095 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 1099 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 1096 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 1100 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 1097 2, GetNthClientInitiatedStreamId(0), true, true, | 1101 2, GetNthClientInitiatedStreamId(0), true, true, |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1242 | 1246 |
| 1243 // The retry logic must hide the 421 status. The transaction succeeds on | 1247 // The retry logic must hide the 421 status. The transaction succeeds on |
| 1244 // |http_data|. | 1248 // |http_data|. |
| 1245 EXPECT_THAT(callback.WaitForResult(), IsOk()); | 1249 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 1246 CheckWasHttpResponse(&trans); | 1250 CheckWasHttpResponse(&trans); |
| 1247 CheckResponsePort(&trans, 443); | 1251 CheckResponsePort(&trans, 443); |
| 1248 CheckResponseData(&trans, "hello!"); | 1252 CheckResponseData(&trans, "hello!"); |
| 1249 } | 1253 } |
| 1250 | 1254 |
| 1251 TEST_P(QuicNetworkTransactionTest, ForceQuicWithErrorConnecting) { | 1255 TEST_P(QuicNetworkTransactionTest, ForceQuicWithErrorConnecting) { |
| 1252 params_.origins_to_force_quic_on.insert( | 1256 session_params_.origins_to_force_quic_on.insert( |
| 1253 HostPortPair::FromString("mail.example.org:443")); | 1257 HostPortPair::FromString("mail.example.org:443")); |
| 1254 | 1258 |
| 1255 MockQuicData mock_quic_data1; | 1259 MockQuicData mock_quic_data1; |
| 1256 QuicStreamOffset header_stream_offset = 0; | 1260 QuicStreamOffset header_stream_offset = 0; |
| 1257 mock_quic_data1.AddWrite( | 1261 mock_quic_data1.AddWrite( |
| 1258 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 1262 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 1259 mock_quic_data1.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); | 1263 mock_quic_data1.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); |
| 1260 MockQuicData mock_quic_data2; | 1264 MockQuicData mock_quic_data2; |
| 1261 header_stream_offset = 0; | 1265 header_stream_offset = 0; |
| 1262 mock_quic_data2.AddWrite( | 1266 mock_quic_data2.AddWrite( |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1276 TestCompletionCallback callback; | 1280 TestCompletionCallback callback; |
| 1277 int rv = trans.Start(&request_, callback.callback(), net_log_.bound()); | 1281 int rv = trans.Start(&request_, callback.callback(), net_log_.bound()); |
| 1278 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 1282 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1279 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONNECTION_CLOSED)); | 1283 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONNECTION_CLOSED)); |
| 1280 EXPECT_EQ(1 + i, test_socket_performance_watcher_factory_.watcher_count()); | 1284 EXPECT_EQ(1 + i, test_socket_performance_watcher_factory_.watcher_count()); |
| 1281 } | 1285 } |
| 1282 } | 1286 } |
| 1283 | 1287 |
| 1284 TEST_P(QuicNetworkTransactionTest, DoNotForceQuicForHttps) { | 1288 TEST_P(QuicNetworkTransactionTest, DoNotForceQuicForHttps) { |
| 1285 // Attempt to "force" quic on 443, which will not be honored. | 1289 // Attempt to "force" quic on 443, which will not be honored. |
| 1286 params_.origins_to_force_quic_on.insert( | 1290 session_params_.origins_to_force_quic_on.insert( |
| 1287 HostPortPair::FromString("www.google.com:443")); | 1291 HostPortPair::FromString("www.google.com:443")); |
| 1288 | 1292 |
| 1289 MockRead http_reads[] = { | 1293 MockRead http_reads[] = { |
| 1290 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"), | 1294 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"), |
| 1291 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 1295 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| 1292 MockRead(ASYNC, OK)}; | 1296 MockRead(ASYNC, OK)}; |
| 1293 | 1297 |
| 1294 StaticSocketDataProvider data(http_reads, arraysize(http_reads), nullptr, 0); | 1298 StaticSocketDataProvider data(http_reads, arraysize(http_reads), nullptr, 0); |
| 1295 socket_factory_.AddSocketDataProvider(&data); | 1299 socket_factory_.AddSocketDataProvider(&data); |
| 1296 SSLSocketDataProvider ssl(ASYNC, OK); | 1300 SSLSocketDataProvider ssl(ASYNC, OK); |
| (...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1545 // because of migrating port. | 1549 // because of migrating port. |
| 1546 NetErrorDetails details; | 1550 NetErrorDetails details; |
| 1547 EXPECT_FALSE(details.quic_port_migration_detected); | 1551 EXPECT_FALSE(details.quic_port_migration_detected); |
| 1548 trans.PopulateNetErrorDetails(&details); | 1552 trans.PopulateNetErrorDetails(&details); |
| 1549 EXPECT_TRUE(details.quic_port_migration_detected); | 1553 EXPECT_TRUE(details.quic_port_migration_detected); |
| 1550 } | 1554 } |
| 1551 | 1555 |
| 1552 // Verify that if a QUIC connection times out, the QuicHttpStream will | 1556 // Verify that if a QUIC connection times out, the QuicHttpStream will |
| 1553 // return QUIC_PROTOCOL_ERROR. | 1557 // return QUIC_PROTOCOL_ERROR. |
| 1554 TEST_P(QuicNetworkTransactionTest, TimeoutAfterHandshakeConfirmed) { | 1558 TEST_P(QuicNetworkTransactionTest, TimeoutAfterHandshakeConfirmed) { |
| 1555 params_.quic_idle_connection_timeout_seconds = 5; | 1559 session_params_.quic_idle_connection_timeout_seconds = 5; |
| 1556 | 1560 |
| 1557 // The request will initially go out over QUIC. | 1561 // The request will initially go out over QUIC. |
| 1558 MockQuicData quic_data; | 1562 MockQuicData quic_data; |
| 1559 QuicStreamOffset header_stream_offset = 0; | 1563 QuicStreamOffset header_stream_offset = 0; |
| 1560 SpdyPriority priority = | 1564 SpdyPriority priority = |
| 1561 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); | 1565 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); |
| 1562 | 1566 |
| 1563 std::string request_data; | 1567 std::string request_data; |
| 1564 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( | 1568 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( |
| 1565 1, GetNthClientInitiatedStreamId(0), true, true, priority, | 1569 1, GetNthClientInitiatedStreamId(0), true, true, priority, |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1635 quic_task_runner_->RunUntilIdle(); | 1639 quic_task_runner_->RunUntilIdle(); |
| 1636 | 1640 |
| 1637 ExpectQuicAlternateProtocolMapping(); | 1641 ExpectQuicAlternateProtocolMapping(); |
| 1638 ASSERT_TRUE(quic_data.AllWriteDataConsumed()); | 1642 ASSERT_TRUE(quic_data.AllWriteDataConsumed()); |
| 1639 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_QUIC_PROTOCOL_ERROR)); | 1643 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_QUIC_PROTOCOL_ERROR)); |
| 1640 } | 1644 } |
| 1641 | 1645 |
| 1642 // Verify that if a QUIC connection RTOs, the QuicHttpStream will | 1646 // Verify that if a QUIC connection RTOs, the QuicHttpStream will |
| 1643 // return QUIC_PROTOCOL_ERROR. | 1647 // return QUIC_PROTOCOL_ERROR. |
| 1644 TEST_P(QuicNetworkTransactionTest, TooManyRtosAfterHandshakeConfirmed) { | 1648 TEST_P(QuicNetworkTransactionTest, TooManyRtosAfterHandshakeConfirmed) { |
| 1645 params_.quic_connection_options.push_back(k5RTO); | 1649 session_params_.quic_connection_options.push_back(k5RTO); |
| 1646 | 1650 |
| 1647 // The request will initially go out over QUIC. | 1651 // The request will initially go out over QUIC. |
| 1648 MockQuicData quic_data; | 1652 MockQuicData quic_data; |
| 1649 QuicStreamOffset header_stream_offset = 0; | 1653 QuicStreamOffset header_stream_offset = 0; |
| 1650 SpdyPriority priority = | 1654 SpdyPriority priority = |
| 1651 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); | 1655 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); |
| 1652 | 1656 |
| 1653 std::string request_data; | 1657 std::string request_data; |
| 1654 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( | 1658 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( |
| 1655 1, GetNthClientInitiatedStreamId(0), true, true, priority, | 1659 1, GetNthClientInitiatedStreamId(0), true, true, priority, |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1734 | 1738 |
| 1735 ExpectQuicAlternateProtocolMapping(); | 1739 ExpectQuicAlternateProtocolMapping(); |
| 1736 ASSERT_TRUE(quic_data.AllWriteDataConsumed()); | 1740 ASSERT_TRUE(quic_data.AllWriteDataConsumed()); |
| 1737 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_QUIC_PROTOCOL_ERROR)); | 1741 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_QUIC_PROTOCOL_ERROR)); |
| 1738 } | 1742 } |
| 1739 | 1743 |
| 1740 // Verify that if a QUIC connection RTOs, while there are no active streams | 1744 // Verify that if a QUIC connection RTOs, while there are no active streams |
| 1741 // QUIC will not be marked as broken. | 1745 // QUIC will not be marked as broken. |
| 1742 TEST_P(QuicNetworkTransactionTest, | 1746 TEST_P(QuicNetworkTransactionTest, |
| 1743 TooManyRtosAfterHandshakeConfirmedAndStreamReset) { | 1747 TooManyRtosAfterHandshakeConfirmedAndStreamReset) { |
| 1744 params_.quic_connection_options.push_back(k5RTO); | 1748 session_params_.quic_connection_options.push_back(k5RTO); |
| 1745 | 1749 |
| 1746 // The request will initially go out over QUIC. | 1750 // The request will initially go out over QUIC. |
| 1747 MockQuicData quic_data; | 1751 MockQuicData quic_data; |
| 1748 QuicStreamOffset header_stream_offset = 0; | 1752 QuicStreamOffset header_stream_offset = 0; |
| 1749 SpdyPriority priority = | 1753 SpdyPriority priority = |
| 1750 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); | 1754 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); |
| 1751 | 1755 |
| 1752 std::string request_data; | 1756 std::string request_data; |
| 1753 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( | 1757 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( |
| 1754 1, GetNthClientInitiatedStreamId(0), true, true, priority, | 1758 1, GetNthClientInitiatedStreamId(0), true, true, priority, |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1901 | 1905 |
| 1902 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_QUIC_PROTOCOL_ERROR)); | 1906 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_QUIC_PROTOCOL_ERROR)); |
| 1903 ExpectQuicAlternateProtocolMapping(); | 1907 ExpectQuicAlternateProtocolMapping(); |
| 1904 ASSERT_TRUE(quic_data.AllWriteDataConsumed()); | 1908 ASSERT_TRUE(quic_data.AllWriteDataConsumed()); |
| 1905 } | 1909 } |
| 1906 | 1910 |
| 1907 // Verify that with mark_quic_broken_when_network_blackholes enabled, if a QUIC | 1911 // Verify that with mark_quic_broken_when_network_blackholes enabled, if a QUIC |
| 1908 // connection times out, then QUIC will be marked as broken and the request | 1912 // connection times out, then QUIC will be marked as broken and the request |
| 1909 // retried over TCP. | 1913 // retried over TCP. |
| 1910 TEST_P(QuicNetworkTransactionTest, TimeoutAfterHandshakeConfirmedThenBroken) { | 1914 TEST_P(QuicNetworkTransactionTest, TimeoutAfterHandshakeConfirmedThenBroken) { |
| 1911 params_.mark_quic_broken_when_network_blackholes = true; | 1915 session_params_.mark_quic_broken_when_network_blackholes = true; |
| 1912 params_.quic_idle_connection_timeout_seconds = 5; | 1916 session_params_.quic_idle_connection_timeout_seconds = 5; |
| 1913 | 1917 |
| 1914 // The request will initially go out over QUIC. | 1918 // The request will initially go out over QUIC. |
| 1915 MockQuicData quic_data; | 1919 MockQuicData quic_data; |
| 1916 QuicStreamOffset header_stream_offset = 0; | 1920 QuicStreamOffset header_stream_offset = 0; |
| 1917 SpdyPriority priority = | 1921 SpdyPriority priority = |
| 1918 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); | 1922 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); |
| 1919 | 1923 |
| 1920 std::string request_data; | 1924 std::string request_data; |
| 1921 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( | 1925 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( |
| 1922 1, GetNthClientInitiatedStreamId(0), true, true, priority, | 1926 1, GetNthClientInitiatedStreamId(0), true, true, priority, |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2018 // Read the response body over TCP. | 2022 // Read the response body over TCP. |
| 2019 CheckResponseData(&trans, "hello world"); | 2023 CheckResponseData(&trans, "hello world"); |
| 2020 ASSERT_TRUE(http_data.AllWriteDataConsumed()); | 2024 ASSERT_TRUE(http_data.AllWriteDataConsumed()); |
| 2021 ASSERT_TRUE(http_data.AllReadDataConsumed()); | 2025 ASSERT_TRUE(http_data.AllReadDataConsumed()); |
| 2022 } | 2026 } |
| 2023 | 2027 |
| 2024 // Verify that with retry_without_alt_svc_on_quic_errors enabled, if a QUIC | 2028 // Verify that with retry_without_alt_svc_on_quic_errors enabled, if a QUIC |
| 2025 // connection times out, then QUIC will be marked as broken and the request | 2029 // connection times out, then QUIC will be marked as broken and the request |
| 2026 // retried over TCP. | 2030 // retried over TCP. |
| 2027 TEST_P(QuicNetworkTransactionTest, TimeoutAfterHandshakeConfirmedThenBroken2) { | 2031 TEST_P(QuicNetworkTransactionTest, TimeoutAfterHandshakeConfirmedThenBroken2) { |
| 2028 params_.retry_without_alt_svc_on_quic_errors = true; | 2032 session_params_.retry_without_alt_svc_on_quic_errors = true; |
| 2029 params_.quic_idle_connection_timeout_seconds = 5; | 2033 session_params_.quic_idle_connection_timeout_seconds = 5; |
| 2030 | 2034 |
| 2031 // The request will initially go out over QUIC. | 2035 // The request will initially go out over QUIC. |
| 2032 MockQuicData quic_data; | 2036 MockQuicData quic_data; |
| 2033 QuicStreamOffset header_stream_offset = 0; | 2037 QuicStreamOffset header_stream_offset = 0; |
| 2034 SpdyPriority priority = | 2038 SpdyPriority priority = |
| 2035 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); | 2039 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); |
| 2036 | 2040 |
| 2037 std::string request_data; | 2041 std::string request_data; |
| 2038 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( | 2042 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( |
| 2039 1, GetNthClientInitiatedStreamId(0), true, true, priority, | 2043 1, GetNthClientInitiatedStreamId(0), true, true, priority, |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2138 ExpectBrokenAlternateProtocolMapping(); | 2142 ExpectBrokenAlternateProtocolMapping(); |
| 2139 ASSERT_TRUE(http_data.AllWriteDataConsumed()); | 2143 ASSERT_TRUE(http_data.AllWriteDataConsumed()); |
| 2140 ASSERT_TRUE(http_data.AllReadDataConsumed()); | 2144 ASSERT_TRUE(http_data.AllReadDataConsumed()); |
| 2141 } | 2145 } |
| 2142 | 2146 |
| 2143 // Verify that with mark_quic_broken_when_network_blackholes enabled, if a QUIC | 2147 // Verify that with mark_quic_broken_when_network_blackholes enabled, if a QUIC |
| 2144 // connection times out, then QUIC will be marked as broken but the request | 2148 // connection times out, then QUIC will be marked as broken but the request |
| 2145 // will not be retried over TCP. | 2149 // will not be retried over TCP. |
| 2146 TEST_P(QuicNetworkTransactionTest, | 2150 TEST_P(QuicNetworkTransactionTest, |
| 2147 TimeoutAfterHandshakeConfirmedAndHeadersThenBrokenNotRetried) { | 2151 TimeoutAfterHandshakeConfirmedAndHeadersThenBrokenNotRetried) { |
| 2148 params_.mark_quic_broken_when_network_blackholes = true; | 2152 session_params_.mark_quic_broken_when_network_blackholes = true; |
| 2149 params_.quic_idle_connection_timeout_seconds = 5; | 2153 session_params_.quic_idle_connection_timeout_seconds = 5; |
| 2150 | 2154 |
| 2151 // The request will initially go out over QUIC. | 2155 // The request will initially go out over QUIC. |
| 2152 MockQuicData quic_data; | 2156 MockQuicData quic_data; |
| 2153 QuicStreamOffset header_stream_offset = 0; | 2157 QuicStreamOffset header_stream_offset = 0; |
| 2154 SpdyPriority priority = | 2158 SpdyPriority priority = |
| 2155 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); | 2159 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); |
| 2156 | 2160 |
| 2157 std::string request_data; | 2161 std::string request_data; |
| 2158 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( | 2162 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( |
| 2159 1, GetNthClientInitiatedStreamId(0), true, true, priority, | 2163 1, GetNthClientInitiatedStreamId(0), true, true, priority, |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2250 std::string response_data; | 2254 std::string response_data; |
| 2251 ASSERT_THAT(ReadTransaction(&trans, &response_data), | 2255 ASSERT_THAT(ReadTransaction(&trans, &response_data), |
| 2252 IsError(ERR_QUIC_PROTOCOL_ERROR)); | 2256 IsError(ERR_QUIC_PROTOCOL_ERROR)); |
| 2253 } | 2257 } |
| 2254 | 2258 |
| 2255 // Verify that with mark_quic_broken_when_network_blackholes enabled, if a QUIC | 2259 // Verify that with mark_quic_broken_when_network_blackholes enabled, if a QUIC |
| 2256 // connection RTOs, then QUIC will be marked as broken and the request retried | 2260 // connection RTOs, then QUIC will be marked as broken and the request retried |
| 2257 // over TCP. | 2261 // over TCP. |
| 2258 TEST_P(QuicNetworkTransactionTest, | 2262 TEST_P(QuicNetworkTransactionTest, |
| 2259 TooManyRtosAfterHandshakeConfirmedThenBroken) { | 2263 TooManyRtosAfterHandshakeConfirmedThenBroken) { |
| 2260 params_.mark_quic_broken_when_network_blackholes = true; | 2264 session_params_.mark_quic_broken_when_network_blackholes = true; |
| 2261 params_.quic_connection_options.push_back(k5RTO); | 2265 session_params_.quic_connection_options.push_back(k5RTO); |
| 2262 | 2266 |
| 2263 // The request will initially go out over QUIC. | 2267 // The request will initially go out over QUIC. |
| 2264 MockQuicData quic_data; | 2268 MockQuicData quic_data; |
| 2265 QuicStreamOffset header_stream_offset = 0; | 2269 QuicStreamOffset header_stream_offset = 0; |
| 2266 SpdyPriority priority = | 2270 SpdyPriority priority = |
| 2267 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); | 2271 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); |
| 2268 | 2272 |
| 2269 std::string request_data; | 2273 std::string request_data; |
| 2270 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( | 2274 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( |
| 2271 1, GetNthClientInitiatedStreamId(0), true, true, priority, | 2275 1, GetNthClientInitiatedStreamId(0), true, true, priority, |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2375 // Read the response body over TCP. | 2379 // Read the response body over TCP. |
| 2376 CheckResponseData(&trans, "hello world"); | 2380 CheckResponseData(&trans, "hello world"); |
| 2377 ASSERT_TRUE(http_data.AllWriteDataConsumed()); | 2381 ASSERT_TRUE(http_data.AllWriteDataConsumed()); |
| 2378 ASSERT_TRUE(http_data.AllReadDataConsumed()); | 2382 ASSERT_TRUE(http_data.AllReadDataConsumed()); |
| 2379 } | 2383 } |
| 2380 | 2384 |
| 2381 // Verify that if a QUIC connection RTOs, while there are no active streams | 2385 // Verify that if a QUIC connection RTOs, while there are no active streams |
| 2382 // QUIC will be marked as broken. | 2386 // QUIC will be marked as broken. |
| 2383 TEST_P(QuicNetworkTransactionTest, | 2387 TEST_P(QuicNetworkTransactionTest, |
| 2384 TooManyRtosAfterHandshakeConfirmedAndStreamResetThenBroken) { | 2388 TooManyRtosAfterHandshakeConfirmedAndStreamResetThenBroken) { |
| 2385 params_.mark_quic_broken_when_network_blackholes = true; | 2389 session_params_.mark_quic_broken_when_network_blackholes = true; |
| 2386 params_.quic_connection_options.push_back(k5RTO); | 2390 session_params_.quic_connection_options.push_back(k5RTO); |
| 2387 | 2391 |
| 2388 // The request will initially go out over QUIC. | 2392 // The request will initially go out over QUIC. |
| 2389 MockQuicData quic_data; | 2393 MockQuicData quic_data; |
| 2390 QuicStreamOffset header_stream_offset = 0; | 2394 QuicStreamOffset header_stream_offset = 0; |
| 2391 SpdyPriority priority = | 2395 SpdyPriority priority = |
| 2392 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); | 2396 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); |
| 2393 | 2397 |
| 2394 std::string request_data; | 2398 std::string request_data; |
| 2395 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( | 2399 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( |
| 2396 1, GetNthClientInitiatedStreamId(0), true, true, priority, | 2400 1, GetNthClientInitiatedStreamId(0), true, true, priority, |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2483 ExpectBrokenAlternateProtocolMapping(); | 2487 ExpectBrokenAlternateProtocolMapping(); |
| 2484 | 2488 |
| 2485 ASSERT_TRUE(quic_data.AllWriteDataConsumed()); | 2489 ASSERT_TRUE(quic_data.AllWriteDataConsumed()); |
| 2486 } | 2490 } |
| 2487 | 2491 |
| 2488 // Verify that with retry_without_alt_svc_on_quic_errors enabled, if a QUIC | 2492 // Verify that with retry_without_alt_svc_on_quic_errors enabled, if a QUIC |
| 2489 // protocol error occurs after the handshake is confirmed, the request | 2493 // protocol error occurs after the handshake is confirmed, the request |
| 2490 // retried over TCP and the QUIC will be marked as broken. | 2494 // retried over TCP and the QUIC will be marked as broken. |
| 2491 TEST_P(QuicNetworkTransactionTest, | 2495 TEST_P(QuicNetworkTransactionTest, |
| 2492 ProtocolErrorAfterHandshakeConfirmedThenBroken) { | 2496 ProtocolErrorAfterHandshakeConfirmedThenBroken) { |
| 2493 params_.retry_without_alt_svc_on_quic_errors = true; | 2497 session_params_.retry_without_alt_svc_on_quic_errors = true; |
| 2494 params_.quic_idle_connection_timeout_seconds = 5; | 2498 session_params_.quic_idle_connection_timeout_seconds = 5; |
| 2495 | 2499 |
| 2496 // The request will initially go out over QUIC. | 2500 // The request will initially go out over QUIC. |
| 2497 MockQuicData quic_data; | 2501 MockQuicData quic_data; |
| 2498 QuicStreamOffset header_stream_offset = 0; | 2502 QuicStreamOffset header_stream_offset = 0; |
| 2499 quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2503 quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 2500 1, GetNthClientInitiatedStreamId(0), true, true, | 2504 1, GetNthClientInitiatedStreamId(0), true, true, |
| 2501 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 2505 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 2502 quic_data.AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset)); | 2506 quic_data.AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset)); |
| 2503 // Peer sending data from an non-existing stream causes this end to raise | 2507 // Peer sending data from an non-existing stream causes this end to raise |
| 2504 // error and close connection. | 2508 // error and close connection. |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2708 | 2712 |
| 2709 AddHangingNonAlternateProtocolSocketData(); | 2713 AddHangingNonAlternateProtocolSocketData(); |
| 2710 | 2714 |
| 2711 TestProxyDelegate test_proxy_delegate; | 2715 TestProxyDelegate test_proxy_delegate; |
| 2712 | 2716 |
| 2713 proxy_service_ = | 2717 proxy_service_ = |
| 2714 ProxyService::CreateFixedFromPacResult("HTTPS mail.example.org:443"); | 2718 ProxyService::CreateFixedFromPacResult("HTTPS mail.example.org:443"); |
| 2715 | 2719 |
| 2716 test_proxy_delegate.set_alternative_proxy_server( | 2720 test_proxy_delegate.set_alternative_proxy_server( |
| 2717 ProxyServer::FromPacString("QUIC mail.example.org:443")); | 2721 ProxyServer::FromPacString("QUIC mail.example.org:443")); |
| 2718 params_.proxy_delegate = &test_proxy_delegate; | 2722 session_context_.proxy_delegate = &test_proxy_delegate; |
| 2719 | 2723 |
| 2720 request_.url = GURL("http://mail.example.org/"); | 2724 request_.url = GURL("http://mail.example.org/"); |
| 2721 | 2725 |
| 2722 CreateSession(); | 2726 CreateSession(); |
| 2723 | 2727 |
| 2724 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 443); | 2728 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 443); |
| 2725 histogram_tester.ExpectUniqueSample("Net.QuicAlternativeProxy.Usage", | 2729 histogram_tester.ExpectUniqueSample("Net.QuicAlternativeProxy.Usage", |
| 2726 1 /* ALTERNATIVE_PROXY_USAGE_WON_RACE */, | 2730 1 /* ALTERNATIVE_PROXY_USAGE_WON_RACE */, |
| 2727 1); | 2731 1); |
| 2728 | 2732 |
| (...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3115 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 3119 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 3116 | 3120 |
| 3117 // There is no need to set up main job, because no attempt will be made to | 3121 // There is no need to set up main job, because no attempt will be made to |
| 3118 // speak to the proxy over TCP. | 3122 // speak to the proxy over TCP. |
| 3119 request_.url = GURL("http://mail.example.org/"); | 3123 request_.url = GURL("http://mail.example.org/"); |
| 3120 TestProxyDelegate test_proxy_delegate; | 3124 TestProxyDelegate test_proxy_delegate; |
| 3121 const HostPortPair host_port_pair("mail.example.org", 443); | 3125 const HostPortPair host_port_pair("mail.example.org", 443); |
| 3122 | 3126 |
| 3123 test_proxy_delegate.set_alternative_proxy_server( | 3127 test_proxy_delegate.set_alternative_proxy_server( |
| 3124 ProxyServer::FromPacString("QUIC mail.example.org:443")); | 3128 ProxyServer::FromPacString("QUIC mail.example.org:443")); |
| 3125 params_.proxy_delegate = &test_proxy_delegate; | 3129 session_context_.proxy_delegate = &test_proxy_delegate; |
| 3126 CreateSession(); | 3130 CreateSession(); |
| 3127 EXPECT_TRUE(test_proxy_delegate.alternative_proxy_server().is_quic()); | 3131 EXPECT_TRUE(test_proxy_delegate.alternative_proxy_server().is_quic()); |
| 3128 | 3132 |
| 3129 // The main job needs to hang in order to guarantee that the alternative | 3133 // The main job needs to hang in order to guarantee that the alternative |
| 3130 // proxy server job will "win". | 3134 // proxy server job will "win". |
| 3131 AddHangingNonAlternateProtocolSocketData(); | 3135 AddHangingNonAlternateProtocolSocketData(); |
| 3132 | 3136 |
| 3133 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 443); | 3137 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 443); |
| 3134 | 3138 |
| 3135 // Verify that the alternative proxy server is not marked as broken. | 3139 // Verify that the alternative proxy server is not marked as broken. |
| (...skipping 691 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3827 0); | 3831 0); |
| 3828 socket_factory_.AddSocketDataProvider(&http_data); | 3832 socket_factory_.AddSocketDataProvider(&http_data); |
| 3829 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 3833 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
| 3830 | 3834 |
| 3831 TestProxyDelegate test_proxy_delegate; | 3835 TestProxyDelegate test_proxy_delegate; |
| 3832 const HostPortPair host_port_pair("myproxy.org", 443); | 3836 const HostPortPair host_port_pair("myproxy.org", 443); |
| 3833 test_proxy_delegate.set_alternative_proxy_server( | 3837 test_proxy_delegate.set_alternative_proxy_server( |
| 3834 ProxyServer::FromPacString("QUIC myproxy.org:443")); | 3838 ProxyServer::FromPacString("QUIC myproxy.org:443")); |
| 3835 EXPECT_TRUE(test_proxy_delegate.alternative_proxy_server().is_quic()); | 3839 EXPECT_TRUE(test_proxy_delegate.alternative_proxy_server().is_quic()); |
| 3836 | 3840 |
| 3837 params_.proxy_delegate = &test_proxy_delegate; | 3841 session_context_.proxy_delegate = &test_proxy_delegate; |
| 3838 proxy_service_ = | 3842 proxy_service_ = |
| 3839 ProxyService::CreateFixedFromPacResult("HTTPS myproxy.org:443"); | 3843 ProxyService::CreateFixedFromPacResult("HTTPS myproxy.org:443"); |
| 3840 request_.url = GURL("http://mail.example.org/"); | 3844 request_.url = GURL("http://mail.example.org/"); |
| 3841 | 3845 |
| 3842 // In order for a new QUIC session to be established via alternate-protocol | 3846 // In order for a new QUIC session to be established via alternate-protocol |
| 3843 // without racing an HTTP connection, we need the host resolution to happen | 3847 // without racing an HTTP connection, we need the host resolution to happen |
| 3844 // synchronously. | 3848 // synchronously. |
| 3845 host_resolver_.set_synchronous_mode(true); | 3849 host_resolver_.set_synchronous_mode(true); |
| 3846 host_resolver_.rules()->AddIPLiteralRule("myproxy.org", "192.168.0.1", ""); | 3850 host_resolver_.rules()->AddIPLiteralRule("myproxy.org", "192.168.0.1", ""); |
| 3847 HostResolver::RequestInfo info(HostPortPair("myproxy.org", 443)); | 3851 HostResolver::RequestInfo info(HostPortPair("myproxy.org", 443)); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3890 TEST_P(QuicNetworkTransactionTest, | 3894 TEST_P(QuicNetworkTransactionTest, |
| 3891 DISABLED_QuicUploadToAlternativeProxyServer) { | 3895 DISABLED_QuicUploadToAlternativeProxyServer) { |
| 3892 base::HistogramTester histogram_tester; | 3896 base::HistogramTester histogram_tester; |
| 3893 proxy_service_ = | 3897 proxy_service_ = |
| 3894 ProxyService::CreateFixedFromPacResult("HTTPS mail.example.org:443"); | 3898 ProxyService::CreateFixedFromPacResult("HTTPS mail.example.org:443"); |
| 3895 | 3899 |
| 3896 TestProxyDelegate test_proxy_delegate; | 3900 TestProxyDelegate test_proxy_delegate; |
| 3897 | 3901 |
| 3898 test_proxy_delegate.set_alternative_proxy_server( | 3902 test_proxy_delegate.set_alternative_proxy_server( |
| 3899 ProxyServer::FromPacString("QUIC mail.example.org:443")); | 3903 ProxyServer::FromPacString("QUIC mail.example.org:443")); |
| 3900 params_.proxy_delegate = &test_proxy_delegate; | 3904 session_context_.proxy_delegate = &test_proxy_delegate; |
| 3901 | 3905 |
| 3902 request_.url = GURL("http://mail.example.org/"); | 3906 request_.url = GURL("http://mail.example.org/"); |
| 3903 | 3907 |
| 3904 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 3908 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
| 3905 MockWrite writes[] = {MockWrite(SYNCHRONOUS, ERR_FAILED, 1)}; | 3909 MockWrite writes[] = {MockWrite(SYNCHRONOUS, ERR_FAILED, 1)}; |
| 3906 SequencedSocketData socket_data(reads, arraysize(reads), writes, | 3910 SequencedSocketData socket_data(reads, arraysize(reads), writes, |
| 3907 arraysize(writes)); | 3911 arraysize(writes)); |
| 3908 socket_factory_.AddSocketDataProvider(&socket_data); | 3912 socket_factory_.AddSocketDataProvider(&socket_data); |
| 3909 | 3913 |
| 3910 // The non-alternate protocol job needs to hang in order to guarantee that | 3914 // The non-alternate protocol job needs to hang in order to guarantee that |
| (...skipping 18 matching lines...) Expand all Loading... |
| 3929 | 3933 |
| 3930 // Verify that the proxy server is not marked as broken. | 3934 // Verify that the proxy server is not marked as broken. |
| 3931 EXPECT_TRUE(session_->proxy_service()->proxy_retry_info().empty()); | 3935 EXPECT_TRUE(session_->proxy_service()->proxy_retry_info().empty()); |
| 3932 | 3936 |
| 3933 histogram_tester.ExpectUniqueSample("Net.QuicAlternativeProxy.Usage", | 3937 histogram_tester.ExpectUniqueSample("Net.QuicAlternativeProxy.Usage", |
| 3934 1 /* ALTERNATIVE_PROXY_USAGE_WON_RACE */, | 3938 1 /* ALTERNATIVE_PROXY_USAGE_WON_RACE */, |
| 3935 1); | 3939 1); |
| 3936 } | 3940 } |
| 3937 | 3941 |
| 3938 TEST_P(QuicNetworkTransactionTest, QuicUpload) { | 3942 TEST_P(QuicNetworkTransactionTest, QuicUpload) { |
| 3939 params_.origins_to_force_quic_on.insert( | 3943 session_params_.origins_to_force_quic_on.insert( |
| 3940 HostPortPair::FromString("mail.example.org:443")); | 3944 HostPortPair::FromString("mail.example.org:443")); |
| 3941 | 3945 |
| 3942 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 3946 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
| 3943 MockWrite writes[] = {MockWrite(SYNCHRONOUS, ERR_FAILED, 1)}; | 3947 MockWrite writes[] = {MockWrite(SYNCHRONOUS, ERR_FAILED, 1)}; |
| 3944 SequencedSocketData socket_data(reads, arraysize(reads), writes, | 3948 SequencedSocketData socket_data(reads, arraysize(reads), writes, |
| 3945 arraysize(writes)); | 3949 arraysize(writes)); |
| 3946 socket_factory_.AddSocketDataProvider(&socket_data); | 3950 socket_factory_.AddSocketDataProvider(&socket_data); |
| 3947 | 3951 |
| 3948 // The non-alternate protocol job needs to hang in order to guarantee that | 3952 // The non-alternate protocol job needs to hang in order to guarantee that |
| 3949 // the alternate-protocol job will "win". | 3953 // the alternate-protocol job will "win". |
| (...skipping 14 matching lines...) Expand all Loading... |
| 3964 } | 3968 } |
| 3965 | 3969 |
| 3966 TEST_P(QuicNetworkTransactionTest, QuicUploadWriteError) { | 3970 TEST_P(QuicNetworkTransactionTest, QuicUploadWriteError) { |
| 3967 ScopedMockNetworkChangeNotifier network_change_notifier; | 3971 ScopedMockNetworkChangeNotifier network_change_notifier; |
| 3968 MockNetworkChangeNotifier* mock_ncn = | 3972 MockNetworkChangeNotifier* mock_ncn = |
| 3969 network_change_notifier.mock_network_change_notifier(); | 3973 network_change_notifier.mock_network_change_notifier(); |
| 3970 mock_ncn->ForceNetworkHandlesSupported(); | 3974 mock_ncn->ForceNetworkHandlesSupported(); |
| 3971 mock_ncn->SetConnectedNetworksList( | 3975 mock_ncn->SetConnectedNetworksList( |
| 3972 {kDefaultNetworkForTests, kNewNetworkForTests}); | 3976 {kDefaultNetworkForTests, kNewNetworkForTests}); |
| 3973 | 3977 |
| 3974 params_.origins_to_force_quic_on.insert( | 3978 session_params_.origins_to_force_quic_on.insert( |
| 3975 HostPortPair::FromString("mail.example.org:443")); | 3979 HostPortPair::FromString("mail.example.org:443")); |
| 3976 params_.quic_migrate_sessions_on_network_change = true; | 3980 session_params_.quic_migrate_sessions_on_network_change = true; |
| 3977 | 3981 |
| 3978 MockQuicData socket_data; | 3982 MockQuicData socket_data; |
| 3979 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); | 3983 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); |
| 3980 QuicStreamOffset offset = 0; | 3984 QuicStreamOffset offset = 0; |
| 3981 socket_data.AddWrite(ConstructInitialSettingsPacket(1, &offset)); | 3985 socket_data.AddWrite(ConstructInitialSettingsPacket(1, &offset)); |
| 3982 socket_data.AddWrite(ConstructClientRequestHeadersPacket( | 3986 socket_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 3983 2, GetNthClientInitiatedStreamId(0), true, false, | 3987 2, GetNthClientInitiatedStreamId(0), true, false, |
| 3984 GetRequestHeaders("POST", "https", "/"), &offset)); | 3988 GetRequestHeaders("POST", "https", "/"), &offset)); |
| 3985 socket_data.AddWrite(SYNCHRONOUS, ERR_FAILED); | 3989 socket_data.AddWrite(SYNCHRONOUS, ERR_FAILED); |
| 3986 socket_data.AddSocketDataToFactory(&socket_factory_); | 3990 socket_data.AddSocketDataToFactory(&socket_factory_); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 4009 upload_data.AppendData("1", 1, true); | 4013 upload_data.AppendData("1", 1, true); |
| 4010 base::RunLoop().RunUntilIdle(); | 4014 base::RunLoop().RunUntilIdle(); |
| 4011 | 4015 |
| 4012 EXPECT_NE(OK, callback.WaitForResult()); | 4016 EXPECT_NE(OK, callback.WaitForResult()); |
| 4013 trans.reset(); | 4017 trans.reset(); |
| 4014 session_.reset(); | 4018 session_.reset(); |
| 4015 } | 4019 } |
| 4016 | 4020 |
| 4017 // Adds coverage to catch regression such as https://crbug.com/622043 | 4021 // Adds coverage to catch regression such as https://crbug.com/622043 |
| 4018 TEST_P(QuicNetworkTransactionTest, QuicServerPush) { | 4022 TEST_P(QuicNetworkTransactionTest, QuicServerPush) { |
| 4019 params_.origins_to_force_quic_on.insert( | 4023 session_params_.origins_to_force_quic_on.insert( |
| 4020 HostPortPair::FromString("mail.example.org:443")); | 4024 HostPortPair::FromString("mail.example.org:443")); |
| 4021 | 4025 |
| 4022 MockQuicData mock_quic_data; | 4026 MockQuicData mock_quic_data; |
| 4023 QuicStreamOffset header_stream_offset = 0; | 4027 QuicStreamOffset header_stream_offset = 0; |
| 4024 mock_quic_data.AddWrite( | 4028 mock_quic_data.AddWrite( |
| 4025 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 4029 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 4026 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 4030 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 4027 2, GetNthClientInitiatedStreamId(0), true, true, | 4031 2, GetNthClientInitiatedStreamId(0), true, true, |
| 4028 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 4032 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 4029 QuicStreamOffset server_header_offset = 0; | 4033 QuicStreamOffset server_header_offset = 0; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4067 EXPECT_LT(0u, entries.size()); | 4071 EXPECT_LT(0u, entries.size()); |
| 4068 | 4072 |
| 4069 // Check that we logged a QUIC_HTTP_STREAM_ADOPTED_PUSH_STREAM | 4073 // Check that we logged a QUIC_HTTP_STREAM_ADOPTED_PUSH_STREAM |
| 4070 int pos = ExpectLogContainsSomewhere( | 4074 int pos = ExpectLogContainsSomewhere( |
| 4071 entries, 0, NetLogEventType::QUIC_HTTP_STREAM_ADOPTED_PUSH_STREAM, | 4075 entries, 0, NetLogEventType::QUIC_HTTP_STREAM_ADOPTED_PUSH_STREAM, |
| 4072 NetLogEventPhase::NONE); | 4076 NetLogEventPhase::NONE); |
| 4073 EXPECT_LT(0, pos); | 4077 EXPECT_LT(0, pos); |
| 4074 } | 4078 } |
| 4075 | 4079 |
| 4076 TEST_P(QuicNetworkTransactionTest, QuicForceHolBlocking) { | 4080 TEST_P(QuicNetworkTransactionTest, QuicForceHolBlocking) { |
| 4077 params_.quic_force_hol_blocking = true; | 4081 session_params_.quic_force_hol_blocking = true; |
| 4078 params_.origins_to_force_quic_on.insert( | 4082 session_params_.origins_to_force_quic_on.insert( |
| 4079 HostPortPair::FromString("mail.example.org:443")); | 4083 HostPortPair::FromString("mail.example.org:443")); |
| 4080 | 4084 |
| 4081 MockQuicData mock_quic_data; | 4085 MockQuicData mock_quic_data; |
| 4082 | 4086 |
| 4083 QuicStreamOffset offset = 0; | 4087 QuicStreamOffset offset = 0; |
| 4084 mock_quic_data.AddWrite(ConstructInitialSettingsPacket(1, &offset)); | 4088 mock_quic_data.AddWrite(ConstructInitialSettingsPacket(1, &offset)); |
| 4085 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 4089 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 4086 2, GetNthClientInitiatedStreamId(0), true, false, | 4090 2, GetNthClientInitiatedStreamId(0), true, false, |
| 4087 GetRequestHeaders("POST", "https", "/"), &offset)); | 4091 GetRequestHeaders("POST", "https", "/"), &offset)); |
| 4088 | 4092 |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4150 ~QuicURLRequestContext() override { AssertNoURLRequests(); } | 4154 ~QuicURLRequestContext() override { AssertNoURLRequests(); } |
| 4151 | 4155 |
| 4152 MockClientSocketFactory& socket_factory() { return *socket_factory_; } | 4156 MockClientSocketFactory& socket_factory() { return *socket_factory_; } |
| 4153 | 4157 |
| 4154 private: | 4158 private: |
| 4155 MockClientSocketFactory* socket_factory_; | 4159 MockClientSocketFactory* socket_factory_; |
| 4156 URLRequestContextStorage storage_; | 4160 URLRequestContextStorage storage_; |
| 4157 }; | 4161 }; |
| 4158 | 4162 |
| 4159 TEST_P(QuicNetworkTransactionTest, RawHeaderSizeSuccessfullRequest) { | 4163 TEST_P(QuicNetworkTransactionTest, RawHeaderSizeSuccessfullRequest) { |
| 4160 params_.origins_to_force_quic_on.insert( | 4164 session_params_.origins_to_force_quic_on.insert( |
| 4161 HostPortPair::FromString("mail.example.org:443")); | 4165 HostPortPair::FromString("mail.example.org:443")); |
| 4162 | 4166 |
| 4163 MockQuicData mock_quic_data; | 4167 MockQuicData mock_quic_data; |
| 4164 QuicStreamOffset header_stream_offset = 0; | 4168 QuicStreamOffset header_stream_offset = 0; |
| 4165 mock_quic_data.AddWrite( | 4169 mock_quic_data.AddWrite( |
| 4166 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 4170 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 4167 SpdyHeaderBlock headers(GetRequestHeaders("GET", "https", "/")); | 4171 SpdyHeaderBlock headers(GetRequestHeaders("GET", "https", "/")); |
| 4168 headers["user-agent"] = ""; | 4172 headers["user-agent"] = ""; |
| 4169 headers["accept-encoding"] = "gzip, deflate"; | 4173 headers["accept-encoding"] = "gzip, deflate"; |
| 4170 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 4174 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4209 request->GetTotalSentBytes()); | 4213 request->GetTotalSentBytes()); |
| 4210 EXPECT_EQ(network_delegate.total_network_bytes_received(), | 4214 EXPECT_EQ(network_delegate.total_network_bytes_received(), |
| 4211 request->GetTotalReceivedBytes()); | 4215 request->GetTotalReceivedBytes()); |
| 4212 EXPECT_EQ(static_cast<int>(expected_raw_header_response_size), | 4216 EXPECT_EQ(static_cast<int>(expected_raw_header_response_size), |
| 4213 request->raw_header_size()); | 4217 request->raw_header_size()); |
| 4214 EXPECT_TRUE(mock_quic_data.AllReadDataConsumed()); | 4218 EXPECT_TRUE(mock_quic_data.AllReadDataConsumed()); |
| 4215 EXPECT_TRUE(mock_quic_data.AllWriteDataConsumed()); | 4219 EXPECT_TRUE(mock_quic_data.AllWriteDataConsumed()); |
| 4216 } | 4220 } |
| 4217 | 4221 |
| 4218 TEST_P(QuicNetworkTransactionTest, RawHeaderSizeSuccessfullPushHeadersFirst) { | 4222 TEST_P(QuicNetworkTransactionTest, RawHeaderSizeSuccessfullPushHeadersFirst) { |
| 4219 params_.origins_to_force_quic_on.insert( | 4223 session_params_.origins_to_force_quic_on.insert( |
| 4220 HostPortPair::FromString("mail.example.org:443")); | 4224 HostPortPair::FromString("mail.example.org:443")); |
| 4221 | 4225 |
| 4222 MockQuicData mock_quic_data; | 4226 MockQuicData mock_quic_data; |
| 4223 QuicStreamOffset header_stream_offset = 0; | 4227 QuicStreamOffset header_stream_offset = 0; |
| 4224 mock_quic_data.AddWrite( | 4228 mock_quic_data.AddWrite( |
| 4225 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 4229 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 4226 SpdyHeaderBlock headers(GetRequestHeaders("GET", "https", "/")); | 4230 SpdyHeaderBlock headers(GetRequestHeaders("GET", "https", "/")); |
| 4227 headers["user-agent"] = ""; | 4231 headers["user-agent"] = ""; |
| 4228 headers["accept-encoding"] = "gzip, deflate"; | 4232 headers["accept-encoding"] = "gzip, deflate"; |
| 4229 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 4233 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4305 proxy_service_(ProxyService::CreateDirect()), | 4309 proxy_service_(ProxyService::CreateDirect()), |
| 4306 auth_handler_factory_( | 4310 auth_handler_factory_( |
| 4307 HttpAuthHandlerFactory::CreateDefault(&host_resolver_)), | 4311 HttpAuthHandlerFactory::CreateDefault(&host_resolver_)), |
| 4308 random_generator_(0), | 4312 random_generator_(0), |
| 4309 ssl_data_(ASYNC, OK) {} | 4313 ssl_data_(ASYNC, OK) {} |
| 4310 | 4314 |
| 4311 void SetUp() override { | 4315 void SetUp() override { |
| 4312 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); | 4316 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); |
| 4313 base::RunLoop().RunUntilIdle(); | 4317 base::RunLoop().RunUntilIdle(); |
| 4314 | 4318 |
| 4315 HttpNetworkSession::Params params; | 4319 HttpNetworkSession::Params session_params; |
| 4320 session_params.enable_quic = true; |
| 4321 session_params.quic_supported_versions = SupportedVersions(version_); |
| 4322 |
| 4323 HttpNetworkSession::Context session_context; |
| 4316 | 4324 |
| 4317 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); | 4325 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); |
| 4318 params.quic_clock = &clock_; | 4326 session_context.quic_clock = &clock_; |
| 4319 | 4327 |
| 4320 crypto_client_stream_factory_.set_handshake_mode( | 4328 crypto_client_stream_factory_.set_handshake_mode( |
| 4321 MockCryptoClientStream::CONFIRM_HANDSHAKE); | 4329 MockCryptoClientStream::CONFIRM_HANDSHAKE); |
| 4322 params.quic_crypto_client_stream_factory = &crypto_client_stream_factory_; | 4330 session_context.quic_crypto_client_stream_factory = |
| 4331 &crypto_client_stream_factory_; |
| 4323 | 4332 |
| 4324 params.enable_quic = true; | 4333 session_context.quic_random = &random_generator_; |
| 4325 params.quic_random = &random_generator_; | 4334 session_context.client_socket_factory = &socket_factory_; |
| 4326 params.client_socket_factory = &socket_factory_; | 4335 session_context.host_resolver = &host_resolver_; |
| 4327 params.host_resolver = &host_resolver_; | 4336 session_context.cert_verifier = &cert_verifier_; |
| 4328 params.cert_verifier = &cert_verifier_; | 4337 session_context.transport_security_state = &transport_security_state_; |
| 4329 params.transport_security_state = &transport_security_state_; | 4338 session_context.cert_transparency_verifier = |
| 4330 params.cert_transparency_verifier = cert_transparency_verifier_.get(); | 4339 cert_transparency_verifier_.get(); |
| 4331 params.ct_policy_enforcer = &ct_policy_enforcer_; | 4340 session_context.ct_policy_enforcer = &ct_policy_enforcer_; |
| 4332 params.socket_performance_watcher_factory = | 4341 session_context.socket_performance_watcher_factory = |
| 4333 &test_socket_performance_watcher_factory_; | 4342 &test_socket_performance_watcher_factory_; |
| 4334 params.ssl_config_service = ssl_config_service_.get(); | 4343 session_context.ssl_config_service = ssl_config_service_.get(); |
| 4335 params.proxy_service = proxy_service_.get(); | 4344 session_context.proxy_service = proxy_service_.get(); |
| 4336 params.http_auth_handler_factory = auth_handler_factory_.get(); | 4345 session_context.http_auth_handler_factory = auth_handler_factory_.get(); |
| 4337 params.http_server_properties = &http_server_properties_; | 4346 session_context.http_server_properties = &http_server_properties_; |
| 4338 params.quic_supported_versions = SupportedVersions(version_); | |
| 4339 | 4347 |
| 4340 session_.reset(new HttpNetworkSession(params)); | 4348 session_.reset(new HttpNetworkSession(session_params, session_context)); |
| 4341 session_->quic_stream_factory()->set_require_confirmation(true); | 4349 session_->quic_stream_factory()->set_require_confirmation(true); |
| 4342 } | 4350 } |
| 4343 | 4351 |
| 4344 void TearDown() override { | 4352 void TearDown() override { |
| 4345 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); | 4353 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); |
| 4346 // Empty the current queue. | 4354 // Empty the current queue. |
| 4347 base::RunLoop().RunUntilIdle(); | 4355 base::RunLoop().RunUntilIdle(); |
| 4348 PlatformTest::TearDown(); | 4356 PlatformTest::TearDown(); |
| 4349 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); | 4357 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); |
| 4350 base::RunLoop().RunUntilIdle(); | 4358 base::RunLoop().RunUntilIdle(); |
| (...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4725 | 4733 |
| 4726 SendRequestAndExpectQuicResponse(origin1_); | 4734 SendRequestAndExpectQuicResponse(origin1_); |
| 4727 SendRequestAndExpectQuicResponse(origin2_); | 4735 SendRequestAndExpectQuicResponse(origin2_); |
| 4728 | 4736 |
| 4729 EXPECT_TRUE(AllDataConsumed()); | 4737 EXPECT_TRUE(AllDataConsumed()); |
| 4730 } | 4738 } |
| 4731 | 4739 |
| 4732 // crbug.com/705109 - this confirms that matching request with a body | 4740 // crbug.com/705109 - this confirms that matching request with a body |
| 4733 // triggers a crash (pre-fix). | 4741 // triggers a crash (pre-fix). |
| 4734 TEST_P(QuicNetworkTransactionTest, QuicServerPushMatchesRequestWithBody) { | 4742 TEST_P(QuicNetworkTransactionTest, QuicServerPushMatchesRequestWithBody) { |
| 4735 params_.origins_to_force_quic_on.insert( | 4743 session_params_.origins_to_force_quic_on.insert( |
| 4736 HostPortPair::FromString("mail.example.org:443")); | 4744 HostPortPair::FromString("mail.example.org:443")); |
| 4737 | 4745 |
| 4738 MockQuicData mock_quic_data; | 4746 MockQuicData mock_quic_data; |
| 4739 QuicStreamOffset header_stream_offset = 0; | 4747 QuicStreamOffset header_stream_offset = 0; |
| 4740 mock_quic_data.AddWrite( | 4748 mock_quic_data.AddWrite( |
| 4741 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 4749 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 4742 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 4750 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 4743 2, GetNthClientInitiatedStreamId(0), true, true, | 4751 2, GetNthClientInitiatedStreamId(0), true, true, |
| 4744 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 4752 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| 4745 QuicStreamOffset server_header_offset = 0; | 4753 QuicStreamOffset server_header_offset = 0; |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4796 | 4804 |
| 4797 request_.url = GURL("https://mail.example.org/pushed.jpg"); | 4805 request_.url = GURL("https://mail.example.org/pushed.jpg"); |
| 4798 ChunkedUploadDataStream upload_data(0); | 4806 ChunkedUploadDataStream upload_data(0); |
| 4799 upload_data.AppendData("1", 1, true); | 4807 upload_data.AppendData("1", 1, true); |
| 4800 request_.upload_data_stream = &upload_data; | 4808 request_.upload_data_stream = &upload_data; |
| 4801 SendRequestAndExpectQuicResponse("and hello!"); | 4809 SendRequestAndExpectQuicResponse("and hello!"); |
| 4802 } | 4810 } |
| 4803 | 4811 |
| 4804 } // namespace test | 4812 } // namespace test |
| 4805 } // namespace net | 4813 } // namespace net |
| OLD | NEW |