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