| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/quic/chromium/quic_http_stream.h" | 5 #include "net/quic/chromium/quic_http_stream.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 192 PacketToWrite(IoMode mode, int rv) : mode(mode), packet(nullptr), rv(rv) {} | 192 PacketToWrite(IoMode mode, int rv) : mode(mode), packet(nullptr), rv(rv) {} |
| 193 IoMode mode; | 193 IoMode mode; |
| 194 QuicReceivedPacket* packet; | 194 QuicReceivedPacket* packet; |
| 195 int rv; | 195 int rv; |
| 196 }; | 196 }; |
| 197 | 197 |
| 198 QuicHttpStreamTest() | 198 QuicHttpStreamTest() |
| 199 : use_closing_stream_(false), | 199 : use_closing_stream_(false), |
| 200 crypto_config_(crypto_test_utils::ProofVerifierForTesting()), | 200 crypto_config_(crypto_test_utils::ProofVerifierForTesting()), |
| 201 read_buffer_(new IOBufferWithSize(4096)), | 201 read_buffer_(new IOBufferWithSize(4096)), |
| 202 promise_id_(kServerDataStreamId1), | 202 promise_id_(GetNthServerInitiatedStreamId(0)), |
| 203 stream_id_(kClientDataStreamId1), | 203 stream_id_(GetNthClientInitiatedStreamId(0)), |
| 204 connection_id_(2), | 204 connection_id_(2), |
| 205 client_maker_(GetParam(), | 205 client_maker_(GetParam(), |
| 206 connection_id_, | 206 connection_id_, |
| 207 &clock_, | 207 &clock_, |
| 208 kDefaultServerHostName, | 208 kDefaultServerHostName, |
| 209 Perspective::IS_CLIENT), | 209 Perspective::IS_CLIENT), |
| 210 server_maker_(GetParam(), | 210 server_maker_(GetParam(), |
| 211 connection_id_, | 211 connection_id_, |
| 212 &clock_, | 212 &clock_, |
| 213 kDefaultServerHostName, | 213 kDefaultServerHostName, |
| (...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 541 if (session_reused) { | 541 if (session_reused) { |
| 542 ExpectConnectTimingHasNoTimes(load_timing_info.connect_timing); | 542 ExpectConnectTimingHasNoTimes(load_timing_info.connect_timing); |
| 543 } else { | 543 } else { |
| 544 ExpectConnectTimingHasTimes( | 544 ExpectConnectTimingHasTimes( |
| 545 load_timing_info.connect_timing, | 545 load_timing_info.connect_timing, |
| 546 CONNECT_TIMING_HAS_SSL_TIMES | CONNECT_TIMING_HAS_DNS_TIMES); | 546 CONNECT_TIMING_HAS_SSL_TIMES | CONNECT_TIMING_HAS_DNS_TIMES); |
| 547 } | 547 } |
| 548 ExpectLoadTimingHasOnlyConnectionTimes(load_timing_info); | 548 ExpectLoadTimingHasOnlyConnectionTimes(load_timing_info); |
| 549 } | 549 } |
| 550 | 550 |
| 551 QuicStreamId GetNthClientInitiatedStreamId(int n) { |
| 552 return test::GetNthClientInitiatedStreamId(GetParam(), n); |
| 553 } |
| 554 |
| 555 QuicStreamId GetNthServerInitiatedStreamId(int n) { |
| 556 return test::GetNthServerInitiatedStreamId(GetParam(), n); |
| 557 } |
| 558 |
| 551 BoundTestNetLog net_log_; | 559 BoundTestNetLog net_log_; |
| 552 bool use_closing_stream_; | 560 bool use_closing_stream_; |
| 553 MockSendAlgorithm* send_algorithm_; | 561 MockSendAlgorithm* send_algorithm_; |
| 554 scoped_refptr<TestTaskRunner> runner_; | 562 scoped_refptr<TestTaskRunner> runner_; |
| 555 std::unique_ptr<MockWrite[]> mock_writes_; | 563 std::unique_ptr<MockWrite[]> mock_writes_; |
| 556 MockClock clock_; | 564 MockClock clock_; |
| 557 HttpServerPropertiesImpl http_server_properties_; | 565 HttpServerPropertiesImpl http_server_properties_; |
| 558 TestQuicConnection* connection_; | 566 TestQuicConnection* connection_; |
| 559 std::unique_ptr<QuicChromiumConnectionHelper> helper_; | 567 std::unique_ptr<QuicChromiumConnectionHelper> helper_; |
| 560 std::unique_ptr<QuicChromiumAlarmFactory> alarm_factory_; | 568 std::unique_ptr<QuicChromiumAlarmFactory> alarm_factory_; |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 620 QuicHttpStreamPeer::GetQuicChromiumClientStream(stream_.get()); | 628 QuicHttpStreamPeer::GetQuicChromiumClientStream(stream_.get()); |
| 621 EXPECT_FALSE(client_stream->can_migrate()); | 629 EXPECT_FALSE(client_stream->can_migrate()); |
| 622 } | 630 } |
| 623 | 631 |
| 624 TEST_P(QuicHttpStreamTest, GetRequest) { | 632 TEST_P(QuicHttpStreamTest, GetRequest) { |
| 625 SetRequest("GET", "/", DEFAULT_PRIORITY); | 633 SetRequest("GET", "/", DEFAULT_PRIORITY); |
| 626 size_t spdy_request_header_frame_length; | 634 size_t spdy_request_header_frame_length; |
| 627 QuicStreamOffset header_stream_offset = 0; | 635 QuicStreamOffset header_stream_offset = 0; |
| 628 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 636 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
| 629 AddWrite(InnerConstructRequestHeadersPacket( | 637 AddWrite(InnerConstructRequestHeadersPacket( |
| 630 2, kClientDataStreamId1, kIncludeVersion, kFin, DEFAULT_PRIORITY, | 638 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, kFin, |
| 631 &spdy_request_header_frame_length, &header_stream_offset)); | 639 DEFAULT_PRIORITY, &spdy_request_header_frame_length, |
| 640 &header_stream_offset)); |
| 632 | 641 |
| 633 Initialize(); | 642 Initialize(); |
| 634 | 643 |
| 635 request_.method = "GET"; | 644 request_.method = "GET"; |
| 636 request_.url = GURL("https://www.example.org/"); | 645 request_.url = GURL("https://www.example.org/"); |
| 637 | 646 |
| 638 // Make sure getting load timing from the stream early does not crash. | 647 // Make sure getting load timing from the stream early does not crash. |
| 639 LoadTimingInfo load_timing_info; | 648 LoadTimingInfo load_timing_info; |
| 640 EXPECT_TRUE(stream_->GetLoadTimingInfo(&load_timing_info)); | 649 EXPECT_TRUE(stream_->GetLoadTimingInfo(&load_timing_info)); |
| 641 | 650 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 682 stream_->GetTotalReceivedBytes()); | 691 stream_->GetTotalReceivedBytes()); |
| 683 } | 692 } |
| 684 | 693 |
| 685 TEST_P(QuicHttpStreamTest, LoadTimingTwoRequests) { | 694 TEST_P(QuicHttpStreamTest, LoadTimingTwoRequests) { |
| 686 SetRequest("GET", "/", DEFAULT_PRIORITY); | 695 SetRequest("GET", "/", DEFAULT_PRIORITY); |
| 687 size_t spdy_request_header_frame_length; | 696 size_t spdy_request_header_frame_length; |
| 688 | 697 |
| 689 QuicStreamOffset offset = 0; | 698 QuicStreamOffset offset = 0; |
| 690 AddWrite(ConstructInitialSettingsPacket(&offset)); | 699 AddWrite(ConstructInitialSettingsPacket(&offset)); |
| 691 AddWrite(InnerConstructRequestHeadersPacket( | 700 AddWrite(InnerConstructRequestHeadersPacket( |
| 692 2, kClientDataStreamId1, kIncludeVersion, kFin, DEFAULT_PRIORITY, | 701 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, kFin, |
| 693 &spdy_request_header_frame_length, &offset)); | 702 DEFAULT_PRIORITY, &spdy_request_header_frame_length, &offset)); |
| 694 | 703 |
| 695 // SetRequest() again for second request as |request_headers_| was moved. | 704 // SetRequest() again for second request as |request_headers_| was moved. |
| 696 SetRequest("GET", "/", DEFAULT_PRIORITY); | 705 SetRequest("GET", "/", DEFAULT_PRIORITY); |
| 697 AddWrite(InnerConstructRequestHeadersPacket( | 706 AddWrite(InnerConstructRequestHeadersPacket( |
| 698 3, kClientDataStreamId2, kIncludeVersion, kFin, DEFAULT_PRIORITY, | 707 3, GetNthClientInitiatedStreamId(1), kIncludeVersion, kFin, |
| 699 &spdy_request_header_frame_length, &offset)); | 708 DEFAULT_PRIORITY, &spdy_request_header_frame_length, &offset)); |
| 700 AddWrite(ConstructClientAckPacket(4, 3, 1, 1)); // Ack the responses. | 709 AddWrite(ConstructClientAckPacket(4, 3, 1, 1)); // Ack the responses. |
| 701 | 710 |
| 702 Initialize(); | 711 Initialize(); |
| 703 | 712 |
| 704 request_.method = "GET"; | 713 request_.method = "GET"; |
| 705 request_.url = GURL("https://www.example.org/"); | 714 request_.url = GURL("https://www.example.org/"); |
| 706 // Start first request. | 715 // Start first request. |
| 707 EXPECT_EQ(OK, | 716 EXPECT_EQ(OK, |
| 708 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 717 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
| 709 net_log_.bound(), callback_.callback())); | 718 net_log_.bound(), callback_.callback())); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 720 stream2.SendRequest(headers_, &response_, callback2.callback())); | 729 stream2.SendRequest(headers_, &response_, callback2.callback())); |
| 721 | 730 |
| 722 // Ack both requests. | 731 // Ack both requests. |
| 723 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 732 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
| 724 | 733 |
| 725 EXPECT_THAT(stream_->ReadResponseHeaders(callback_.callback()), | 734 EXPECT_THAT(stream_->ReadResponseHeaders(callback_.callback()), |
| 726 IsError(ERR_IO_PENDING)); | 735 IsError(ERR_IO_PENDING)); |
| 727 size_t spdy_response_header_frame_length; | 736 size_t spdy_response_header_frame_length; |
| 728 SetResponse("200 OK", string()); | 737 SetResponse("200 OK", string()); |
| 729 ProcessPacket(InnerConstructResponseHeadersPacket( | 738 ProcessPacket(InnerConstructResponseHeadersPacket( |
| 730 2, kClientDataStreamId1, kFin, &spdy_response_header_frame_length)); | 739 2, GetNthClientInitiatedStreamId(0), kFin, |
| 740 &spdy_response_header_frame_length)); |
| 731 | 741 |
| 732 // Now that the headers have been processed, the callback will return. | 742 // Now that the headers have been processed, the callback will return. |
| 733 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | 743 EXPECT_THAT(callback_.WaitForResult(), IsOk()); |
| 734 EXPECT_EQ(200, response_.headers->response_code()); | 744 EXPECT_EQ(200, response_.headers->response_code()); |
| 735 | 745 |
| 736 // There is no body, so this should return immediately. | 746 // There is no body, so this should return immediately. |
| 737 EXPECT_EQ(0, | 747 EXPECT_EQ(0, |
| 738 stream_->ReadResponseBody(read_buffer_.get(), read_buffer_->size(), | 748 stream_->ReadResponseBody(read_buffer_.get(), read_buffer_->size(), |
| 739 callback_.callback())); | 749 callback_.callback())); |
| 740 EXPECT_TRUE(stream_->IsResponseBodyComplete()); | 750 EXPECT_TRUE(stream_->IsResponseBodyComplete()); |
| 741 | 751 |
| 742 LoadTimingInfo load_timing_info; | 752 LoadTimingInfo load_timing_info; |
| 743 EXPECT_TRUE(stream_->GetLoadTimingInfo(&load_timing_info)); | 753 EXPECT_TRUE(stream_->GetLoadTimingInfo(&load_timing_info)); |
| 744 ExpectLoadTimingValid(load_timing_info, /*session_reused=*/false); | 754 ExpectLoadTimingValid(load_timing_info, /*session_reused=*/false); |
| 745 | 755 |
| 746 // SetResponse() again for second request as |response_headers_| was moved. | 756 // SetResponse() again for second request as |response_headers_| was moved. |
| 747 SetResponse("200 OK", string()); | 757 SetResponse("200 OK", string()); |
| 748 EXPECT_THAT(stream2.ReadResponseHeaders(callback2.callback()), | 758 EXPECT_THAT(stream2.ReadResponseHeaders(callback2.callback()), |
| 749 IsError(ERR_IO_PENDING)); | 759 IsError(ERR_IO_PENDING)); |
| 750 | 760 |
| 751 ProcessPacket(InnerConstructResponseHeadersPacket( | 761 ProcessPacket(InnerConstructResponseHeadersPacket( |
| 752 3, kClientDataStreamId2, kFin, &spdy_response_header_frame_length)); | 762 3, GetNthClientInitiatedStreamId(1), kFin, |
| 763 &spdy_response_header_frame_length)); |
| 753 | 764 |
| 754 EXPECT_THAT(callback2.WaitForResult(), IsOk()); | 765 EXPECT_THAT(callback2.WaitForResult(), IsOk()); |
| 755 | 766 |
| 756 // There is no body, so this should return immediately. | 767 // There is no body, so this should return immediately. |
| 757 EXPECT_EQ(0, | 768 EXPECT_EQ(0, |
| 758 stream2.ReadResponseBody(read_buffer_.get(), read_buffer_->size(), | 769 stream2.ReadResponseBody(read_buffer_.get(), read_buffer_->size(), |
| 759 callback2.callback())); | 770 callback2.callback())); |
| 760 EXPECT_TRUE(stream2.IsResponseBodyComplete()); | 771 EXPECT_TRUE(stream2.IsResponseBodyComplete()); |
| 761 | 772 |
| 762 LoadTimingInfo load_timing_info2; | 773 LoadTimingInfo load_timing_info2; |
| 763 EXPECT_TRUE(stream2.GetLoadTimingInfo(&load_timing_info2)); | 774 EXPECT_TRUE(stream2.GetLoadTimingInfo(&load_timing_info2)); |
| 764 ExpectLoadTimingValid(load_timing_info2, /*session_reused=*/true); | 775 ExpectLoadTimingValid(load_timing_info2, /*session_reused=*/true); |
| 765 } | 776 } |
| 766 | 777 |
| 767 // QuicHttpStream does not currently support trailers. It should ignore | 778 // QuicHttpStream does not currently support trailers. It should ignore |
| 768 // trailers upon receiving them. | 779 // trailers upon receiving them. |
| 769 TEST_P(QuicHttpStreamTest, GetRequestWithTrailers) { | 780 TEST_P(QuicHttpStreamTest, GetRequestWithTrailers) { |
| 770 SetRequest("GET", "/", DEFAULT_PRIORITY); | 781 SetRequest("GET", "/", DEFAULT_PRIORITY); |
| 771 size_t spdy_request_header_frame_length; | 782 size_t spdy_request_header_frame_length; |
| 772 QuicStreamOffset header_stream_offset = 0; | 783 QuicStreamOffset header_stream_offset = 0; |
| 773 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 784 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
| 774 AddWrite(InnerConstructRequestHeadersPacket( | 785 AddWrite(InnerConstructRequestHeadersPacket( |
| 775 2, kClientDataStreamId1, kIncludeVersion, kFin, DEFAULT_PRIORITY, | 786 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, kFin, |
| 776 &spdy_request_header_frame_length, &header_stream_offset)); | 787 DEFAULT_PRIORITY, &spdy_request_header_frame_length, |
| 788 &header_stream_offset)); |
| 777 AddWrite(ConstructClientAckPacket(3, 3, 1, 1)); // Ack the data packet. | 789 AddWrite(ConstructClientAckPacket(3, 3, 1, 1)); // Ack the data packet. |
| 778 | 790 |
| 779 Initialize(); | 791 Initialize(); |
| 780 | 792 |
| 781 request_.method = "GET"; | 793 request_.method = "GET"; |
| 782 request_.url = GURL("https://www.example.org/"); | 794 request_.url = GURL("https://www.example.org/"); |
| 783 | 795 |
| 784 EXPECT_EQ(OK, | 796 EXPECT_EQ(OK, |
| 785 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 797 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
| 786 net_log_.bound(), callback_.callback())); | 798 net_log_.bound(), callback_.callback())); |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 859 NetLogEventPhase::NONE); | 871 NetLogEventPhase::NONE); |
| 860 } | 872 } |
| 861 | 873 |
| 862 // Regression test for http://crbug.com/288128 | 874 // Regression test for http://crbug.com/288128 |
| 863 TEST_P(QuicHttpStreamTest, GetRequestLargeResponse) { | 875 TEST_P(QuicHttpStreamTest, GetRequestLargeResponse) { |
| 864 SetRequest("GET", "/", DEFAULT_PRIORITY); | 876 SetRequest("GET", "/", DEFAULT_PRIORITY); |
| 865 size_t spdy_request_headers_frame_length; | 877 size_t spdy_request_headers_frame_length; |
| 866 QuicStreamOffset header_stream_offset = 0; | 878 QuicStreamOffset header_stream_offset = 0; |
| 867 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 879 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
| 868 AddWrite(InnerConstructRequestHeadersPacket( | 880 AddWrite(InnerConstructRequestHeadersPacket( |
| 869 2, kClientDataStreamId1, kIncludeVersion, kFin, DEFAULT_PRIORITY, | 881 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, kFin, |
| 870 &spdy_request_headers_frame_length, &header_stream_offset)); | 882 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, |
| 883 &header_stream_offset)); |
| 871 Initialize(); | 884 Initialize(); |
| 872 | 885 |
| 873 request_.method = "GET"; | 886 request_.method = "GET"; |
| 874 request_.url = GURL("https://www.example.org/"); | 887 request_.url = GURL("https://www.example.org/"); |
| 875 | 888 |
| 876 EXPECT_EQ(OK, | 889 EXPECT_EQ(OK, |
| 877 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 890 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
| 878 net_log_.bound(), callback_.callback())); | 891 net_log_.bound(), callback_.callback())); |
| 879 EXPECT_EQ(OK, | 892 EXPECT_EQ(OK, |
| 880 stream_->SendRequest(headers_, &response_, callback_.callback())); | 893 stream_->SendRequest(headers_, &response_, callback_.callback())); |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 986 EXPECT_EQ(AlternativeService(kProtoQUIC, "www.example.org", 443), | 999 EXPECT_EQ(AlternativeService(kProtoQUIC, "www.example.org", 443), |
| 987 alternative_service2); | 1000 alternative_service2); |
| 988 } | 1001 } |
| 989 | 1002 |
| 990 TEST_P(QuicHttpStreamTest, LogGranularQuicConnectionError) { | 1003 TEST_P(QuicHttpStreamTest, LogGranularQuicConnectionError) { |
| 991 SetRequest("GET", "/", DEFAULT_PRIORITY); | 1004 SetRequest("GET", "/", DEFAULT_PRIORITY); |
| 992 size_t spdy_request_headers_frame_length; | 1005 size_t spdy_request_headers_frame_length; |
| 993 QuicStreamOffset header_stream_offset = 0; | 1006 QuicStreamOffset header_stream_offset = 0; |
| 994 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 1007 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
| 995 AddWrite(InnerConstructRequestHeadersPacket( | 1008 AddWrite(InnerConstructRequestHeadersPacket( |
| 996 2, kClientDataStreamId1, kIncludeVersion, kFin, DEFAULT_PRIORITY, | 1009 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, kFin, |
| 997 &spdy_request_headers_frame_length, &header_stream_offset)); | 1010 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, |
| 1011 &header_stream_offset)); |
| 998 AddWrite(ConstructAckAndRstStreamPacket(3)); | 1012 AddWrite(ConstructAckAndRstStreamPacket(3)); |
| 999 use_closing_stream_ = true; | 1013 use_closing_stream_ = true; |
| 1000 Initialize(); | 1014 Initialize(); |
| 1001 | 1015 |
| 1002 request_.method = "GET"; | 1016 request_.method = "GET"; |
| 1003 request_.url = GURL("https://www.example.org/"); | 1017 request_.url = GURL("https://www.example.org/"); |
| 1004 | 1018 |
| 1005 EXPECT_EQ(OK, | 1019 EXPECT_EQ(OK, |
| 1006 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 1020 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
| 1007 net_log_.bound(), callback_.callback())); | 1021 net_log_.bound(), callback_.callback())); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1027 // By default the test setup defaults handshake to be confirmed. Manually set | 1041 // By default the test setup defaults handshake to be confirmed. Manually set |
| 1028 // it to be not confirmed. | 1042 // it to be not confirmed. |
| 1029 // Granular errors shouldn't be reported if handshake not confirmed. | 1043 // Granular errors shouldn't be reported if handshake not confirmed. |
| 1030 crypto_client_stream_factory_.set_handshake_mode( | 1044 crypto_client_stream_factory_.set_handshake_mode( |
| 1031 MockCryptoClientStream::ZERO_RTT); | 1045 MockCryptoClientStream::ZERO_RTT); |
| 1032 | 1046 |
| 1033 SetRequest("GET", "/", DEFAULT_PRIORITY); | 1047 SetRequest("GET", "/", DEFAULT_PRIORITY); |
| 1034 size_t spdy_request_headers_frame_length; | 1048 size_t spdy_request_headers_frame_length; |
| 1035 QuicStreamOffset header_stream_offset = 0; | 1049 QuicStreamOffset header_stream_offset = 0; |
| 1036 AddWrite(InnerConstructRequestHeadersPacket( | 1050 AddWrite(InnerConstructRequestHeadersPacket( |
| 1037 1, kClientDataStreamId1, kIncludeVersion, kFin, DEFAULT_PRIORITY, | 1051 1, GetNthClientInitiatedStreamId(0), kIncludeVersion, kFin, |
| 1038 &spdy_request_headers_frame_length, &header_stream_offset)); | 1052 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, |
| 1053 &header_stream_offset)); |
| 1039 use_closing_stream_ = true; | 1054 use_closing_stream_ = true; |
| 1040 Initialize(); | 1055 Initialize(); |
| 1041 | 1056 |
| 1042 request_.method = "GET"; | 1057 request_.method = "GET"; |
| 1043 request_.url = GURL("https://www.example.org/"); | 1058 request_.url = GURL("https://www.example.org/"); |
| 1044 | 1059 |
| 1045 EXPECT_EQ(OK, | 1060 EXPECT_EQ(OK, |
| 1046 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 1061 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
| 1047 net_log_.bound(), callback_.callback())); | 1062 net_log_.bound(), callback_.callback())); |
| 1048 EXPECT_EQ(OK, | 1063 EXPECT_EQ(OK, |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1063 EXPECT_EQ(QUIC_NO_ERROR, details.quic_connection_error); | 1078 EXPECT_EQ(QUIC_NO_ERROR, details.quic_connection_error); |
| 1064 } | 1079 } |
| 1065 | 1080 |
| 1066 // Regression test for http://crbug.com/409871 | 1081 // Regression test for http://crbug.com/409871 |
| 1067 TEST_P(QuicHttpStreamTest, SessionClosedBeforeReadResponseHeaders) { | 1082 TEST_P(QuicHttpStreamTest, SessionClosedBeforeReadResponseHeaders) { |
| 1068 SetRequest("GET", "/", DEFAULT_PRIORITY); | 1083 SetRequest("GET", "/", DEFAULT_PRIORITY); |
| 1069 size_t spdy_request_headers_frame_length; | 1084 size_t spdy_request_headers_frame_length; |
| 1070 QuicStreamOffset header_stream_offset = 0; | 1085 QuicStreamOffset header_stream_offset = 0; |
| 1071 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 1086 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
| 1072 AddWrite(InnerConstructRequestHeadersPacket( | 1087 AddWrite(InnerConstructRequestHeadersPacket( |
| 1073 2, kClientDataStreamId1, kIncludeVersion, kFin, DEFAULT_PRIORITY, | 1088 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, kFin, |
| 1074 &spdy_request_headers_frame_length, &header_stream_offset)); | 1089 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, |
| 1090 &header_stream_offset)); |
| 1075 Initialize(); | 1091 Initialize(); |
| 1076 | 1092 |
| 1077 request_.method = "GET"; | 1093 request_.method = "GET"; |
| 1078 request_.url = GURL("https://www.example.org/"); | 1094 request_.url = GURL("https://www.example.org/"); |
| 1079 | 1095 |
| 1080 EXPECT_EQ(OK, | 1096 EXPECT_EQ(OK, |
| 1081 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 1097 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
| 1082 net_log_.bound(), callback_.callback())); | 1098 net_log_.bound(), callback_.callback())); |
| 1083 | 1099 |
| 1084 EXPECT_EQ(OK, | 1100 EXPECT_EQ(OK, |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1095 stream_->GetTotalSentBytes()); | 1111 stream_->GetTotalSentBytes()); |
| 1096 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); | 1112 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); |
| 1097 } | 1113 } |
| 1098 | 1114 |
| 1099 TEST_P(QuicHttpStreamTest, SendPostRequest) { | 1115 TEST_P(QuicHttpStreamTest, SendPostRequest) { |
| 1100 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1116 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| 1101 size_t spdy_request_headers_frame_length; | 1117 size_t spdy_request_headers_frame_length; |
| 1102 QuicStreamOffset header_stream_offset = 0; | 1118 QuicStreamOffset header_stream_offset = 0; |
| 1103 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 1119 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
| 1104 AddWrite(InnerConstructRequestHeadersPacket( | 1120 AddWrite(InnerConstructRequestHeadersPacket( |
| 1105 2, kClientDataStreamId1, kIncludeVersion, !kFin, DEFAULT_PRIORITY, | 1121 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, |
| 1106 &spdy_request_headers_frame_length, &header_stream_offset)); | 1122 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, |
| 1123 &header_stream_offset)); |
| 1107 AddWrite(ConstructClientDataPacket(3, kIncludeVersion, kFin, 0, kUploadData)); | 1124 AddWrite(ConstructClientDataPacket(3, kIncludeVersion, kFin, 0, kUploadData)); |
| 1108 AddWrite(ConstructClientAckPacket(4, 3, 1, 1)); | 1125 AddWrite(ConstructClientAckPacket(4, 3, 1, 1)); |
| 1109 | 1126 |
| 1110 Initialize(); | 1127 Initialize(); |
| 1111 | 1128 |
| 1112 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 1129 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
| 1113 element_readers.push_back(base::MakeUnique<UploadBytesElementReader>( | 1130 element_readers.push_back(base::MakeUnique<UploadBytesElementReader>( |
| 1114 kUploadData, strlen(kUploadData))); | 1131 kUploadData, strlen(kUploadData))); |
| 1115 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 1132 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); |
| 1116 request_.method = "POST"; | 1133 request_.method = "POST"; |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1164 stream_->GetTotalReceivedBytes()); | 1181 stream_->GetTotalReceivedBytes()); |
| 1165 } | 1182 } |
| 1166 | 1183 |
| 1167 TEST_P(QuicHttpStreamTest, SendChunkedPostRequest) { | 1184 TEST_P(QuicHttpStreamTest, SendChunkedPostRequest) { |
| 1168 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1185 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| 1169 size_t chunk_size = strlen(kUploadData); | 1186 size_t chunk_size = strlen(kUploadData); |
| 1170 size_t spdy_request_headers_frame_length; | 1187 size_t spdy_request_headers_frame_length; |
| 1171 QuicStreamOffset header_stream_offset = 0; | 1188 QuicStreamOffset header_stream_offset = 0; |
| 1172 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 1189 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
| 1173 AddWrite(InnerConstructRequestHeadersPacket( | 1190 AddWrite(InnerConstructRequestHeadersPacket( |
| 1174 2, kClientDataStreamId1, kIncludeVersion, !kFin, DEFAULT_PRIORITY, | 1191 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, |
| 1175 &spdy_request_headers_frame_length, &header_stream_offset)); | 1192 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, |
| 1193 &header_stream_offset)); |
| 1176 AddWrite( | 1194 AddWrite( |
| 1177 ConstructClientDataPacket(3, kIncludeVersion, !kFin, 0, kUploadData)); | 1195 ConstructClientDataPacket(3, kIncludeVersion, !kFin, 0, kUploadData)); |
| 1178 AddWrite(ConstructClientDataPacket(4, kIncludeVersion, kFin, chunk_size, | 1196 AddWrite(ConstructClientDataPacket(4, kIncludeVersion, kFin, chunk_size, |
| 1179 kUploadData)); | 1197 kUploadData)); |
| 1180 AddWrite(ConstructClientAckPacket(5, 3, 1, 1)); | 1198 AddWrite(ConstructClientAckPacket(5, 3, 1, 1)); |
| 1181 Initialize(); | 1199 Initialize(); |
| 1182 | 1200 |
| 1183 ChunkedUploadDataStream upload_data_stream(0); | 1201 ChunkedUploadDataStream upload_data_stream(0); |
| 1184 upload_data_stream.AppendData(kUploadData, chunk_size, false); | 1202 upload_data_stream.AppendData(kUploadData, chunk_size, false); |
| 1185 | 1203 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1238 stream_->GetTotalReceivedBytes()); | 1256 stream_->GetTotalReceivedBytes()); |
| 1239 } | 1257 } |
| 1240 | 1258 |
| 1241 TEST_P(QuicHttpStreamTest, SendChunkedPostRequestWithFinalEmptyDataPacket) { | 1259 TEST_P(QuicHttpStreamTest, SendChunkedPostRequestWithFinalEmptyDataPacket) { |
| 1242 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1260 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| 1243 size_t chunk_size = strlen(kUploadData); | 1261 size_t chunk_size = strlen(kUploadData); |
| 1244 size_t spdy_request_headers_frame_length; | 1262 size_t spdy_request_headers_frame_length; |
| 1245 QuicStreamOffset header_stream_offset = 0; | 1263 QuicStreamOffset header_stream_offset = 0; |
| 1246 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 1264 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
| 1247 AddWrite(InnerConstructRequestHeadersPacket( | 1265 AddWrite(InnerConstructRequestHeadersPacket( |
| 1248 2, kClientDataStreamId1, kIncludeVersion, !kFin, DEFAULT_PRIORITY, | 1266 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, |
| 1249 &spdy_request_headers_frame_length, &header_stream_offset)); | 1267 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, |
| 1268 &header_stream_offset)); |
| 1250 AddWrite( | 1269 AddWrite( |
| 1251 ConstructClientDataPacket(3, kIncludeVersion, !kFin, 0, kUploadData)); | 1270 ConstructClientDataPacket(3, kIncludeVersion, !kFin, 0, kUploadData)); |
| 1252 AddWrite(ConstructClientDataPacket(4, kIncludeVersion, kFin, chunk_size, "")); | 1271 AddWrite(ConstructClientDataPacket(4, kIncludeVersion, kFin, chunk_size, "")); |
| 1253 AddWrite(ConstructClientAckPacket(5, 3, 1, 1)); | 1272 AddWrite(ConstructClientAckPacket(5, 3, 1, 1)); |
| 1254 Initialize(); | 1273 Initialize(); |
| 1255 | 1274 |
| 1256 ChunkedUploadDataStream upload_data_stream(0); | 1275 ChunkedUploadDataStream upload_data_stream(0); |
| 1257 upload_data_stream.AppendData(kUploadData, chunk_size, false); | 1276 upload_data_stream.AppendData(kUploadData, chunk_size, false); |
| 1258 | 1277 |
| 1259 request_.method = "POST"; | 1278 request_.method = "POST"; |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1308 strlen(kResponseBody)), | 1327 strlen(kResponseBody)), |
| 1309 stream_->GetTotalReceivedBytes()); | 1328 stream_->GetTotalReceivedBytes()); |
| 1310 } | 1329 } |
| 1311 | 1330 |
| 1312 TEST_P(QuicHttpStreamTest, SendChunkedPostRequestWithOneEmptyDataPacket) { | 1331 TEST_P(QuicHttpStreamTest, SendChunkedPostRequestWithOneEmptyDataPacket) { |
| 1313 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1332 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| 1314 size_t spdy_request_headers_frame_length; | 1333 size_t spdy_request_headers_frame_length; |
| 1315 QuicStreamOffset header_stream_offset = 0; | 1334 QuicStreamOffset header_stream_offset = 0; |
| 1316 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 1335 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
| 1317 AddWrite(InnerConstructRequestHeadersPacket( | 1336 AddWrite(InnerConstructRequestHeadersPacket( |
| 1318 2, kClientDataStreamId1, kIncludeVersion, !kFin, DEFAULT_PRIORITY, | 1337 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, |
| 1319 &spdy_request_headers_frame_length, &header_stream_offset)); | 1338 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, |
| 1339 &header_stream_offset)); |
| 1320 AddWrite(ConstructClientDataPacket(3, kIncludeVersion, kFin, 0, "")); | 1340 AddWrite(ConstructClientDataPacket(3, kIncludeVersion, kFin, 0, "")); |
| 1321 AddWrite(ConstructClientAckPacket(4, 3, 1, 1)); | 1341 AddWrite(ConstructClientAckPacket(4, 3, 1, 1)); |
| 1322 Initialize(); | 1342 Initialize(); |
| 1323 | 1343 |
| 1324 ChunkedUploadDataStream upload_data_stream(0); | 1344 ChunkedUploadDataStream upload_data_stream(0); |
| 1325 | 1345 |
| 1326 request_.method = "POST"; | 1346 request_.method = "POST"; |
| 1327 request_.url = GURL("https://www.example.org/"); | 1347 request_.url = GURL("https://www.example.org/"); |
| 1328 request_.upload_data_stream = &upload_data_stream; | 1348 request_.upload_data_stream = &upload_data_stream; |
| 1329 ASSERT_EQ(OK, request_.upload_data_stream->Init( | 1349 ASSERT_EQ(OK, request_.upload_data_stream->Init( |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1375 strlen(kResponseBody)), | 1395 strlen(kResponseBody)), |
| 1376 stream_->GetTotalReceivedBytes()); | 1396 stream_->GetTotalReceivedBytes()); |
| 1377 } | 1397 } |
| 1378 | 1398 |
| 1379 TEST_P(QuicHttpStreamTest, DestroyedEarly) { | 1399 TEST_P(QuicHttpStreamTest, DestroyedEarly) { |
| 1380 SetRequest("GET", "/", DEFAULT_PRIORITY); | 1400 SetRequest("GET", "/", DEFAULT_PRIORITY); |
| 1381 size_t spdy_request_headers_frame_length; | 1401 size_t spdy_request_headers_frame_length; |
| 1382 QuicStreamOffset header_stream_offset = 0; | 1402 QuicStreamOffset header_stream_offset = 0; |
| 1383 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 1403 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
| 1384 AddWrite(InnerConstructRequestHeadersPacket( | 1404 AddWrite(InnerConstructRequestHeadersPacket( |
| 1385 2, kClientDataStreamId1, kIncludeVersion, kFin, DEFAULT_PRIORITY, | 1405 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, kFin, |
| 1386 &spdy_request_headers_frame_length, &header_stream_offset)); | 1406 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, |
| 1407 &header_stream_offset)); |
| 1387 AddWrite(ConstructAckAndRstStreamPacket(3)); | 1408 AddWrite(ConstructAckAndRstStreamPacket(3)); |
| 1388 use_closing_stream_ = true; | 1409 use_closing_stream_ = true; |
| 1389 Initialize(); | 1410 Initialize(); |
| 1390 | 1411 |
| 1391 request_.method = "GET"; | 1412 request_.method = "GET"; |
| 1392 request_.url = GURL("https://www.example.org/"); | 1413 request_.url = GURL("https://www.example.org/"); |
| 1393 | 1414 |
| 1394 EXPECT_EQ(OK, | 1415 EXPECT_EQ(OK, |
| 1395 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 1416 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
| 1396 net_log_.bound(), callback_.callback())); | 1417 net_log_.bound(), callback_.callback())); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1418 // Zero since the stream is closed before processing the headers. | 1439 // Zero since the stream is closed before processing the headers. |
| 1419 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); | 1440 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); |
| 1420 } | 1441 } |
| 1421 | 1442 |
| 1422 TEST_P(QuicHttpStreamTest, Priority) { | 1443 TEST_P(QuicHttpStreamTest, Priority) { |
| 1423 SetRequest("GET", "/", MEDIUM); | 1444 SetRequest("GET", "/", MEDIUM); |
| 1424 size_t spdy_request_headers_frame_length; | 1445 size_t spdy_request_headers_frame_length; |
| 1425 QuicStreamOffset header_stream_offset = 0; | 1446 QuicStreamOffset header_stream_offset = 0; |
| 1426 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 1447 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
| 1427 AddWrite(InnerConstructRequestHeadersPacket( | 1448 AddWrite(InnerConstructRequestHeadersPacket( |
| 1428 2, kClientDataStreamId1, kIncludeVersion, kFin, MEDIUM, | 1449 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, kFin, MEDIUM, |
| 1429 &spdy_request_headers_frame_length, &header_stream_offset)); | 1450 &spdy_request_headers_frame_length, &header_stream_offset)); |
| 1430 AddWrite(ConstructAckAndRstStreamPacket(3)); | 1451 AddWrite(ConstructAckAndRstStreamPacket(3)); |
| 1431 use_closing_stream_ = true; | 1452 use_closing_stream_ = true; |
| 1432 Initialize(); | 1453 Initialize(); |
| 1433 | 1454 |
| 1434 request_.method = "GET"; | 1455 request_.method = "GET"; |
| 1435 request_.url = GURL("https://www.example.org/"); | 1456 request_.url = GURL("https://www.example.org/"); |
| 1436 | 1457 |
| 1437 EXPECT_EQ(OK, stream_->InitializeStream(&request_, MEDIUM, net_log_.bound(), | 1458 EXPECT_EQ(OK, stream_->InitializeStream(&request_, MEDIUM, net_log_.bound(), |
| 1438 callback_.callback())); | 1459 callback_.callback())); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1505 EXPECT_EQ(0, stream_->GetTotalSentBytes()); | 1526 EXPECT_EQ(0, stream_->GetTotalSentBytes()); |
| 1506 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); | 1527 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); |
| 1507 } | 1528 } |
| 1508 | 1529 |
| 1509 TEST_P(QuicHttpStreamTest, SessionClosedDuringDoLoop) { | 1530 TEST_P(QuicHttpStreamTest, SessionClosedDuringDoLoop) { |
| 1510 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1531 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| 1511 size_t spdy_request_headers_frame_length; | 1532 size_t spdy_request_headers_frame_length; |
| 1512 QuicStreamOffset header_stream_offset = 0; | 1533 QuicStreamOffset header_stream_offset = 0; |
| 1513 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 1534 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
| 1514 AddWrite(InnerConstructRequestHeadersPacket( | 1535 AddWrite(InnerConstructRequestHeadersPacket( |
| 1515 2, kClientDataStreamId1, kIncludeVersion, !kFin, DEFAULT_PRIORITY, | 1536 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, |
| 1516 &spdy_request_headers_frame_length, &header_stream_offset)); | 1537 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, |
| 1538 &header_stream_offset)); |
| 1517 AddWrite( | 1539 AddWrite( |
| 1518 ConstructClientDataPacket(3, kIncludeVersion, !kFin, 0, kUploadData)); | 1540 ConstructClientDataPacket(3, kIncludeVersion, !kFin, 0, kUploadData)); |
| 1519 // Second data write will result in a synchronous failure which will close | 1541 // Second data write will result in a synchronous failure which will close |
| 1520 // the session. | 1542 // the session. |
| 1521 AddWrite(SYNCHRONOUS, ERR_FAILED); | 1543 AddWrite(SYNCHRONOUS, ERR_FAILED); |
| 1522 Initialize(); | 1544 Initialize(); |
| 1523 | 1545 |
| 1524 ChunkedUploadDataStream upload_data_stream(0); | 1546 ChunkedUploadDataStream upload_data_stream(0); |
| 1525 | 1547 |
| 1526 request_.method = "POST"; | 1548 request_.method = "POST"; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1565 ASSERT_EQ(ERR_QUIC_PROTOCOL_ERROR, | 1587 ASSERT_EQ(ERR_QUIC_PROTOCOL_ERROR, |
| 1566 stream_->SendRequest(headers_, &response_, callback_.callback())); | 1588 stream_->SendRequest(headers_, &response_, callback_.callback())); |
| 1567 } | 1589 } |
| 1568 | 1590 |
| 1569 TEST_P(QuicHttpStreamTest, SessionClosedBeforeSendBodyComplete) { | 1591 TEST_P(QuicHttpStreamTest, SessionClosedBeforeSendBodyComplete) { |
| 1570 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1592 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| 1571 size_t spdy_request_headers_frame_length; | 1593 size_t spdy_request_headers_frame_length; |
| 1572 QuicStreamOffset header_stream_offset = 0; | 1594 QuicStreamOffset header_stream_offset = 0; |
| 1573 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 1595 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
| 1574 AddWrite(InnerConstructRequestHeadersPacket( | 1596 AddWrite(InnerConstructRequestHeadersPacket( |
| 1575 2, kClientDataStreamId1, kIncludeVersion, !kFin, DEFAULT_PRIORITY, | 1597 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, |
| 1576 &spdy_request_headers_frame_length, &header_stream_offset)); | 1598 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, |
| 1599 &header_stream_offset)); |
| 1577 AddWrite(SYNCHRONOUS, ERR_FAILED); | 1600 AddWrite(SYNCHRONOUS, ERR_FAILED); |
| 1578 Initialize(); | 1601 Initialize(); |
| 1579 | 1602 |
| 1580 ChunkedUploadDataStream upload_data_stream(0); | 1603 ChunkedUploadDataStream upload_data_stream(0); |
| 1581 size_t chunk_size = strlen(kUploadData); | 1604 size_t chunk_size = strlen(kUploadData); |
| 1582 upload_data_stream.AppendData(kUploadData, chunk_size, false); | 1605 upload_data_stream.AppendData(kUploadData, chunk_size, false); |
| 1583 | 1606 |
| 1584 request_.method = "POST"; | 1607 request_.method = "POST"; |
| 1585 request_.url = GURL("https://www.example.org/"); | 1608 request_.url = GURL("https://www.example.org/"); |
| 1586 request_.upload_data_stream = &upload_data_stream; | 1609 request_.upload_data_stream = &upload_data_stream; |
| (...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2069 EXPECT_EQ(static_cast<int64_t>(spdy_response_header_frame_length), | 2092 EXPECT_EQ(static_cast<int64_t>(spdy_response_header_frame_length), |
| 2070 promised_stream_->GetTotalReceivedBytes()); | 2093 promised_stream_->GetTotalReceivedBytes()); |
| 2071 } | 2094 } |
| 2072 | 2095 |
| 2073 TEST_P(QuicHttpStreamTest, DataReadErrorSynchronous) { | 2096 TEST_P(QuicHttpStreamTest, DataReadErrorSynchronous) { |
| 2074 SetRequest("POST", "/", DEFAULT_PRIORITY); | 2097 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| 2075 size_t spdy_request_headers_frame_length; | 2098 size_t spdy_request_headers_frame_length; |
| 2076 QuicStreamOffset header_stream_offset = 0; | 2099 QuicStreamOffset header_stream_offset = 0; |
| 2077 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 2100 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
| 2078 AddWrite(InnerConstructRequestHeadersPacket( | 2101 AddWrite(InnerConstructRequestHeadersPacket( |
| 2079 2, kClientDataStreamId1, kIncludeVersion, !kFin, DEFAULT_PRIORITY, | 2102 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, |
| 2080 &spdy_request_headers_frame_length, &header_stream_offset)); | 2103 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, |
| 2104 &header_stream_offset)); |
| 2081 AddWrite(ConstructClientRstStreamErrorPacket(3, kIncludeVersion)); | 2105 AddWrite(ConstructClientRstStreamErrorPacket(3, kIncludeVersion)); |
| 2082 | 2106 |
| 2083 Initialize(); | 2107 Initialize(); |
| 2084 | 2108 |
| 2085 ReadErrorUploadDataStream upload_data_stream( | 2109 ReadErrorUploadDataStream upload_data_stream( |
| 2086 ReadErrorUploadDataStream::FailureMode::SYNC); | 2110 ReadErrorUploadDataStream::FailureMode::SYNC); |
| 2087 request_.method = "POST"; | 2111 request_.method = "POST"; |
| 2088 request_.url = GURL("https://www.example.org/"); | 2112 request_.url = GURL("https://www.example.org/"); |
| 2089 request_.upload_data_stream = &upload_data_stream; | 2113 request_.upload_data_stream = &upload_data_stream; |
| 2090 ASSERT_EQ(OK, request_.upload_data_stream->Init( | 2114 ASSERT_EQ(OK, request_.upload_data_stream->Init( |
| (...skipping 13 matching lines...) Expand all Loading... |
| 2104 stream_->GetTotalSentBytes()); | 2128 stream_->GetTotalSentBytes()); |
| 2105 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); | 2129 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); |
| 2106 } | 2130 } |
| 2107 | 2131 |
| 2108 TEST_P(QuicHttpStreamTest, DataReadErrorAsynchronous) { | 2132 TEST_P(QuicHttpStreamTest, DataReadErrorAsynchronous) { |
| 2109 SetRequest("POST", "/", DEFAULT_PRIORITY); | 2133 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| 2110 size_t spdy_request_headers_frame_length; | 2134 size_t spdy_request_headers_frame_length; |
| 2111 QuicStreamOffset header_stream_offset = 0; | 2135 QuicStreamOffset header_stream_offset = 0; |
| 2112 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 2136 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
| 2113 AddWrite(InnerConstructRequestHeadersPacket( | 2137 AddWrite(InnerConstructRequestHeadersPacket( |
| 2114 2, kClientDataStreamId1, kIncludeVersion, !kFin, DEFAULT_PRIORITY, | 2138 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, |
| 2115 &spdy_request_headers_frame_length, &header_stream_offset)); | 2139 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, |
| 2140 &header_stream_offset)); |
| 2116 AddWrite(ConstructClientRstStreamErrorPacket(3, !kIncludeVersion)); | 2141 AddWrite(ConstructClientRstStreamErrorPacket(3, !kIncludeVersion)); |
| 2117 | 2142 |
| 2118 Initialize(); | 2143 Initialize(); |
| 2119 | 2144 |
| 2120 ReadErrorUploadDataStream upload_data_stream( | 2145 ReadErrorUploadDataStream upload_data_stream( |
| 2121 ReadErrorUploadDataStream::FailureMode::ASYNC); | 2146 ReadErrorUploadDataStream::FailureMode::ASYNC); |
| 2122 request_.method = "POST"; | 2147 request_.method = "POST"; |
| 2123 request_.url = GURL("https://www.example.org/"); | 2148 request_.url = GURL("https://www.example.org/"); |
| 2124 request_.upload_data_stream = &upload_data_stream; | 2149 request_.upload_data_stream = &upload_data_stream; |
| 2125 ASSERT_EQ(OK, request_.upload_data_stream->Init( | 2150 ASSERT_EQ(OK, request_.upload_data_stream->Init( |
| (...skipping 14 matching lines...) Expand all Loading... |
| 2140 EXPECT_TRUE(AtEof()); | 2165 EXPECT_TRUE(AtEof()); |
| 2141 | 2166 |
| 2142 // QuicHttpStream::GetTotalSent/ReceivedBytes includes only headers. | 2167 // QuicHttpStream::GetTotalSent/ReceivedBytes includes only headers. |
| 2143 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), | 2168 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), |
| 2144 stream_->GetTotalSentBytes()); | 2169 stream_->GetTotalSentBytes()); |
| 2145 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); | 2170 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); |
| 2146 } | 2171 } |
| 2147 | 2172 |
| 2148 } // namespace test | 2173 } // namespace test |
| 2149 } // namespace net | 2174 } // namespace net |
| OLD | NEW |