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