| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/bidirectional_stream_quic_impl.h" | 5 #include "net/quic/bidirectional_stream_quic_impl.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 TestDelegateBase(IOBuffer* read_buf, | 67 TestDelegateBase(IOBuffer* read_buf, |
| 68 int read_buf_len, | 68 int read_buf_len, |
| 69 std::unique_ptr<base::Timer> timer) | 69 std::unique_ptr<base::Timer> timer) |
| 70 : read_buf_(read_buf), | 70 : read_buf_(read_buf), |
| 71 read_buf_len_(read_buf_len), | 71 read_buf_len_(read_buf_len), |
| 72 timer_(std::move(timer)), | 72 timer_(std::move(timer)), |
| 73 loop_(nullptr), | 73 loop_(nullptr), |
| 74 error_(OK), | 74 error_(OK), |
| 75 on_data_read_count_(0), | 75 on_data_read_count_(0), |
| 76 on_data_sent_count_(0), | 76 on_data_sent_count_(0), |
| 77 not_expect_callback_(false) { | 77 not_expect_callback_(false), |
| 78 disable_auto_flush_(false) { |
| 78 loop_.reset(new base::RunLoop); | 79 loop_.reset(new base::RunLoop); |
| 79 } | 80 } |
| 80 | 81 |
| 81 ~TestDelegateBase() override {} | 82 ~TestDelegateBase() override {} |
| 82 | 83 |
| 83 void OnHeadersSent() override { | 84 void OnStreamReady() override { |
| 84 CHECK(!not_expect_callback_); | 85 CHECK(!not_expect_callback_); |
| 85 loop_->Quit(); | 86 loop_->Quit(); |
| 86 } | 87 } |
| 87 | 88 |
| 88 void OnHeadersReceived(const SpdyHeaderBlock& response_headers) override { | 89 void OnHeadersReceived(const SpdyHeaderBlock& response_headers) override { |
| 89 CHECK(!not_expect_callback_); | 90 CHECK(!not_expect_callback_); |
| 90 | 91 |
| 91 response_headers_ = response_headers; | 92 response_headers_ = response_headers; |
| 92 loop_->Quit(); | 93 loop_->Quit(); |
| 93 } | 94 } |
| (...skipping 28 matching lines...) Expand all Loading... |
| 122 CHECK_NE(OK, error); | 123 CHECK_NE(OK, error); |
| 123 | 124 |
| 124 error_ = error; | 125 error_ = error; |
| 125 loop_->Quit(); | 126 loop_->Quit(); |
| 126 } | 127 } |
| 127 | 128 |
| 128 void Start(const BidirectionalStreamRequestInfo* request_info, | 129 void Start(const BidirectionalStreamRequestInfo* request_info, |
| 129 const BoundNetLog& net_log, | 130 const BoundNetLog& net_log, |
| 130 const base::WeakPtr<QuicChromiumClientSession> session) { | 131 const base::WeakPtr<QuicChromiumClientSession> session) { |
| 131 stream_job_.reset(new BidirectionalStreamQuicImpl(session)); | 132 stream_job_.reset(new BidirectionalStreamQuicImpl(session)); |
| 132 stream_job_->Start(request_info, net_log, this, nullptr); | 133 stream_job_->Start(request_info, net_log, disable_auto_flush_, this, |
| 134 nullptr); |
| 133 } | 135 } |
| 134 | 136 |
| 135 void SendData(IOBuffer* data, int length, bool end_of_stream) { | 137 void SendData(IOBuffer* data, int length, bool end_of_stream) { |
| 136 not_expect_callback_ = true; | 138 not_expect_callback_ = true; |
| 137 stream_job_->SendData(data, length, end_of_stream); | 139 stream_job_->SendData(data, length, end_of_stream); |
| 138 not_expect_callback_ = false; | 140 not_expect_callback_ = false; |
| 139 } | 141 } |
| 140 | 142 |
| 143 void SendvData(const std::vector<IOBuffer*>& data, |
| 144 const std::vector<int>& lengths, |
| 145 bool end_of_stream) { |
| 146 not_expect_callback_ = true; |
| 147 stream_job_->SendvData(data, lengths, end_of_stream); |
| 148 not_expect_callback_ = false; |
| 149 } |
| 150 |
| 141 // Waits until next Delegate callback. | 151 // Waits until next Delegate callback. |
| 142 void WaitUntilNextCallback() { | 152 void WaitUntilNextCallback() { |
| 143 loop_->Run(); | 153 loop_->Run(); |
| 144 loop_.reset(new base::RunLoop); | 154 loop_.reset(new base::RunLoop); |
| 145 } | 155 } |
| 146 | 156 |
| 147 // Calls ReadData on the |stream_| and updates |data_received_|. | 157 // Calls ReadData on the |stream_| and updates |data_received_|. |
| 148 int ReadData(const CompletionCallback& callback) { | 158 int ReadData(const CompletionCallback& callback) { |
| 149 not_expect_callback_ = true; | 159 not_expect_callback_ = true; |
| 150 int rv = stream_job_->ReadData(read_buf_.get(), read_buf_len_); | 160 int rv = stream_job_->ReadData(read_buf_.get(), read_buf_len_); |
| 151 not_expect_callback_ = false; | 161 not_expect_callback_ = false; |
| 152 if (rv > 0) | 162 if (rv > 0) |
| 153 data_received_.append(read_buf_->data(), rv); | 163 data_received_.append(read_buf_->data(), rv); |
| 154 if (rv == ERR_IO_PENDING) | 164 if (rv == ERR_IO_PENDING) |
| 155 callback_ = callback; | 165 callback_ = callback; |
| 156 return rv; | 166 return rv; |
| 157 } | 167 } |
| 158 | 168 |
| 159 // Cancels |stream_|. | 169 // Cancels |stream_|. |
| 160 void CancelStream() { stream_job_->Cancel(); } | 170 void CancelStream() { stream_job_->Cancel(); } |
| 161 | 171 |
| 162 NextProto GetProtocol() const { return stream_job_->GetProtocol(); } | 172 NextProto GetProtocol() const { return stream_job_->GetProtocol(); } |
| 163 | 173 |
| 164 int64_t GetTotalReceivedBytes() const { | 174 int64_t GetTotalReceivedBytes() const { |
| 165 return stream_job_->GetTotalReceivedBytes(); | 175 return stream_job_->GetTotalReceivedBytes(); |
| 166 } | 176 } |
| 167 | 177 |
| 168 int64_t GetTotalSentBytes() const { return stream_job_->GetTotalSentBytes(); } | 178 int64_t GetTotalSentBytes() const { return stream_job_->GetTotalSentBytes(); } |
| 169 | 179 |
| 180 void DisableAutoFlush() { disable_auto_flush_ = true; } |
| 181 |
| 170 // Const getters for internal states. | 182 // Const getters for internal states. |
| 171 const std::string& data_received() const { return data_received_; } | 183 const std::string& data_received() const { return data_received_; } |
| 172 int error() const { return error_; } | 184 int error() const { return error_; } |
| 173 const SpdyHeaderBlock& response_headers() const { return response_headers_; } | 185 const SpdyHeaderBlock& response_headers() const { return response_headers_; } |
| 174 const SpdyHeaderBlock& trailers() const { return trailers_; } | 186 const SpdyHeaderBlock& trailers() const { return trailers_; } |
| 175 int on_data_read_count() const { return on_data_read_count_; } | 187 int on_data_read_count() const { return on_data_read_count_; } |
| 176 int on_data_sent_count() const { return on_data_sent_count_; } | 188 int on_data_sent_count() const { return on_data_sent_count_; } |
| 177 | 189 |
| 178 protected: | 190 protected: |
| 179 // Quits |loop_|. | 191 // Quits |loop_|. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 191 std::unique_ptr<base::RunLoop> loop_; | 203 std::unique_ptr<base::RunLoop> loop_; |
| 192 SpdyHeaderBlock response_headers_; | 204 SpdyHeaderBlock response_headers_; |
| 193 SpdyHeaderBlock trailers_; | 205 SpdyHeaderBlock trailers_; |
| 194 int error_; | 206 int error_; |
| 195 int on_data_read_count_; | 207 int on_data_read_count_; |
| 196 int on_data_sent_count_; | 208 int on_data_sent_count_; |
| 197 // This is to ensure that delegate callback is not invoked synchronously when | 209 // This is to ensure that delegate callback is not invoked synchronously when |
| 198 // calling into |stream_|. | 210 // calling into |stream_|. |
| 199 bool not_expect_callback_; | 211 bool not_expect_callback_; |
| 200 CompletionCallback callback_; | 212 CompletionCallback callback_; |
| 213 bool disable_auto_flush_; |
| 201 | 214 |
| 202 DISALLOW_COPY_AND_ASSIGN(TestDelegateBase); | 215 DISALLOW_COPY_AND_ASSIGN(TestDelegateBase); |
| 203 }; | 216 }; |
| 204 | 217 |
| 205 // A delegate that deletes the stream in a particular callback. | 218 // A delegate that deletes the stream in a particular callback. |
| 206 class DeleteStreamDelegate : public TestDelegateBase { | 219 class DeleteStreamDelegate : public TestDelegateBase { |
| 207 public: | 220 public: |
| 208 // Specifies in which callback the stream can be deleted. | 221 // Specifies in which callback the stream can be deleted. |
| 209 enum Phase { | 222 enum Phase { |
| 210 ON_HEADERS_RECEIVED, | 223 ON_HEADERS_RECEIVED, |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 370 bool should_include_version, | 383 bool should_include_version, |
| 371 bool fin, | 384 bool fin, |
| 372 QuicStreamOffset offset, | 385 QuicStreamOffset offset, |
| 373 base::StringPiece data) { | 386 base::StringPiece data) { |
| 374 std::unique_ptr<QuicReceivedPacket> packet(maker_.MakeDataPacket( | 387 std::unique_ptr<QuicReceivedPacket> packet(maker_.MakeDataPacket( |
| 375 packet_number, stream_id_, should_include_version, fin, offset, data)); | 388 packet_number, stream_id_, should_include_version, fin, offset, data)); |
| 376 DVLOG(2) << "packet(" << packet_number << "): " << std::endl | 389 DVLOG(2) << "packet(" << packet_number << "): " << std::endl |
| 377 << QuicUtils::StringToHexASCIIDump(packet->AsStringPiece()); | 390 << QuicUtils::StringToHexASCIIDump(packet->AsStringPiece()); |
| 378 return packet; | 391 return packet; |
| 379 } | 392 } |
| 393 // Construct a data packet with multiple data frames |
| 394 std::unique_ptr<QuicReceivedPacket> ConstructMultipleDataFramesPacket( |
| 395 QuicPacketNumber packet_number, |
| 396 bool should_include_version, |
| 397 bool fin, |
| 398 QuicStreamOffset offset, |
| 399 const std::vector<std::string>& data_writes) { |
| 400 std::unique_ptr<QuicReceivedPacket> packet( |
| 401 maker_.MakeMultipleDataFramesPacket(packet_number, stream_id_, |
| 402 should_include_version, fin, offset, |
| 403 data_writes)); |
| 404 DVLOG(2) << "packet(" << packet_number << "): " << std::endl |
| 405 << QuicUtils::StringToHexASCIIDump(packet->AsStringPiece()); |
| 406 return packet; |
| 407 } |
| 380 | 408 |
| 381 std::unique_ptr<QuicReceivedPacket> ConstructRequestHeadersPacket( | 409 std::unique_ptr<QuicReceivedPacket> ConstructRequestHeadersPacket( |
| 382 QuicPacketNumber packet_number, | 410 QuicPacketNumber packet_number, |
| 383 bool fin, | 411 bool fin, |
| 384 RequestPriority request_priority, | 412 RequestPriority request_priority, |
| 385 size_t* spdy_headers_frame_length) { | 413 size_t* spdy_headers_frame_length) { |
| 386 SpdyPriority priority = | 414 SpdyPriority priority = |
| 387 ConvertRequestPriorityToQuicPriority(request_priority); | 415 ConvertRequestPriorityToQuicPriority(request_priority); |
| 388 return maker_.MakeRequestHeadersPacket( | 416 return maker_.MakeRequestHeadersPacket( |
| 389 packet_number, stream_id_, kIncludeVersion, fin, priority, | 417 packet_number, stream_id_, kIncludeVersion, fin, priority, |
| 390 request_headers_, spdy_headers_frame_length); | 418 request_headers_, spdy_headers_frame_length); |
| 391 } | 419 } |
| 392 | 420 |
| 421 std::unique_ptr<QuicReceivedPacket> |
| 422 ConstructRequestHeadersAndMultipleDataFramesPacket( |
| 423 QuicPacketNumber packet_number, |
| 424 bool fin, |
| 425 RequestPriority request_priority, |
| 426 size_t* spdy_headers_frame_length, |
| 427 const std::vector<std::string>& data) { |
| 428 SpdyPriority priority = |
| 429 ConvertRequestPriorityToQuicPriority(request_priority); |
| 430 std::unique_ptr<QuicReceivedPacket> packet( |
| 431 maker_.MakeRequestHeadersAndMultipleDataFramesPacket( |
| 432 packet_number, stream_id_, kIncludeVersion, fin, priority, |
| 433 request_headers_, spdy_headers_frame_length, data)); |
| 434 DVLOG(2) << "packet(" << packet_number << "): " << std::endl |
| 435 << QuicUtils::StringToHexASCIIDump(packet->AsStringPiece()); |
| 436 return packet; |
| 437 } |
| 438 |
| 393 std::unique_ptr<QuicReceivedPacket> ConstructResponseHeadersPacket( | 439 std::unique_ptr<QuicReceivedPacket> ConstructResponseHeadersPacket( |
| 394 QuicPacketNumber packet_number, | 440 QuicPacketNumber packet_number, |
| 395 bool fin, | 441 bool fin, |
| 396 const SpdyHeaderBlock& response_headers, | 442 const SpdyHeaderBlock& response_headers, |
| 397 size_t* spdy_headers_frame_length, | 443 size_t* spdy_headers_frame_length, |
| 398 QuicStreamOffset* offset) { | 444 QuicStreamOffset* offset) { |
| 399 return maker_.MakeResponseHeadersPacket( | 445 return maker_.MakeResponseHeadersPacket( |
| 400 packet_number, stream_id_, !kIncludeVersion, fin, response_headers, | 446 packet_number, stream_id_, !kIncludeVersion, fin, response_headers, |
| 401 spdy_headers_frame_length, offset); | 447 spdy_headers_frame_length, offset); |
| 402 } | 448 } |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 510 BidirectionalStreamRequestInfo request; | 556 BidirectionalStreamRequestInfo request; |
| 511 request.method = "GET"; | 557 request.method = "GET"; |
| 512 request.url = GURL("http://www.google.com/"); | 558 request.url = GURL("http://www.google.com/"); |
| 513 request.end_stream_on_headers = true; | 559 request.end_stream_on_headers = true; |
| 514 request.priority = DEFAULT_PRIORITY; | 560 request.priority = DEFAULT_PRIORITY; |
| 515 | 561 |
| 516 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 562 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 517 std::unique_ptr<TestDelegateBase> delegate( | 563 std::unique_ptr<TestDelegateBase> delegate( |
| 518 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 564 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 519 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); | 565 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 520 delegate->WaitUntilNextCallback(); // OnHeadersSent | 566 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 521 | 567 |
| 522 // Server acks the request. | 568 // Server acks the request. |
| 523 ProcessPacket(ConstructAckPacket(1, 0, 0)); | 569 ProcessPacket(ConstructAckPacket(1, 0, 0)); |
| 524 | 570 |
| 525 // Server sends the response headers. | 571 // Server sends the response headers. |
| 526 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 572 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 527 | 573 |
| 528 size_t spdy_response_headers_frame_length; | 574 size_t spdy_response_headers_frame_length; |
| 529 QuicStreamOffset offset = 0; | 575 QuicStreamOffset offset = 0; |
| 530 ProcessPacket(ConstructResponseHeadersPacket( | 576 ProcessPacket(ConstructResponseHeadersPacket( |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 581 pos = ExpectLogContainsSomewhere( | 627 pos = ExpectLogContainsSomewhere( |
| 582 entries, /*min_offset=*/pos, | 628 entries, /*min_offset=*/pos, |
| 583 NetLog::TYPE_QUIC_CHROMIUM_CLIENT_STREAM_SEND_REQUEST_HEADERS, | 629 NetLog::TYPE_QUIC_CHROMIUM_CLIENT_STREAM_SEND_REQUEST_HEADERS, |
| 584 NetLog::PHASE_NONE); | 630 NetLog::PHASE_NONE); |
| 585 ExpectLogContainsSomewhere( | 631 ExpectLogContainsSomewhere( |
| 586 entries, /*min_offset=*/pos, | 632 entries, /*min_offset=*/pos, |
| 587 NetLog::TYPE_QUIC_CHROMIUM_CLIENT_STREAM_SEND_REQUEST_HEADERS, | 633 NetLog::TYPE_QUIC_CHROMIUM_CLIENT_STREAM_SEND_REQUEST_HEADERS, |
| 588 NetLog::PHASE_NONE); | 634 NetLog::PHASE_NONE); |
| 589 } | 635 } |
| 590 | 636 |
| 637 TEST_P(BidirectionalStreamQuicImplTest, CoalesceSmallBuffers) { |
| 638 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| 639 size_t spdy_request_headers_frame_length; |
| 640 |
| 641 const char kBody1[] = "here are some data"; |
| 642 const char kBody2[] = "data keep coming"; |
| 643 std::vector<std::string> two_writes = {kBody1, kBody2}; |
| 644 AddWrite(ConstructRequestHeadersAndMultipleDataFramesPacket( |
| 645 1, !kFin, DEFAULT_PRIORITY, &spdy_request_headers_frame_length, |
| 646 two_writes)); |
| 647 // Ack server's data packet. |
| 648 AddWrite(ConstructAckPacket(2, 3, 1)); |
| 649 const char kBody3[] = "hello there"; |
| 650 const char kBody4[] = "another piece of small data"; |
| 651 const char kBody5[] = "really small"; |
| 652 QuicStreamOffset data_offset = strlen(kBody1) + strlen(kBody2); |
| 653 AddWrite(ConstructMultipleDataFramesPacket( |
| 654 3, !kIncludeVersion, kFin, data_offset, {kBody3, kBody4, kBody5})); |
| 655 |
| 656 Initialize(); |
| 657 |
| 658 BidirectionalStreamRequestInfo request; |
| 659 request.method = "POST"; |
| 660 request.url = GURL("http://www.google.com/"); |
| 661 request.end_stream_on_headers = false; |
| 662 request.priority = DEFAULT_PRIORITY; |
| 663 |
| 664 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 665 std::unique_ptr<TestDelegateBase> delegate( |
| 666 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 667 delegate->DisableAutoFlush(); |
| 668 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 669 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 670 |
| 671 // Send a Data packet. |
| 672 scoped_refptr<StringIOBuffer> buf1(new StringIOBuffer(kBody1)); |
| 673 scoped_refptr<StringIOBuffer> buf2(new StringIOBuffer(kBody2)); |
| 674 |
| 675 std::vector<IOBuffer*> buffers = {buf1.get(), buf2.get()}; |
| 676 std::vector<int> lengths = {buf1->size(), buf2->size()}; |
| 677 delegate->SendvData(buffers, lengths, !kFin); |
| 678 delegate->WaitUntilNextCallback(); // OnDataSent |
| 679 |
| 680 // Server acks the request. |
| 681 ProcessPacket(ConstructAckPacket(1, 0, 0)); |
| 682 |
| 683 // Server sends the response headers. |
| 684 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 685 size_t spdy_response_headers_frame_length; |
| 686 QuicStreamOffset offset = 0; |
| 687 ProcessPacket(ConstructResponseHeadersPacket( |
| 688 2, !kFin, response_headers, &spdy_response_headers_frame_length, |
| 689 &offset)); |
| 690 |
| 691 delegate->WaitUntilNextCallback(); // OnHeadersReceived |
| 692 TestCompletionCallback cb; |
| 693 int rv = delegate->ReadData(cb.callback()); |
| 694 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 695 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 696 const char kResponseBody[] = "Hello world!"; |
| 697 // Server sends data. |
| 698 ProcessPacket( |
| 699 ConstructDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); |
| 700 |
| 701 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult()); |
| 702 |
| 703 // Send a second Data packet. |
| 704 scoped_refptr<StringIOBuffer> buf3(new StringIOBuffer(kBody3)); |
| 705 scoped_refptr<StringIOBuffer> buf4(new StringIOBuffer(kBody4)); |
| 706 scoped_refptr<StringIOBuffer> buf5(new StringIOBuffer(kBody5)); |
| 707 |
| 708 delegate->SendvData({buf3.get(), buf4.get(), buf5.get()}, |
| 709 {buf3->size(), buf4->size(), buf5->size()}, kFin); |
| 710 delegate->WaitUntilNextCallback(); // OnDataSent |
| 711 |
| 712 size_t spdy_trailers_frame_length; |
| 713 SpdyHeaderBlock trailers; |
| 714 trailers["foo"] = "bar"; |
| 715 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); |
| 716 // Server sends trailers. |
| 717 ProcessPacket(ConstructResponseTrailersPacket( |
| 718 4, kFin, trailers, &spdy_trailers_frame_length, &offset)); |
| 719 |
| 720 delegate->WaitUntilNextCallback(); // OnTrailersReceived |
| 721 trailers.erase(kFinalOffsetHeaderKey); |
| 722 EXPECT_EQ(trailers, delegate->trailers()); |
| 723 EXPECT_EQ(OK, delegate->ReadData(cb.callback())); |
| 724 |
| 725 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 726 EXPECT_EQ(2, delegate->on_data_sent_count()); |
| 727 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); |
| 728 EXPECT_EQ( |
| 729 static_cast<int64_t>(spdy_request_headers_frame_length + strlen(kBody1) + |
| 730 strlen(kBody2) + strlen(kBody3) + strlen(kBody4) + |
| 731 strlen(kBody5)), |
| 732 delegate->GetTotalSentBytes()); |
| 733 EXPECT_EQ( |
| 734 static_cast<int64_t>(spdy_response_headers_frame_length + |
| 735 strlen(kResponseBody) + spdy_trailers_frame_length), |
| 736 delegate->GetTotalReceivedBytes()); |
| 737 } |
| 738 |
| 591 TEST_P(BidirectionalStreamQuicImplTest, PostRequest) { | 739 TEST_P(BidirectionalStreamQuicImplTest, PostRequest) { |
| 592 SetRequest("POST", "/", DEFAULT_PRIORITY); | 740 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| 593 size_t spdy_request_headers_frame_length; | 741 size_t spdy_request_headers_frame_length; |
| 594 AddWrite(ConstructRequestHeadersPacket(1, !kFin, DEFAULT_PRIORITY, | 742 AddWrite(ConstructRequestHeadersPacket(1, !kFin, DEFAULT_PRIORITY, |
| 595 &spdy_request_headers_frame_length)); | 743 &spdy_request_headers_frame_length)); |
| 596 AddWrite(ConstructDataPacket(2, kIncludeVersion, kFin, 0, kUploadData)); | 744 AddWrite(ConstructDataPacket(2, kIncludeVersion, kFin, 0, kUploadData)); |
| 597 AddWrite(ConstructAckPacket(3, 3, 1)); | 745 AddWrite(ConstructAckPacket(3, 3, 1)); |
| 598 | 746 |
| 599 Initialize(); | 747 Initialize(); |
| 600 | 748 |
| 601 BidirectionalStreamRequestInfo request; | 749 BidirectionalStreamRequestInfo request; |
| 602 request.method = "POST"; | 750 request.method = "POST"; |
| 603 request.url = GURL("http://www.google.com/"); | 751 request.url = GURL("http://www.google.com/"); |
| 604 request.end_stream_on_headers = false; | 752 request.end_stream_on_headers = false; |
| 605 request.priority = DEFAULT_PRIORITY; | 753 request.priority = DEFAULT_PRIORITY; |
| 606 | 754 |
| 607 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 755 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 608 std::unique_ptr<TestDelegateBase> delegate( | 756 std::unique_ptr<TestDelegateBase> delegate( |
| 609 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 757 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 610 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); | 758 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 611 delegate->WaitUntilNextCallback(); // OnHeadersSent | 759 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 612 | 760 |
| 613 // Send a DATA frame. | 761 // Send a DATA frame. |
| 614 scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(kUploadData)); | 762 scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(kUploadData)); |
| 615 | 763 |
| 616 delegate->SendData(buf.get(), buf->size(), true); | 764 delegate->SendData(buf.get(), buf->size(), true); |
| 617 delegate->WaitUntilNextCallback(); // OnDataSent | 765 delegate->WaitUntilNextCallback(); // OnDataSent |
| 618 | 766 |
| 619 // Server acks the request. | 767 // Server acks the request. |
| 620 ProcessPacket(ConstructAckPacket(1, 0, 0)); | 768 ProcessPacket(ConstructAckPacket(1, 0, 0)); |
| 621 | 769 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 678 BidirectionalStreamRequestInfo request; | 826 BidirectionalStreamRequestInfo request; |
| 679 request.method = "POST"; | 827 request.method = "POST"; |
| 680 request.url = GURL("http://www.google.com/"); | 828 request.url = GURL("http://www.google.com/"); |
| 681 request.end_stream_on_headers = false; | 829 request.end_stream_on_headers = false; |
| 682 request.priority = DEFAULT_PRIORITY; | 830 request.priority = DEFAULT_PRIORITY; |
| 683 | 831 |
| 684 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 832 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 685 std::unique_ptr<TestDelegateBase> delegate( | 833 std::unique_ptr<TestDelegateBase> delegate( |
| 686 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 834 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 687 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); | 835 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 688 delegate->WaitUntilNextCallback(); // OnHeadersSent | 836 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 689 | 837 |
| 690 // Server acks the request. | 838 // Server acks the request. |
| 691 ProcessPacket(ConstructAckPacket(1, 0, 0)); | 839 ProcessPacket(ConstructAckPacket(1, 0, 0)); |
| 692 | 840 |
| 693 // Server sends the response headers. | 841 // Server sends the response headers. |
| 694 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 842 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 695 size_t spdy_response_headers_frame_length; | 843 size_t spdy_response_headers_frame_length; |
| 696 ProcessPacket(ConstructResponseHeadersPacket( | 844 ProcessPacket(ConstructResponseHeadersPacket( |
| 697 2, !kFin, response_headers, &spdy_response_headers_frame_length, 0)); | 845 2, !kFin, response_headers, &spdy_response_headers_frame_length, 0)); |
| 698 | 846 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 755 BidirectionalStreamRequestInfo request; | 903 BidirectionalStreamRequestInfo request; |
| 756 request.method = "GET"; | 904 request.method = "GET"; |
| 757 request.url = GURL("http://www.google.com/"); | 905 request.url = GURL("http://www.google.com/"); |
| 758 request.end_stream_on_headers = true; | 906 request.end_stream_on_headers = true; |
| 759 request.priority = DEFAULT_PRIORITY; | 907 request.priority = DEFAULT_PRIORITY; |
| 760 | 908 |
| 761 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 909 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 762 std::unique_ptr<TestDelegateBase> delegate( | 910 std::unique_ptr<TestDelegateBase> delegate( |
| 763 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 911 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 764 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); | 912 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 765 delegate->WaitUntilNextCallback(); // OnHeadersSent | 913 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 766 | 914 |
| 767 // Server sends a Rst. | 915 // Server sends a Rst. |
| 768 ProcessPacket(ConstructRstStreamPacket(1)); | 916 ProcessPacket(ConstructRstStreamPacket(1)); |
| 769 | 917 |
| 770 delegate->WaitUntilNextCallback(); // OnFailed | 918 delegate->WaitUntilNextCallback(); // OnFailed |
| 771 TestCompletionCallback cb; | 919 TestCompletionCallback cb; |
| 772 EXPECT_EQ(ERR_QUIC_PROTOCOL_ERROR, delegate->ReadData(cb.callback())); | 920 EXPECT_EQ(ERR_QUIC_PROTOCOL_ERROR, delegate->ReadData(cb.callback())); |
| 773 | 921 |
| 774 base::MessageLoop::current()->RunUntilIdle(); | 922 base::MessageLoop::current()->RunUntilIdle(); |
| 775 | 923 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 794 BidirectionalStreamRequestInfo request; | 942 BidirectionalStreamRequestInfo request; |
| 795 request.method = "GET"; | 943 request.method = "GET"; |
| 796 request.url = GURL("http://www.google.com/"); | 944 request.url = GURL("http://www.google.com/"); |
| 797 request.end_stream_on_headers = true; | 945 request.end_stream_on_headers = true; |
| 798 request.priority = DEFAULT_PRIORITY; | 946 request.priority = DEFAULT_PRIORITY; |
| 799 | 947 |
| 800 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 948 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 801 std::unique_ptr<TestDelegateBase> delegate( | 949 std::unique_ptr<TestDelegateBase> delegate( |
| 802 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 950 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 803 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); | 951 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 804 delegate->WaitUntilNextCallback(); // OnHeadersSent | 952 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 805 | 953 |
| 806 // Server acks the request. | 954 // Server acks the request. |
| 807 ProcessPacket(ConstructAckPacket(1, 0, 0)); | 955 ProcessPacket(ConstructAckPacket(1, 0, 0)); |
| 808 | 956 |
| 809 // Server sends the response headers. | 957 // Server sends the response headers. |
| 810 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 958 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 811 | 959 |
| 812 size_t spdy_response_headers_frame_length; | 960 size_t spdy_response_headers_frame_length; |
| 813 QuicStreamOffset offset = 0; | 961 QuicStreamOffset offset = 0; |
| 814 ProcessPacket(ConstructResponseHeadersPacket( | 962 ProcessPacket(ConstructResponseHeadersPacket( |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 851 BidirectionalStreamRequestInfo request; | 999 BidirectionalStreamRequestInfo request; |
| 852 request.method = "POST"; | 1000 request.method = "POST"; |
| 853 request.url = GURL("http://www.google.com/"); | 1001 request.url = GURL("http://www.google.com/"); |
| 854 request.end_stream_on_headers = false; | 1002 request.end_stream_on_headers = false; |
| 855 request.priority = DEFAULT_PRIORITY; | 1003 request.priority = DEFAULT_PRIORITY; |
| 856 | 1004 |
| 857 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1005 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 858 std::unique_ptr<TestDelegateBase> delegate( | 1006 std::unique_ptr<TestDelegateBase> delegate( |
| 859 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1007 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 860 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); | 1008 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 861 delegate->WaitUntilNextCallback(); // OnHeadersSent | 1009 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 862 | 1010 |
| 863 // Server acks the request. | 1011 // Server acks the request. |
| 864 ProcessPacket(ConstructAckPacket(1, 0, 0)); | 1012 ProcessPacket(ConstructAckPacket(1, 0, 0)); |
| 865 | 1013 |
| 866 // Server sends the response headers. | 1014 // Server sends the response headers. |
| 867 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 1015 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 868 size_t spdy_response_headers_frame_length; | 1016 size_t spdy_response_headers_frame_length; |
| 869 ProcessPacket(ConstructResponseHeadersPacket( | 1017 ProcessPacket(ConstructResponseHeadersPacket( |
| 870 2, !kFin, response_headers, &spdy_response_headers_frame_length, 0)); | 1018 2, !kFin, response_headers, &spdy_response_headers_frame_length, 0)); |
| 871 | 1019 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 901 BidirectionalStreamRequestInfo request; | 1049 BidirectionalStreamRequestInfo request; |
| 902 request.method = "GET"; | 1050 request.method = "GET"; |
| 903 request.url = GURL("http://www.google.com/"); | 1051 request.url = GURL("http://www.google.com/"); |
| 904 request.end_stream_on_headers = true; | 1052 request.end_stream_on_headers = true; |
| 905 request.priority = DEFAULT_PRIORITY; | 1053 request.priority = DEFAULT_PRIORITY; |
| 906 | 1054 |
| 907 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1055 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 908 std::unique_ptr<TestDelegateBase> delegate( | 1056 std::unique_ptr<TestDelegateBase> delegate( |
| 909 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1057 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 910 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); | 1058 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 911 delegate->WaitUntilNextCallback(); // OnHeadersSent | 1059 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 912 | 1060 |
| 913 // Server acks the request. | 1061 // Server acks the request. |
| 914 ProcessPacket(ConstructAckPacket(1, 0, 0)); | 1062 ProcessPacket(ConstructAckPacket(1, 0, 0)); |
| 915 | 1063 |
| 916 // Server sends the response headers. | 1064 // Server sends the response headers. |
| 917 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 1065 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 918 | 1066 |
| 919 size_t spdy_response_headers_frame_length; | 1067 size_t spdy_response_headers_frame_length; |
| 920 QuicStreamOffset offset = 0; | 1068 QuicStreamOffset offset = 0; |
| 921 ProcessPacket(ConstructResponseHeadersPacket( | 1069 ProcessPacket(ConstructResponseHeadersPacket( |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 955 BidirectionalStreamRequestInfo request; | 1103 BidirectionalStreamRequestInfo request; |
| 956 request.method = "POST"; | 1104 request.method = "POST"; |
| 957 request.url = GURL("http://www.google.com/"); | 1105 request.url = GURL("http://www.google.com/"); |
| 958 request.end_stream_on_headers = false; | 1106 request.end_stream_on_headers = false; |
| 959 request.priority = DEFAULT_PRIORITY; | 1107 request.priority = DEFAULT_PRIORITY; |
| 960 | 1108 |
| 961 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1109 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 962 std::unique_ptr<TestDelegateBase> delegate( | 1110 std::unique_ptr<TestDelegateBase> delegate( |
| 963 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1111 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 964 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); | 1112 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 965 delegate->WaitUntilNextCallback(); // OnHeadersSent | 1113 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 966 | 1114 |
| 967 // Server acks the request. | 1115 // Server acks the request. |
| 968 ProcessPacket(ConstructAckPacket(1, 0, 0)); | 1116 ProcessPacket(ConstructAckPacket(1, 0, 0)); |
| 969 | 1117 |
| 970 // Server sends the response headers. | 1118 // Server sends the response headers. |
| 971 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 1119 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 972 size_t spdy_response_headers_frame_length; | 1120 size_t spdy_response_headers_frame_length; |
| 973 ProcessPacket(ConstructResponseHeadersPacket( | 1121 ProcessPacket(ConstructResponseHeadersPacket( |
| 974 2, !kFin, response_headers, &spdy_response_headers_frame_length, 0)); | 1122 2, !kFin, response_headers, &spdy_response_headers_frame_length, 0)); |
| 975 | 1123 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1005 request.method = "POST"; | 1153 request.method = "POST"; |
| 1006 request.url = GURL("http://www.google.com/"); | 1154 request.url = GURL("http://www.google.com/"); |
| 1007 request.end_stream_on_headers = false; | 1155 request.end_stream_on_headers = false; |
| 1008 request.priority = DEFAULT_PRIORITY; | 1156 request.priority = DEFAULT_PRIORITY; |
| 1009 | 1157 |
| 1010 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1158 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1011 std::unique_ptr<DeleteStreamDelegate> delegate(new DeleteStreamDelegate( | 1159 std::unique_ptr<DeleteStreamDelegate> delegate(new DeleteStreamDelegate( |
| 1012 read_buffer.get(), kReadBufferSize, | 1160 read_buffer.get(), kReadBufferSize, |
| 1013 DeleteStreamDelegate::ON_HEADERS_RECEIVED, true)); | 1161 DeleteStreamDelegate::ON_HEADERS_RECEIVED, true)); |
| 1014 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); | 1162 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 1015 delegate->WaitUntilNextCallback(); // OnHeadersSent | 1163 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 1016 | 1164 |
| 1017 // Server acks the request. | 1165 // Server acks the request. |
| 1018 ProcessPacket(ConstructAckPacket(1, 0, 0)); | 1166 ProcessPacket(ConstructAckPacket(1, 0, 0)); |
| 1019 | 1167 |
| 1020 // Server sends the response headers. | 1168 // Server sends the response headers. |
| 1021 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 1169 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 1022 | 1170 |
| 1023 size_t spdy_response_headers_frame_length; | 1171 size_t spdy_response_headers_frame_length; |
| 1024 ProcessPacket(ConstructResponseHeadersPacket( | 1172 ProcessPacket(ConstructResponseHeadersPacket( |
| 1025 2, !kFin, response_headers, &spdy_response_headers_frame_length, | 1173 2, !kFin, response_headers, &spdy_response_headers_frame_length, |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1048 request.method = "POST"; | 1196 request.method = "POST"; |
| 1049 request.url = GURL("http://www.google.com/"); | 1197 request.url = GURL("http://www.google.com/"); |
| 1050 request.end_stream_on_headers = false; | 1198 request.end_stream_on_headers = false; |
| 1051 request.priority = DEFAULT_PRIORITY; | 1199 request.priority = DEFAULT_PRIORITY; |
| 1052 | 1200 |
| 1053 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1201 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1054 std::unique_ptr<DeleteStreamDelegate> delegate( | 1202 std::unique_ptr<DeleteStreamDelegate> delegate( |
| 1055 new DeleteStreamDelegate(read_buffer.get(), kReadBufferSize, | 1203 new DeleteStreamDelegate(read_buffer.get(), kReadBufferSize, |
| 1056 DeleteStreamDelegate::ON_DATA_READ, true)); | 1204 DeleteStreamDelegate::ON_DATA_READ, true)); |
| 1057 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); | 1205 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 1058 delegate->WaitUntilNextCallback(); // OnHeadersSent | 1206 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 1059 | 1207 |
| 1060 // Server acks the request. | 1208 // Server acks the request. |
| 1061 ProcessPacket(ConstructAckPacket(1, 0, 0)); | 1209 ProcessPacket(ConstructAckPacket(1, 0, 0)); |
| 1062 | 1210 |
| 1063 // Server sends the response headers. | 1211 // Server sends the response headers. |
| 1064 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 1212 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 1065 | 1213 |
| 1066 size_t spdy_response_headers_frame_length; | 1214 size_t spdy_response_headers_frame_length; |
| 1067 ProcessPacket(ConstructResponseHeadersPacket( | 1215 ProcessPacket(ConstructResponseHeadersPacket( |
| 1068 2, !kFin, response_headers, &spdy_response_headers_frame_length, | 1216 2, !kFin, response_headers, &spdy_response_headers_frame_length, |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1100 request.method = "GET"; | 1248 request.method = "GET"; |
| 1101 request.url = GURL("http://www.google.com/"); | 1249 request.url = GURL("http://www.google.com/"); |
| 1102 request.end_stream_on_headers = true; | 1250 request.end_stream_on_headers = true; |
| 1103 request.priority = DEFAULT_PRIORITY; | 1251 request.priority = DEFAULT_PRIORITY; |
| 1104 | 1252 |
| 1105 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1253 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1106 std::unique_ptr<DeleteStreamDelegate> delegate(new DeleteStreamDelegate( | 1254 std::unique_ptr<DeleteStreamDelegate> delegate(new DeleteStreamDelegate( |
| 1107 read_buffer.get(), kReadBufferSize, | 1255 read_buffer.get(), kReadBufferSize, |
| 1108 DeleteStreamDelegate::ON_TRAILERS_RECEIVED, true)); | 1256 DeleteStreamDelegate::ON_TRAILERS_RECEIVED, true)); |
| 1109 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); | 1257 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 1110 delegate->WaitUntilNextCallback(); // OnHeadersSent | 1258 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 1111 | 1259 |
| 1112 // Server acks the request. | 1260 // Server acks the request. |
| 1113 ProcessPacket(ConstructAckPacket(1, 0, 0)); | 1261 ProcessPacket(ConstructAckPacket(1, 0, 0)); |
| 1114 | 1262 |
| 1115 // Server sends the response headers. | 1263 // Server sends the response headers. |
| 1116 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 1264 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 1117 | 1265 |
| 1118 QuicStreamOffset offset = 0; | 1266 QuicStreamOffset offset = 0; |
| 1119 size_t spdy_response_headers_frame_length; | 1267 size_t spdy_response_headers_frame_length; |
| 1120 ProcessPacket(ConstructResponseHeadersPacket( | 1268 ProcessPacket(ConstructResponseHeadersPacket( |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1150 | 1298 |
| 1151 base::MessageLoop::current()->RunUntilIdle(); | 1299 base::MessageLoop::current()->RunUntilIdle(); |
| 1152 | 1300 |
| 1153 EXPECT_EQ(1, delegate->on_data_read_count()); | 1301 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 1154 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1302 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 1155 } | 1303 } |
| 1156 | 1304 |
| 1157 } // namespace test | 1305 } // namespace test |
| 1158 | 1306 |
| 1159 } // namespace net | 1307 } // namespace net |
| OLD | NEW |