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 |