| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/quic/quic_http_stream.h" | 5 #include "net/quic/quic_http_stream.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "net/base/chunked_upload_data_stream.h" | 9 #include "net/base/chunked_upload_data_stream.h" |
| 10 #include "net/base/elements_upload_data_stream.h" | 10 #include "net/base/elements_upload_data_stream.h" |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 QuicConnectionPeer::SetSendAlgorithm(this, send_algorithm); | 75 QuicConnectionPeer::SetSendAlgorithm(this, send_algorithm); |
| 76 } | 76 } |
| 77 | 77 |
| 78 void SetReceiveAlgorithm(ReceiveAlgorithmInterface* receive_algorithm) { | 78 void SetReceiveAlgorithm(ReceiveAlgorithmInterface* receive_algorithm) { |
| 79 QuicConnectionPeer::SetReceiveAlgorithm(this, receive_algorithm); | 79 QuicConnectionPeer::SetReceiveAlgorithm(this, receive_algorithm); |
| 80 } | 80 } |
| 81 }; | 81 }; |
| 82 | 82 |
| 83 class TestReceiveAlgorithm : public ReceiveAlgorithmInterface { | 83 class TestReceiveAlgorithm : public ReceiveAlgorithmInterface { |
| 84 public: | 84 public: |
| 85 virtual bool GenerateCongestionFeedback( | |
| 86 QuicCongestionFeedbackFrame* /*congestion_feedback*/) { | |
| 87 return false; | |
| 88 } | |
| 89 | |
| 90 MOCK_METHOD3(RecordIncomingPacket, | 85 MOCK_METHOD3(RecordIncomingPacket, |
| 91 void(QuicByteCount, QuicPacketSequenceNumber, QuicTime)); | 86 void(QuicByteCount, QuicPacketSequenceNumber, QuicTime)); |
| 92 }; | 87 }; |
| 93 | 88 |
| 94 // Subclass of QuicHttpStream that closes itself when the first piece of data | 89 // Subclass of QuicHttpStream that closes itself when the first piece of data |
| 95 // is received. | 90 // is received. |
| 96 class AutoClosingStream : public QuicHttpStream { | 91 class AutoClosingStream : public QuicHttpStream { |
| 97 public: | 92 public: |
| 98 explicit AutoClosingStream(const base::WeakPtr<QuicClientSession>& session) | 93 explicit AutoClosingStream(const base::WeakPtr<QuicClientSession>& session) |
| 99 : QuicHttpStream(session) { | 94 : QuicHttpStream(session) { |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 response_headers_ = maker_.GetResponseHeaders(status); | 253 response_headers_ = maker_.GetResponseHeaders(status); |
| 259 response_data_ = body; | 254 response_data_ = body; |
| 260 } | 255 } |
| 261 | 256 |
| 262 scoped_ptr<QuicEncryptedPacket> ConstructDataPacket( | 257 scoped_ptr<QuicEncryptedPacket> ConstructDataPacket( |
| 263 QuicPacketSequenceNumber sequence_number, | 258 QuicPacketSequenceNumber sequence_number, |
| 264 bool should_include_version, | 259 bool should_include_version, |
| 265 bool fin, | 260 bool fin, |
| 266 QuicStreamOffset offset, | 261 QuicStreamOffset offset, |
| 267 base::StringPiece data) { | 262 base::StringPiece data) { |
| 268 return maker_.MakeDataPacket( | 263 return maker_.MakeDataPacket(sequence_number, stream_id_, |
| 269 sequence_number, stream_id_, should_include_version, fin, offset, data); | 264 should_include_version, fin, offset, data); |
| 270 } | 265 } |
| 271 | 266 |
| 272 scoped_ptr<QuicEncryptedPacket> ConstructRequestHeadersPacket( | 267 scoped_ptr<QuicEncryptedPacket> ConstructRequestHeadersPacket( |
| 273 QuicPacketSequenceNumber sequence_number, | 268 QuicPacketSequenceNumber sequence_number, |
| 274 bool fin) { | 269 bool fin, |
| 275 return maker_.MakeRequestHeadersPacket( | 270 RequestPriority request_priority) { |
| 276 sequence_number, stream_id_, kIncludeVersion, fin, request_headers_); | 271 QuicPriority priority = |
| 272 ConvertRequestPriorityToQuicPriority(request_priority); |
| 273 return maker_.MakeRequestHeadersPacket(sequence_number, stream_id_, |
| 274 kIncludeVersion, fin, priority, |
| 275 request_headers_); |
| 277 } | 276 } |
| 278 | 277 |
| 279 scoped_ptr<QuicEncryptedPacket> ConstructResponseHeadersPacket( | 278 scoped_ptr<QuicEncryptedPacket> ConstructResponseHeadersPacket( |
| 280 QuicPacketSequenceNumber sequence_number, | 279 QuicPacketSequenceNumber sequence_number, |
| 281 bool fin) { | 280 bool fin) { |
| 282 return maker_.MakeResponseHeadersPacket( | 281 return maker_.MakeResponseHeadersPacket( |
| 283 sequence_number, stream_id_, !kIncludeVersion, fin, response_headers_); | 282 sequence_number, stream_id_, !kIncludeVersion, fin, response_headers_); |
| 284 } | 283 } |
| 285 | 284 |
| 286 scoped_ptr<QuicEncryptedPacket> ConstructRstStreamPacket( | 285 scoped_ptr<QuicEncryptedPacket> ConstructRstStreamPacket( |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 354 EXPECT_TRUE(stream_->CanFindEndOfResponse()); | 353 EXPECT_TRUE(stream_->CanFindEndOfResponse()); |
| 355 } | 354 } |
| 356 | 355 |
| 357 TEST_P(QuicHttpStreamTest, IsConnectionReusable) { | 356 TEST_P(QuicHttpStreamTest, IsConnectionReusable) { |
| 358 Initialize(); | 357 Initialize(); |
| 359 EXPECT_FALSE(stream_->IsConnectionReusable()); | 358 EXPECT_FALSE(stream_->IsConnectionReusable()); |
| 360 } | 359 } |
| 361 | 360 |
| 362 TEST_P(QuicHttpStreamTest, GetRequest) { | 361 TEST_P(QuicHttpStreamTest, GetRequest) { |
| 363 SetRequest("GET", "/", DEFAULT_PRIORITY); | 362 SetRequest("GET", "/", DEFAULT_PRIORITY); |
| 364 AddWrite(ConstructRequestHeadersPacket(1, kFin)); | 363 AddWrite(ConstructRequestHeadersPacket(1, kFin, DEFAULT_PRIORITY)); |
| 365 Initialize(); | 364 Initialize(); |
| 366 | 365 |
| 367 request_.method = "GET"; | 366 request_.method = "GET"; |
| 368 request_.url = GURL("http://www.google.com/"); | 367 request_.url = GURL("http://www.google.com/"); |
| 369 | 368 |
| 370 EXPECT_EQ(OK, stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 369 EXPECT_EQ(OK, stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
| 371 net_log_, callback_.callback())); | 370 net_log_, callback_.callback())); |
| 372 EXPECT_EQ(OK, stream_->SendRequest(headers_, &response_, | 371 EXPECT_EQ(OK, stream_->SendRequest(headers_, &response_, |
| 373 callback_.callback())); | 372 callback_.callback())); |
| 374 | 373 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 393 EXPECT_EQ(0, stream_->ReadResponseBody(read_buffer_.get(), | 392 EXPECT_EQ(0, stream_->ReadResponseBody(read_buffer_.get(), |
| 394 read_buffer_->size(), | 393 read_buffer_->size(), |
| 395 callback_.callback())); | 394 callback_.callback())); |
| 396 EXPECT_TRUE(stream_->IsResponseBodyComplete()); | 395 EXPECT_TRUE(stream_->IsResponseBodyComplete()); |
| 397 EXPECT_TRUE(AtEof()); | 396 EXPECT_TRUE(AtEof()); |
| 398 } | 397 } |
| 399 | 398 |
| 400 // Regression test for http://crbug.com/288128 | 399 // Regression test for http://crbug.com/288128 |
| 401 TEST_P(QuicHttpStreamTest, GetRequestLargeResponse) { | 400 TEST_P(QuicHttpStreamTest, GetRequestLargeResponse) { |
| 402 SetRequest("GET", "/", DEFAULT_PRIORITY); | 401 SetRequest("GET", "/", DEFAULT_PRIORITY); |
| 403 AddWrite(ConstructRequestHeadersPacket(1, kFin)); | 402 AddWrite(ConstructRequestHeadersPacket(1, kFin, DEFAULT_PRIORITY)); |
| 404 Initialize(); | 403 Initialize(); |
| 405 | 404 |
| 406 request_.method = "GET"; | 405 request_.method = "GET"; |
| 407 request_.url = GURL("http://www.google.com/"); | 406 request_.url = GURL("http://www.google.com/"); |
| 408 | 407 |
| 409 EXPECT_EQ(OK, stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 408 EXPECT_EQ(OK, stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
| 410 net_log_, callback_.callback())); | 409 net_log_, callback_.callback())); |
| 411 EXPECT_EQ(OK, stream_->SendRequest(headers_, &response_, | 410 EXPECT_EQ(OK, stream_->SendRequest(headers_, &response_, |
| 412 callback_.callback())); | 411 callback_.callback())); |
| 413 | 412 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 456 session_->connection()->CloseConnection(QUIC_NO_ERROR, true); | 455 session_->connection()->CloseConnection(QUIC_NO_ERROR, true); |
| 457 | 456 |
| 458 EXPECT_EQ(ERR_CONNECTION_CLOSED, | 457 EXPECT_EQ(ERR_CONNECTION_CLOSED, |
| 459 stream_->SendRequest(headers_, &response_, | 458 stream_->SendRequest(headers_, &response_, |
| 460 callback_.callback())); | 459 callback_.callback())); |
| 461 } | 460 } |
| 462 | 461 |
| 463 // Regression test for http://crbug.com/409871 | 462 // Regression test for http://crbug.com/409871 |
| 464 TEST_P(QuicHttpStreamTest, SessionClosedBeforeReadResponseHeaders) { | 463 TEST_P(QuicHttpStreamTest, SessionClosedBeforeReadResponseHeaders) { |
| 465 SetRequest("GET", "/", DEFAULT_PRIORITY); | 464 SetRequest("GET", "/", DEFAULT_PRIORITY); |
| 466 AddWrite(ConstructRequestHeadersPacket(1, kFin)); | 465 AddWrite(ConstructRequestHeadersPacket(1, kFin, DEFAULT_PRIORITY)); |
| 467 Initialize(); | 466 Initialize(); |
| 468 | 467 |
| 469 request_.method = "GET"; | 468 request_.method = "GET"; |
| 470 request_.url = GURL("http://www.google.com/"); | 469 request_.url = GURL("http://www.google.com/"); |
| 471 | 470 |
| 472 EXPECT_EQ(OK, stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 471 EXPECT_EQ(OK, stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
| 473 net_log_, callback_.callback())); | 472 net_log_, callback_.callback())); |
| 474 | 473 |
| 475 EXPECT_EQ(OK, stream_->SendRequest(headers_, &response_, | 474 EXPECT_EQ(OK, stream_->SendRequest(headers_, &response_, |
| 476 callback_.callback())); | 475 callback_.callback())); |
| 477 | 476 |
| 478 session_->connection()->CloseConnection(QUIC_NO_ERROR, true); | 477 session_->connection()->CloseConnection(QUIC_NO_ERROR, true); |
| 479 | 478 |
| 480 EXPECT_NE(OK, stream_->ReadResponseHeaders(callback_.callback())); | 479 EXPECT_NE(OK, stream_->ReadResponseHeaders(callback_.callback())); |
| 481 } | 480 } |
| 482 | 481 |
| 483 TEST_P(QuicHttpStreamTest, SendPostRequest) { | 482 TEST_P(QuicHttpStreamTest, SendPostRequest) { |
| 484 SetRequest("POST", "/", DEFAULT_PRIORITY); | 483 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| 485 AddWrite(ConstructRequestHeadersPacket(1, !kFin)); | 484 AddWrite(ConstructRequestHeadersPacket(1, !kFin, DEFAULT_PRIORITY)); |
| 486 AddWrite(ConstructDataPacket(2, kIncludeVersion, kFin, 0, kUploadData)); | 485 AddWrite(ConstructDataPacket(2, kIncludeVersion, kFin, 0, kUploadData)); |
| 487 AddWrite(ConstructAckPacket(3, 3, 1)); | 486 AddWrite(ConstructAckPacket(3, 3, 1)); |
| 488 | 487 |
| 489 Initialize(); | 488 Initialize(); |
| 490 | 489 |
| 491 ScopedVector<UploadElementReader> element_readers; | 490 ScopedVector<UploadElementReader> element_readers; |
| 492 element_readers.push_back( | 491 element_readers.push_back( |
| 493 new UploadBytesElementReader(kUploadData, strlen(kUploadData))); | 492 new UploadBytesElementReader(kUploadData, strlen(kUploadData))); |
| 494 ElementsUploadDataStream upload_data_stream(element_readers.Pass(), 0); | 493 ElementsUploadDataStream upload_data_stream(element_readers.Pass(), 0); |
| 495 request_.method = "POST"; | 494 request_.method = "POST"; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 523 stream_->ReadResponseBody(read_buffer_.get(), read_buffer_->size(), | 522 stream_->ReadResponseBody(read_buffer_.get(), read_buffer_->size(), |
| 524 callback_.callback())); | 523 callback_.callback())); |
| 525 | 524 |
| 526 EXPECT_TRUE(stream_->IsResponseBodyComplete()); | 525 EXPECT_TRUE(stream_->IsResponseBodyComplete()); |
| 527 EXPECT_TRUE(AtEof()); | 526 EXPECT_TRUE(AtEof()); |
| 528 } | 527 } |
| 529 | 528 |
| 530 TEST_P(QuicHttpStreamTest, SendChunkedPostRequest) { | 529 TEST_P(QuicHttpStreamTest, SendChunkedPostRequest) { |
| 531 SetRequest("POST", "/", DEFAULT_PRIORITY); | 530 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| 532 size_t chunk_size = strlen(kUploadData); | 531 size_t chunk_size = strlen(kUploadData); |
| 533 AddWrite(ConstructRequestHeadersPacket(1, !kFin)); | 532 AddWrite(ConstructRequestHeadersPacket(1, !kFin, DEFAULT_PRIORITY)); |
| 534 AddWrite(ConstructDataPacket(2, kIncludeVersion, !kFin, 0, kUploadData)); | 533 AddWrite(ConstructDataPacket(2, kIncludeVersion, !kFin, 0, kUploadData)); |
| 535 AddWrite(ConstructDataPacket(3, kIncludeVersion, kFin, chunk_size, | 534 AddWrite(ConstructDataPacket(3, kIncludeVersion, kFin, chunk_size, |
| 536 kUploadData)); | 535 kUploadData)); |
| 537 AddWrite(ConstructAckPacket(4, 3, 1)); | 536 AddWrite(ConstructAckPacket(4, 3, 1)); |
| 538 Initialize(); | 537 Initialize(); |
| 539 | 538 |
| 540 ChunkedUploadDataStream upload_data_stream(0); | 539 ChunkedUploadDataStream upload_data_stream(0); |
| 541 upload_data_stream.AppendData(kUploadData, chunk_size, false); | 540 upload_data_stream.AppendData(kUploadData, chunk_size, false); |
| 542 | 541 |
| 543 request_.method = "POST"; | 542 request_.method = "POST"; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 576 stream_->ReadResponseBody(read_buffer_.get(), read_buffer_->size(), | 575 stream_->ReadResponseBody(read_buffer_.get(), read_buffer_->size(), |
| 577 callback_.callback())); | 576 callback_.callback())); |
| 578 | 577 |
| 579 EXPECT_TRUE(stream_->IsResponseBodyComplete()); | 578 EXPECT_TRUE(stream_->IsResponseBodyComplete()); |
| 580 EXPECT_TRUE(AtEof()); | 579 EXPECT_TRUE(AtEof()); |
| 581 } | 580 } |
| 582 | 581 |
| 583 TEST_P(QuicHttpStreamTest, SendChunkedPostRequestWithFinalEmptyDataPacket) { | 582 TEST_P(QuicHttpStreamTest, SendChunkedPostRequestWithFinalEmptyDataPacket) { |
| 584 SetRequest("POST", "/", DEFAULT_PRIORITY); | 583 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| 585 size_t chunk_size = strlen(kUploadData); | 584 size_t chunk_size = strlen(kUploadData); |
| 586 AddWrite(ConstructRequestHeadersPacket(1, !kFin)); | 585 AddWrite(ConstructRequestHeadersPacket(1, !kFin, DEFAULT_PRIORITY)); |
| 587 AddWrite(ConstructDataPacket(2, kIncludeVersion, !kFin, 0, kUploadData)); | 586 AddWrite(ConstructDataPacket(2, kIncludeVersion, !kFin, 0, kUploadData)); |
| 588 AddWrite(ConstructDataPacket(3, kIncludeVersion, kFin, chunk_size, "")); | 587 AddWrite(ConstructDataPacket(3, kIncludeVersion, kFin, chunk_size, "")); |
| 589 AddWrite(ConstructAckPacket(4, 3, 1)); | 588 AddWrite(ConstructAckPacket(4, 3, 1)); |
| 590 Initialize(); | 589 Initialize(); |
| 591 | 590 |
| 592 ChunkedUploadDataStream upload_data_stream(0); | 591 ChunkedUploadDataStream upload_data_stream(0); |
| 593 upload_data_stream.AppendData(kUploadData, chunk_size, false); | 592 upload_data_stream.AppendData(kUploadData, chunk_size, false); |
| 594 | 593 |
| 595 request_.method = "POST"; | 594 request_.method = "POST"; |
| 596 request_.url = GURL("http://www.google.com/"); | 595 request_.url = GURL("http://www.google.com/"); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 626 ASSERT_EQ(static_cast<int>(strlen(kResponseBody)), | 625 ASSERT_EQ(static_cast<int>(strlen(kResponseBody)), |
| 627 stream_->ReadResponseBody(read_buffer_.get(), read_buffer_->size(), | 626 stream_->ReadResponseBody(read_buffer_.get(), read_buffer_->size(), |
| 628 callback_.callback())); | 627 callback_.callback())); |
| 629 | 628 |
| 630 EXPECT_TRUE(stream_->IsResponseBodyComplete()); | 629 EXPECT_TRUE(stream_->IsResponseBodyComplete()); |
| 631 EXPECT_TRUE(AtEof()); | 630 EXPECT_TRUE(AtEof()); |
| 632 } | 631 } |
| 633 | 632 |
| 634 TEST_P(QuicHttpStreamTest, SendChunkedPostRequestWithOneEmptyDataPacket) { | 633 TEST_P(QuicHttpStreamTest, SendChunkedPostRequestWithOneEmptyDataPacket) { |
| 635 SetRequest("POST", "/", DEFAULT_PRIORITY); | 634 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| 636 AddWrite(ConstructRequestHeadersPacket(1, !kFin)); | 635 AddWrite(ConstructRequestHeadersPacket(1, !kFin, DEFAULT_PRIORITY)); |
| 637 AddWrite(ConstructDataPacket(2, kIncludeVersion, kFin, 0, "")); | 636 AddWrite(ConstructDataPacket(2, kIncludeVersion, kFin, 0, "")); |
| 638 AddWrite(ConstructAckPacket(3, 3, 1)); | 637 AddWrite(ConstructAckPacket(3, 3, 1)); |
| 639 Initialize(); | 638 Initialize(); |
| 640 | 639 |
| 641 ChunkedUploadDataStream upload_data_stream(0); | 640 ChunkedUploadDataStream upload_data_stream(0); |
| 642 | 641 |
| 643 request_.method = "POST"; | 642 request_.method = "POST"; |
| 644 request_.url = GURL("http://www.google.com/"); | 643 request_.url = GURL("http://www.google.com/"); |
| 645 request_.upload_data_stream = &upload_data_stream; | 644 request_.upload_data_stream = &upload_data_stream; |
| 646 ASSERT_EQ(OK, request_.upload_data_stream->Init( | 645 ASSERT_EQ(OK, request_.upload_data_stream->Init( |
| (...skipping 27 matching lines...) Expand all Loading... |
| 674 ASSERT_EQ(static_cast<int>(strlen(kResponseBody)), | 673 ASSERT_EQ(static_cast<int>(strlen(kResponseBody)), |
| 675 stream_->ReadResponseBody(read_buffer_.get(), read_buffer_->size(), | 674 stream_->ReadResponseBody(read_buffer_.get(), read_buffer_->size(), |
| 676 callback_.callback())); | 675 callback_.callback())); |
| 677 | 676 |
| 678 EXPECT_TRUE(stream_->IsResponseBodyComplete()); | 677 EXPECT_TRUE(stream_->IsResponseBodyComplete()); |
| 679 EXPECT_TRUE(AtEof()); | 678 EXPECT_TRUE(AtEof()); |
| 680 } | 679 } |
| 681 | 680 |
| 682 TEST_P(QuicHttpStreamTest, DestroyedEarly) { | 681 TEST_P(QuicHttpStreamTest, DestroyedEarly) { |
| 683 SetRequest("GET", "/", DEFAULT_PRIORITY); | 682 SetRequest("GET", "/", DEFAULT_PRIORITY); |
| 684 AddWrite(ConstructRequestHeadersPacket(1, kFin)); | 683 AddWrite(ConstructRequestHeadersPacket(1, kFin, DEFAULT_PRIORITY)); |
| 685 AddWrite(ConstructAckAndRstStreamPacket(2)); | 684 AddWrite(ConstructAckAndRstStreamPacket(2)); |
| 686 use_closing_stream_ = true; | 685 use_closing_stream_ = true; |
| 687 Initialize(); | 686 Initialize(); |
| 688 | 687 |
| 689 request_.method = "GET"; | 688 request_.method = "GET"; |
| 690 request_.url = GURL("http://www.google.com/"); | 689 request_.url = GURL("http://www.google.com/"); |
| 691 | 690 |
| 692 EXPECT_EQ(OK, stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 691 EXPECT_EQ(OK, stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
| 693 net_log_, callback_.callback())); | 692 net_log_, callback_.callback())); |
| 694 EXPECT_EQ(OK, stream_->SendRequest(headers_, &response_, | 693 EXPECT_EQ(OK, stream_->SendRequest(headers_, &response_, |
| 695 callback_.callback())); | 694 callback_.callback())); |
| 696 | 695 |
| 697 // Ack the request. | 696 // Ack the request. |
| 698 ProcessPacket(ConstructAckPacket(1, 0, 0)); | 697 ProcessPacket(ConstructAckPacket(1, 0, 0)); |
| 699 EXPECT_EQ(ERR_IO_PENDING, | 698 EXPECT_EQ(ERR_IO_PENDING, |
| 700 stream_->ReadResponseHeaders(callback_.callback())); | 699 stream_->ReadResponseHeaders(callback_.callback())); |
| 701 | 700 |
| 702 // Send the response with a body. | 701 // Send the response with a body. |
| 703 SetResponse("404 OK", "hello world!"); | 702 SetResponse("404 OK", "hello world!"); |
| 704 // In the course of processing this packet, the QuicHttpStream close itself. | 703 // In the course of processing this packet, the QuicHttpStream close itself. |
| 705 ProcessPacket(ConstructResponseHeadersPacket(2, kFin)); | 704 ProcessPacket(ConstructResponseHeadersPacket(2, kFin)); |
| 706 | 705 |
| 707 EXPECT_TRUE(AtEof()); | 706 EXPECT_TRUE(AtEof()); |
| 708 } | 707 } |
| 709 | 708 |
| 710 TEST_P(QuicHttpStreamTest, Priority) { | 709 TEST_P(QuicHttpStreamTest, Priority) { |
| 711 SetRequest("GET", "/", MEDIUM); | 710 SetRequest("GET", "/", MEDIUM); |
| 712 AddWrite(ConstructRequestHeadersPacket(1, kFin)); | 711 AddWrite(ConstructRequestHeadersPacket(1, kFin, MEDIUM)); |
| 713 AddWrite(ConstructAckAndRstStreamPacket(2)); | 712 AddWrite(ConstructAckAndRstStreamPacket(2)); |
| 714 use_closing_stream_ = true; | 713 use_closing_stream_ = true; |
| 715 Initialize(); | 714 Initialize(); |
| 716 | 715 |
| 717 request_.method = "GET"; | 716 request_.method = "GET"; |
| 718 request_.url = GURL("http://www.google.com/"); | 717 request_.url = GURL("http://www.google.com/"); |
| 719 | 718 |
| 720 EXPECT_EQ(OK, stream_->InitializeStream(&request_, MEDIUM, | 719 EXPECT_EQ(OK, stream_->InitializeStream(&request_, MEDIUM, |
| 721 net_log_, callback_.callback())); | 720 net_log_, callback_.callback())); |
| 722 | 721 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 774 // Set Delegate to nullptr and make sure EffectivePriority returns highest | 773 // Set Delegate to nullptr and make sure EffectivePriority returns highest |
| 775 // priority. | 774 // priority. |
| 776 reliable_stream->SetDelegate(nullptr); | 775 reliable_stream->SetDelegate(nullptr); |
| 777 DCHECK_EQ(QuicWriteBlockedList::kHighestPriority, | 776 DCHECK_EQ(QuicWriteBlockedList::kHighestPriority, |
| 778 reliable_stream->EffectivePriority()); | 777 reliable_stream->EffectivePriority()); |
| 779 reliable_stream->SetDelegate(delegate); | 778 reliable_stream->SetDelegate(delegate); |
| 780 } | 779 } |
| 781 | 780 |
| 782 } // namespace test | 781 } // namespace test |
| 783 } // namespace net | 782 } // namespace net |
| OLD | NEW |