| 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 "base/macros.h" | 7 #include "base/macros.h" |
| 8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| (...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 349 scoped_ptr<HttpNetworkSession> session(new HttpNetworkSession(params)); | 349 scoped_ptr<HttpNetworkSession> session(new HttpNetworkSession(params)); |
| 350 delegate.SetRunUntilCompletion(true); | 350 delegate.SetRunUntilCompletion(true); |
| 351 delegate.Start(std::move(request_info), session.get()); | 351 delegate.Start(std::move(request_info), session.get()); |
| 352 | 352 |
| 353 EXPECT_EQ(ERR_DISALLOWED_URL_SCHEME, delegate.error()); | 353 EXPECT_EQ(ERR_DISALLOWED_URL_SCHEME, delegate.error()); |
| 354 } | 354 } |
| 355 | 355 |
| 356 // Simulates user calling ReadData after END_STREAM has been received in | 356 // Simulates user calling ReadData after END_STREAM has been received in |
| 357 // BidirectionalStreamSpdyImpl. | 357 // BidirectionalStreamSpdyImpl. |
| 358 TEST_F(BidirectionalStreamTest, TestReadDataAfterClose) { | 358 TEST_F(BidirectionalStreamTest, TestReadDataAfterClose) { |
| 359 scoped_ptr<SpdyFrame> req( | 359 scoped_ptr<SpdySerializedFrame> req( |
| 360 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); | 360 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); |
| 361 // Empty DATA frame with an END_STREAM flag. | 361 // Empty DATA frame with an END_STREAM flag. |
| 362 scoped_ptr<SpdyFrame> end_stream( | 362 scoped_ptr<SpdySerializedFrame> end_stream( |
| 363 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); | 363 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); |
| 364 MockWrite writes[] = { | 364 MockWrite writes[] = { |
| 365 CreateMockWrite(*req.get(), 0), | 365 CreateMockWrite(*req.get(), 0), |
| 366 }; | 366 }; |
| 367 | 367 |
| 368 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; | 368 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; |
| 369 | 369 |
| 370 scoped_ptr<SpdyFrame> resp( | 370 scoped_ptr<SpdySerializedFrame> resp( |
| 371 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); | 371 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); |
| 372 | 372 |
| 373 scoped_ptr<SpdyFrame> body_frame(spdy_util_.ConstructSpdyBodyFrame(1, false)); | 373 scoped_ptr<SpdySerializedFrame> body_frame( |
| 374 spdy_util_.ConstructSpdyBodyFrame(1, false)); |
| 374 // Last body frame has END_STREAM flag set. | 375 // Last body frame has END_STREAM flag set. |
| 375 scoped_ptr<SpdyFrame> last_body_frame( | 376 scoped_ptr<SpdySerializedFrame> last_body_frame( |
| 376 spdy_util_.ConstructSpdyBodyFrame(1, true)); | 377 spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 377 | 378 |
| 378 MockRead reads[] = { | 379 MockRead reads[] = { |
| 379 CreateMockRead(*resp, 1), | 380 CreateMockRead(*resp, 1), |
| 380 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. | 381 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. |
| 381 CreateMockRead(*body_frame, 3), | 382 CreateMockRead(*body_frame, 3), |
| 382 MockRead(ASYNC, ERR_IO_PENDING, 4), // Force a pause. | 383 MockRead(ASYNC, ERR_IO_PENDING, 4), // Force a pause. |
| 383 CreateMockRead(*body_frame, 5), | 384 CreateMockRead(*body_frame, 5), |
| 384 CreateMockRead(*last_body_frame, 6), | 385 CreateMockRead(*last_body_frame, 6), |
| 385 MockRead(SYNCHRONOUS, 0, 7), | 386 MockRead(SYNCHRONOUS, 0, 7), |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 439 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); | 440 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); |
| 440 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), | 441 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), |
| 441 delegate->GetTotalSentBytes()); | 442 delegate->GetTotalSentBytes()); |
| 442 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), | 443 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), |
| 443 delegate->GetTotalReceivedBytes()); | 444 delegate->GetTotalReceivedBytes()); |
| 444 } | 445 } |
| 445 | 446 |
| 446 TEST_F(BidirectionalStreamTest, TestInterleaveReadDataAndSendData) { | 447 TEST_F(BidirectionalStreamTest, TestInterleaveReadDataAndSendData) { |
| 447 BufferedSpdyFramer framer(spdy_util_.spdy_version()); | 448 BufferedSpdyFramer framer(spdy_util_.spdy_version()); |
| 448 | 449 |
| 449 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost( | 450 scoped_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( |
| 450 "https://www.example.org", 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); | 451 "https://www.example.org", 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); |
| 451 scoped_ptr<SpdyFrame> data_frame1( | 452 scoped_ptr<SpdySerializedFrame> data_frame1( |
| 452 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE)); | 453 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE)); |
| 453 scoped_ptr<SpdyFrame> data_frame2( | 454 scoped_ptr<SpdySerializedFrame> data_frame2( |
| 454 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE)); | 455 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE)); |
| 455 scoped_ptr<SpdyFrame> data_frame3( | 456 scoped_ptr<SpdySerializedFrame> data_frame3( |
| 456 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_FIN)); | 457 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_FIN)); |
| 457 MockWrite writes[] = { | 458 MockWrite writes[] = { |
| 458 CreateMockWrite(*req, 0), CreateMockWrite(*data_frame1, 3), | 459 CreateMockWrite(*req, 0), CreateMockWrite(*data_frame1, 3), |
| 459 CreateMockWrite(*data_frame2, 6), CreateMockWrite(*data_frame3, 9), | 460 CreateMockWrite(*data_frame2, 6), CreateMockWrite(*data_frame3, 9), |
| 460 }; | 461 }; |
| 461 | 462 |
| 462 scoped_ptr<SpdyFrame> resp( | 463 scoped_ptr<SpdySerializedFrame> resp( |
| 463 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); | 464 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); |
| 464 scoped_ptr<SpdyFrame> response_body_frame1( | 465 scoped_ptr<SpdySerializedFrame> response_body_frame1( |
| 465 spdy_util_.ConstructSpdyBodyFrame(1, false)); | 466 spdy_util_.ConstructSpdyBodyFrame(1, false)); |
| 466 scoped_ptr<SpdyFrame> response_body_frame2( | 467 scoped_ptr<SpdySerializedFrame> response_body_frame2( |
| 467 spdy_util_.ConstructSpdyBodyFrame(1, true)); | 468 spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 468 | 469 |
| 469 MockRead reads[] = { | 470 MockRead reads[] = { |
| 470 CreateMockRead(*resp, 1), | 471 CreateMockRead(*resp, 1), |
| 471 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. | 472 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. |
| 472 CreateMockRead(*response_body_frame1, 4), | 473 CreateMockRead(*response_body_frame1, 4), |
| 473 MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause. | 474 MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause. |
| 474 CreateMockRead(*response_body_frame2, 7), | 475 CreateMockRead(*response_body_frame2, 7), |
| 475 MockRead(ASYNC, ERR_IO_PENDING, 8), // Force a pause. | 476 MockRead(ASYNC, ERR_IO_PENDING, 8), // Force a pause. |
| 476 MockRead(ASYNC, 0, 10), | 477 MockRead(ASYNC, 0, 10), |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 546 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); | 547 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); |
| 547 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), | 548 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), |
| 548 delegate->GetTotalSentBytes()); | 549 delegate->GetTotalSentBytes()); |
| 549 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), | 550 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), |
| 550 delegate->GetTotalReceivedBytes()); | 551 delegate->GetTotalReceivedBytes()); |
| 551 } | 552 } |
| 552 | 553 |
| 553 // Tests that BidirectionalStreamSpdyImpl::OnClose will complete any remaining | 554 // Tests that BidirectionalStreamSpdyImpl::OnClose will complete any remaining |
| 554 // read even if the read queue is empty. | 555 // read even if the read queue is empty. |
| 555 TEST_F(BidirectionalStreamTest, TestCompleteAsyncRead) { | 556 TEST_F(BidirectionalStreamTest, TestCompleteAsyncRead) { |
| 556 scoped_ptr<SpdyFrame> req( | 557 scoped_ptr<SpdySerializedFrame> req( |
| 557 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); | 558 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); |
| 558 // Empty DATA frame with an END_STREAM flag. | 559 // Empty DATA frame with an END_STREAM flag. |
| 559 scoped_ptr<SpdyFrame> end_stream( | 560 scoped_ptr<SpdySerializedFrame> end_stream( |
| 560 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); | 561 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); |
| 561 | 562 |
| 562 MockWrite writes[] = {CreateMockWrite(*req.get(), 0)}; | 563 MockWrite writes[] = {CreateMockWrite(*req.get(), 0)}; |
| 563 | 564 |
| 564 scoped_ptr<SpdyFrame> resp( | 565 scoped_ptr<SpdySerializedFrame> resp( |
| 565 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); | 566 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); |
| 566 | 567 |
| 567 scoped_ptr<SpdyFrame> response_body_frame( | 568 scoped_ptr<SpdySerializedFrame> response_body_frame( |
| 568 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); | 569 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); |
| 569 | 570 |
| 570 MockRead reads[] = { | 571 MockRead reads[] = { |
| 571 CreateMockRead(*resp, 1), | 572 CreateMockRead(*resp, 1), |
| 572 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. | 573 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. |
| 573 CreateMockRead(*response_body_frame, 3), MockRead(SYNCHRONOUS, 0, 4), | 574 CreateMockRead(*response_body_frame, 3), MockRead(SYNCHRONOUS, 0, 4), |
| 574 }; | 575 }; |
| 575 | 576 |
| 576 HostPortPair host_port_pair("www.example.org", 443); | 577 HostPortPair host_port_pair("www.example.org", 443); |
| 577 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | 578 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), |
| (...skipping 30 matching lines...) Expand all Loading... |
| 608 EXPECT_EQ(0u, delegate->data_received().size()); | 609 EXPECT_EQ(0u, delegate->data_received().size()); |
| 609 EXPECT_EQ(0, delegate->on_data_sent_count()); | 610 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 610 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); | 611 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); |
| 611 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), | 612 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), |
| 612 delegate->GetTotalSentBytes()); | 613 delegate->GetTotalSentBytes()); |
| 613 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), | 614 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), |
| 614 delegate->GetTotalReceivedBytes()); | 615 delegate->GetTotalReceivedBytes()); |
| 615 } | 616 } |
| 616 | 617 |
| 617 TEST_F(BidirectionalStreamTest, TestBuffering) { | 618 TEST_F(BidirectionalStreamTest, TestBuffering) { |
| 618 scoped_ptr<SpdyFrame> req( | 619 scoped_ptr<SpdySerializedFrame> req( |
| 619 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); | 620 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); |
| 620 // Empty DATA frame with an END_STREAM flag. | 621 // Empty DATA frame with an END_STREAM flag. |
| 621 scoped_ptr<SpdyFrame> end_stream( | 622 scoped_ptr<SpdySerializedFrame> end_stream( |
| 622 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); | 623 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); |
| 623 | 624 |
| 624 MockWrite writes[] = {CreateMockWrite(*req.get(), 0)}; | 625 MockWrite writes[] = {CreateMockWrite(*req.get(), 0)}; |
| 625 | 626 |
| 626 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; | 627 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; |
| 627 | 628 |
| 628 scoped_ptr<SpdyFrame> resp( | 629 scoped_ptr<SpdySerializedFrame> resp( |
| 629 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); | 630 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); |
| 630 | 631 |
| 631 scoped_ptr<SpdyFrame> body_frame(spdy_util_.ConstructSpdyBodyFrame(1, false)); | 632 scoped_ptr<SpdySerializedFrame> body_frame( |
| 633 spdy_util_.ConstructSpdyBodyFrame(1, false)); |
| 632 // Last body frame has END_STREAM flag set. | 634 // Last body frame has END_STREAM flag set. |
| 633 scoped_ptr<SpdyFrame> last_body_frame( | 635 scoped_ptr<SpdySerializedFrame> last_body_frame( |
| 634 spdy_util_.ConstructSpdyBodyFrame(1, true)); | 636 spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 635 | 637 |
| 636 MockRead reads[] = { | 638 MockRead reads[] = { |
| 637 CreateMockRead(*resp, 1), | 639 CreateMockRead(*resp, 1), |
| 638 CreateMockRead(*body_frame, 2), | 640 CreateMockRead(*body_frame, 2), |
| 639 CreateMockRead(*body_frame, 3), | 641 CreateMockRead(*body_frame, 3), |
| 640 MockRead(ASYNC, ERR_IO_PENDING, 4), // Force a pause. | 642 MockRead(ASYNC, ERR_IO_PENDING, 4), // Force a pause. |
| 641 CreateMockRead(*last_body_frame, 5), | 643 CreateMockRead(*last_body_frame, 5), |
| 642 MockRead(SYNCHRONOUS, 0, 6), | 644 MockRead(SYNCHRONOUS, 0, 6), |
| 643 }; | 645 }; |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 689 EXPECT_EQ("header-value", response_headers.find("header-name")->second); | 691 EXPECT_EQ("header-value", response_headers.find("header-name")->second); |
| 690 EXPECT_EQ(0, delegate->on_data_sent_count()); | 692 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 691 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); | 693 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); |
| 692 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), | 694 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), |
| 693 delegate->GetTotalSentBytes()); | 695 delegate->GetTotalSentBytes()); |
| 694 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), | 696 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), |
| 695 delegate->GetTotalReceivedBytes()); | 697 delegate->GetTotalReceivedBytes()); |
| 696 } | 698 } |
| 697 | 699 |
| 698 TEST_F(BidirectionalStreamTest, TestBufferingWithTrailers) { | 700 TEST_F(BidirectionalStreamTest, TestBufferingWithTrailers) { |
| 699 scoped_ptr<SpdyFrame> req( | 701 scoped_ptr<SpdySerializedFrame> req( |
| 700 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); | 702 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); |
| 701 // Empty DATA frame with an END_STREAM flag. | 703 // Empty DATA frame with an END_STREAM flag. |
| 702 scoped_ptr<SpdyFrame> end_stream( | 704 scoped_ptr<SpdySerializedFrame> end_stream( |
| 703 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); | 705 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); |
| 704 | 706 |
| 705 MockWrite writes[] = { | 707 MockWrite writes[] = { |
| 706 CreateMockWrite(*req.get(), 0), | 708 CreateMockWrite(*req.get(), 0), |
| 707 }; | 709 }; |
| 708 | 710 |
| 709 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; | 711 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; |
| 710 | 712 |
| 711 scoped_ptr<SpdyFrame> resp( | 713 scoped_ptr<SpdySerializedFrame> resp( |
| 712 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); | 714 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); |
| 713 | 715 |
| 714 scoped_ptr<SpdyFrame> body_frame(spdy_util_.ConstructSpdyBodyFrame(1, false)); | 716 scoped_ptr<SpdySerializedFrame> body_frame( |
| 717 spdy_util_.ConstructSpdyBodyFrame(1, false)); |
| 715 | 718 |
| 716 SpdyHeaderBlock late_headers; | 719 SpdyHeaderBlock late_headers; |
| 717 late_headers["foo"] = "bar"; | 720 late_headers["foo"] = "bar"; |
| 718 scoped_ptr<SpdyFrame> trailers( | 721 scoped_ptr<SpdySerializedFrame> trailers( |
| 719 spdy_util_.ConstructSpdyResponseHeaders(1, late_headers, true)); | 722 spdy_util_.ConstructSpdyResponseHeaders(1, late_headers, true)); |
| 720 | 723 |
| 721 MockRead reads[] = { | 724 MockRead reads[] = { |
| 722 CreateMockRead(*resp, 1), CreateMockRead(*body_frame, 2), | 725 CreateMockRead(*resp, 1), CreateMockRead(*body_frame, 2), |
| 723 CreateMockRead(*body_frame, 3), CreateMockRead(*body_frame, 4), | 726 CreateMockRead(*body_frame, 3), CreateMockRead(*body_frame, 4), |
| 724 MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause. | 727 MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause. |
| 725 CreateMockRead(*trailers, 6), MockRead(SYNCHRONOUS, 0, 7), | 728 CreateMockRead(*trailers, 6), MockRead(SYNCHRONOUS, 0, 7), |
| 726 }; | 729 }; |
| 727 | 730 |
| 728 HostPortPair host_port_pair("www.example.org", 443); | 731 HostPortPair host_port_pair("www.example.org", 443); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 768 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); | 771 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); |
| 769 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), | 772 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), |
| 770 delegate->GetTotalSentBytes()); | 773 delegate->GetTotalSentBytes()); |
| 771 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), | 774 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), |
| 772 delegate->GetTotalReceivedBytes()); | 775 delegate->GetTotalReceivedBytes()); |
| 773 } | 776 } |
| 774 | 777 |
| 775 TEST_F(BidirectionalStreamTest, CancelStreamAfterSendData) { | 778 TEST_F(BidirectionalStreamTest, CancelStreamAfterSendData) { |
| 776 BufferedSpdyFramer framer(spdy_util_.spdy_version()); | 779 BufferedSpdyFramer framer(spdy_util_.spdy_version()); |
| 777 | 780 |
| 778 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost( | 781 scoped_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( |
| 779 "https://www.example.org", 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); | 782 "https://www.example.org", 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); |
| 780 scoped_ptr<SpdyFrame> data_frame( | 783 scoped_ptr<SpdySerializedFrame> data_frame( |
| 781 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE)); | 784 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE)); |
| 782 scoped_ptr<SpdyFrame> rst( | 785 scoped_ptr<SpdySerializedFrame> rst( |
| 783 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 786 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); |
| 784 | 787 |
| 785 MockWrite writes[] = { | 788 MockWrite writes[] = { |
| 786 CreateMockWrite(*req, 0), CreateMockWrite(*data_frame, 3), | 789 CreateMockWrite(*req, 0), CreateMockWrite(*data_frame, 3), |
| 787 CreateMockWrite(*rst, 5), | 790 CreateMockWrite(*rst, 5), |
| 788 }; | 791 }; |
| 789 | 792 |
| 790 scoped_ptr<SpdyFrame> resp( | 793 scoped_ptr<SpdySerializedFrame> resp( |
| 791 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); | 794 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); |
| 792 scoped_ptr<SpdyFrame> response_body_frame( | 795 scoped_ptr<SpdySerializedFrame> response_body_frame( |
| 793 spdy_util_.ConstructSpdyBodyFrame(1, false)); | 796 spdy_util_.ConstructSpdyBodyFrame(1, false)); |
| 794 | 797 |
| 795 MockRead reads[] = { | 798 MockRead reads[] = { |
| 796 CreateMockRead(*resp, 1), | 799 CreateMockRead(*resp, 1), |
| 797 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. | 800 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. |
| 798 MockRead(ASYNC, ERR_IO_PENDING, 4), // Force a pause. | 801 MockRead(ASYNC, ERR_IO_PENDING, 4), // Force a pause. |
| 799 MockRead(ASYNC, 0, 6), | 802 MockRead(ASYNC, 0, 6), |
| 800 }; | 803 }; |
| 801 | 804 |
| 802 HostPortPair host_port_pair("www.example.org", 443); | 805 HostPortPair host_port_pair("www.example.org", 443); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 838 // OnDataSent may or may not have been invoked. | 841 // OnDataSent may or may not have been invoked. |
| 839 // Calling after stream is canceled gives kProtoUnknown. | 842 // Calling after stream is canceled gives kProtoUnknown. |
| 840 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); | 843 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); |
| 841 EXPECT_EQ(0, delegate->GetTotalSentBytes()); | 844 EXPECT_EQ(0, delegate->GetTotalSentBytes()); |
| 842 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); | 845 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); |
| 843 } | 846 } |
| 844 | 847 |
| 845 TEST_F(BidirectionalStreamTest, CancelStreamDuringReadData) { | 848 TEST_F(BidirectionalStreamTest, CancelStreamDuringReadData) { |
| 846 BufferedSpdyFramer framer(spdy_util_.spdy_version()); | 849 BufferedSpdyFramer framer(spdy_util_.spdy_version()); |
| 847 | 850 |
| 848 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost( | 851 scoped_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( |
| 849 "https://www.example.org", 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); | 852 "https://www.example.org", 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); |
| 850 scoped_ptr<SpdyFrame> data_frame( | 853 scoped_ptr<SpdySerializedFrame> data_frame( |
| 851 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE)); | 854 framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_NONE)); |
| 852 scoped_ptr<SpdyFrame> rst( | 855 scoped_ptr<SpdySerializedFrame> rst( |
| 853 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 856 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); |
| 854 | 857 |
| 855 MockWrite writes[] = { | 858 MockWrite writes[] = { |
| 856 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4), | 859 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4), |
| 857 }; | 860 }; |
| 858 | 861 |
| 859 scoped_ptr<SpdyFrame> resp( | 862 scoped_ptr<SpdySerializedFrame> resp( |
| 860 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); | 863 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); |
| 861 scoped_ptr<SpdyFrame> response_body_frame( | 864 scoped_ptr<SpdySerializedFrame> response_body_frame( |
| 862 spdy_util_.ConstructSpdyBodyFrame(1, false)); | 865 spdy_util_.ConstructSpdyBodyFrame(1, false)); |
| 863 | 866 |
| 864 MockRead reads[] = { | 867 MockRead reads[] = { |
| 865 CreateMockRead(*resp, 1), | 868 CreateMockRead(*resp, 1), |
| 866 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. | 869 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. |
| 867 CreateMockRead(*response_body_frame, 3), MockRead(ASYNC, 0, 5), | 870 CreateMockRead(*response_body_frame, 3), MockRead(ASYNC, 0, 5), |
| 868 }; | 871 }; |
| 869 | 872 |
| 870 HostPortPair host_port_pair("www.example.org", 443); | 873 HostPortPair host_port_pair("www.example.org", 443); |
| 871 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | 874 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), |
| (...skipping 29 matching lines...) Expand all Loading... |
| 901 EXPECT_EQ(0, delegate->on_data_sent_count()); | 904 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 902 // Calling after stream is canceled gives kProtoUnknown. | 905 // Calling after stream is canceled gives kProtoUnknown. |
| 903 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); | 906 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); |
| 904 EXPECT_EQ(0, delegate->GetTotalSentBytes()); | 907 EXPECT_EQ(0, delegate->GetTotalSentBytes()); |
| 905 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); | 908 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); |
| 906 } | 909 } |
| 907 | 910 |
| 908 // Receiving a header with uppercase ASCII will result in a protocol error, | 911 // Receiving a header with uppercase ASCII will result in a protocol error, |
| 909 // which should be propagated via Delegate::OnFailed. | 912 // which should be propagated via Delegate::OnFailed. |
| 910 TEST_F(BidirectionalStreamTest, PropagateProtocolError) { | 913 TEST_F(BidirectionalStreamTest, PropagateProtocolError) { |
| 911 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost( | 914 scoped_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( |
| 912 "https://www.example.org", 1, kBodyDataSize * 3, LOW, nullptr, 0)); | 915 "https://www.example.org", 1, kBodyDataSize * 3, LOW, nullptr, 0)); |
| 913 scoped_ptr<SpdyFrame> rst( | 916 scoped_ptr<SpdySerializedFrame> rst( |
| 914 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); | 917 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); |
| 915 | 918 |
| 916 MockWrite writes[] = { | 919 MockWrite writes[] = { |
| 917 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2), | 920 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2), |
| 918 }; | 921 }; |
| 919 | 922 |
| 920 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"}; | 923 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"}; |
| 921 scoped_ptr<SpdyFrame> resp( | 924 scoped_ptr<SpdySerializedFrame> resp( |
| 922 spdy_util_.ConstructSpdyGetSynReply(kExtraHeaders, 1, 1)); | 925 spdy_util_.ConstructSpdyGetSynReply(kExtraHeaders, 1, 1)); |
| 923 | 926 |
| 924 MockRead reads[] = { | 927 MockRead reads[] = { |
| 925 CreateMockRead(*resp, 1), MockRead(ASYNC, 0, 3), | 928 CreateMockRead(*resp, 1), MockRead(ASYNC, 0, 3), |
| 926 }; | 929 }; |
| 927 | 930 |
| 928 HostPortPair host_port_pair("www.example.org", 443); | 931 HostPortPair host_port_pair("www.example.org", 443); |
| 929 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | 932 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), |
| 930 PRIVACY_MODE_DISABLED); | 933 PRIVACY_MODE_DISABLED); |
| 931 InitSession(reads, arraysize(reads), writes, arraysize(writes), key); | 934 InitSession(reads, arraysize(reads), writes, arraysize(writes), key); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 955 EXPECT_EQ(CountWriteBytes(writes, 1), delegate->GetTotalSentBytes()); | 958 EXPECT_EQ(CountWriteBytes(writes, 1), delegate->GetTotalSentBytes()); |
| 956 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), | 959 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), |
| 957 delegate->GetTotalReceivedBytes()); | 960 delegate->GetTotalReceivedBytes()); |
| 958 } | 961 } |
| 959 | 962 |
| 960 INSTANTIATE_TEST_CASE_P(CancelOrDeleteTests, | 963 INSTANTIATE_TEST_CASE_P(CancelOrDeleteTests, |
| 961 BidirectionalStreamTest, | 964 BidirectionalStreamTest, |
| 962 ::testing::Values(true, false)); | 965 ::testing::Values(true, false)); |
| 963 | 966 |
| 964 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnHeadersReceived) { | 967 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnHeadersReceived) { |
| 965 scoped_ptr<SpdyFrame> req( | 968 scoped_ptr<SpdySerializedFrame> req( |
| 966 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); | 969 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); |
| 967 | 970 |
| 968 scoped_ptr<SpdyFrame> rst( | 971 scoped_ptr<SpdySerializedFrame> rst( |
| 969 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 972 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); |
| 970 MockWrite writes[] = { | 973 MockWrite writes[] = { |
| 971 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2), | 974 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2), |
| 972 }; | 975 }; |
| 973 | 976 |
| 974 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; | 977 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; |
| 975 | 978 |
| 976 scoped_ptr<SpdyFrame> resp( | 979 scoped_ptr<SpdySerializedFrame> resp( |
| 977 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); | 980 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); |
| 978 | 981 |
| 979 MockRead reads[] = { | 982 MockRead reads[] = { |
| 980 CreateMockRead(*resp, 1), MockRead(ASYNC, 0, 3), | 983 CreateMockRead(*resp, 1), MockRead(ASYNC, 0, 3), |
| 981 }; | 984 }; |
| 982 | 985 |
| 983 HostPortPair host_port_pair("www.example.org", 443); | 986 HostPortPair host_port_pair("www.example.org", 443); |
| 984 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | 987 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), |
| 985 PRIVACY_MODE_DISABLED); | 988 PRIVACY_MODE_DISABLED); |
| 986 InitSession(reads, arraysize(reads), writes, arraysize(writes), key); | 989 InitSession(reads, arraysize(reads), writes, arraysize(writes), key); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1011 | 1014 |
| 1012 // If stream is destroyed, do not call into stream. | 1015 // If stream is destroyed, do not call into stream. |
| 1013 if (!GetParam()) | 1016 if (!GetParam()) |
| 1014 return; | 1017 return; |
| 1015 EXPECT_EQ(0, delegate->GetTotalSentBytes()); | 1018 EXPECT_EQ(0, delegate->GetTotalSentBytes()); |
| 1016 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); | 1019 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); |
| 1017 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); | 1020 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); |
| 1018 } | 1021 } |
| 1019 | 1022 |
| 1020 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnDataRead) { | 1023 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnDataRead) { |
| 1021 scoped_ptr<SpdyFrame> req( | 1024 scoped_ptr<SpdySerializedFrame> req( |
| 1022 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); | 1025 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); |
| 1023 | 1026 |
| 1024 scoped_ptr<SpdyFrame> rst( | 1027 scoped_ptr<SpdySerializedFrame> rst( |
| 1025 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 1028 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); |
| 1026 MockWrite writes[] = { | 1029 MockWrite writes[] = { |
| 1027 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 3), | 1030 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 3), |
| 1028 }; | 1031 }; |
| 1029 | 1032 |
| 1030 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; | 1033 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; |
| 1031 | 1034 |
| 1032 scoped_ptr<SpdyFrame> resp( | 1035 scoped_ptr<SpdySerializedFrame> resp( |
| 1033 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); | 1036 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); |
| 1034 | 1037 |
| 1035 scoped_ptr<SpdyFrame> response_body_frame( | 1038 scoped_ptr<SpdySerializedFrame> response_body_frame( |
| 1036 spdy_util_.ConstructSpdyBodyFrame(1, false)); | 1039 spdy_util_.ConstructSpdyBodyFrame(1, false)); |
| 1037 | 1040 |
| 1038 MockRead reads[] = { | 1041 MockRead reads[] = { |
| 1039 CreateMockRead(*resp, 1), CreateMockRead(*response_body_frame, 2), | 1042 CreateMockRead(*resp, 1), CreateMockRead(*response_body_frame, 2), |
| 1040 MockRead(ASYNC, 0, 4), | 1043 MockRead(ASYNC, 0, 4), |
| 1041 }; | 1044 }; |
| 1042 | 1045 |
| 1043 HostPortPair host_port_pair("www.example.org", 443); | 1046 HostPortPair host_port_pair("www.example.org", 443); |
| 1044 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | 1047 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), |
| 1045 PRIVACY_MODE_DISABLED); | 1048 PRIVACY_MODE_DISABLED); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1070 | 1073 |
| 1071 // If stream is destroyed, do not call into stream. | 1074 // If stream is destroyed, do not call into stream. |
| 1072 if (!GetParam()) | 1075 if (!GetParam()) |
| 1073 return; | 1076 return; |
| 1074 EXPECT_EQ(0, delegate->GetTotalSentBytes()); | 1077 EXPECT_EQ(0, delegate->GetTotalSentBytes()); |
| 1075 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); | 1078 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); |
| 1076 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); | 1079 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); |
| 1077 } | 1080 } |
| 1078 | 1081 |
| 1079 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnTrailersReceived) { | 1082 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnTrailersReceived) { |
| 1080 scoped_ptr<SpdyFrame> req( | 1083 scoped_ptr<SpdySerializedFrame> req( |
| 1081 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); | 1084 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); |
| 1082 | 1085 |
| 1083 scoped_ptr<SpdyFrame> rst( | 1086 scoped_ptr<SpdySerializedFrame> rst( |
| 1084 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 1087 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); |
| 1085 MockWrite writes[] = { | 1088 MockWrite writes[] = { |
| 1086 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4), | 1089 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4), |
| 1087 }; | 1090 }; |
| 1088 | 1091 |
| 1089 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; | 1092 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; |
| 1090 | 1093 |
| 1091 scoped_ptr<SpdyFrame> resp( | 1094 scoped_ptr<SpdySerializedFrame> resp( |
| 1092 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); | 1095 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); |
| 1093 | 1096 |
| 1094 scoped_ptr<SpdyFrame> response_body_frame( | 1097 scoped_ptr<SpdySerializedFrame> response_body_frame( |
| 1095 spdy_util_.ConstructSpdyBodyFrame(1, false)); | 1098 spdy_util_.ConstructSpdyBodyFrame(1, false)); |
| 1096 | 1099 |
| 1097 SpdyHeaderBlock late_headers; | 1100 SpdyHeaderBlock late_headers; |
| 1098 late_headers["foo"] = "bar"; | 1101 late_headers["foo"] = "bar"; |
| 1099 scoped_ptr<SpdyFrame> trailers( | 1102 scoped_ptr<SpdySerializedFrame> trailers( |
| 1100 spdy_util_.ConstructSpdyResponseHeaders(1, late_headers, true)); | 1103 spdy_util_.ConstructSpdyResponseHeaders(1, late_headers, true)); |
| 1101 | 1104 |
| 1102 MockRead reads[] = { | 1105 MockRead reads[] = { |
| 1103 CreateMockRead(*resp, 1), CreateMockRead(*response_body_frame, 2), | 1106 CreateMockRead(*resp, 1), CreateMockRead(*response_body_frame, 2), |
| 1104 CreateMockRead(*trailers, 3), MockRead(ASYNC, 0, 5), | 1107 CreateMockRead(*trailers, 3), MockRead(ASYNC, 0, 5), |
| 1105 }; | 1108 }; |
| 1106 | 1109 |
| 1107 HostPortPair host_port_pair("www.example.org", 443); | 1110 HostPortPair host_port_pair("www.example.org", 443); |
| 1108 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | 1111 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), |
| 1109 PRIVACY_MODE_DISABLED); | 1112 PRIVACY_MODE_DISABLED); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1136 | 1139 |
| 1137 // If stream is destroyed, do not call into stream. | 1140 // If stream is destroyed, do not call into stream. |
| 1138 if (!GetParam()) | 1141 if (!GetParam()) |
| 1139 return; | 1142 return; |
| 1140 EXPECT_EQ(0, delegate->GetTotalSentBytes()); | 1143 EXPECT_EQ(0, delegate->GetTotalSentBytes()); |
| 1141 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); | 1144 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); |
| 1142 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); | 1145 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); |
| 1143 } | 1146 } |
| 1144 | 1147 |
| 1145 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnFailed) { | 1148 TEST_P(BidirectionalStreamTest, CancelOrDeleteStreamDuringOnFailed) { |
| 1146 scoped_ptr<SpdyFrame> req( | 1149 scoped_ptr<SpdySerializedFrame> req( |
| 1147 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); | 1150 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); |
| 1148 | 1151 |
| 1149 scoped_ptr<SpdyFrame> rst( | 1152 scoped_ptr<SpdySerializedFrame> rst( |
| 1150 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); | 1153 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); |
| 1151 | 1154 |
| 1152 MockWrite writes[] = { | 1155 MockWrite writes[] = { |
| 1153 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2), | 1156 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2), |
| 1154 }; | 1157 }; |
| 1155 | 1158 |
| 1156 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"}; | 1159 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"}; |
| 1157 scoped_ptr<SpdyFrame> resp( | 1160 scoped_ptr<SpdySerializedFrame> resp( |
| 1158 spdy_util_.ConstructSpdyGetSynReply(kExtraHeaders, 1, 1)); | 1161 spdy_util_.ConstructSpdyGetSynReply(kExtraHeaders, 1, 1)); |
| 1159 | 1162 |
| 1160 MockRead reads[] = { | 1163 MockRead reads[] = { |
| 1161 CreateMockRead(*resp, 1), MockRead(ASYNC, 0, 3), | 1164 CreateMockRead(*resp, 1), MockRead(ASYNC, 0, 3), |
| 1162 }; | 1165 }; |
| 1163 | 1166 |
| 1164 HostPortPair host_port_pair("www.example.org", 443); | 1167 HostPortPair host_port_pair("www.example.org", 443); |
| 1165 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | 1168 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), |
| 1166 PRIVACY_MODE_DISABLED); | 1169 PRIVACY_MODE_DISABLED); |
| 1167 InitSession(reads, arraysize(reads), writes, arraysize(writes), key); | 1170 InitSession(reads, arraysize(reads), writes, arraysize(writes), key); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1190 | 1193 |
| 1191 // If stream is destroyed, do not call into stream. | 1194 // If stream is destroyed, do not call into stream. |
| 1192 if (!GetParam()) | 1195 if (!GetParam()) |
| 1193 return; | 1196 return; |
| 1194 EXPECT_EQ(0, delegate->GetTotalSentBytes()); | 1197 EXPECT_EQ(0, delegate->GetTotalSentBytes()); |
| 1195 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); | 1198 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); |
| 1196 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); | 1199 EXPECT_EQ(kProtoUnknown, delegate->GetProtocol()); |
| 1197 } | 1200 } |
| 1198 | 1201 |
| 1199 TEST_F(BidirectionalStreamTest, TestHonorAlternativeServiceHeader) { | 1202 TEST_F(BidirectionalStreamTest, TestHonorAlternativeServiceHeader) { |
| 1200 scoped_ptr<SpdyFrame> req( | 1203 scoped_ptr<SpdySerializedFrame> req( |
| 1201 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); | 1204 spdy_util_.ConstructSpdyGet("https://www.example.org", 1, LOWEST)); |
| 1202 // Empty DATA frame with an END_STREAM flag. | 1205 // Empty DATA frame with an END_STREAM flag. |
| 1203 scoped_ptr<SpdyFrame> end_stream( | 1206 scoped_ptr<SpdySerializedFrame> end_stream( |
| 1204 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); | 1207 spdy_util_.ConstructSpdyBodyFrame(1, nullptr, 0, true)); |
| 1205 | 1208 |
| 1206 MockWrite writes[] = {CreateMockWrite(*req.get(), 0)}; | 1209 MockWrite writes[] = {CreateMockWrite(*req.get(), 0)}; |
| 1207 | 1210 |
| 1208 std::string alt_svc_header_value = AlternateProtocolToString(QUIC); | 1211 std::string alt_svc_header_value = AlternateProtocolToString(QUIC); |
| 1209 alt_svc_header_value.append("=\"www.example.org:443\""); | 1212 alt_svc_header_value.append("=\"www.example.org:443\""); |
| 1210 const char* const kExtraResponseHeaders[] = {"alt-svc", | 1213 const char* const kExtraResponseHeaders[] = {"alt-svc", |
| 1211 alt_svc_header_value.c_str()}; | 1214 alt_svc_header_value.c_str()}; |
| 1212 | 1215 |
| 1213 scoped_ptr<SpdyFrame> resp( | 1216 scoped_ptr<SpdySerializedFrame> resp( |
| 1214 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); | 1217 spdy_util_.ConstructSpdyGetSynReply(kExtraResponseHeaders, 1, 1)); |
| 1215 scoped_ptr<SpdyFrame> body_frame(spdy_util_.ConstructSpdyBodyFrame(1, true)); | 1218 scoped_ptr<SpdySerializedFrame> body_frame( |
| 1219 spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 1216 | 1220 |
| 1217 MockRead reads[] = { | 1221 MockRead reads[] = { |
| 1218 CreateMockRead(*resp, 1), CreateMockRead(*body_frame, 2), | 1222 CreateMockRead(*resp, 1), CreateMockRead(*body_frame, 2), |
| 1219 MockRead(SYNCHRONOUS, 0, 3), | 1223 MockRead(SYNCHRONOUS, 0, 3), |
| 1220 }; | 1224 }; |
| 1221 | 1225 |
| 1222 HostPortPair host_port_pair("www.example.org", 443); | 1226 HostPortPair host_port_pair("www.example.org", 443); |
| 1223 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | 1227 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), |
| 1224 PRIVACY_MODE_DISABLED); | 1228 PRIVACY_MODE_DISABLED); |
| 1225 session_deps_.parse_alternative_services = true; | 1229 session_deps_.parse_alternative_services = true; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1257 http_session_->http_server_properties()->GetAlternativeServices( | 1261 http_session_->http_server_properties()->GetAlternativeServices( |
| 1258 host_port_pair); | 1262 host_port_pair); |
| 1259 ASSERT_EQ(1u, alternative_service_vector.size()); | 1263 ASSERT_EQ(1u, alternative_service_vector.size()); |
| 1260 EXPECT_EQ(AlternateProtocolFromNextProto(kProtoQUIC1SPDY3), | 1264 EXPECT_EQ(AlternateProtocolFromNextProto(kProtoQUIC1SPDY3), |
| 1261 alternative_service_vector[0].protocol); | 1265 alternative_service_vector[0].protocol); |
| 1262 EXPECT_EQ("www.example.org", alternative_service_vector[0].host); | 1266 EXPECT_EQ("www.example.org", alternative_service_vector[0].host); |
| 1263 EXPECT_EQ(443, alternative_service_vector[0].port); | 1267 EXPECT_EQ(443, alternative_service_vector[0].port); |
| 1264 } | 1268 } |
| 1265 | 1269 |
| 1266 } // namespace net | 1270 } // namespace net |
| OLD | NEW |