| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/http/bidirectional_stream.h" | 5 #include "net/http/bidirectional_stream.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| (...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 326 DISALLOW_COPY_AND_ASSIGN(MockTimer); | 326 DISALLOW_COPY_AND_ASSIGN(MockTimer); |
| 327 }; | 327 }; |
| 328 | 328 |
| 329 } // namespace | 329 } // namespace |
| 330 | 330 |
| 331 class BidirectionalStreamTest : public testing::TestWithParam<bool> { | 331 class BidirectionalStreamTest : public testing::TestWithParam<bool> { |
| 332 public: | 332 public: |
| 333 BidirectionalStreamTest() | 333 BidirectionalStreamTest() |
| 334 : spdy_util_(kProtoHTTP2, true), | 334 : spdy_util_(kProtoHTTP2, true), |
| 335 session_deps_(kProtoHTTP2), | 335 session_deps_(kProtoHTTP2), |
| 336 default_url_(kDefaultUrl), |
| 337 host_port_pair_(HostPortPair::FromURL(default_url_)), |
| 338 key_(host_port_pair_, ProxyServer::Direct(), PRIVACY_MODE_DISABLED), |
| 336 ssl_data_(SSLSocketDataProvider(ASYNC, OK)) { | 339 ssl_data_(SSLSocketDataProvider(ASYNC, OK)) { |
| 337 ssl_data_.SetNextProto(kProtoHTTP2); | 340 ssl_data_.SetNextProto(kProtoHTTP2); |
| 338 ssl_data_.cert = ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem"); | 341 ssl_data_.cert = ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem"); |
| 339 net_log_.SetCaptureMode(NetLogCaptureMode::IncludeSocketBytes()); | 342 net_log_.SetCaptureMode(NetLogCaptureMode::IncludeSocketBytes()); |
| 340 } | 343 } |
| 341 | 344 |
| 342 protected: | 345 protected: |
| 343 void TearDown() override { | 346 void TearDown() override { |
| 344 if (sequenced_data_) { | 347 if (sequenced_data_) { |
| 345 EXPECT_TRUE(sequenced_data_->AllReadDataConsumed()); | 348 EXPECT_TRUE(sequenced_data_->AllReadDataConsumed()); |
| 346 EXPECT_TRUE(sequenced_data_->AllWriteDataConsumed()); | 349 EXPECT_TRUE(sequenced_data_->AllWriteDataConsumed()); |
| 347 } | 350 } |
| 348 } | 351 } |
| 349 | 352 |
| 350 // Initializes the session using SequencedSocketData. | 353 // Initializes the session using SequencedSocketData. |
| 351 void InitSession(MockRead* reads, | 354 void InitSession(MockRead* reads, |
| 352 size_t reads_count, | 355 size_t reads_count, |
| 353 MockWrite* writes, | 356 MockWrite* writes, |
| 354 size_t writes_count, | 357 size_t writes_count) { |
| 355 const SpdySessionKey& key) { | |
| 356 ASSERT_TRUE(ssl_data_.cert.get()); | 358 ASSERT_TRUE(ssl_data_.cert.get()); |
| 357 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_data_); | 359 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_data_); |
| 358 sequenced_data_.reset( | 360 sequenced_data_.reset( |
| 359 new SequencedSocketData(reads, reads_count, writes, writes_count)); | 361 new SequencedSocketData(reads, reads_count, writes, writes_count)); |
| 360 session_deps_.socket_factory->AddSocketDataProvider(sequenced_data_.get()); | 362 session_deps_.socket_factory->AddSocketDataProvider(sequenced_data_.get()); |
| 361 session_deps_.net_log = net_log_.bound().net_log(); | 363 session_deps_.net_log = net_log_.bound().net_log(); |
| 362 http_session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_); | 364 http_session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_); |
| 363 session_ = | 365 session_ = |
| 364 CreateSecureSpdySession(http_session_.get(), key, net_log_.bound()); | 366 CreateSecureSpdySession(http_session_.get(), key_, net_log_.bound()); |
| 365 } | 367 } |
| 366 | 368 |
| 367 BoundTestNetLog net_log_; | 369 BoundTestNetLog net_log_; |
| 368 SpdyTestUtil spdy_util_; | 370 SpdyTestUtil spdy_util_; |
| 369 SpdySessionDependencies session_deps_; | 371 SpdySessionDependencies session_deps_; |
| 372 const GURL default_url_; |
| 373 const HostPortPair host_port_pair_; |
| 374 const SpdySessionKey key_; |
| 370 std::unique_ptr<SequencedSocketData> sequenced_data_; | 375 std::unique_ptr<SequencedSocketData> sequenced_data_; |
| 371 std::unique_ptr<HttpNetworkSession> http_session_; | 376 std::unique_ptr<HttpNetworkSession> http_session_; |
| 372 | 377 |
| 373 private: | 378 private: |
| 374 SSLSocketDataProvider ssl_data_; | 379 SSLSocketDataProvider ssl_data_; |
| 375 base::WeakPtr<SpdySession> session_; | 380 base::WeakPtr<SpdySession> session_; |
| 376 }; | 381 }; |
| 377 | 382 |
| 378 TEST_F(BidirectionalStreamTest, CreateInsecureStream) { | 383 TEST_F(BidirectionalStreamTest, CreateInsecureStream) { |
| 379 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( | 384 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( |
| (...skipping 28 matching lines...) Expand all Loading... |
| 408 // Reset stream right before the OnFailed task is executed. | 413 // Reset stream right before the OnFailed task is executed. |
| 409 delegate.reset(); | 414 delegate.reset(); |
| 410 | 415 |
| 411 base::RunLoop().RunUntilIdle(); | 416 base::RunLoop().RunUntilIdle(); |
| 412 } | 417 } |
| 413 | 418 |
| 414 // Simulates user calling ReadData after END_STREAM has been received in | 419 // Simulates user calling ReadData after END_STREAM has been received in |
| 415 // BidirectionalStreamSpdyImpl. | 420 // BidirectionalStreamSpdyImpl. |
| 416 TEST_F(BidirectionalStreamTest, TestReadDataAfterClose) { | 421 TEST_F(BidirectionalStreamTest, TestReadDataAfterClose) { |
| 417 std::unique_ptr<SpdySerializedFrame> req( | 422 std::unique_ptr<SpdySerializedFrame> req( |
| 418 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); | 423 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST)); |
| 419 // Empty DATA frame with an END_STREAM flag. | 424 // Empty DATA frame with an END_STREAM flag. |
| 420 std::unique_ptr<SpdySerializedFrame> end_stream( | 425 std::unique_ptr<SpdySerializedFrame> end_stream( |
| 421 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); | 426 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); |
| 422 MockWrite writes[] = { | 427 MockWrite writes[] = { |
| 423 CreateMockWrite(*req.get(), 0), | 428 CreateMockWrite(*req.get(), 0), |
| 424 }; | 429 }; |
| 425 | 430 |
| 426 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; | 431 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; |
| 427 | 432 |
| 428 std::unique_ptr<SpdySerializedFrame> resp( | 433 std::unique_ptr<SpdySerializedFrame> resp( |
| 429 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); | 434 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); |
| 430 | 435 |
| 431 std::unique_ptr<SpdySerializedFrame> body_frame( | 436 std::unique_ptr<SpdySerializedFrame> body_frame( |
| 432 spdy_util_.ConstructSpdyBodyFrame(1, false)); | 437 spdy_util_.ConstructSpdyBodyFrame(1, false)); |
| 433 // Last body frame has END_STREAM flag set. | 438 // Last body frame has END_STREAM flag set. |
| 434 std::unique_ptr<SpdySerializedFrame> last_body_frame( | 439 std::unique_ptr<SpdySerializedFrame> last_body_frame( |
| 435 spdy_util_.ConstructSpdyBodyFrame(1, true)); | 440 spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 436 | 441 |
| 437 MockRead reads[] = { | 442 MockRead reads[] = { |
| 438 CreateMockRead(*resp, 1), | 443 CreateMockRead(*resp, 1), |
| 439 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. | 444 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. |
| 440 CreateMockRead(*body_frame, 3), | 445 CreateMockRead(*body_frame, 3), |
| 441 MockRead(ASYNC, ERR_IO_PENDING, 4), // Force a pause. | 446 MockRead(ASYNC, ERR_IO_PENDING, 4), // Force a pause. |
| 442 CreateMockRead(*body_frame, 5), | 447 CreateMockRead(*body_frame, 5), |
| 443 CreateMockRead(*last_body_frame, 6), | 448 CreateMockRead(*last_body_frame, 6), |
| 444 MockRead(SYNCHRONOUS, 0, 7), | 449 MockRead(SYNCHRONOUS, 0, 7), |
| 445 }; | 450 }; |
| 446 | 451 |
| 447 HostPortPair host_port_pair("www.example.org", 443); | 452 InitSession(reads, arraysize(reads), writes, arraysize(writes)); |
| 448 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | |
| 449 PRIVACY_MODE_DISABLED); | |
| 450 InitSession(reads, arraysize(reads), writes, arraysize(writes), key); | |
| 451 | 453 |
| 452 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( | 454 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( |
| 453 new BidirectionalStreamRequestInfo); | 455 new BidirectionalStreamRequestInfo); |
| 454 request_info->method = "GET"; | 456 request_info->method = "GET"; |
| 455 request_info->url = GURL("https://www.example.org/"); | 457 request_info->url = default_url_; |
| 456 request_info->end_stream_on_headers = true; | 458 request_info->end_stream_on_headers = true; |
| 457 request_info->priority = LOWEST; | 459 request_info->priority = LOWEST; |
| 458 | 460 |
| 459 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 461 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 460 // Create a MockTimer. Retain a raw pointer since the underlying | 462 // Create a MockTimer. Retain a raw pointer since the underlying |
| 461 // BidirectionalStreamImpl owns it. | 463 // BidirectionalStreamImpl owns it. |
| 462 MockTimer* timer = new MockTimer(); | 464 MockTimer* timer = new MockTimer(); |
| 463 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( | 465 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( |
| 464 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); | 466 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); |
| 465 delegate->set_do_not_start_read(true); | 467 delegate->set_do_not_start_read(true); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 500 delegate->GetTotalSentBytes()); | 502 delegate->GetTotalSentBytes()); |
| 501 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), | 503 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), |
| 502 delegate->GetTotalReceivedBytes()); | 504 delegate->GetTotalReceivedBytes()); |
| 503 } | 505 } |
| 504 | 506 |
| 505 // Tests that the NetLog contains correct entries. | 507 // Tests that the NetLog contains correct entries. |
| 506 TEST_F(BidirectionalStreamTest, TestNetLogContainEntries) { | 508 TEST_F(BidirectionalStreamTest, TestNetLogContainEntries) { |
| 507 BufferedSpdyFramer framer(spdy_util_.spdy_version()); | 509 BufferedSpdyFramer framer(spdy_util_.spdy_version()); |
| 508 | 510 |
| 509 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( | 511 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( |
| 510 "https://www.example.org", 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); | 512 kDefaultUrl, 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); |
| 511 std::unique_ptr<SpdySerializedFrame> data_frame( | 513 std::unique_ptr<SpdySerializedFrame> data_frame( |
| 512 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_FIN)); | 514 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_FIN)); |
| 513 MockWrite writes[] = { | 515 MockWrite writes[] = { |
| 514 CreateMockWrite(*req, 0), CreateMockWrite(*data_frame, 3), | 516 CreateMockWrite(*req, 0), CreateMockWrite(*data_frame, 3), |
| 515 }; | 517 }; |
| 516 | 518 |
| 517 std::unique_ptr<SpdySerializedFrame> resp( | 519 std::unique_ptr<SpdySerializedFrame> resp( |
| 518 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); | 520 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); |
| 519 std::unique_ptr<SpdySerializedFrame> response_body_frame1( | 521 std::unique_ptr<SpdySerializedFrame> response_body_frame1( |
| 520 spdy_util_.ConstructSpdyBodyFrame(1, false)); | 522 spdy_util_.ConstructSpdyBodyFrame(1, false)); |
| 521 std::unique_ptr<SpdySerializedFrame> response_body_frame2( | 523 std::unique_ptr<SpdySerializedFrame> response_body_frame2( |
| 522 spdy_util_.ConstructSpdyBodyFrame(1, false)); | 524 spdy_util_.ConstructSpdyBodyFrame(1, false)); |
| 523 | 525 |
| 524 SpdyHeaderBlock trailers; | 526 SpdyHeaderBlock trailers; |
| 525 trailers["foo"] = "bar"; | 527 trailers["foo"] = "bar"; |
| 526 std::unique_ptr<SpdySerializedFrame> response_trailers( | 528 std::unique_ptr<SpdySerializedFrame> response_trailers( |
| 527 spdy_util_.ConstructSpdyResponseHeaders(1, std::move(trailers), true)); | 529 spdy_util_.ConstructSpdyResponseHeaders(1, std::move(trailers), true)); |
| 528 | 530 |
| 529 MockRead reads[] = { | 531 MockRead reads[] = { |
| 530 CreateMockRead(*resp, 1), | 532 CreateMockRead(*resp, 1), |
| 531 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. | 533 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. |
| 532 CreateMockRead(*response_body_frame1, 4), | 534 CreateMockRead(*response_body_frame1, 4), |
| 533 MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause. | 535 MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause. |
| 534 CreateMockRead(*response_body_frame2, 6), | 536 CreateMockRead(*response_body_frame2, 6), |
| 535 CreateMockRead(*response_trailers, 7), | 537 CreateMockRead(*response_trailers, 7), |
| 536 MockRead(ASYNC, 0, 8), | 538 MockRead(ASYNC, 0, 8), |
| 537 }; | 539 }; |
| 538 | 540 |
| 539 HostPortPair host_port_pair("www.example.org", 443); | 541 InitSession(reads, arraysize(reads), writes, arraysize(writes)); |
| 540 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | |
| 541 PRIVACY_MODE_DISABLED); | |
| 542 InitSession(reads, arraysize(reads), writes, arraysize(writes), key); | |
| 543 | 542 |
| 544 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( | 543 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( |
| 545 new BidirectionalStreamRequestInfo); | 544 new BidirectionalStreamRequestInfo); |
| 546 request_info->method = "POST"; | 545 request_info->method = "POST"; |
| 547 request_info->url = GURL("https://www.example.org/"); | 546 request_info->url = default_url_; |
| 548 request_info->priority = LOWEST; | 547 request_info->priority = LOWEST; |
| 549 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength, | 548 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength, |
| 550 base::SizeTToString(kBodyDataSize * 3)); | 549 base::SizeTToString(kBodyDataSize * 3)); |
| 551 | 550 |
| 552 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 551 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 553 MockTimer* timer = new MockTimer(); | 552 MockTimer* timer = new MockTimer(); |
| 554 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( | 553 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( |
| 555 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); | 554 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); |
| 556 delegate->set_do_not_start_read(true); | 555 delegate->set_do_not_start_read(true); |
| 557 delegate->Start(std::move(request_info), http_session_.get()); | 556 delegate->Start(std::move(request_info), http_session_.get()); |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 635 EXPECT_EQ(NetLog::SOURCE_BIDIRECTIONAL_STREAM, entry.source.type); | 634 EXPECT_EQ(NetLog::SOURCE_BIDIRECTIONAL_STREAM, entry.source.type); |
| 636 ExpectLogContainsSomewhere(entries, index, | 635 ExpectLogContainsSomewhere(entries, index, |
| 637 NetLog::TYPE_BIDIRECTIONAL_STREAM_ALIVE, | 636 NetLog::TYPE_BIDIRECTIONAL_STREAM_ALIVE, |
| 638 NetLog::PHASE_END); | 637 NetLog::PHASE_END); |
| 639 } | 638 } |
| 640 | 639 |
| 641 TEST_F(BidirectionalStreamTest, TestInterleaveReadDataAndSendData) { | 640 TEST_F(BidirectionalStreamTest, TestInterleaveReadDataAndSendData) { |
| 642 BufferedSpdyFramer framer(spdy_util_.spdy_version()); | 641 BufferedSpdyFramer framer(spdy_util_.spdy_version()); |
| 643 | 642 |
| 644 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( | 643 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( |
| 645 "https://www.example.org", 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); | 644 kDefaultUrl, 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); |
| 646 std::unique_ptr<SpdySerializedFrame> data_frame1( | 645 std::unique_ptr<SpdySerializedFrame> data_frame1( |
| 647 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE)); | 646 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE)); |
| 648 std::unique_ptr<SpdySerializedFrame> data_frame2( | 647 std::unique_ptr<SpdySerializedFrame> data_frame2( |
| 649 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE)); | 648 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE)); |
| 650 std::unique_ptr<SpdySerializedFrame> data_frame3( | 649 std::unique_ptr<SpdySerializedFrame> data_frame3( |
| 651 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_FIN)); | 650 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_FIN)); |
| 652 MockWrite writes[] = { | 651 MockWrite writes[] = { |
| 653 CreateMockWrite(*req, 0), CreateMockWrite(*data_frame1, 3), | 652 CreateMockWrite(*req, 0), CreateMockWrite(*data_frame1, 3), |
| 654 CreateMockWrite(*data_frame2, 6), CreateMockWrite(*data_frame3, 9), | 653 CreateMockWrite(*data_frame2, 6), CreateMockWrite(*data_frame3, 9), |
| 655 }; | 654 }; |
| 656 | 655 |
| 657 std::unique_ptr<SpdySerializedFrame> resp( | 656 std::unique_ptr<SpdySerializedFrame> resp( |
| 658 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); | 657 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); |
| 659 std::unique_ptr<SpdySerializedFrame> response_body_frame1( | 658 std::unique_ptr<SpdySerializedFrame> response_body_frame1( |
| 660 spdy_util_.ConstructSpdyBodyFrame(1, false)); | 659 spdy_util_.ConstructSpdyBodyFrame(1, false)); |
| 661 std::unique_ptr<SpdySerializedFrame> response_body_frame2( | 660 std::unique_ptr<SpdySerializedFrame> response_body_frame2( |
| 662 spdy_util_.ConstructSpdyBodyFrame(1, true)); | 661 spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 663 | 662 |
| 664 MockRead reads[] = { | 663 MockRead reads[] = { |
| 665 CreateMockRead(*resp, 1), | 664 CreateMockRead(*resp, 1), |
| 666 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. | 665 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. |
| 667 CreateMockRead(*response_body_frame1, 4), | 666 CreateMockRead(*response_body_frame1, 4), |
| 668 MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause. | 667 MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause. |
| 669 CreateMockRead(*response_body_frame2, 7), | 668 CreateMockRead(*response_body_frame2, 7), |
| 670 MockRead(ASYNC, ERR_IO_PENDING, 8), // Force a pause. | 669 MockRead(ASYNC, ERR_IO_PENDING, 8), // Force a pause. |
| 671 MockRead(ASYNC, 0, 10), | 670 MockRead(ASYNC, 0, 10), |
| 672 }; | 671 }; |
| 673 | 672 |
| 674 HostPortPair host_port_pair("www.example.org", 443); | 673 InitSession(reads, arraysize(reads), writes, arraysize(writes)); |
| 675 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | |
| 676 PRIVACY_MODE_DISABLED); | |
| 677 InitSession(reads, arraysize(reads), writes, arraysize(writes), key); | |
| 678 | 674 |
| 679 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( | 675 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( |
| 680 new BidirectionalStreamRequestInfo); | 676 new BidirectionalStreamRequestInfo); |
| 681 request_info->method = "POST"; | 677 request_info->method = "POST"; |
| 682 request_info->url = GURL("https://www.example.org/"); | 678 request_info->url = default_url_; |
| 683 request_info->priority = LOWEST; | 679 request_info->priority = LOWEST; |
| 684 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength, | 680 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength, |
| 685 base::SizeTToString(kBodyDataSize * 3)); | 681 base::SizeTToString(kBodyDataSize * 3)); |
| 686 | 682 |
| 687 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 683 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 688 MockTimer* timer = new MockTimer(); | 684 MockTimer* timer = new MockTimer(); |
| 689 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( | 685 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( |
| 690 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); | 686 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); |
| 691 delegate->set_do_not_start_read(true); | 687 delegate->set_do_not_start_read(true); |
| 692 delegate->Start(std::move(request_info), http_session_.get()); | 688 delegate->Start(std::move(request_info), http_session_.get()); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 742 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), | 738 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), |
| 743 delegate->GetTotalSentBytes()); | 739 delegate->GetTotalSentBytes()); |
| 744 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), | 740 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), |
| 745 delegate->GetTotalReceivedBytes()); | 741 delegate->GetTotalReceivedBytes()); |
| 746 } | 742 } |
| 747 | 743 |
| 748 TEST_F(BidirectionalStreamTest, TestCoalesceSmallDataBuffers) { | 744 TEST_F(BidirectionalStreamTest, TestCoalesceSmallDataBuffers) { |
| 749 BufferedSpdyFramer framer(spdy_util_.spdy_version()); | 745 BufferedSpdyFramer framer(spdy_util_.spdy_version()); |
| 750 | 746 |
| 751 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( | 747 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( |
| 752 "https://www.example.org", 1, kBodyDataSize * 1, LOWEST, nullptr, 0)); | 748 kDefaultUrl, 1, kBodyDataSize * 1, LOWEST, nullptr, 0)); |
| 753 std::string body_data = "some really long piece of data"; | 749 std::string body_data = "some really long piece of data"; |
| 754 std::unique_ptr<SpdySerializedFrame> data_frame1(framer.CreateDataFrame( | 750 std::unique_ptr<SpdySerializedFrame> data_frame1(framer.CreateDataFrame( |
| 755 1, body_data.c_str(), body_data.size(), DATA_FLAG_FIN)); | 751 1, body_data.c_str(), body_data.size(), DATA_FLAG_FIN)); |
| 756 MockWrite writes[] = { | 752 MockWrite writes[] = { |
| 757 CreateMockWrite(*req, 0), CreateMockWrite(*data_frame1, 1), | 753 CreateMockWrite(*req, 0), CreateMockWrite(*data_frame1, 1), |
| 758 }; | 754 }; |
| 759 | 755 |
| 760 std::unique_ptr<SpdySerializedFrame> resp( | 756 std::unique_ptr<SpdySerializedFrame> resp( |
| 761 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); | 757 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); |
| 762 std::unique_ptr<SpdySerializedFrame> response_body_frame1( | 758 std::unique_ptr<SpdySerializedFrame> response_body_frame1( |
| 763 spdy_util_.ConstructSpdyBodyFrame(1, true)); | 759 spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 764 MockRead reads[] = { | 760 MockRead reads[] = { |
| 765 CreateMockRead(*resp, 2), | 761 CreateMockRead(*resp, 2), |
| 766 MockRead(ASYNC, ERR_IO_PENDING, 3), // Force a pause. | 762 MockRead(ASYNC, ERR_IO_PENDING, 3), // Force a pause. |
| 767 CreateMockRead(*response_body_frame1, 4), MockRead(ASYNC, 0, 5), | 763 CreateMockRead(*response_body_frame1, 4), MockRead(ASYNC, 0, 5), |
| 768 }; | 764 }; |
| 769 | 765 |
| 770 HostPortPair host_port_pair("www.example.org", 443); | 766 InitSession(reads, arraysize(reads), writes, arraysize(writes)); |
| 771 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | |
| 772 PRIVACY_MODE_DISABLED); | |
| 773 InitSession(reads, arraysize(reads), writes, arraysize(writes), key); | |
| 774 | 767 |
| 775 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( | 768 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( |
| 776 new BidirectionalStreamRequestInfo); | 769 new BidirectionalStreamRequestInfo); |
| 777 request_info->method = "POST"; | 770 request_info->method = "POST"; |
| 778 request_info->url = GURL("https://www.example.org/"); | 771 request_info->url = default_url_; |
| 779 request_info->priority = LOWEST; | 772 request_info->priority = LOWEST; |
| 780 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength, | 773 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength, |
| 781 base::SizeTToString(kBodyDataSize * 1)); | 774 base::SizeTToString(kBodyDataSize * 1)); |
| 782 | 775 |
| 783 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 776 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 784 MockTimer* timer = new MockTimer(); | 777 MockTimer* timer = new MockTimer(); |
| 785 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( | 778 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( |
| 786 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); | 779 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); |
| 787 delegate->set_do_not_start_read(true); | 780 delegate->set_do_not_start_read(true); |
| 788 TestCompletionCallback callback; | 781 TestCompletionCallback callback; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 841 | 834 |
| 842 ExpectLogContainsSomewhere( | 835 ExpectLogContainsSomewhere( |
| 843 entries, index, NetLog::TYPE_BIDIRECTIONAL_STREAM_BYTES_SENT_COALESCED, | 836 entries, index, NetLog::TYPE_BIDIRECTIONAL_STREAM_BYTES_SENT_COALESCED, |
| 844 NetLog::PHASE_END); | 837 NetLog::PHASE_END); |
| 845 } | 838 } |
| 846 | 839 |
| 847 // Tests that BidirectionalStreamSpdyImpl::OnClose will complete any remaining | 840 // Tests that BidirectionalStreamSpdyImpl::OnClose will complete any remaining |
| 848 // read even if the read queue is empty. | 841 // read even if the read queue is empty. |
| 849 TEST_F(BidirectionalStreamTest, TestCompleteAsyncRead) { | 842 TEST_F(BidirectionalStreamTest, TestCompleteAsyncRead) { |
| 850 std::unique_ptr<SpdySerializedFrame> req( | 843 std::unique_ptr<SpdySerializedFrame> req( |
| 851 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); | 844 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST)); |
| 852 // Empty DATA frame with an END_STREAM flag. | 845 // Empty DATA frame with an END_STREAM flag. |
| 853 std::unique_ptr<SpdySerializedFrame> end_stream( | 846 std::unique_ptr<SpdySerializedFrame> end_stream( |
| 854 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); | 847 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); |
| 855 | 848 |
| 856 MockWrite writes[] = {CreateMockWrite(*req.get(), 0)}; | 849 MockWrite writes[] = {CreateMockWrite(*req.get(), 0)}; |
| 857 | 850 |
| 858 std::unique_ptr<SpdySerializedFrame> resp( | 851 std::unique_ptr<SpdySerializedFrame> resp( |
| 859 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); | 852 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); |
| 860 | 853 |
| 861 std::unique_ptr<SpdySerializedFrame> response_body_frame( | 854 std::unique_ptr<SpdySerializedFrame> response_body_frame( |
| 862 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); | 855 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); |
| 863 | 856 |
| 864 MockRead reads[] = { | 857 MockRead reads[] = { |
| 865 CreateMockRead(*resp, 1), | 858 CreateMockRead(*resp, 1), |
| 866 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. | 859 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. |
| 867 CreateMockRead(*response_body_frame, 3), MockRead(SYNCHRONOUS, 0, 4), | 860 CreateMockRead(*response_body_frame, 3), MockRead(SYNCHRONOUS, 0, 4), |
| 868 }; | 861 }; |
| 869 | 862 |
| 870 HostPortPair host_port_pair("www.example.org", 443); | 863 InitSession(reads, arraysize(reads), writes, arraysize(writes)); |
| 871 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | |
| 872 PRIVACY_MODE_DISABLED); | |
| 873 InitSession(reads, arraysize(reads), writes, arraysize(writes), key); | |
| 874 | 864 |
| 875 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( | 865 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( |
| 876 new BidirectionalStreamRequestInfo); | 866 new BidirectionalStreamRequestInfo); |
| 877 request_info->method = "GET"; | 867 request_info->method = "GET"; |
| 878 request_info->url = GURL("https://www.example.org/"); | 868 request_info->url = default_url_; |
| 879 request_info->priority = LOWEST; | 869 request_info->priority = LOWEST; |
| 880 request_info->end_stream_on_headers = true; | 870 request_info->end_stream_on_headers = true; |
| 881 | 871 |
| 882 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 872 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 883 MockTimer* timer = new MockTimer(); | 873 MockTimer* timer = new MockTimer(); |
| 884 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( | 874 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( |
| 885 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); | 875 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); |
| 886 delegate->set_do_not_start_read(true); | 876 delegate->set_do_not_start_read(true); |
| 887 delegate->Start(std::move(request_info), http_session_.get()); | 877 delegate->Start(std::move(request_info), http_session_.get()); |
| 888 // Write request, and deliver response headers. | 878 // Write request, and deliver response headers. |
| (...skipping 14 matching lines...) Expand all Loading... |
| 903 EXPECT_EQ(0, delegate->on_data_sent_count()); | 893 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 904 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); | 894 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); |
| 905 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), | 895 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), |
| 906 delegate->GetTotalSentBytes()); | 896 delegate->GetTotalSentBytes()); |
| 907 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), | 897 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), |
| 908 delegate->GetTotalReceivedBytes()); | 898 delegate->GetTotalReceivedBytes()); |
| 909 } | 899 } |
| 910 | 900 |
| 911 TEST_F(BidirectionalStreamTest, TestBuffering) { | 901 TEST_F(BidirectionalStreamTest, TestBuffering) { |
| 912 std::unique_ptr<SpdySerializedFrame> req( | 902 std::unique_ptr<SpdySerializedFrame> req( |
| 913 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); | 903 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST)); |
| 914 // Empty DATA frame with an END_STREAM flag. | 904 // Empty DATA frame with an END_STREAM flag. |
| 915 std::unique_ptr<SpdySerializedFrame> end_stream( | 905 std::unique_ptr<SpdySerializedFrame> end_stream( |
| 916 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); | 906 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); |
| 917 | 907 |
| 918 MockWrite writes[] = {CreateMockWrite(*req.get(), 0)}; | 908 MockWrite writes[] = {CreateMockWrite(*req.get(), 0)}; |
| 919 | 909 |
| 920 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; | 910 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; |
| 921 | 911 |
| 922 std::unique_ptr<SpdySerializedFrame> resp( | 912 std::unique_ptr<SpdySerializedFrame> resp( |
| 923 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); | 913 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); |
| 924 | 914 |
| 925 std::unique_ptr<SpdySerializedFrame> body_frame( | 915 std::unique_ptr<SpdySerializedFrame> body_frame( |
| 926 spdy_util_.ConstructSpdyBodyFrame(1, false)); | 916 spdy_util_.ConstructSpdyBodyFrame(1, false)); |
| 927 // Last body frame has END_STREAM flag set. | 917 // Last body frame has END_STREAM flag set. |
| 928 std::unique_ptr<SpdySerializedFrame> last_body_frame( | 918 std::unique_ptr<SpdySerializedFrame> last_body_frame( |
| 929 spdy_util_.ConstructSpdyBodyFrame(1, true)); | 919 spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 930 | 920 |
| 931 MockRead reads[] = { | 921 MockRead reads[] = { |
| 932 CreateMockRead(*resp, 1), | 922 CreateMockRead(*resp, 1), |
| 933 CreateMockRead(*body_frame, 2), | 923 CreateMockRead(*body_frame, 2), |
| 934 CreateMockRead(*body_frame, 3), | 924 CreateMockRead(*body_frame, 3), |
| 935 MockRead(ASYNC, ERR_IO_PENDING, 4), // Force a pause. | 925 MockRead(ASYNC, ERR_IO_PENDING, 4), // Force a pause. |
| 936 CreateMockRead(*last_body_frame, 5), | 926 CreateMockRead(*last_body_frame, 5), |
| 937 MockRead(SYNCHRONOUS, 0, 6), | 927 MockRead(SYNCHRONOUS, 0, 6), |
| 938 }; | 928 }; |
| 939 | 929 |
| 940 HostPortPair host_port_pair("www.example.org", 443); | 930 InitSession(reads, arraysize(reads), writes, arraysize(writes)); |
| 941 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | |
| 942 PRIVACY_MODE_DISABLED); | |
| 943 InitSession(reads, arraysize(reads), writes, arraysize(writes), key); | |
| 944 | 931 |
| 945 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( | 932 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( |
| 946 new BidirectionalStreamRequestInfo); | 933 new BidirectionalStreamRequestInfo); |
| 947 request_info->method = "GET"; | 934 request_info->method = "GET"; |
| 948 request_info->url = GURL("https://www.example.org/"); | 935 request_info->url = default_url_; |
| 949 request_info->priority = LOWEST; | 936 request_info->priority = LOWEST; |
| 950 request_info->end_stream_on_headers = true; | 937 request_info->end_stream_on_headers = true; |
| 951 | 938 |
| 952 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 939 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 953 MockTimer* timer = new MockTimer(); | 940 MockTimer* timer = new MockTimer(); |
| 954 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( | 941 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( |
| 955 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); | 942 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); |
| 956 delegate->Start(std::move(request_info), http_session_.get()); | 943 delegate->Start(std::move(request_info), http_session_.get()); |
| 957 // Deliver two DATA frames together. | 944 // Deliver two DATA frames together. |
| 958 sequenced_data_->RunUntilPaused(); | 945 sequenced_data_->RunUntilPaused(); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 987 EXPECT_EQ(0, delegate->on_data_sent_count()); | 974 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 988 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); | 975 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); |
| 989 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), | 976 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), |
| 990 delegate->GetTotalSentBytes()); | 977 delegate->GetTotalSentBytes()); |
| 991 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), | 978 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), |
| 992 delegate->GetTotalReceivedBytes()); | 979 delegate->GetTotalReceivedBytes()); |
| 993 } | 980 } |
| 994 | 981 |
| 995 TEST_F(BidirectionalStreamTest, TestBufferingWithTrailers) { | 982 TEST_F(BidirectionalStreamTest, TestBufferingWithTrailers) { |
| 996 std::unique_ptr<SpdySerializedFrame> req( | 983 std::unique_ptr<SpdySerializedFrame> req( |
| 997 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); | 984 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST)); |
| 998 // Empty DATA frame with an END_STREAM flag. | 985 // Empty DATA frame with an END_STREAM flag. |
| 999 std::unique_ptr<SpdySerializedFrame> end_stream( | 986 std::unique_ptr<SpdySerializedFrame> end_stream( |
| 1000 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); | 987 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); |
| 1001 | 988 |
| 1002 MockWrite writes[] = { | 989 MockWrite writes[] = { |
| 1003 CreateMockWrite(*req.get(), 0), | 990 CreateMockWrite(*req.get(), 0), |
| 1004 }; | 991 }; |
| 1005 | 992 |
| 1006 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; | 993 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; |
| 1007 | 994 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1019 MockRead reads[] = { | 1006 MockRead reads[] = { |
| 1020 CreateMockRead(*resp, 1), | 1007 CreateMockRead(*resp, 1), |
| 1021 CreateMockRead(*body_frame, 2), | 1008 CreateMockRead(*body_frame, 2), |
| 1022 CreateMockRead(*body_frame, 3), | 1009 CreateMockRead(*body_frame, 3), |
| 1023 CreateMockRead(*body_frame, 4), | 1010 CreateMockRead(*body_frame, 4), |
| 1024 MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause. | 1011 MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause. |
| 1025 CreateMockRead(*response_trailers, 6), | 1012 CreateMockRead(*response_trailers, 6), |
| 1026 MockRead(SYNCHRONOUS, 0, 7), | 1013 MockRead(SYNCHRONOUS, 0, 7), |
| 1027 }; | 1014 }; |
| 1028 | 1015 |
| 1029 HostPortPair host_port_pair("www.example.org", 443); | 1016 InitSession(reads, arraysize(reads), writes, arraysize(writes)); |
| 1030 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | |
| 1031 PRIVACY_MODE_DISABLED); | |
| 1032 InitSession(reads, arraysize(reads), writes, arraysize(writes), key); | |
| 1033 | 1017 |
| 1034 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1018 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1035 MockTimer* timer = new MockTimer(); | 1019 MockTimer* timer = new MockTimer(); |
| 1036 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( | 1020 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( |
| 1037 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); | 1021 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); |
| 1038 | 1022 |
| 1039 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( | 1023 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( |
| 1040 new BidirectionalStreamRequestInfo); | 1024 new BidirectionalStreamRequestInfo); |
| 1041 request_info->method = "GET"; | 1025 request_info->method = "GET"; |
| 1042 request_info->url = GURL("https://www.example.org/"); | 1026 request_info->url = default_url_; |
| 1043 request_info->priority = LOWEST; | 1027 request_info->priority = LOWEST; |
| 1044 request_info->end_stream_on_headers = true; | 1028 request_info->end_stream_on_headers = true; |
| 1045 | 1029 |
| 1046 delegate->Start(std::move(request_info), http_session_.get()); | 1030 delegate->Start(std::move(request_info), http_session_.get()); |
| 1047 // Deliver all three DATA frames together. | 1031 // Deliver all three DATA frames together. |
| 1048 sequenced_data_->RunUntilPaused(); | 1032 sequenced_data_->RunUntilPaused(); |
| 1049 EXPECT_TRUE(timer->IsRunning()); | 1033 EXPECT_TRUE(timer->IsRunning()); |
| 1050 timer->Fire(); | 1034 timer->Fire(); |
| 1051 base::RunLoop().RunUntilIdle(); | 1035 base::RunLoop().RunUntilIdle(); |
| 1052 // This should trigger |more_read_data_pending_| to execute the task at a | 1036 // This should trigger |more_read_data_pending_| to execute the task at a |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1072 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), | 1056 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), |
| 1073 delegate->GetTotalSentBytes()); | 1057 delegate->GetTotalSentBytes()); |
| 1074 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), | 1058 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), |
| 1075 delegate->GetTotalReceivedBytes()); | 1059 delegate->GetTotalReceivedBytes()); |
| 1076 } | 1060 } |
| 1077 | 1061 |
| 1078 TEST_F(BidirectionalStreamTest, CancelStreamAfterSendData) { | 1062 TEST_F(BidirectionalStreamTest, CancelStreamAfterSendData) { |
| 1079 BufferedSpdyFramer framer(spdy_util_.spdy_version()); | 1063 BufferedSpdyFramer framer(spdy_util_.spdy_version()); |
| 1080 | 1064 |
| 1081 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( | 1065 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( |
| 1082 "https://www.example.org", 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); | 1066 kDefaultUrl, 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); |
| 1083 std::unique_ptr<SpdySerializedFrame> data_frame( | 1067 std::unique_ptr<SpdySerializedFrame> data_frame( |
| 1084 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE)); | 1068 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE)); |
| 1085 std::unique_ptr<SpdySerializedFrame> rst( | 1069 std::unique_ptr<SpdySerializedFrame> rst( |
| 1086 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 1070 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); |
| 1087 | 1071 |
| 1088 MockWrite writes[] = { | 1072 MockWrite writes[] = { |
| 1089 CreateMockWrite(*req, 0), CreateMockWrite(*data_frame, 3), | 1073 CreateMockWrite(*req, 0), CreateMockWrite(*data_frame, 3), |
| 1090 CreateMockWrite(*rst, 5), | 1074 CreateMockWrite(*rst, 5), |
| 1091 }; | 1075 }; |
| 1092 | 1076 |
| 1093 std::unique_ptr<SpdySerializedFrame> resp( | 1077 std::unique_ptr<SpdySerializedFrame> resp( |
| 1094 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); | 1078 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); |
| 1095 std::unique_ptr<SpdySerializedFrame> response_body_frame( | 1079 std::unique_ptr<SpdySerializedFrame> response_body_frame( |
| 1096 spdy_util_.ConstructSpdyBodyFrame(1, false)); | 1080 spdy_util_.ConstructSpdyBodyFrame(1, false)); |
| 1097 | 1081 |
| 1098 MockRead reads[] = { | 1082 MockRead reads[] = { |
| 1099 CreateMockRead(*resp, 1), | 1083 CreateMockRead(*resp, 1), |
| 1100 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. | 1084 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. |
| 1101 MockRead(ASYNC, ERR_IO_PENDING, 4), // Force a pause. | 1085 MockRead(ASYNC, ERR_IO_PENDING, 4), // Force a pause. |
| 1102 MockRead(ASYNC, 0, 6), | 1086 MockRead(ASYNC, 0, 6), |
| 1103 }; | 1087 }; |
| 1104 | 1088 |
| 1105 HostPortPair host_port_pair("www.example.org", 443); | 1089 InitSession(reads, arraysize(reads), writes, arraysize(writes)); |
| 1106 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | |
| 1107 PRIVACY_MODE_DISABLED); | |
| 1108 InitSession(reads, arraysize(reads), writes, arraysize(writes), key); | |
| 1109 | 1090 |
| 1110 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( | 1091 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( |
| 1111 new BidirectionalStreamRequestInfo); | 1092 new BidirectionalStreamRequestInfo); |
| 1112 request_info->method = "POST"; | 1093 request_info->method = "POST"; |
| 1113 request_info->url = GURL("https://www.example.org/"); | 1094 request_info->url = default_url_; |
| 1114 request_info->priority = LOWEST; | 1095 request_info->priority = LOWEST; |
| 1115 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength, | 1096 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength, |
| 1116 base::SizeTToString(kBodyDataSize * 3)); | 1097 base::SizeTToString(kBodyDataSize * 3)); |
| 1117 | 1098 |
| 1118 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1099 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1119 std::unique_ptr<TestDelegateBase> delegate( | 1100 std::unique_ptr<TestDelegateBase> delegate( |
| 1120 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1101 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 1121 delegate->set_do_not_start_read(true); | 1102 delegate->set_do_not_start_read(true); |
| 1122 delegate->Start(std::move(request_info), http_session_.get()); | 1103 delegate->Start(std::move(request_info), http_session_.get()); |
| 1123 // Send the request and receive response headers. | 1104 // Send the request and receive response headers. |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1142 // Calling after stream is canceled gives kProtoUnknown. | 1123 // Calling after stream is canceled gives kProtoUnknown. |
| 1143 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); | 1124 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); |
| 1144 EXPECT_EQ(0, delegate->GetTotalSentBytes()); | 1125 EXPECT_EQ(0, delegate->GetTotalSentBytes()); |
| 1145 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); | 1126 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); |
| 1146 } | 1127 } |
| 1147 | 1128 |
| 1148 TEST_F(BidirectionalStreamTest, CancelStreamDuringReadData) { | 1129 TEST_F(BidirectionalStreamTest, CancelStreamDuringReadData) { |
| 1149 BufferedSpdyFramer framer(spdy_util_.spdy_version()); | 1130 BufferedSpdyFramer framer(spdy_util_.spdy_version()); |
| 1150 | 1131 |
| 1151 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( | 1132 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( |
| 1152 "https://www.example.org", 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); | 1133 kDefaultUrl, 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); |
| 1153 std::unique_ptr<SpdySerializedFrame> data_frame( | 1134 std::unique_ptr<SpdySerializedFrame> data_frame( |
| 1154 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE)); | 1135 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE)); |
| 1155 std::unique_ptr<SpdySerializedFrame> rst( | 1136 std::unique_ptr<SpdySerializedFrame> rst( |
| 1156 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 1137 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); |
| 1157 | 1138 |
| 1158 MockWrite writes[] = { | 1139 MockWrite writes[] = { |
| 1159 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4), | 1140 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4), |
| 1160 }; | 1141 }; |
| 1161 | 1142 |
| 1162 std::unique_ptr<SpdySerializedFrame> resp( | 1143 std::unique_ptr<SpdySerializedFrame> resp( |
| 1163 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); | 1144 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); |
| 1164 std::unique_ptr<SpdySerializedFrame> response_body_frame( | 1145 std::unique_ptr<SpdySerializedFrame> response_body_frame( |
| 1165 spdy_util_.ConstructSpdyBodyFrame(1, false)); | 1146 spdy_util_.ConstructSpdyBodyFrame(1, false)); |
| 1166 | 1147 |
| 1167 MockRead reads[] = { | 1148 MockRead reads[] = { |
| 1168 CreateMockRead(*resp, 1), | 1149 CreateMockRead(*resp, 1), |
| 1169 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. | 1150 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. |
| 1170 CreateMockRead(*response_body_frame, 3), MockRead(ASYNC, 0, 5), | 1151 CreateMockRead(*response_body_frame, 3), MockRead(ASYNC, 0, 5), |
| 1171 }; | 1152 }; |
| 1172 | 1153 |
| 1173 HostPortPair host_port_pair("www.example.org", 443); | 1154 InitSession(reads, arraysize(reads), writes, arraysize(writes)); |
| 1174 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | |
| 1175 PRIVACY_MODE_DISABLED); | |
| 1176 InitSession(reads, arraysize(reads), writes, arraysize(writes), key); | |
| 1177 | 1155 |
| 1178 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( | 1156 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( |
| 1179 new BidirectionalStreamRequestInfo); | 1157 new BidirectionalStreamRequestInfo); |
| 1180 request_info->method = "POST"; | 1158 request_info->method = "POST"; |
| 1181 request_info->url = GURL("https://www.example.org/"); | 1159 request_info->url = default_url_; |
| 1182 request_info->priority = LOWEST; | 1160 request_info->priority = LOWEST; |
| 1183 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength, | 1161 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength, |
| 1184 base::SizeTToString(kBodyDataSize * 3)); | 1162 base::SizeTToString(kBodyDataSize * 3)); |
| 1185 | 1163 |
| 1186 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1164 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1187 std::unique_ptr<TestDelegateBase> delegate( | 1165 std::unique_ptr<TestDelegateBase> delegate( |
| 1188 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1166 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 1189 delegate->set_do_not_start_read(true); | 1167 delegate->set_do_not_start_read(true); |
| 1190 delegate->Start(std::move(request_info), http_session_.get()); | 1168 delegate->Start(std::move(request_info), http_session_.get()); |
| 1191 // Send the request and receive response headers. | 1169 // Send the request and receive response headers. |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1205 // Calling after stream is canceled gives kProtoUnknown. | 1183 // Calling after stream is canceled gives kProtoUnknown. |
| 1206 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); | 1184 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); |
| 1207 EXPECT_EQ(0, delegate->GetTotalSentBytes()); | 1185 EXPECT_EQ(0, delegate->GetTotalSentBytes()); |
| 1208 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); | 1186 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); |
| 1209 } | 1187 } |
| 1210 | 1188 |
| 1211 // Receiving a header with uppercase ASCII will result in a protocol error, | 1189 // Receiving a header with uppercase ASCII will result in a protocol error, |
| 1212 // which should be propagated via Delegate::OnFailed. | 1190 // which should be propagated via Delegate::OnFailed. |
| 1213 TEST_F(BidirectionalStreamTest, PropagateProtocolError) { | 1191 TEST_F(BidirectionalStreamTest, PropagateProtocolError) { |
| 1214 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( | 1192 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( |
| 1215 "https://www.example.org", 1, kBodyDataSize * 3, LOW, nullptr, 0)); | 1193 kDefaultUrl, 1, kBodyDataSize * 3, LOW, nullptr, 0)); |
| 1216 std::unique_ptr<SpdySerializedFrame> rst( | 1194 std::unique_ptr<SpdySerializedFrame> rst( |
| 1217 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); | 1195 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); |
| 1218 | 1196 |
| 1219 MockWrite writes[] = { | 1197 MockWrite writes[] = { |
| 1220 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2), | 1198 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2), |
| 1221 }; | 1199 }; |
| 1222 | 1200 |
| 1223 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"}; | 1201 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"}; |
| 1224 std::unique_ptr<SpdySerializedFrame> resp( | 1202 std::unique_ptr<SpdySerializedFrame> resp( |
| 1225 spdy_util_.ConstructSpdyGetSynReply(kExtraHeaders, 1, 1)); | 1203 spdy_util_.ConstructSpdyGetSynReply(kExtraHeaders, 1, 1)); |
| 1226 | 1204 |
| 1227 MockRead reads[] = { | 1205 MockRead reads[] = { |
| 1228 CreateMockRead(*resp, 1), MockRead(ASYNC, 0, 3), | 1206 CreateMockRead(*resp, 1), MockRead(ASYNC, 0, 3), |
| 1229 }; | 1207 }; |
| 1230 | 1208 |
| 1231 HostPortPair host_port_pair("www.example.org", 443); | 1209 InitSession(reads, arraysize(reads), writes, arraysize(writes)); |
| 1232 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | |
| 1233 PRIVACY_MODE_DISABLED); | |
| 1234 InitSession(reads, arraysize(reads), writes, arraysize(writes), key); | |
| 1235 | 1210 |
| 1236 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( | 1211 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( |
| 1237 new BidirectionalStreamRequestInfo); | 1212 new BidirectionalStreamRequestInfo); |
| 1238 request_info->method = "POST"; | 1213 request_info->method = "POST"; |
| 1239 request_info->url = GURL("https://www.example.org/"); | 1214 request_info->url = default_url_; |
| 1240 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength, | 1215 request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength, |
| 1241 base::SizeTToString(kBodyDataSize * 3)); | 1216 base::SizeTToString(kBodyDataSize * 3)); |
| 1242 | 1217 |
| 1243 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1218 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1244 std::unique_ptr<TestDelegateBase> delegate( | 1219 std::unique_ptr<TestDelegateBase> delegate( |
| 1245 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1220 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 1246 delegate->SetRunUntilCompletion(true); | 1221 delegate->SetRunUntilCompletion(true); |
| 1247 delegate->Start(std::move(request_info), http_session_.get()); | 1222 delegate->Start(std::move(request_info), http_session_.get()); |
| 1248 | 1223 |
| 1249 base::RunLoop().RunUntilIdle(); | 1224 base::RunLoop().RunUntilIdle(); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1278 EXPECT_TRUE(entry.params->GetInteger("net_error", &net_error)); | 1253 EXPECT_TRUE(entry.params->GetInteger("net_error", &net_error)); |
| 1279 EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, net_error); | 1254 EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, net_error); |
| 1280 } | 1255 } |
| 1281 | 1256 |
| 1282 INSTANTIATE_TEST_CASE_P(CancelOrDeleteTests, | 1257 INSTANTIATE_TEST_CASE_P(CancelOrDeleteTests, |
| 1283 BidirectionalStreamTest, | 1258 BidirectionalStreamTest, |
| 1284 ::testing::Values(true, false)); | 1259 ::testing::Values(true, false)); |
| 1285 | 1260 |
| 1286 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnHeadersReceived) { | 1261 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnHeadersReceived) { |
| 1287 std::unique_ptr<SpdySerializedFrame> req( | 1262 std::unique_ptr<SpdySerializedFrame> req( |
| 1288 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); | 1263 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST)); |
| 1289 | 1264 |
| 1290 std::unique_ptr<SpdySerializedFrame> rst( | 1265 std::unique_ptr<SpdySerializedFrame> rst( |
| 1291 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 1266 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); |
| 1292 MockWrite writes[] = { | 1267 MockWrite writes[] = { |
| 1293 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2), | 1268 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2), |
| 1294 }; | 1269 }; |
| 1295 | 1270 |
| 1296 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; | 1271 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; |
| 1297 | 1272 |
| 1298 std::unique_ptr<SpdySerializedFrame> resp( | 1273 std::unique_ptr<SpdySerializedFrame> resp( |
| 1299 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); | 1274 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); |
| 1300 | 1275 |
| 1301 MockRead reads[] = { | 1276 MockRead reads[] = { |
| 1302 CreateMockRead(*resp, 1), MockRead(ASYNC, 0, 3), | 1277 CreateMockRead(*resp, 1), MockRead(ASYNC, 0, 3), |
| 1303 }; | 1278 }; |
| 1304 | 1279 |
| 1305 HostPortPair host_port_pair("www.example.org", 443); | 1280 InitSession(reads, arraysize(reads), writes, arraysize(writes)); |
| 1306 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | |
| 1307 PRIVACY_MODE_DISABLED); | |
| 1308 InitSession(reads, arraysize(reads), writes, arraysize(writes), key); | |
| 1309 | 1281 |
| 1310 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( | 1282 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( |
| 1311 new BidirectionalStreamRequestInfo); | 1283 new BidirectionalStreamRequestInfo); |
| 1312 request_info->method = "GET"; | 1284 request_info->method = "GET"; |
| 1313 request_info->url = GURL("https://www.example.org/"); | 1285 request_info->url = default_url_; |
| 1314 request_info->priority = LOWEST; | 1286 request_info->priority = LOWEST; |
| 1315 request_info->end_stream_on_headers = true; | 1287 request_info->end_stream_on_headers = true; |
| 1316 | 1288 |
| 1317 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1289 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1318 std::unique_ptr<CancelOrDeleteStreamDelegate> delegate( | 1290 std::unique_ptr<CancelOrDeleteStreamDelegate> delegate( |
| 1319 new CancelOrDeleteStreamDelegate( | 1291 new CancelOrDeleteStreamDelegate( |
| 1320 read_buffer.get(), kReadBufferSize, | 1292 read_buffer.get(), kReadBufferSize, |
| 1321 CancelOrDeleteStreamDelegate::Phase::ON_HEADERS_RECEIVED, | 1293 CancelOrDeleteStreamDelegate::Phase::ON_HEADERS_RECEIVED, |
| 1322 GetParam())); | 1294 GetParam())); |
| 1323 delegate->SetRunUntilCompletion(true); | 1295 delegate->SetRunUntilCompletion(true); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1334 // If stream is destroyed, do not call into stream. | 1306 // If stream is destroyed, do not call into stream. |
| 1335 if (!GetParam()) | 1307 if (!GetParam()) |
| 1336 return; | 1308 return; |
| 1337 EXPECT_EQ(0, delegate->GetTotalSentBytes()); | 1309 EXPECT_EQ(0, delegate->GetTotalSentBytes()); |
| 1338 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); | 1310 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); |
| 1339 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); | 1311 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); |
| 1340 } | 1312 } |
| 1341 | 1313 |
| 1342 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnDataRead) { | 1314 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnDataRead) { |
| 1343 std::unique_ptr<SpdySerializedFrame> req( | 1315 std::unique_ptr<SpdySerializedFrame> req( |
| 1344 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); | 1316 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST)); |
| 1345 | 1317 |
| 1346 std::unique_ptr<SpdySerializedFrame> rst( | 1318 std::unique_ptr<SpdySerializedFrame> rst( |
| 1347 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 1319 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); |
| 1348 MockWrite writes[] = { | 1320 MockWrite writes[] = { |
| 1349 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 3), | 1321 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 3), |
| 1350 }; | 1322 }; |
| 1351 | 1323 |
| 1352 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; | 1324 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; |
| 1353 | 1325 |
| 1354 std::unique_ptr<SpdySerializedFrame> resp( | 1326 std::unique_ptr<SpdySerializedFrame> resp( |
| 1355 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); | 1327 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); |
| 1356 | 1328 |
| 1357 std::unique_ptr<SpdySerializedFrame> response_body_frame( | 1329 std::unique_ptr<SpdySerializedFrame> response_body_frame( |
| 1358 spdy_util_.ConstructSpdyBodyFrame(1, false)); | 1330 spdy_util_.ConstructSpdyBodyFrame(1, false)); |
| 1359 | 1331 |
| 1360 MockRead reads[] = { | 1332 MockRead reads[] = { |
| 1361 CreateMockRead(*resp, 1), CreateMockRead(*response_body_frame, 2), | 1333 CreateMockRead(*resp, 1), CreateMockRead(*response_body_frame, 2), |
| 1362 MockRead(ASYNC, 0, 4), | 1334 MockRead(ASYNC, 0, 4), |
| 1363 }; | 1335 }; |
| 1364 | 1336 |
| 1365 HostPortPair host_port_pair("www.example.org", 443); | 1337 InitSession(reads, arraysize(reads), writes, arraysize(writes)); |
| 1366 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | |
| 1367 PRIVACY_MODE_DISABLED); | |
| 1368 InitSession(reads, arraysize(reads), writes, arraysize(writes), key); | |
| 1369 | 1338 |
| 1370 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( | 1339 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( |
| 1371 new BidirectionalStreamRequestInfo); | 1340 new BidirectionalStreamRequestInfo); |
| 1372 request_info->method = "GET"; | 1341 request_info->method = "GET"; |
| 1373 request_info->url = GURL("https://www.example.org/"); | 1342 request_info->url = default_url_; |
| 1374 request_info->priority = LOWEST; | 1343 request_info->priority = LOWEST; |
| 1375 request_info->end_stream_on_headers = true; | 1344 request_info->end_stream_on_headers = true; |
| 1376 | 1345 |
| 1377 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1346 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1378 std::unique_ptr<CancelOrDeleteStreamDelegate> delegate( | 1347 std::unique_ptr<CancelOrDeleteStreamDelegate> delegate( |
| 1379 new CancelOrDeleteStreamDelegate( | 1348 new CancelOrDeleteStreamDelegate( |
| 1380 read_buffer.get(), kReadBufferSize, | 1349 read_buffer.get(), kReadBufferSize, |
| 1381 CancelOrDeleteStreamDelegate::Phase::ON_DATA_READ, GetParam())); | 1350 CancelOrDeleteStreamDelegate::Phase::ON_DATA_READ, GetParam())); |
| 1382 delegate->SetRunUntilCompletion(true); | 1351 delegate->SetRunUntilCompletion(true); |
| 1383 delegate->Start(std::move(request_info), http_session_.get()); | 1352 delegate->Start(std::move(request_info), http_session_.get()); |
| 1384 // Makes sure delegate does not get called. | 1353 // Makes sure delegate does not get called. |
| 1385 base::RunLoop().RunUntilIdle(); | 1354 base::RunLoop().RunUntilIdle(); |
| 1386 const SpdyHeaderBlock& response_headers = delegate->response_headers(); | 1355 const SpdyHeaderBlock& response_headers = delegate->response_headers(); |
| 1387 EXPECT_EQ("200", response_headers.find(":status")->second); | 1356 EXPECT_EQ("200", response_headers.find(":status")->second); |
| 1388 EXPECT_EQ("header-value", response_headers.find("header-name")->second); | 1357 EXPECT_EQ("header-value", response_headers.find("header-name")->second); |
| 1389 EXPECT_EQ(kUploadDataSize * 1, | 1358 EXPECT_EQ(kUploadDataSize * 1, |
| 1390 static_cast<int>(delegate->data_received().size())); | 1359 static_cast<int>(delegate->data_received().size())); |
| 1391 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1360 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 1392 | 1361 |
| 1393 // If stream is destroyed, do not call into stream. | 1362 // If stream is destroyed, do not call into stream. |
| 1394 if (!GetParam()) | 1363 if (!GetParam()) |
| 1395 return; | 1364 return; |
| 1396 EXPECT_EQ(0, delegate->GetTotalSentBytes()); | 1365 EXPECT_EQ(0, delegate->GetTotalSentBytes()); |
| 1397 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); | 1366 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); |
| 1398 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); | 1367 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); |
| 1399 } | 1368 } |
| 1400 | 1369 |
| 1401 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnTrailersReceived) { | 1370 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnTrailersReceived) { |
| 1402 std::unique_ptr<SpdySerializedFrame> req( | 1371 std::unique_ptr<SpdySerializedFrame> req( |
| 1403 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); | 1372 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST)); |
| 1404 | 1373 |
| 1405 std::unique_ptr<SpdySerializedFrame> rst( | 1374 std::unique_ptr<SpdySerializedFrame> rst( |
| 1406 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 1375 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); |
| 1407 MockWrite writes[] = { | 1376 MockWrite writes[] = { |
| 1408 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4), | 1377 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4), |
| 1409 }; | 1378 }; |
| 1410 | 1379 |
| 1411 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; | 1380 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; |
| 1412 | 1381 |
| 1413 std::unique_ptr<SpdySerializedFrame> resp( | 1382 std::unique_ptr<SpdySerializedFrame> resp( |
| 1414 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); | 1383 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); |
| 1415 | 1384 |
| 1416 std::unique_ptr<SpdySerializedFrame> response_body_frame( | 1385 std::unique_ptr<SpdySerializedFrame> response_body_frame( |
| 1417 spdy_util_.ConstructSpdyBodyFrame(1, false)); | 1386 spdy_util_.ConstructSpdyBodyFrame(1, false)); |
| 1418 | 1387 |
| 1419 SpdyHeaderBlock trailers; | 1388 SpdyHeaderBlock trailers; |
| 1420 trailers["foo"] = "bar"; | 1389 trailers["foo"] = "bar"; |
| 1421 std::unique_ptr<SpdySerializedFrame> response_trailers( | 1390 std::unique_ptr<SpdySerializedFrame> response_trailers( |
| 1422 spdy_util_.ConstructSpdyResponseHeaders(1, std::move(trailers), true)); | 1391 spdy_util_.ConstructSpdyResponseHeaders(1, std::move(trailers), true)); |
| 1423 | 1392 |
| 1424 MockRead reads[] = { | 1393 MockRead reads[] = { |
| 1425 CreateMockRead(*resp, 1), CreateMockRead(*response_body_frame, 2), | 1394 CreateMockRead(*resp, 1), CreateMockRead(*response_body_frame, 2), |
| 1426 CreateMockRead(*response_trailers, 3), MockRead(ASYNC, 0, 5), | 1395 CreateMockRead(*response_trailers, 3), MockRead(ASYNC, 0, 5), |
| 1427 }; | 1396 }; |
| 1428 | 1397 |
| 1429 HostPortPair host_port_pair("www.example.org", 443); | 1398 InitSession(reads, arraysize(reads), writes, arraysize(writes)); |
| 1430 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | |
| 1431 PRIVACY_MODE_DISABLED); | |
| 1432 InitSession(reads, arraysize(reads), writes, arraysize(writes), key); | |
| 1433 | 1399 |
| 1434 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( | 1400 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( |
| 1435 new BidirectionalStreamRequestInfo); | 1401 new BidirectionalStreamRequestInfo); |
| 1436 request_info->method = "GET"; | 1402 request_info->method = "GET"; |
| 1437 request_info->url = GURL("https://www.example.org/"); | 1403 request_info->url = default_url_; |
| 1438 request_info->priority = LOWEST; | 1404 request_info->priority = LOWEST; |
| 1439 request_info->end_stream_on_headers = true; | 1405 request_info->end_stream_on_headers = true; |
| 1440 | 1406 |
| 1441 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1407 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1442 std::unique_ptr<CancelOrDeleteStreamDelegate> delegate( | 1408 std::unique_ptr<CancelOrDeleteStreamDelegate> delegate( |
| 1443 new CancelOrDeleteStreamDelegate( | 1409 new CancelOrDeleteStreamDelegate( |
| 1444 read_buffer.get(), kReadBufferSize, | 1410 read_buffer.get(), kReadBufferSize, |
| 1445 CancelOrDeleteStreamDelegate::Phase::ON_TRAILERS_RECEIVED, | 1411 CancelOrDeleteStreamDelegate::Phase::ON_TRAILERS_RECEIVED, |
| 1446 GetParam())); | 1412 GetParam())); |
| 1447 delegate->SetRunUntilCompletion(true); | 1413 delegate->SetRunUntilCompletion(true); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1459 // If stream is destroyed, do not call into stream. | 1425 // If stream is destroyed, do not call into stream. |
| 1460 if (!GetParam()) | 1426 if (!GetParam()) |
| 1461 return; | 1427 return; |
| 1462 EXPECT_EQ(0, delegate->GetTotalSentBytes()); | 1428 EXPECT_EQ(0, delegate->GetTotalSentBytes()); |
| 1463 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); | 1429 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); |
| 1464 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); | 1430 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); |
| 1465 } | 1431 } |
| 1466 | 1432 |
| 1467 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnFailed) { | 1433 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnFailed) { |
| 1468 std::unique_ptr<SpdySerializedFrame> req( | 1434 std::unique_ptr<SpdySerializedFrame> req( |
| 1469 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); | 1435 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST)); |
| 1470 | 1436 |
| 1471 std::unique_ptr<SpdySerializedFrame> rst( | 1437 std::unique_ptr<SpdySerializedFrame> rst( |
| 1472 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); | 1438 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); |
| 1473 | 1439 |
| 1474 MockWrite writes[] = { | 1440 MockWrite writes[] = { |
| 1475 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2), | 1441 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2), |
| 1476 }; | 1442 }; |
| 1477 | 1443 |
| 1478 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"}; | 1444 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"}; |
| 1479 std::unique_ptr<SpdySerializedFrame> resp( | 1445 std::unique_ptr<SpdySerializedFrame> resp( |
| 1480 spdy_util_.ConstructSpdyGetSynReply(kExtraHeaders, 1, 1)); | 1446 spdy_util_.ConstructSpdyGetSynReply(kExtraHeaders, 1, 1)); |
| 1481 | 1447 |
| 1482 MockRead reads[] = { | 1448 MockRead reads[] = { |
| 1483 CreateMockRead(*resp, 1), MockRead(ASYNC, 0, 3), | 1449 CreateMockRead(*resp, 1), MockRead(ASYNC, 0, 3), |
| 1484 }; | 1450 }; |
| 1485 | 1451 |
| 1486 HostPortPair host_port_pair("www.example.org", 443); | 1452 InitSession(reads, arraysize(reads), writes, arraysize(writes)); |
| 1487 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | |
| 1488 PRIVACY_MODE_DISABLED); | |
| 1489 InitSession(reads, arraysize(reads), writes, arraysize(writes), key); | |
| 1490 | 1453 |
| 1491 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( | 1454 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( |
| 1492 new BidirectionalStreamRequestInfo); | 1455 new BidirectionalStreamRequestInfo); |
| 1493 request_info->method = "GET"; | 1456 request_info->method = "GET"; |
| 1494 request_info->url = GURL("https://www.example.org/"); | 1457 request_info->url = default_url_; |
| 1495 request_info->priority = LOWEST; | 1458 request_info->priority = LOWEST; |
| 1496 request_info->end_stream_on_headers = true; | 1459 request_info->end_stream_on_headers = true; |
| 1497 | 1460 |
| 1498 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1461 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1499 std::unique_ptr<CancelOrDeleteStreamDelegate> delegate( | 1462 std::unique_ptr<CancelOrDeleteStreamDelegate> delegate( |
| 1500 new CancelOrDeleteStreamDelegate( | 1463 new CancelOrDeleteStreamDelegate( |
| 1501 read_buffer.get(), kReadBufferSize, | 1464 read_buffer.get(), kReadBufferSize, |
| 1502 CancelOrDeleteStreamDelegate::Phase::ON_FAILED, GetParam())); | 1465 CancelOrDeleteStreamDelegate::Phase::ON_FAILED, GetParam())); |
| 1503 delegate->SetRunUntilCompletion(true); | 1466 delegate->SetRunUntilCompletion(true); |
| 1504 delegate->Start(std::move(request_info), http_session_.get()); | 1467 delegate->Start(std::move(request_info), http_session_.get()); |
| 1505 // Makes sure delegate does not get called. | 1468 // Makes sure delegate does not get called. |
| 1506 base::RunLoop().RunUntilIdle(); | 1469 base::RunLoop().RunUntilIdle(); |
| 1507 EXPECT_EQ(delegate->response_headers().end(), | 1470 EXPECT_EQ(delegate->response_headers().end(), |
| 1508 delegate->response_headers().find(":status")); | 1471 delegate->response_headers().find(":status")); |
| 1509 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1472 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 1510 EXPECT_EQ(0, delegate->on_data_read_count()); | 1473 EXPECT_EQ(0, delegate->on_data_read_count()); |
| 1511 EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, delegate->error()); | 1474 EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, delegate->error()); |
| 1512 | 1475 |
| 1513 // If stream is destroyed, do not call into stream. | 1476 // If stream is destroyed, do not call into stream. |
| 1514 if (!GetParam()) | 1477 if (!GetParam()) |
| 1515 return; | 1478 return; |
| 1516 EXPECT_EQ(0, delegate->GetTotalSentBytes()); | 1479 EXPECT_EQ(0, delegate->GetTotalSentBytes()); |
| 1517 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); | 1480 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); |
| 1518 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); | 1481 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); |
| 1519 } | 1482 } |
| 1520 | 1483 |
| 1521 TEST_F(BidirectionalStreamTest, TestHonorAlternativeServiceHeader) { | 1484 TEST_F(BidirectionalStreamTest, TestHonorAlternativeServiceHeader) { |
| 1522 std::unique_ptr<SpdySerializedFrame> req( | 1485 std::unique_ptr<SpdySerializedFrame> req( |
| 1523 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); | 1486 spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST)); |
| 1524 // Empty DATA frame with an END_STREAM flag. | 1487 // Empty DATA frame with an END_STREAM flag. |
| 1525 std::unique_ptr<SpdySerializedFrame> end_stream( | 1488 std::unique_ptr<SpdySerializedFrame> end_stream( |
| 1526 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); | 1489 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); |
| 1527 | 1490 |
| 1528 MockWrite writes[] = {CreateMockWrite(*req.get(), 0)}; | 1491 MockWrite writes[] = {CreateMockWrite(*req.get(), 0)}; |
| 1529 | 1492 |
| 1530 std::string alt_svc_header_value = AlternateProtocolToString(QUIC); | 1493 std::string alt_svc_header_value = AlternateProtocolToString(QUIC); |
| 1531 alt_svc_header_value.append("=\"www.example.org:443\""); | 1494 alt_svc_header_value.append("=\"www.example.org:443\""); |
| 1532 const char* const kExtraResponseHeaders[] = {"alt-svc", | 1495 const char* const kExtraResponseHeaders[] = {"alt-svc", |
| 1533 alt_svc_header_value.c_str()}; | 1496 alt_svc_header_value.c_str()}; |
| 1534 | 1497 |
| 1535 std::unique_ptr<SpdySerializedFrame> resp( | 1498 std::unique_ptr<SpdySerializedFrame> resp( |
| 1536 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); | 1499 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); |
| 1537 std::unique_ptr<SpdySerializedFrame> body_frame( | 1500 std::unique_ptr<SpdySerializedFrame> body_frame( |
| 1538 spdy_util_.ConstructSpdyBodyFrame(1, true)); | 1501 spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 1539 | 1502 |
| 1540 MockRead reads[] = { | 1503 MockRead reads[] = { |
| 1541 CreateMockRead(*resp, 1), CreateMockRead(*body_frame, 2), | 1504 CreateMockRead(*resp, 1), CreateMockRead(*body_frame, 2), |
| 1542 MockRead(SYNCHRONOUS, 0, 3), | 1505 MockRead(SYNCHRONOUS, 0, 3), |
| 1543 }; | 1506 }; |
| 1544 | 1507 |
| 1545 HostPortPair host_port_pair("www.example.org", 443); | |
| 1546 url::SchemeHostPort server("https", "www.example.org", 443); | |
| 1547 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | |
| 1548 PRIVACY_MODE_DISABLED); | |
| 1549 // Enable QUIC so that the alternative service header can be added to | 1508 // Enable QUIC so that the alternative service header can be added to |
| 1550 // HttpServerProperties. | 1509 // HttpServerProperties. |
| 1551 session_deps_.enable_quic = true; | 1510 session_deps_.enable_quic = true; |
| 1552 InitSession(reads, arraysize(reads), writes, arraysize(writes), key); | 1511 InitSession(reads, arraysize(reads), writes, arraysize(writes)); |
| 1553 | 1512 |
| 1554 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( | 1513 std::unique_ptr<BidirectionalStreamRequestInfo> request_info( |
| 1555 new BidirectionalStreamRequestInfo); | 1514 new BidirectionalStreamRequestInfo); |
| 1556 request_info->method = "GET"; | 1515 request_info->method = "GET"; |
| 1557 request_info->url = GURL("https://www.example.org/"); | 1516 request_info->url = default_url_; |
| 1558 request_info->priority = LOWEST; | 1517 request_info->priority = LOWEST; |
| 1559 request_info->end_stream_on_headers = true; | 1518 request_info->end_stream_on_headers = true; |
| 1560 | 1519 |
| 1561 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1520 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1562 MockTimer* timer = new MockTimer(); | 1521 MockTimer* timer = new MockTimer(); |
| 1563 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( | 1522 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( |
| 1564 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); | 1523 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); |
| 1565 delegate->SetRunUntilCompletion(true); | 1524 delegate->SetRunUntilCompletion(true); |
| 1566 delegate->Start(std::move(request_info), http_session_.get()); | 1525 delegate->Start(std::move(request_info), http_session_.get()); |
| 1567 | 1526 |
| 1568 const SpdyHeaderBlock& response_headers = delegate->response_headers(); | 1527 const SpdyHeaderBlock& response_headers = delegate->response_headers(); |
| 1569 EXPECT_EQ("200", response_headers.find(":status")->second); | 1528 EXPECT_EQ("200", response_headers.find(":status")->second); |
| 1570 EXPECT_EQ(alt_svc_header_value, response_headers.find("alt-svc")->second); | 1529 EXPECT_EQ(alt_svc_header_value, response_headers.find("alt-svc")->second); |
| 1571 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1530 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 1572 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); | 1531 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); |
| 1573 EXPECT_EQ(kUploadData, delegate->data_received()); | 1532 EXPECT_EQ(kUploadData, delegate->data_received()); |
| 1574 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), | 1533 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), |
| 1575 delegate->GetTotalSentBytes()); | 1534 delegate->GetTotalSentBytes()); |
| 1576 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), | 1535 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), |
| 1577 delegate->GetTotalReceivedBytes()); | 1536 delegate->GetTotalReceivedBytes()); |
| 1578 | 1537 |
| 1579 AlternativeServiceVector alternative_service_vector = | 1538 AlternativeServiceVector alternative_service_vector = |
| 1580 http_session_->http_server_properties()->GetAlternativeServices(server); | 1539 http_session_->http_server_properties()->GetAlternativeServices( |
| 1540 url::SchemeHostPort(default_url_)); |
| 1581 ASSERT_EQ(1u, alternative_service_vector.size()); | 1541 ASSERT_EQ(1u, alternative_service_vector.size()); |
| 1582 EXPECT_EQ(AlternateProtocolFromNextProto(kProtoQUIC1SPDY3), | 1542 EXPECT_EQ(AlternateProtocolFromNextProto(kProtoQUIC1SPDY3), |
| 1583 alternative_service_vector[0].protocol); | 1543 alternative_service_vector[0].protocol); |
| 1584 EXPECT_EQ("www.example.org", alternative_service_vector[0].host); | 1544 EXPECT_EQ("www.example.org", alternative_service_vector[0].host); |
| 1585 EXPECT_EQ(443, alternative_service_vector[0].port); | 1545 EXPECT_EQ(443, alternative_service_vector[0].port); |
| 1586 } | 1546 } |
| 1587 | 1547 |
| 1588 } // namespace net | 1548 } // namespace net |
| OLD | NEW |