| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/spdy/spdy_session.h" | 5 #include "net/spdy/spdy_session.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/base64.h" | 10 #include "base/base64.h" |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 135 } | 135 } |
| 136 | 136 |
| 137 SpdySessionTest() | 137 SpdySessionTest() |
| 138 : old_max_group_sockets_(ClientSocketPoolManager::max_sockets_per_group( | 138 : old_max_group_sockets_(ClientSocketPoolManager::max_sockets_per_group( |
| 139 HttpNetworkSession::NORMAL_SOCKET_POOL)), | 139 HttpNetworkSession::NORMAL_SOCKET_POOL)), |
| 140 old_max_pool_sockets_(ClientSocketPoolManager::max_sockets_per_pool( | 140 old_max_pool_sockets_(ClientSocketPoolManager::max_sockets_per_pool( |
| 141 HttpNetworkSession::NORMAL_SOCKET_POOL)), | 141 HttpNetworkSession::NORMAL_SOCKET_POOL)), |
| 142 spdy_util_(GetProtocol(), GetDependenciesFromPriority()), | 142 spdy_util_(GetProtocol(), GetDependenciesFromPriority()), |
| 143 session_deps_(GetProtocol()), | 143 session_deps_(GetProtocol()), |
| 144 spdy_session_pool_(nullptr), | 144 spdy_session_pool_(nullptr), |
| 145 test_url_(kDefaultURL), | 145 test_url_(kDefaultUrl), |
| 146 test_server_(test_url_), | 146 test_server_(test_url_), |
| 147 key_(HostPortPair::FromURL(test_url_), | 147 key_(HostPortPair::FromURL(test_url_), |
| 148 ProxyServer::Direct(), | 148 ProxyServer::Direct(), |
| 149 PRIVACY_MODE_DISABLED) { | 149 PRIVACY_MODE_DISABLED) { |
| 150 session_deps_.enable_priority_dependencies = GetDependenciesFromPriority(); | 150 session_deps_.enable_priority_dependencies = GetDependenciesFromPriority(); |
| 151 } | 151 } |
| 152 | 152 |
| 153 virtual ~SpdySessionTest() { | 153 virtual ~SpdySessionTest() { |
| 154 // Important to restore the per-pool limit first, since the pool limit must | 154 // Important to restore the per-pool limit first, since the pool limit must |
| 155 // always be greater than group limit, and the tests reduce both limits. | 155 // always be greater than group limit, and the tests reduce both limits. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 172 SpdySessionDependencies::SpdyCreateSession(&session_deps_); | 172 SpdySessionDependencies::SpdyCreateSession(&session_deps_); |
| 173 spdy_session_pool_ = http_session_->spdy_session_pool(); | 173 spdy_session_pool_ = http_session_->spdy_session_pool(); |
| 174 } | 174 } |
| 175 | 175 |
| 176 void CreateInsecureSpdySession() { | 176 void CreateInsecureSpdySession() { |
| 177 DCHECK(!session_); | 177 DCHECK(!session_); |
| 178 session_ = ::net::CreateInsecureSpdySession(http_session_.get(), key_, | 178 session_ = ::net::CreateInsecureSpdySession(http_session_.get(), key_, |
| 179 log_.bound()); | 179 log_.bound()); |
| 180 } | 180 } |
| 181 | 181 |
| 182 void CreateSecureSpdySession() { |
| 183 DCHECK(!session_); |
| 184 session_ = |
| 185 ::net::CreateSecureSpdySession(http_session_.get(), key_, log_.bound()); |
| 186 } |
| 187 |
| 182 void StallSessionSend() { | 188 void StallSessionSend() { |
| 183 // Reduce the send window size to 0 to stall. | 189 // Reduce the send window size to 0 to stall. |
| 184 while (session_->session_send_window_size_ > 0) { | 190 while (session_->session_send_window_size_ > 0) { |
| 185 session_->DecreaseSendWindowSize(std::min( | 191 session_->DecreaseSendWindowSize(std::min( |
| 186 kMaxSpdyFrameChunkSize, session_->session_send_window_size_)); | 192 kMaxSpdyFrameChunkSize, session_->session_send_window_size_)); |
| 187 } | 193 } |
| 188 } | 194 } |
| 189 | 195 |
| 190 void UnstallSessionSend(int32_t delta_window_size) { | 196 void UnstallSessionSend(int32_t delta_window_size) { |
| 191 session_->IncreaseSendWindowSize(delta_window_size); | 197 session_->IncreaseSendWindowSize(delta_window_size); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 210 // Original socket limits. Some tests set these. Safest to always restore | 216 // Original socket limits. Some tests set these. Safest to always restore |
| 211 // them once each test has been run. | 217 // them once each test has been run. |
| 212 int old_max_group_sockets_; | 218 int old_max_group_sockets_; |
| 213 int old_max_pool_sockets_; | 219 int old_max_pool_sockets_; |
| 214 | 220 |
| 215 SpdyTestUtil spdy_util_; | 221 SpdyTestUtil spdy_util_; |
| 216 SpdySessionDependencies session_deps_; | 222 SpdySessionDependencies session_deps_; |
| 217 std::unique_ptr<HttpNetworkSession> http_session_; | 223 std::unique_ptr<HttpNetworkSession> http_session_; |
| 218 base::WeakPtr<SpdySession> session_; | 224 base::WeakPtr<SpdySession> session_; |
| 219 SpdySessionPool* spdy_session_pool_; | 225 SpdySessionPool* spdy_session_pool_; |
| 220 GURL test_url_; | 226 const GURL test_url_; |
| 221 url::SchemeHostPort test_server_; | 227 const url::SchemeHostPort test_server_; |
| 222 SpdySessionKey key_; | 228 SpdySessionKey key_; |
| 223 BoundTestNetLog log_; | 229 BoundTestNetLog log_; |
| 224 }; | 230 }; |
| 225 | 231 |
| 226 INSTANTIATE_TEST_CASE_P(ProtoPlusDepend, | 232 INSTANTIATE_TEST_CASE_P(ProtoPlusDepend, |
| 227 SpdySessionTest, | 233 SpdySessionTest, |
| 228 testing::Values(kTestCaseSPDY31, | 234 testing::Values(kTestCaseSPDY31, |
| 229 kTestCaseHTTP2NoPriorityDependencies, | 235 kTestCaseHTTP2NoPriorityDependencies, |
| 230 kTestCaseHTTP2PriorityDependencies)); | 236 kTestCaseHTTP2PriorityDependencies)); |
| 231 | 237 |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 398 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); | 404 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); |
| 399 test::StreamDelegateDoNothing delegate1(spdy_stream1); | 405 test::StreamDelegateDoNothing delegate1(spdy_stream1); |
| 400 spdy_stream1->SetDelegate(&delegate1); | 406 spdy_stream1->SetDelegate(&delegate1); |
| 401 | 407 |
| 402 base::WeakPtr<SpdyStream> spdy_stream2 = CreateStreamSynchronously( | 408 base::WeakPtr<SpdyStream> spdy_stream2 = CreateStreamSynchronously( |
| 403 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); | 409 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); |
| 404 test::StreamDelegateDoNothing delegate2(spdy_stream2); | 410 test::StreamDelegateDoNothing delegate2(spdy_stream2); |
| 405 spdy_stream2->SetDelegate(&delegate2); | 411 spdy_stream2->SetDelegate(&delegate2); |
| 406 | 412 |
| 407 std::unique_ptr<SpdyHeaderBlock> headers( | 413 std::unique_ptr<SpdyHeaderBlock> headers( |
| 408 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 414 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 409 std::unique_ptr<SpdyHeaderBlock> headers2(new SpdyHeaderBlock(*headers)); | 415 std::unique_ptr<SpdyHeaderBlock> headers2(new SpdyHeaderBlock(*headers)); |
| 410 | 416 |
| 411 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 417 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 412 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); | 418 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); |
| 413 spdy_stream2->SendRequestHeaders(std::move(headers2), NO_MORE_DATA_TO_SEND); | 419 spdy_stream2->SendRequestHeaders(std::move(headers2), NO_MORE_DATA_TO_SEND); |
| 414 EXPECT_TRUE(spdy_stream2->HasUrlFromHeaders()); | 420 EXPECT_TRUE(spdy_stream2->HasUrlFromHeaders()); |
| 415 | 421 |
| 416 base::RunLoop().RunUntilIdle(); | 422 base::RunLoop().RunUntilIdle(); |
| 417 | 423 |
| 418 EXPECT_EQ(1u, spdy_stream1->stream_id()); | 424 EXPECT_EQ(1u, spdy_stream1->stream_id()); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 464 CreateNetworkSession(); | 470 CreateNetworkSession(); |
| 465 CreateInsecureSpdySession(); | 471 CreateInsecureSpdySession(); |
| 466 | 472 |
| 467 EXPECT_EQ(spdy_util_.spdy_version(), session_->GetProtocolVersion()); | 473 EXPECT_EQ(spdy_util_.spdy_version(), session_->GetProtocolVersion()); |
| 468 | 474 |
| 469 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( | 475 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( |
| 470 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); | 476 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); |
| 471 test::StreamDelegateDoNothing delegate1(spdy_stream1); | 477 test::StreamDelegateDoNothing delegate1(spdy_stream1); |
| 472 spdy_stream1->SetDelegate(&delegate1); | 478 spdy_stream1->SetDelegate(&delegate1); |
| 473 std::unique_ptr<SpdyHeaderBlock> headers1( | 479 std::unique_ptr<SpdyHeaderBlock> headers1( |
| 474 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 480 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 475 spdy_stream1->SendRequestHeaders(std::move(headers1), NO_MORE_DATA_TO_SEND); | 481 spdy_stream1->SendRequestHeaders(std::move(headers1), NO_MORE_DATA_TO_SEND); |
| 476 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); | 482 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); |
| 477 | 483 |
| 478 EXPECT_EQ(0u, spdy_stream1->stream_id()); | 484 EXPECT_EQ(0u, spdy_stream1->stream_id()); |
| 479 | 485 |
| 480 // Active stream 1. | 486 // Active stream 1. |
| 481 base::RunLoop().RunUntilIdle(); | 487 base::RunLoop().RunUntilIdle(); |
| 482 EXPECT_EQ(1u, spdy_stream1->stream_id()); | 488 EXPECT_EQ(1u, spdy_stream1->stream_id()); |
| 483 EXPECT_TRUE(session_->IsStreamActive(1)); | 489 EXPECT_TRUE(session_->IsStreamActive(1)); |
| 484 | 490 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 537 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); | 543 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); |
| 538 test::StreamDelegateDoNothing delegate1(spdy_stream1); | 544 test::StreamDelegateDoNothing delegate1(spdy_stream1); |
| 539 spdy_stream1->SetDelegate(&delegate1); | 545 spdy_stream1->SetDelegate(&delegate1); |
| 540 | 546 |
| 541 base::WeakPtr<SpdyStream> spdy_stream2 = CreateStreamSynchronously( | 547 base::WeakPtr<SpdyStream> spdy_stream2 = CreateStreamSynchronously( |
| 542 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); | 548 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); |
| 543 test::StreamDelegateDoNothing delegate2(spdy_stream2); | 549 test::StreamDelegateDoNothing delegate2(spdy_stream2); |
| 544 spdy_stream2->SetDelegate(&delegate2); | 550 spdy_stream2->SetDelegate(&delegate2); |
| 545 | 551 |
| 546 std::unique_ptr<SpdyHeaderBlock> headers( | 552 std::unique_ptr<SpdyHeaderBlock> headers( |
| 547 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 553 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 548 std::unique_ptr<SpdyHeaderBlock> headers2(new SpdyHeaderBlock(*headers)); | 554 std::unique_ptr<SpdyHeaderBlock> headers2(new SpdyHeaderBlock(*headers)); |
| 549 | 555 |
| 550 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 556 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 551 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); | 557 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); |
| 552 spdy_stream2->SendRequestHeaders(std::move(headers2), NO_MORE_DATA_TO_SEND); | 558 spdy_stream2->SendRequestHeaders(std::move(headers2), NO_MORE_DATA_TO_SEND); |
| 553 EXPECT_TRUE(spdy_stream2->HasUrlFromHeaders()); | 559 EXPECT_TRUE(spdy_stream2->HasUrlFromHeaders()); |
| 554 | 560 |
| 555 base::RunLoop().RunUntilIdle(); | 561 base::RunLoop().RunUntilIdle(); |
| 556 | 562 |
| 557 EXPECT_EQ(1u, spdy_stream1->stream_id()); | 563 EXPECT_EQ(1u, spdy_stream1->stream_id()); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 611 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); | 617 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); |
| 612 test::StreamDelegateDoNothing delegate1(spdy_stream1); | 618 test::StreamDelegateDoNothing delegate1(spdy_stream1); |
| 613 spdy_stream1->SetDelegate(&delegate1); | 619 spdy_stream1->SetDelegate(&delegate1); |
| 614 | 620 |
| 615 base::WeakPtr<SpdyStream> spdy_stream2 = CreateStreamSynchronously( | 621 base::WeakPtr<SpdyStream> spdy_stream2 = CreateStreamSynchronously( |
| 616 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); | 622 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); |
| 617 test::StreamDelegateDoNothing delegate2(spdy_stream2); | 623 test::StreamDelegateDoNothing delegate2(spdy_stream2); |
| 618 spdy_stream2->SetDelegate(&delegate2); | 624 spdy_stream2->SetDelegate(&delegate2); |
| 619 | 625 |
| 620 std::unique_ptr<SpdyHeaderBlock> headers( | 626 std::unique_ptr<SpdyHeaderBlock> headers( |
| 621 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 627 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 622 std::unique_ptr<SpdyHeaderBlock> headers2(new SpdyHeaderBlock(*headers)); | 628 std::unique_ptr<SpdyHeaderBlock> headers2(new SpdyHeaderBlock(*headers)); |
| 623 | 629 |
| 624 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 630 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 625 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); | 631 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); |
| 626 spdy_stream2->SendRequestHeaders(std::move(headers2), NO_MORE_DATA_TO_SEND); | 632 spdy_stream2->SendRequestHeaders(std::move(headers2), NO_MORE_DATA_TO_SEND); |
| 627 EXPECT_TRUE(spdy_stream2->HasUrlFromHeaders()); | 633 EXPECT_TRUE(spdy_stream2->HasUrlFromHeaders()); |
| 628 | 634 |
| 629 base::RunLoop().RunUntilIdle(); | 635 base::RunLoop().RunUntilIdle(); |
| 630 | 636 |
| 631 EXPECT_EQ(1u, spdy_stream1->stream_id()); | 637 EXPECT_EQ(1u, spdy_stream1->stream_id()); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 696 | 702 |
| 697 CreateNetworkSession(); | 703 CreateNetworkSession(); |
| 698 CreateInsecureSpdySession(); | 704 CreateInsecureSpdySession(); |
| 699 | 705 |
| 700 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( | 706 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( |
| 701 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); | 707 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); |
| 702 test::StreamDelegateDoNothing delegate(spdy_stream); | 708 test::StreamDelegateDoNothing delegate(spdy_stream); |
| 703 spdy_stream->SetDelegate(&delegate); | 709 spdy_stream->SetDelegate(&delegate); |
| 704 | 710 |
| 705 std::unique_ptr<SpdyHeaderBlock> headers( | 711 std::unique_ptr<SpdyHeaderBlock> headers( |
| 706 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 712 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 707 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 713 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 708 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders()); | 714 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders()); |
| 709 | 715 |
| 710 base::RunLoop().RunUntilIdle(); | 716 base::RunLoop().RunUntilIdle(); |
| 711 | 717 |
| 712 // Stream and session closed gracefully. | 718 // Stream and session closed gracefully. |
| 713 EXPECT_TRUE(delegate.StreamIsClosed()); | 719 EXPECT_TRUE(delegate.StreamIsClosed()); |
| 714 EXPECT_EQ(OK, delegate.WaitForClose()); | 720 EXPECT_EQ(OK, delegate.WaitForClose()); |
| 715 EXPECT_EQ(kUploadData, delegate.TakeReceivedData()); | 721 EXPECT_EQ(kUploadData, delegate.TakeReceivedData()); |
| 716 EXPECT_FALSE(session_); | 722 EXPECT_FALSE(session_); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 741 CreateInsecureSpdySession(); | 747 CreateInsecureSpdySession(); |
| 742 | 748 |
| 743 EXPECT_EQ(spdy_util_.spdy_version(), session_->GetProtocolVersion()); | 749 EXPECT_EQ(spdy_util_.spdy_version(), session_->GetProtocolVersion()); |
| 744 | 750 |
| 745 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( | 751 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( |
| 746 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); | 752 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); |
| 747 test::StreamDelegateDoNothing delegate(spdy_stream); | 753 test::StreamDelegateDoNothing delegate(spdy_stream); |
| 748 spdy_stream->SetDelegate(&delegate); | 754 spdy_stream->SetDelegate(&delegate); |
| 749 | 755 |
| 750 std::unique_ptr<SpdyHeaderBlock> headers( | 756 std::unique_ptr<SpdyHeaderBlock> headers( |
| 751 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 757 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 752 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 758 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 753 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders()); | 759 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders()); |
| 754 | 760 |
| 755 base::RunLoop().RunUntilIdle(); | 761 base::RunLoop().RunUntilIdle(); |
| 756 | 762 |
| 757 EXPECT_EQ(1u, spdy_stream->stream_id()); | 763 EXPECT_EQ(1u, spdy_stream->stream_id()); |
| 758 | 764 |
| 759 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_)); | 765 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_)); |
| 760 | 766 |
| 761 // Read and process the GOAWAY frame. | 767 // Read and process the GOAWAY frame. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 778 } | 784 } |
| 779 | 785 |
| 780 // Receiving a SYN_STREAM frame after a GOAWAY frame should result in | 786 // Receiving a SYN_STREAM frame after a GOAWAY frame should result in |
| 781 // the stream being refused. | 787 // the stream being refused. |
| 782 TEST_P(SpdySessionTest, SynStreamAfterGoAway) { | 788 TEST_P(SpdySessionTest, SynStreamAfterGoAway) { |
| 783 session_deps_.host_resolver->set_synchronous_mode(true); | 789 session_deps_.host_resolver->set_synchronous_mode(true); |
| 784 | 790 |
| 785 std::unique_ptr<SpdySerializedFrame> goaway( | 791 std::unique_ptr<SpdySerializedFrame> goaway( |
| 786 spdy_util_.ConstructSpdyGoAway(1)); | 792 spdy_util_.ConstructSpdyGoAway(1)); |
| 787 std::unique_ptr<SpdySerializedFrame> push( | 793 std::unique_ptr<SpdySerializedFrame> push( |
| 788 spdy_util_.ConstructSpdyPush(nullptr, 0, 2, 1, kDefaultURL)); | 794 spdy_util_.ConstructSpdyPush(nullptr, 0, 2, 1, kDefaultUrl)); |
| 789 MockRead reads[] = { | 795 MockRead reads[] = { |
| 790 MockRead(ASYNC, ERR_IO_PENDING, 1), | 796 MockRead(ASYNC, ERR_IO_PENDING, 1), |
| 791 CreateMockRead(*goaway, 2), | 797 CreateMockRead(*goaway, 2), |
| 792 MockRead(ASYNC, ERR_IO_PENDING, 3), | 798 MockRead(ASYNC, ERR_IO_PENDING, 3), |
| 793 CreateMockRead(*push, 4), | 799 CreateMockRead(*push, 4), |
| 794 MockRead(ASYNC, 0, 6) // EOF | 800 MockRead(ASYNC, 0, 6) // EOF |
| 795 }; | 801 }; |
| 796 std::unique_ptr<SpdySerializedFrame> req( | 802 std::unique_ptr<SpdySerializedFrame> req( |
| 797 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); | 803 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); |
| 798 std::unique_ptr<SpdySerializedFrame> rst( | 804 std::unique_ptr<SpdySerializedFrame> rst( |
| 799 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); | 805 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); |
| 800 MockWrite writes[] = {CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5)}; | 806 MockWrite writes[] = {CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5)}; |
| 801 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 807 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| 802 session_deps_.socket_factory->AddSocketDataProvider(&data); | 808 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 803 | 809 |
| 804 CreateNetworkSession(); | 810 CreateNetworkSession(); |
| 805 CreateInsecureSpdySession(); | 811 CreateInsecureSpdySession(); |
| 806 | 812 |
| 807 EXPECT_EQ(spdy_util_.spdy_version(), session_->GetProtocolVersion()); | 813 EXPECT_EQ(spdy_util_.spdy_version(), session_->GetProtocolVersion()); |
| 808 | 814 |
| 809 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( | 815 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( |
| 810 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); | 816 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); |
| 811 test::StreamDelegateDoNothing delegate(spdy_stream); | 817 test::StreamDelegateDoNothing delegate(spdy_stream); |
| 812 spdy_stream->SetDelegate(&delegate); | 818 spdy_stream->SetDelegate(&delegate); |
| 813 | 819 |
| 814 std::unique_ptr<SpdyHeaderBlock> headers( | 820 std::unique_ptr<SpdyHeaderBlock> headers( |
| 815 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 821 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 816 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 822 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 817 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders()); | 823 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders()); |
| 818 | 824 |
| 819 base::RunLoop().RunUntilIdle(); | 825 base::RunLoop().RunUntilIdle(); |
| 820 | 826 |
| 821 EXPECT_EQ(1u, spdy_stream->stream_id()); | 827 EXPECT_EQ(1u, spdy_stream->stream_id()); |
| 822 | 828 |
| 823 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_)); | 829 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_)); |
| 824 | 830 |
| 825 // Read and process the GOAWAY frame. | 831 // Read and process the GOAWAY frame. |
| (...skipping 30 matching lines...) Expand all Loading... |
| 856 CreateInsecureSpdySession(); | 862 CreateInsecureSpdySession(); |
| 857 | 863 |
| 858 EXPECT_EQ(spdy_util_.spdy_version(), session_->GetProtocolVersion()); | 864 EXPECT_EQ(spdy_util_.spdy_version(), session_->GetProtocolVersion()); |
| 859 | 865 |
| 860 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( | 866 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( |
| 861 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); | 867 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); |
| 862 test::StreamDelegateDoNothing delegate(spdy_stream); | 868 test::StreamDelegateDoNothing delegate(spdy_stream); |
| 863 spdy_stream->SetDelegate(&delegate); | 869 spdy_stream->SetDelegate(&delegate); |
| 864 | 870 |
| 865 std::unique_ptr<SpdyHeaderBlock> headers( | 871 std::unique_ptr<SpdyHeaderBlock> headers( |
| 866 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 872 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 867 | 873 |
| 868 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 874 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 869 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders()); | 875 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders()); |
| 870 | 876 |
| 871 base::RunLoop().RunUntilIdle(); | 877 base::RunLoop().RunUntilIdle(); |
| 872 | 878 |
| 873 EXPECT_EQ(1u, spdy_stream->stream_id()); | 879 EXPECT_EQ(1u, spdy_stream->stream_id()); |
| 874 | 880 |
| 875 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_)); | 881 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_)); |
| 876 | 882 |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1017 | 1023 |
| 1018 CreateNetworkSession(); | 1024 CreateNetworkSession(); |
| 1019 CreateInsecureSpdySession(); | 1025 CreateInsecureSpdySession(); |
| 1020 | 1026 |
| 1021 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( | 1027 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( |
| 1022 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, LOWEST, BoundNetLog()); | 1028 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, LOWEST, BoundNetLog()); |
| 1023 test::StreamDelegateDoNothing delegate(spdy_stream); | 1029 test::StreamDelegateDoNothing delegate(spdy_stream); |
| 1024 spdy_stream->SetDelegate(&delegate); | 1030 spdy_stream->SetDelegate(&delegate); |
| 1025 | 1031 |
| 1026 std::unique_ptr<SpdyHeaderBlock> headers( | 1032 std::unique_ptr<SpdyHeaderBlock> headers( |
| 1027 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 1033 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 1028 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 1034 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 1029 | 1035 |
| 1030 // Shift time so that a ping will be sent out. | 1036 // Shift time so that a ping will be sent out. |
| 1031 g_time_delta = base::TimeDelta::FromSeconds(11); | 1037 g_time_delta = base::TimeDelta::FromSeconds(11); |
| 1032 | 1038 |
| 1033 base::RunLoop().RunUntilIdle(); | 1039 base::RunLoop().RunUntilIdle(); |
| 1034 session_->CloseSessionOnError(ERR_ABORTED, "Aborting"); | 1040 session_->CloseSessionOnError(ERR_ABORTED, "Aborting"); |
| 1035 | 1041 |
| 1036 data.Resume(); | 1042 data.Resume(); |
| 1037 base::RunLoop().RunUntilIdle(); | 1043 base::RunLoop().RunUntilIdle(); |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1112 MEDIUM, BoundNetLog(), callback4.callback())); | 1118 MEDIUM, BoundNetLog(), callback4.callback())); |
| 1113 | 1119 |
| 1114 // Streams 1-3 were created. 4th is stalled. No streams are active yet. | 1120 // Streams 1-3 were created. 4th is stalled. No streams are active yet. |
| 1115 EXPECT_EQ(0u, session_->num_active_streams()); | 1121 EXPECT_EQ(0u, session_->num_active_streams()); |
| 1116 EXPECT_EQ(3u, session_->num_created_streams()); | 1122 EXPECT_EQ(3u, session_->num_created_streams()); |
| 1117 EXPECT_EQ(1u, session_->pending_create_stream_queue_size(MEDIUM)); | 1123 EXPECT_EQ(1u, session_->pending_create_stream_queue_size(MEDIUM)); |
| 1118 | 1124 |
| 1119 // Activate stream 1. One ID remains available. | 1125 // Activate stream 1. One ID remains available. |
| 1120 stream1->SendRequestHeaders( | 1126 stream1->SendRequestHeaders( |
| 1121 std::unique_ptr<SpdyHeaderBlock>( | 1127 std::unique_ptr<SpdyHeaderBlock>( |
| 1122 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))), | 1128 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))), |
| 1123 NO_MORE_DATA_TO_SEND); | 1129 NO_MORE_DATA_TO_SEND); |
| 1124 base::RunLoop().RunUntilIdle(); | 1130 base::RunLoop().RunUntilIdle(); |
| 1125 | 1131 |
| 1126 EXPECT_EQ(kLastStreamId - 2u, stream1->stream_id()); | 1132 EXPECT_EQ(kLastStreamId - 2u, stream1->stream_id()); |
| 1127 EXPECT_EQ(1u, session_->num_active_streams()); | 1133 EXPECT_EQ(1u, session_->num_active_streams()); |
| 1128 EXPECT_EQ(2u, session_->num_created_streams()); | 1134 EXPECT_EQ(2u, session_->num_created_streams()); |
| 1129 EXPECT_EQ(1u, session_->pending_create_stream_queue_size(MEDIUM)); | 1135 EXPECT_EQ(1u, session_->pending_create_stream_queue_size(MEDIUM)); |
| 1130 | 1136 |
| 1131 // Activate stream 2. ID space is exhausted. | 1137 // Activate stream 2. ID space is exhausted. |
| 1132 stream2->SendRequestHeaders( | 1138 stream2->SendRequestHeaders( |
| 1133 std::unique_ptr<SpdyHeaderBlock>( | 1139 std::unique_ptr<SpdyHeaderBlock>( |
| 1134 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))), | 1140 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))), |
| 1135 NO_MORE_DATA_TO_SEND); | 1141 NO_MORE_DATA_TO_SEND); |
| 1136 base::RunLoop().RunUntilIdle(); | 1142 base::RunLoop().RunUntilIdle(); |
| 1137 | 1143 |
| 1138 // Active streams remain active. | 1144 // Active streams remain active. |
| 1139 EXPECT_EQ(kLastStreamId, stream2->stream_id()); | 1145 EXPECT_EQ(kLastStreamId, stream2->stream_id()); |
| 1140 EXPECT_EQ(2u, session_->num_active_streams()); | 1146 EXPECT_EQ(2u, session_->num_active_streams()); |
| 1141 | 1147 |
| 1142 // Session is going away. Created and stalled streams were aborted. | 1148 // Session is going away. Created and stalled streams were aborted. |
| 1143 EXPECT_EQ(SpdySession::STATE_GOING_AWAY, session_->availability_state_); | 1149 EXPECT_EQ(SpdySession::STATE_GOING_AWAY, session_->availability_state_); |
| 1144 EXPECT_EQ(ERR_ABORTED, delegate3.WaitForClose()); | 1150 EXPECT_EQ(ERR_ABORTED, delegate3.WaitForClose()); |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1247 EXPECT_EQ(0u, session_->pending_create_stream_queue_size(MEDIUM)); | 1253 EXPECT_EQ(0u, session_->pending_create_stream_queue_size(MEDIUM)); |
| 1248 EXPECT_EQ(1u, session_->num_created_streams()); | 1254 EXPECT_EQ(1u, session_->num_created_streams()); |
| 1249 | 1255 |
| 1250 EXPECT_EQ(OK, callback.WaitForResult()); | 1256 EXPECT_EQ(OK, callback.WaitForResult()); |
| 1251 | 1257 |
| 1252 // Send request. | 1258 // Send request. |
| 1253 base::WeakPtr<SpdyStream> stream = request.ReleaseStream(); | 1259 base::WeakPtr<SpdyStream> stream = request.ReleaseStream(); |
| 1254 test::StreamDelegateDoNothing delegate(stream); | 1260 test::StreamDelegateDoNothing delegate(stream); |
| 1255 stream->SetDelegate(&delegate); | 1261 stream->SetDelegate(&delegate); |
| 1256 std::unique_ptr<SpdyHeaderBlock> headers( | 1262 std::unique_ptr<SpdyHeaderBlock> headers( |
| 1257 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 1263 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 1258 stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 1264 stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 1259 EXPECT_TRUE(stream->HasUrlFromHeaders()); | 1265 EXPECT_TRUE(stream->HasUrlFromHeaders()); |
| 1260 | 1266 |
| 1261 EXPECT_EQ(OK, delegate.WaitForClose()); | 1267 EXPECT_EQ(OK, delegate.WaitForClose()); |
| 1262 EXPECT_EQ("hello!", delegate.TakeReceivedData()); | 1268 EXPECT_EQ("hello!", delegate.TakeReceivedData()); |
| 1263 | 1269 |
| 1264 // Session is destroyed. | 1270 // Session is destroyed. |
| 1265 EXPECT_FALSE(session_); | 1271 EXPECT_FALSE(session_); |
| 1266 } | 1272 } |
| 1267 | 1273 |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1331 session_deps_.host_resolver->set_synchronous_mode(true); | 1337 session_deps_.host_resolver->set_synchronous_mode(true); |
| 1332 session_deps_.time_func = TheNearFuture; | 1338 session_deps_.time_func = TheNearFuture; |
| 1333 | 1339 |
| 1334 std::unique_ptr<SpdySerializedFrame> req( | 1340 std::unique_ptr<SpdySerializedFrame> req( |
| 1335 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); | 1341 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); |
| 1336 std::unique_ptr<SpdySerializedFrame> rst( | 1342 std::unique_ptr<SpdySerializedFrame> rst( |
| 1337 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); | 1343 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); |
| 1338 MockWrite writes[] = {CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5)}; | 1344 MockWrite writes[] = {CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5)}; |
| 1339 | 1345 |
| 1340 std::unique_ptr<SpdySerializedFrame> push_a(spdy_util_.ConstructSpdyPush( | 1346 std::unique_ptr<SpdySerializedFrame> push_a(spdy_util_.ConstructSpdyPush( |
| 1341 nullptr, 0, 2, 1, "http://www.example.org/a.dat")); | 1347 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); |
| 1342 std::unique_ptr<SpdySerializedFrame> push_a_body( | 1348 std::unique_ptr<SpdySerializedFrame> push_a_body( |
| 1343 spdy_util_.ConstructSpdyBodyFrame(2, false)); | 1349 spdy_util_.ConstructSpdyBodyFrame(2, false)); |
| 1344 // In ascii "0" < "a". We use it to verify that we properly handle std::map | 1350 // In ascii "0" < "a". We use it to verify that we properly handle std::map |
| 1345 // iterators inside. See http://crbug.com/443490 | 1351 // iterators inside. See http://crbug.com/443490 |
| 1346 std::unique_ptr<SpdySerializedFrame> push_b(spdy_util_.ConstructSpdyPush( | 1352 std::unique_ptr<SpdySerializedFrame> push_b(spdy_util_.ConstructSpdyPush( |
| 1347 nullptr, 0, 4, 1, "http://www.example.org/0.dat")); | 1353 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); |
| 1348 MockRead reads[] = { | 1354 MockRead reads[] = { |
| 1349 CreateMockRead(*push_a, 1), | 1355 CreateMockRead(*push_a, 1), |
| 1350 CreateMockRead(*push_a_body, 2), | 1356 CreateMockRead(*push_a_body, 2), |
| 1351 MockRead(ASYNC, ERR_IO_PENDING, 3), | 1357 MockRead(ASYNC, ERR_IO_PENDING, 3), |
| 1352 CreateMockRead(*push_b, 4), | 1358 CreateMockRead(*push_b, 4), |
| 1353 MockRead(ASYNC, ERR_IO_PENDING, 6), | 1359 MockRead(ASYNC, ERR_IO_PENDING, 6), |
| 1354 MockRead(ASYNC, 0, 7) // EOF | 1360 MockRead(ASYNC, 0, 7) // EOF |
| 1355 }; | 1361 }; |
| 1356 | 1362 |
| 1357 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 1363 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| 1358 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1364 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1359 | 1365 |
| 1360 CreateNetworkSession(); | 1366 CreateNetworkSession(); |
| 1361 CreateInsecureSpdySession(); | 1367 CreateInsecureSpdySession(); |
| 1362 | 1368 |
| 1363 // Process the principal request, and the first push stream request & body. | 1369 // Process the principal request, and the first push stream request & body. |
| 1364 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( | 1370 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( |
| 1365 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); | 1371 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); |
| 1366 test::StreamDelegateDoNothing delegate(spdy_stream); | 1372 test::StreamDelegateDoNothing delegate(spdy_stream); |
| 1367 spdy_stream->SetDelegate(&delegate); | 1373 spdy_stream->SetDelegate(&delegate); |
| 1368 | 1374 |
| 1369 std::unique_ptr<SpdyHeaderBlock> headers( | 1375 std::unique_ptr<SpdyHeaderBlock> headers( |
| 1370 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 1376 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 1371 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 1377 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 1372 | 1378 |
| 1373 base::RunLoop().RunUntilIdle(); | 1379 base::RunLoop().RunUntilIdle(); |
| 1374 | 1380 |
| 1375 // Verify that there is one unclaimed push stream. | 1381 // Verify that there is one unclaimed push stream. |
| 1376 EXPECT_EQ(1u, session_->num_unclaimed_pushed_streams()); | 1382 EXPECT_EQ(1u, session_->num_unclaimed_pushed_streams()); |
| 1377 EXPECT_EQ(1u, session_->count_unclaimed_pushed_streams_for_url( | 1383 EXPECT_EQ(1u, session_->count_unclaimed_pushed_streams_for_url( |
| 1378 GURL("http://www.example.org/a.dat"))); | 1384 GURL("https://www.example.org/a.dat"))); |
| 1379 | 1385 |
| 1380 // Unclaimed push body consumed bytes from the session window. | 1386 // Unclaimed push body consumed bytes from the session window. |
| 1381 EXPECT_EQ( | 1387 EXPECT_EQ( |
| 1382 SpdySession::GetDefaultInitialWindowSize(GetProtocol()) - kUploadDataSize, | 1388 SpdySession::GetDefaultInitialWindowSize(GetProtocol()) - kUploadDataSize, |
| 1383 session_->session_recv_window_size_); | 1389 session_->session_recv_window_size_); |
| 1384 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_); | 1390 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_); |
| 1385 | 1391 |
| 1386 // Shift time to expire the push stream. Read the second SYN_STREAM, | 1392 // Shift time to expire the push stream. Read the second SYN_STREAM, |
| 1387 // and verify a RST_STREAM was written. | 1393 // and verify a RST_STREAM was written. |
| 1388 g_time_delta = base::TimeDelta::FromSeconds(301); | 1394 g_time_delta = base::TimeDelta::FromSeconds(301); |
| 1389 data.Resume(); | 1395 data.Resume(); |
| 1390 base::RunLoop().RunUntilIdle(); | 1396 base::RunLoop().RunUntilIdle(); |
| 1391 | 1397 |
| 1392 // Verify that the second pushed stream evicted the first pushed stream. | 1398 // Verify that the second pushed stream evicted the first pushed stream. |
| 1393 EXPECT_EQ(1u, session_->num_unclaimed_pushed_streams()); | 1399 EXPECT_EQ(1u, session_->num_unclaimed_pushed_streams()); |
| 1394 EXPECT_EQ(1u, session_->count_unclaimed_pushed_streams_for_url( | 1400 EXPECT_EQ(1u, session_->count_unclaimed_pushed_streams_for_url( |
| 1395 GURL("http://www.example.org/0.dat"))); | 1401 GURL("https://www.example.org/0.dat"))); |
| 1396 | 1402 |
| 1397 // Verify that the session window reclaimed the evicted stream body. | 1403 // Verify that the session window reclaimed the evicted stream body. |
| 1398 EXPECT_EQ(SpdySession::GetDefaultInitialWindowSize(GetProtocol()), | 1404 EXPECT_EQ(SpdySession::GetDefaultInitialWindowSize(GetProtocol()), |
| 1399 session_->session_recv_window_size_); | 1405 session_->session_recv_window_size_); |
| 1400 EXPECT_EQ(kUploadDataSize, session_->session_unacked_recv_window_bytes_); | 1406 EXPECT_EQ(kUploadDataSize, session_->session_unacked_recv_window_bytes_); |
| 1401 | 1407 |
| 1402 // Read and process EOF. | 1408 // Read and process EOF. |
| 1403 EXPECT_TRUE(session_); | 1409 EXPECT_TRUE(session_); |
| 1404 data.Resume(); | 1410 data.Resume(); |
| 1405 base::RunLoop().RunUntilIdle(); | 1411 base::RunLoop().RunUntilIdle(); |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1543 test::SetFrameFlags(settings_frame.get(), flags, spdy_util_.spdy_version()); | 1549 test::SetFrameFlags(settings_frame.get(), flags, spdy_util_.spdy_version()); |
| 1544 MockRead reads[] = { | 1550 MockRead reads[] = { |
| 1545 CreateMockRead(*settings_frame, 0), | 1551 CreateMockRead(*settings_frame, 0), |
| 1546 MockRead(ASYNC, ERR_IO_PENDING, 1), | 1552 MockRead(ASYNC, ERR_IO_PENDING, 1), |
| 1547 MockRead(ASYNC, 0, 2), | 1553 MockRead(ASYNC, 0, 2), |
| 1548 }; | 1554 }; |
| 1549 | 1555 |
| 1550 SequencedSocketData data(reads, arraysize(reads), nullptr, 0); | 1556 SequencedSocketData data(reads, arraysize(reads), nullptr, 0); |
| 1551 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1557 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1552 | 1558 |
| 1559 // Load a cert that is valid for: |
| 1560 // www.example.org |
| 1561 // mail.example.org |
| 1562 // mail.example.com |
| 1563 base::FilePath certs_dir = GetTestCertsDirectory(); |
| 1564 scoped_refptr<X509Certificate> test_cert( |
| 1565 ImportCertFromFile(certs_dir, "spdy_pooling.pem")); |
| 1566 ASSERT_NE(static_cast<X509Certificate*>(nullptr), test_cert.get()); |
| 1567 |
| 1568 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); |
| 1569 ssl.cert = test_cert; |
| 1570 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 1571 |
| 1553 CreateNetworkSession(); | 1572 CreateNetworkSession(); |
| 1554 | 1573 |
| 1555 // Initialize the SpdySetting with the default. | 1574 // Initialize the SpdySetting with the default. |
| 1556 spdy_session_pool_->http_server_properties()->SetSpdySetting( | 1575 spdy_session_pool_->http_server_properties()->SetSpdySetting( |
| 1557 test_server_, SETTINGS_MAX_CONCURRENT_STREAMS, | 1576 test_server_, SETTINGS_MAX_CONCURRENT_STREAMS, |
| 1558 SETTINGS_FLAG_PLEASE_PERSIST, kInitialMaxConcurrentStreams); | 1577 SETTINGS_FLAG_PLEASE_PERSIST, kInitialMaxConcurrentStreams); |
| 1559 | 1578 |
| 1560 EXPECT_FALSE(spdy_session_pool_->http_server_properties() | 1579 EXPECT_FALSE(spdy_session_pool_->http_server_properties() |
| 1561 ->GetSpdySettings(test_server_) | 1580 ->GetSpdySettings(test_server_) |
| 1562 .empty()); | 1581 .empty()); |
| 1563 | 1582 |
| 1564 CreateInsecureSpdySession(); | 1583 CreateSecureSpdySession(); |
| 1565 | 1584 |
| 1566 // Create the maximum number of concurrent streams. | 1585 // Create the maximum number of concurrent streams. |
| 1567 for (size_t i = 0; i < kInitialMaxConcurrentStreams; ++i) { | 1586 for (size_t i = 0; i < kInitialMaxConcurrentStreams; ++i) { |
| 1568 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( | 1587 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( |
| 1569 SPDY_BIDIRECTIONAL_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); | 1588 SPDY_BIDIRECTIONAL_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); |
| 1570 ASSERT_TRUE(spdy_stream); | 1589 ASSERT_TRUE(spdy_stream); |
| 1571 } | 1590 } |
| 1572 | 1591 |
| 1573 StreamReleaserCallback stream_releaser; | 1592 StreamReleaserCallback stream_releaser; |
| 1574 | 1593 |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1681 std::unique_ptr<SpdySerializedFrame> server_settings_frame( | 1700 std::unique_ptr<SpdySerializedFrame> server_settings_frame( |
| 1682 spdy_util_.ConstructSpdySettings(server_settings)); | 1701 spdy_util_.ConstructSpdySettings(server_settings)); |
| 1683 if (GetProtocol() == kProtoSPDY31) { | 1702 if (GetProtocol() == kProtoSPDY31) { |
| 1684 writes.push_back(CreateMockWrite(*server_settings_frame)); | 1703 writes.push_back(CreateMockWrite(*server_settings_frame)); |
| 1685 } | 1704 } |
| 1686 | 1705 |
| 1687 StaticSocketDataProvider data(reads, arraysize(reads), writes.data(), | 1706 StaticSocketDataProvider data(reads, arraysize(reads), writes.data(), |
| 1688 writes.size()); | 1707 writes.size()); |
| 1689 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1708 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1690 | 1709 |
| 1710 // Load a cert that is valid for: |
| 1711 // www.example.org |
| 1712 // mail.example.org |
| 1713 // mail.example.com |
| 1714 base::FilePath certs_dir = GetTestCertsDirectory(); |
| 1715 scoped_refptr<X509Certificate> test_cert( |
| 1716 ImportCertFromFile(certs_dir, "spdy_pooling.pem")); |
| 1717 ASSERT_NE(static_cast<X509Certificate*>(nullptr), test_cert.get()); |
| 1718 |
| 1719 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); |
| 1720 ssl.cert = test_cert; |
| 1721 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 1722 |
| 1691 CreateNetworkSession(); | 1723 CreateNetworkSession(); |
| 1692 | 1724 |
| 1693 spdy_session_pool_->http_server_properties()->SetSpdySetting( | 1725 spdy_session_pool_->http_server_properties()->SetSpdySetting( |
| 1694 test_server_, SETTINGS_MAX_CONCURRENT_STREAMS, | 1726 test_server_, SETTINGS_MAX_CONCURRENT_STREAMS, |
| 1695 SETTINGS_FLAG_PLEASE_PERSIST, initial_max_concurrent_streams); | 1727 SETTINGS_FLAG_PLEASE_PERSIST, initial_max_concurrent_streams); |
| 1696 | 1728 |
| 1697 SpdySessionPoolPeer pool_peer(spdy_session_pool_); | 1729 SpdySessionPoolPeer pool_peer(spdy_session_pool_); |
| 1698 pool_peer.SetEnableSendingInitialData(true); | 1730 pool_peer.SetEnableSendingInitialData(true); |
| 1699 | 1731 |
| 1700 CreateInsecureSpdySession(); | 1732 CreateSecureSpdySession(); |
| 1701 | 1733 |
| 1702 base::RunLoop().RunUntilIdle(); | 1734 base::RunLoop().RunUntilIdle(); |
| 1703 EXPECT_TRUE(data.AllWriteDataConsumed()); | 1735 EXPECT_TRUE(data.AllWriteDataConsumed()); |
| 1704 } | 1736 } |
| 1705 | 1737 |
| 1706 TEST_P(SpdySessionTest, ClearSettingsStorageOnIPAddressChanged) { | 1738 TEST_P(SpdySessionTest, ClearSettingsStorageOnIPAddressChanged) { |
| 1707 CreateNetworkSession(); | 1739 CreateNetworkSession(); |
| 1708 | 1740 |
| 1709 HttpServerProperties* test_http_server_properties = | 1741 HttpServerProperties* test_http_server_properties = |
| 1710 spdy_session_pool_->http_server_properties(); | 1742 spdy_session_pool_->http_server_properties(); |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1865 | 1897 |
| 1866 CreateNetworkSession(); | 1898 CreateNetworkSession(); |
| 1867 CreateInsecureSpdySession(); | 1899 CreateInsecureSpdySession(); |
| 1868 | 1900 |
| 1869 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( | 1901 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( |
| 1870 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); | 1902 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); |
| 1871 test::StreamDelegateDoNothing delegate(spdy_stream); | 1903 test::StreamDelegateDoNothing delegate(spdy_stream); |
| 1872 spdy_stream->SetDelegate(&delegate); | 1904 spdy_stream->SetDelegate(&delegate); |
| 1873 | 1905 |
| 1874 std::unique_ptr<SpdyHeaderBlock> headers( | 1906 std::unique_ptr<SpdyHeaderBlock> headers( |
| 1875 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 1907 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 1876 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 1908 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 1877 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders()); | 1909 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders()); |
| 1878 | 1910 |
| 1879 // Write request headers & capture resulting histogram update. | 1911 // Write request headers & capture resulting histogram update. |
| 1880 base::HistogramTester histogram_tester; | 1912 base::HistogramTester histogram_tester; |
| 1881 | 1913 |
| 1882 base::RunLoop().RunUntilIdle(); | 1914 base::RunLoop().RunUntilIdle(); |
| 1883 // Regression test of compression performance under the request fixture. | 1915 // Regression test of compression performance under the request fixture. |
| 1884 switch (spdy_util_.spdy_version()) { | 1916 switch (spdy_util_.spdy_version()) { |
| 1885 case SPDY3: | 1917 case SPDY3: |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1955 CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, session_, | 1987 CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, session_, |
| 1956 test_url_, HIGHEST, BoundNetLog()); | 1988 test_url_, HIGHEST, BoundNetLog()); |
| 1957 ASSERT_TRUE(spdy_stream_highest); | 1989 ASSERT_TRUE(spdy_stream_highest); |
| 1958 EXPECT_EQ(0u, spdy_stream_highest->stream_id()); | 1990 EXPECT_EQ(0u, spdy_stream_highest->stream_id()); |
| 1959 test::StreamDelegateDoNothing delegate_highest(spdy_stream_highest); | 1991 test::StreamDelegateDoNothing delegate_highest(spdy_stream_highest); |
| 1960 spdy_stream_highest->SetDelegate(&delegate_highest); | 1992 spdy_stream_highest->SetDelegate(&delegate_highest); |
| 1961 | 1993 |
| 1962 // Queue the lower priority one first. | 1994 // Queue the lower priority one first. |
| 1963 | 1995 |
| 1964 std::unique_ptr<SpdyHeaderBlock> headers_lowest( | 1996 std::unique_ptr<SpdyHeaderBlock> headers_lowest( |
| 1965 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 1997 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 1966 spdy_stream_lowest->SendRequestHeaders(std::move(headers_lowest), | 1998 spdy_stream_lowest->SendRequestHeaders(std::move(headers_lowest), |
| 1967 NO_MORE_DATA_TO_SEND); | 1999 NO_MORE_DATA_TO_SEND); |
| 1968 EXPECT_TRUE(spdy_stream_lowest->HasUrlFromHeaders()); | 2000 EXPECT_TRUE(spdy_stream_lowest->HasUrlFromHeaders()); |
| 1969 | 2001 |
| 1970 std::unique_ptr<SpdyHeaderBlock> headers_highest( | 2002 std::unique_ptr<SpdyHeaderBlock> headers_highest( |
| 1971 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 2003 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 1972 spdy_stream_highest->SendRequestHeaders(std::move(headers_highest), | 2004 spdy_stream_highest->SendRequestHeaders(std::move(headers_highest), |
| 1973 NO_MORE_DATA_TO_SEND); | 2005 NO_MORE_DATA_TO_SEND); |
| 1974 EXPECT_TRUE(spdy_stream_highest->HasUrlFromHeaders()); | 2006 EXPECT_TRUE(spdy_stream_highest->HasUrlFromHeaders()); |
| 1975 | 2007 |
| 1976 base::RunLoop().RunUntilIdle(); | 2008 base::RunLoop().RunUntilIdle(); |
| 1977 | 2009 |
| 1978 EXPECT_FALSE(spdy_stream_lowest); | 2010 EXPECT_FALSE(spdy_stream_lowest); |
| 1979 EXPECT_FALSE(spdy_stream_highest); | 2011 EXPECT_FALSE(spdy_stream_highest); |
| 1980 EXPECT_EQ(3u, delegate_lowest.stream_id()); | 2012 EXPECT_EQ(3u, delegate_lowest.stream_id()); |
| 1981 EXPECT_EQ(1u, delegate_highest.stream_id()); | 2013 EXPECT_EQ(1u, delegate_highest.stream_id()); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2018 spdy_stream1->SetDelegate(&delegate1); | 2050 spdy_stream1->SetDelegate(&delegate1); |
| 2019 | 2051 |
| 2020 base::WeakPtr<SpdyStream> spdy_stream2 = CreateStreamSynchronously( | 2052 base::WeakPtr<SpdyStream> spdy_stream2 = CreateStreamSynchronously( |
| 2021 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, LOWEST, BoundNetLog()); | 2053 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, LOWEST, BoundNetLog()); |
| 2022 ASSERT_TRUE(spdy_stream2); | 2054 ASSERT_TRUE(spdy_stream2); |
| 2023 EXPECT_EQ(0u, spdy_stream2->stream_id()); | 2055 EXPECT_EQ(0u, spdy_stream2->stream_id()); |
| 2024 test::StreamDelegateDoNothing delegate2(spdy_stream2); | 2056 test::StreamDelegateDoNothing delegate2(spdy_stream2); |
| 2025 spdy_stream2->SetDelegate(&delegate2); | 2057 spdy_stream2->SetDelegate(&delegate2); |
| 2026 | 2058 |
| 2027 std::unique_ptr<SpdyHeaderBlock> headers( | 2059 std::unique_ptr<SpdyHeaderBlock> headers( |
| 2028 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 2060 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 2029 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 2061 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 2030 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); | 2062 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); |
| 2031 | 2063 |
| 2032 std::unique_ptr<SpdyHeaderBlock> headers2( | 2064 std::unique_ptr<SpdyHeaderBlock> headers2( |
| 2033 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 2065 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 2034 spdy_stream2->SendRequestHeaders(std::move(headers2), NO_MORE_DATA_TO_SEND); | 2066 spdy_stream2->SendRequestHeaders(std::move(headers2), NO_MORE_DATA_TO_SEND); |
| 2035 EXPECT_TRUE(spdy_stream2->HasUrlFromHeaders()); | 2067 EXPECT_TRUE(spdy_stream2->HasUrlFromHeaders()); |
| 2036 | 2068 |
| 2037 EXPECT_EQ(0u, spdy_stream1->stream_id()); | 2069 EXPECT_EQ(0u, spdy_stream1->stream_id()); |
| 2038 | 2070 |
| 2039 spdy_stream1->Cancel(); | 2071 spdy_stream1->Cancel(); |
| 2040 EXPECT_FALSE(spdy_stream1); | 2072 EXPECT_FALSE(spdy_stream1); |
| 2041 | 2073 |
| 2042 EXPECT_EQ(0u, delegate1.stream_id()); | 2074 EXPECT_EQ(0u, delegate1.stream_id()); |
| 2043 | 2075 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2081 ASSERT_TRUE(spdy_stream2); | 2113 ASSERT_TRUE(spdy_stream2); |
| 2082 EXPECT_EQ(0u, spdy_stream2->stream_id()); | 2114 EXPECT_EQ(0u, spdy_stream2->stream_id()); |
| 2083 | 2115 |
| 2084 test::ClosingDelegate delegate1(spdy_stream1); | 2116 test::ClosingDelegate delegate1(spdy_stream1); |
| 2085 spdy_stream1->SetDelegate(&delegate1); | 2117 spdy_stream1->SetDelegate(&delegate1); |
| 2086 | 2118 |
| 2087 test::ClosingDelegate delegate2(spdy_stream2); | 2119 test::ClosingDelegate delegate2(spdy_stream2); |
| 2088 spdy_stream2->SetDelegate(&delegate2); | 2120 spdy_stream2->SetDelegate(&delegate2); |
| 2089 | 2121 |
| 2090 std::unique_ptr<SpdyHeaderBlock> headers( | 2122 std::unique_ptr<SpdyHeaderBlock> headers( |
| 2091 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 2123 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 2092 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 2124 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 2093 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); | 2125 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); |
| 2094 | 2126 |
| 2095 std::unique_ptr<SpdyHeaderBlock> headers2( | 2127 std::unique_ptr<SpdyHeaderBlock> headers2( |
| 2096 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 2128 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 2097 spdy_stream2->SendRequestHeaders(std::move(headers2), NO_MORE_DATA_TO_SEND); | 2129 spdy_stream2->SendRequestHeaders(std::move(headers2), NO_MORE_DATA_TO_SEND); |
| 2098 EXPECT_TRUE(spdy_stream2->HasUrlFromHeaders()); | 2130 EXPECT_TRUE(spdy_stream2->HasUrlFromHeaders()); |
| 2099 | 2131 |
| 2100 // Ensure that the streams have not yet been activated and assigned an id. | 2132 // Ensure that the streams have not yet been activated and assigned an id. |
| 2101 EXPECT_EQ(0u, spdy_stream1->stream_id()); | 2133 EXPECT_EQ(0u, spdy_stream1->stream_id()); |
| 2102 EXPECT_EQ(0u, spdy_stream2->stream_id()); | 2134 EXPECT_EQ(0u, spdy_stream2->stream_id()); |
| 2103 | 2135 |
| 2104 // Ensure we don't crash while closing the session. | 2136 // Ensure we don't crash while closing the session. |
| 2105 session_->CloseSessionOnError(ERR_ABORTED, std::string()); | 2137 session_->CloseSessionOnError(ERR_ABORTED, std::string()); |
| 2106 | 2138 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 2137 | 2169 |
| 2138 // Make |spdy_stream1| close |spdy_stream2|. | 2170 // Make |spdy_stream1| close |spdy_stream2|. |
| 2139 test::ClosingDelegate delegate1(spdy_stream2); | 2171 test::ClosingDelegate delegate1(spdy_stream2); |
| 2140 spdy_stream1->SetDelegate(&delegate1); | 2172 spdy_stream1->SetDelegate(&delegate1); |
| 2141 | 2173 |
| 2142 // Make |spdy_stream2| close |spdy_stream1|. | 2174 // Make |spdy_stream2| close |spdy_stream1|. |
| 2143 test::ClosingDelegate delegate2(spdy_stream1); | 2175 test::ClosingDelegate delegate2(spdy_stream1); |
| 2144 spdy_stream2->SetDelegate(&delegate2); | 2176 spdy_stream2->SetDelegate(&delegate2); |
| 2145 | 2177 |
| 2146 std::unique_ptr<SpdyHeaderBlock> headers( | 2178 std::unique_ptr<SpdyHeaderBlock> headers( |
| 2147 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 2179 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 2148 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 2180 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 2149 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); | 2181 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); |
| 2150 | 2182 |
| 2151 std::unique_ptr<SpdyHeaderBlock> headers2( | 2183 std::unique_ptr<SpdyHeaderBlock> headers2( |
| 2152 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 2184 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 2153 spdy_stream2->SendRequestHeaders(std::move(headers2), NO_MORE_DATA_TO_SEND); | 2185 spdy_stream2->SendRequestHeaders(std::move(headers2), NO_MORE_DATA_TO_SEND); |
| 2154 EXPECT_TRUE(spdy_stream2->HasUrlFromHeaders()); | 2186 EXPECT_TRUE(spdy_stream2->HasUrlFromHeaders()); |
| 2155 | 2187 |
| 2156 // Ensure that the streams have not yet been activated and assigned an id. | 2188 // Ensure that the streams have not yet been activated and assigned an id. |
| 2157 EXPECT_EQ(0u, spdy_stream1->stream_id()); | 2189 EXPECT_EQ(0u, spdy_stream1->stream_id()); |
| 2158 EXPECT_EQ(0u, spdy_stream2->stream_id()); | 2190 EXPECT_EQ(0u, spdy_stream2->stream_id()); |
| 2159 | 2191 |
| 2160 // Ensure we don't crash while closing the session. | 2192 // Ensure we don't crash while closing the session. |
| 2161 session_->CloseSessionOnError(ERR_ABORTED, std::string()); | 2193 session_->CloseSessionOnError(ERR_ABORTED, std::string()); |
| 2162 | 2194 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2204 ASSERT_TRUE(spdy_stream2); | 2236 ASSERT_TRUE(spdy_stream2); |
| 2205 EXPECT_EQ(0u, spdy_stream2->stream_id()); | 2237 EXPECT_EQ(0u, spdy_stream2->stream_id()); |
| 2206 | 2238 |
| 2207 test::ClosingDelegate delegate1(spdy_stream1); | 2239 test::ClosingDelegate delegate1(spdy_stream1); |
| 2208 spdy_stream1->SetDelegate(&delegate1); | 2240 spdy_stream1->SetDelegate(&delegate1); |
| 2209 | 2241 |
| 2210 test::ClosingDelegate delegate2(spdy_stream2); | 2242 test::ClosingDelegate delegate2(spdy_stream2); |
| 2211 spdy_stream2->SetDelegate(&delegate2); | 2243 spdy_stream2->SetDelegate(&delegate2); |
| 2212 | 2244 |
| 2213 std::unique_ptr<SpdyHeaderBlock> headers( | 2245 std::unique_ptr<SpdyHeaderBlock> headers( |
| 2214 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 2246 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 2215 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 2247 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 2216 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); | 2248 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); |
| 2217 | 2249 |
| 2218 std::unique_ptr<SpdyHeaderBlock> headers2( | 2250 std::unique_ptr<SpdyHeaderBlock> headers2( |
| 2219 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 2251 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 2220 spdy_stream2->SendRequestHeaders(std::move(headers2), NO_MORE_DATA_TO_SEND); | 2252 spdy_stream2->SendRequestHeaders(std::move(headers2), NO_MORE_DATA_TO_SEND); |
| 2221 EXPECT_TRUE(spdy_stream2->HasUrlFromHeaders()); | 2253 EXPECT_TRUE(spdy_stream2->HasUrlFromHeaders()); |
| 2222 | 2254 |
| 2223 // Ensure that the streams have not yet been activated and assigned an id. | 2255 // Ensure that the streams have not yet been activated and assigned an id. |
| 2224 EXPECT_EQ(0u, spdy_stream1->stream_id()); | 2256 EXPECT_EQ(0u, spdy_stream1->stream_id()); |
| 2225 EXPECT_EQ(0u, spdy_stream2->stream_id()); | 2257 EXPECT_EQ(0u, spdy_stream2->stream_id()); |
| 2226 | 2258 |
| 2227 base::RunLoop().RunUntilIdle(); | 2259 base::RunLoop().RunUntilIdle(); |
| 2228 | 2260 |
| 2229 EXPECT_EQ(1u, spdy_stream1->stream_id()); | 2261 EXPECT_EQ(1u, spdy_stream1->stream_id()); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2280 | 2312 |
| 2281 // Make |spdy_stream1| close |spdy_stream2|. | 2313 // Make |spdy_stream1| close |spdy_stream2|. |
| 2282 test::ClosingDelegate delegate1(spdy_stream2); | 2314 test::ClosingDelegate delegate1(spdy_stream2); |
| 2283 spdy_stream1->SetDelegate(&delegate1); | 2315 spdy_stream1->SetDelegate(&delegate1); |
| 2284 | 2316 |
| 2285 // Make |spdy_stream2| close |spdy_stream1|. | 2317 // Make |spdy_stream2| close |spdy_stream1|. |
| 2286 test::ClosingDelegate delegate2(spdy_stream1); | 2318 test::ClosingDelegate delegate2(spdy_stream1); |
| 2287 spdy_stream2->SetDelegate(&delegate2); | 2319 spdy_stream2->SetDelegate(&delegate2); |
| 2288 | 2320 |
| 2289 std::unique_ptr<SpdyHeaderBlock> headers( | 2321 std::unique_ptr<SpdyHeaderBlock> headers( |
| 2290 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 2322 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 2291 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 2323 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 2292 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); | 2324 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); |
| 2293 | 2325 |
| 2294 std::unique_ptr<SpdyHeaderBlock> headers2( | 2326 std::unique_ptr<SpdyHeaderBlock> headers2( |
| 2295 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 2327 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 2296 spdy_stream2->SendRequestHeaders(std::move(headers2), NO_MORE_DATA_TO_SEND); | 2328 spdy_stream2->SendRequestHeaders(std::move(headers2), NO_MORE_DATA_TO_SEND); |
| 2297 EXPECT_TRUE(spdy_stream2->HasUrlFromHeaders()); | 2329 EXPECT_TRUE(spdy_stream2->HasUrlFromHeaders()); |
| 2298 | 2330 |
| 2299 // Ensure that the streams have not yet been activated and assigned an id. | 2331 // Ensure that the streams have not yet been activated and assigned an id. |
| 2300 EXPECT_EQ(0u, spdy_stream1->stream_id()); | 2332 EXPECT_EQ(0u, spdy_stream1->stream_id()); |
| 2301 EXPECT_EQ(0u, spdy_stream2->stream_id()); | 2333 EXPECT_EQ(0u, spdy_stream2->stream_id()); |
| 2302 | 2334 |
| 2303 base::RunLoop().RunUntilIdle(); | 2335 base::RunLoop().RunUntilIdle(); |
| 2304 | 2336 |
| 2305 EXPECT_EQ(1u, spdy_stream1->stream_id()); | 2337 EXPECT_EQ(1u, spdy_stream1->stream_id()); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2368 | 2400 |
| 2369 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( | 2401 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( |
| 2370 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); | 2402 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); |
| 2371 ASSERT_TRUE(spdy_stream); | 2403 ASSERT_TRUE(spdy_stream); |
| 2372 EXPECT_EQ(0u, spdy_stream->stream_id()); | 2404 EXPECT_EQ(0u, spdy_stream->stream_id()); |
| 2373 | 2405 |
| 2374 SessionClosingDelegate delegate(spdy_stream, session_); | 2406 SessionClosingDelegate delegate(spdy_stream, session_); |
| 2375 spdy_stream->SetDelegate(&delegate); | 2407 spdy_stream->SetDelegate(&delegate); |
| 2376 | 2408 |
| 2377 std::unique_ptr<SpdyHeaderBlock> headers( | 2409 std::unique_ptr<SpdyHeaderBlock> headers( |
| 2378 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 2410 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 2379 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 2411 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 2380 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders()); | 2412 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders()); |
| 2381 | 2413 |
| 2382 EXPECT_EQ(0u, spdy_stream->stream_id()); | 2414 EXPECT_EQ(0u, spdy_stream->stream_id()); |
| 2383 | 2415 |
| 2384 base::RunLoop().RunUntilIdle(); | 2416 base::RunLoop().RunUntilIdle(); |
| 2385 | 2417 |
| 2386 EXPECT_EQ(1u, spdy_stream->stream_id()); | 2418 EXPECT_EQ(1u, spdy_stream->stream_id()); |
| 2387 | 2419 |
| 2388 // Ensure we don't crash while closing the stream (which closes the | 2420 // Ensure we don't crash while closing the stream (which closes the |
| (...skipping 22 matching lines...) Expand all Loading... |
| 2411 base::FilePath certs_dir = GetTestCertsDirectory(); | 2443 base::FilePath certs_dir = GetTestCertsDirectory(); |
| 2412 scoped_refptr<X509Certificate> test_cert( | 2444 scoped_refptr<X509Certificate> test_cert( |
| 2413 ImportCertFromFile(certs_dir, "spdy_pooling.pem")); | 2445 ImportCertFromFile(certs_dir, "spdy_pooling.pem")); |
| 2414 ASSERT_NE(static_cast<X509Certificate*>(nullptr), test_cert.get()); | 2446 ASSERT_NE(static_cast<X509Certificate*>(nullptr), test_cert.get()); |
| 2415 | 2447 |
| 2416 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); | 2448 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); |
| 2417 ssl.cert = test_cert; | 2449 ssl.cert = test_cert; |
| 2418 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 2450 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 2419 | 2451 |
| 2420 CreateNetworkSession(); | 2452 CreateNetworkSession(); |
| 2421 | 2453 CreateSecureSpdySession(); |
| 2422 session_ = CreateSecureSpdySession(http_session_.get(), key_, BoundNetLog()); | |
| 2423 | 2454 |
| 2424 EXPECT_TRUE(session_->VerifyDomainAuthentication("www.example.org")); | 2455 EXPECT_TRUE(session_->VerifyDomainAuthentication("www.example.org")); |
| 2425 EXPECT_TRUE(session_->VerifyDomainAuthentication("mail.example.org")); | 2456 EXPECT_TRUE(session_->VerifyDomainAuthentication("mail.example.org")); |
| 2426 EXPECT_TRUE(session_->VerifyDomainAuthentication("mail.example.com")); | 2457 EXPECT_TRUE(session_->VerifyDomainAuthentication("mail.example.com")); |
| 2427 EXPECT_FALSE(session_->VerifyDomainAuthentication("mail.google.com")); | 2458 EXPECT_FALSE(session_->VerifyDomainAuthentication("mail.google.com")); |
| 2428 } | 2459 } |
| 2429 | 2460 |
| 2430 TEST_P(SpdySessionTest, ConnectionPooledWithTlsChannelId) { | 2461 TEST_P(SpdySessionTest, ConnectionPooledWithTlsChannelId) { |
| 2431 session_deps_.host_resolver->set_synchronous_mode(true); | 2462 session_deps_.host_resolver->set_synchronous_mode(true); |
| 2432 | 2463 |
| 2433 SequencedSocketData data(nullptr, 0, nullptr, 0); | 2464 SequencedSocketData data(nullptr, 0, nullptr, 0); |
| 2434 session_deps_.socket_factory->AddSocketDataProvider(&data); | 2465 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 2435 | 2466 |
| 2436 // Load a cert that is valid for: | 2467 // Load a cert that is valid for: |
| 2437 // www.example.org | 2468 // www.example.org |
| 2438 // mail.example.org | 2469 // mail.example.org |
| 2439 // mail.example.com | 2470 // mail.example.com |
| 2440 base::FilePath certs_dir = GetTestCertsDirectory(); | 2471 base::FilePath certs_dir = GetTestCertsDirectory(); |
| 2441 scoped_refptr<X509Certificate> test_cert( | 2472 scoped_refptr<X509Certificate> test_cert( |
| 2442 ImportCertFromFile(certs_dir, "spdy_pooling.pem")); | 2473 ImportCertFromFile(certs_dir, "spdy_pooling.pem")); |
| 2443 ASSERT_NE(static_cast<X509Certificate*>(nullptr), test_cert.get()); | 2474 ASSERT_NE(static_cast<X509Certificate*>(nullptr), test_cert.get()); |
| 2444 | 2475 |
| 2445 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); | 2476 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); |
| 2446 ssl.channel_id_sent = true; | 2477 ssl.channel_id_sent = true; |
| 2447 ssl.cert = test_cert; | 2478 ssl.cert = test_cert; |
| 2448 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 2479 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 2449 | 2480 |
| 2450 CreateNetworkSession(); | 2481 CreateNetworkSession(); |
| 2451 | 2482 CreateSecureSpdySession(); |
| 2452 session_ = CreateSecureSpdySession(http_session_.get(), key_, BoundNetLog()); | |
| 2453 | 2483 |
| 2454 EXPECT_TRUE(session_->VerifyDomainAuthentication("www.example.org")); | 2484 EXPECT_TRUE(session_->VerifyDomainAuthentication("www.example.org")); |
| 2455 EXPECT_TRUE(session_->VerifyDomainAuthentication("mail.example.org")); | 2485 EXPECT_TRUE(session_->VerifyDomainAuthentication("mail.example.org")); |
| 2456 EXPECT_FALSE(session_->VerifyDomainAuthentication("mail.example.com")); | 2486 EXPECT_FALSE(session_->VerifyDomainAuthentication("mail.example.com")); |
| 2457 EXPECT_FALSE(session_->VerifyDomainAuthentication("mail.google.com")); | 2487 EXPECT_FALSE(session_->VerifyDomainAuthentication("mail.google.com")); |
| 2458 } | 2488 } |
| 2459 | 2489 |
| 2460 TEST_P(SpdySessionTest, CloseTwoStalledCreateStream) { | 2490 TEST_P(SpdySessionTest, CloseTwoStalledCreateStream) { |
| 2461 // TODO(rtenneti): Define a helper class/methods and move the common code in | 2491 // TODO(rtenneti): Define a helper class/methods and move the common code in |
| 2462 // this file. | 2492 // this file. |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2543 ASSERT_EQ( | 2573 ASSERT_EQ( |
| 2544 ERR_IO_PENDING, | 2574 ERR_IO_PENDING, |
| 2545 request3.StartRequest(SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, | 2575 request3.StartRequest(SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, |
| 2546 LOWEST, BoundNetLog(), callback3.callback())); | 2576 LOWEST, BoundNetLog(), callback3.callback())); |
| 2547 | 2577 |
| 2548 EXPECT_EQ(0u, session_->num_active_streams()); | 2578 EXPECT_EQ(0u, session_->num_active_streams()); |
| 2549 EXPECT_EQ(1u, session_->num_created_streams()); | 2579 EXPECT_EQ(1u, session_->num_created_streams()); |
| 2550 EXPECT_EQ(2u, session_->pending_create_stream_queue_size(LOWEST)); | 2580 EXPECT_EQ(2u, session_->pending_create_stream_queue_size(LOWEST)); |
| 2551 | 2581 |
| 2552 std::unique_ptr<SpdyHeaderBlock> headers( | 2582 std::unique_ptr<SpdyHeaderBlock> headers( |
| 2553 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 2583 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 2554 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 2584 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 2555 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); | 2585 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); |
| 2556 | 2586 |
| 2557 // Run until 1st stream is activated and then closed. | 2587 // Run until 1st stream is activated and then closed. |
| 2558 EXPECT_EQ(0u, delegate1.stream_id()); | 2588 EXPECT_EQ(0u, delegate1.stream_id()); |
| 2559 base::RunLoop().RunUntilIdle(); | 2589 base::RunLoop().RunUntilIdle(); |
| 2560 EXPECT_FALSE(spdy_stream1); | 2590 EXPECT_FALSE(spdy_stream1); |
| 2561 EXPECT_EQ(1u, delegate1.stream_id()); | 2591 EXPECT_EQ(1u, delegate1.stream_id()); |
| 2562 | 2592 |
| 2563 EXPECT_EQ(0u, session_->num_active_streams()); | 2593 EXPECT_EQ(0u, session_->num_active_streams()); |
| 2564 EXPECT_EQ(1u, session_->pending_create_stream_queue_size(LOWEST)); | 2594 EXPECT_EQ(1u, session_->pending_create_stream_queue_size(LOWEST)); |
| 2565 | 2595 |
| 2566 // Pump loop for SpdySession::ProcessPendingStreamRequests() to | 2596 // Pump loop for SpdySession::ProcessPendingStreamRequests() to |
| 2567 // create the 2nd stream. | 2597 // create the 2nd stream. |
| 2568 base::RunLoop().RunUntilIdle(); | 2598 base::RunLoop().RunUntilIdle(); |
| 2569 | 2599 |
| 2570 EXPECT_EQ(0u, session_->num_active_streams()); | 2600 EXPECT_EQ(0u, session_->num_active_streams()); |
| 2571 EXPECT_EQ(1u, session_->num_created_streams()); | 2601 EXPECT_EQ(1u, session_->num_created_streams()); |
| 2572 EXPECT_EQ(1u, session_->pending_create_stream_queue_size(LOWEST)); | 2602 EXPECT_EQ(1u, session_->pending_create_stream_queue_size(LOWEST)); |
| 2573 | 2603 |
| 2574 base::WeakPtr<SpdyStream> stream2 = request2.ReleaseStream(); | 2604 base::WeakPtr<SpdyStream> stream2 = request2.ReleaseStream(); |
| 2575 test::StreamDelegateDoNothing delegate2(stream2); | 2605 test::StreamDelegateDoNothing delegate2(stream2); |
| 2576 stream2->SetDelegate(&delegate2); | 2606 stream2->SetDelegate(&delegate2); |
| 2577 std::unique_ptr<SpdyHeaderBlock> headers2( | 2607 std::unique_ptr<SpdyHeaderBlock> headers2( |
| 2578 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 2608 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 2579 stream2->SendRequestHeaders(std::move(headers2), NO_MORE_DATA_TO_SEND); | 2609 stream2->SendRequestHeaders(std::move(headers2), NO_MORE_DATA_TO_SEND); |
| 2580 EXPECT_TRUE(stream2->HasUrlFromHeaders()); | 2610 EXPECT_TRUE(stream2->HasUrlFromHeaders()); |
| 2581 | 2611 |
| 2582 // Run until 2nd stream is activated and then closed. | 2612 // Run until 2nd stream is activated and then closed. |
| 2583 EXPECT_EQ(0u, delegate2.stream_id()); | 2613 EXPECT_EQ(0u, delegate2.stream_id()); |
| 2584 base::RunLoop().RunUntilIdle(); | 2614 base::RunLoop().RunUntilIdle(); |
| 2585 EXPECT_FALSE(stream2); | 2615 EXPECT_FALSE(stream2); |
| 2586 EXPECT_EQ(3u, delegate2.stream_id()); | 2616 EXPECT_EQ(3u, delegate2.stream_id()); |
| 2587 | 2617 |
| 2588 EXPECT_EQ(0u, session_->num_active_streams()); | 2618 EXPECT_EQ(0u, session_->num_active_streams()); |
| 2589 EXPECT_EQ(0u, session_->pending_create_stream_queue_size(LOWEST)); | 2619 EXPECT_EQ(0u, session_->pending_create_stream_queue_size(LOWEST)); |
| 2590 | 2620 |
| 2591 // Pump loop for SpdySession::ProcessPendingStreamRequests() to | 2621 // Pump loop for SpdySession::ProcessPendingStreamRequests() to |
| 2592 // create the 3rd stream. | 2622 // create the 3rd stream. |
| 2593 base::RunLoop().RunUntilIdle(); | 2623 base::RunLoop().RunUntilIdle(); |
| 2594 | 2624 |
| 2595 EXPECT_EQ(0u, session_->num_active_streams()); | 2625 EXPECT_EQ(0u, session_->num_active_streams()); |
| 2596 EXPECT_EQ(1u, session_->num_created_streams()); | 2626 EXPECT_EQ(1u, session_->num_created_streams()); |
| 2597 EXPECT_EQ(0u, session_->pending_create_stream_queue_size(LOWEST)); | 2627 EXPECT_EQ(0u, session_->pending_create_stream_queue_size(LOWEST)); |
| 2598 | 2628 |
| 2599 base::WeakPtr<SpdyStream> stream3 = request3.ReleaseStream(); | 2629 base::WeakPtr<SpdyStream> stream3 = request3.ReleaseStream(); |
| 2600 test::StreamDelegateDoNothing delegate3(stream3); | 2630 test::StreamDelegateDoNothing delegate3(stream3); |
| 2601 stream3->SetDelegate(&delegate3); | 2631 stream3->SetDelegate(&delegate3); |
| 2602 std::unique_ptr<SpdyHeaderBlock> headers3( | 2632 std::unique_ptr<SpdyHeaderBlock> headers3( |
| 2603 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 2633 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 2604 stream3->SendRequestHeaders(std::move(headers3), NO_MORE_DATA_TO_SEND); | 2634 stream3->SendRequestHeaders(std::move(headers3), NO_MORE_DATA_TO_SEND); |
| 2605 EXPECT_TRUE(stream3->HasUrlFromHeaders()); | 2635 EXPECT_TRUE(stream3->HasUrlFromHeaders()); |
| 2606 | 2636 |
| 2607 // Run until 2nd stream is activated and then closed. | 2637 // Run until 2nd stream is activated and then closed. |
| 2608 EXPECT_EQ(0u, delegate3.stream_id()); | 2638 EXPECT_EQ(0u, delegate3.stream_id()); |
| 2609 base::RunLoop().RunUntilIdle(); | 2639 base::RunLoop().RunUntilIdle(); |
| 2610 EXPECT_FALSE(stream3); | 2640 EXPECT_FALSE(stream3); |
| 2611 EXPECT_EQ(5u, delegate3.stream_id()); | 2641 EXPECT_EQ(5u, delegate3.stream_id()); |
| 2612 | 2642 |
| 2613 EXPECT_EQ(0u, session_->num_active_streams()); | 2643 EXPECT_EQ(0u, session_->num_active_streams()); |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2742 CreateInsecureSpdySession(); | 2772 CreateInsecureSpdySession(); |
| 2743 | 2773 |
| 2744 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( | 2774 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( |
| 2745 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); | 2775 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); |
| 2746 ASSERT_TRUE(spdy_stream1); | 2776 ASSERT_TRUE(spdy_stream1); |
| 2747 EXPECT_EQ(0u, spdy_stream1->stream_id()); | 2777 EXPECT_EQ(0u, spdy_stream1->stream_id()); |
| 2748 test::StreamDelegateDoNothing delegate1(spdy_stream1); | 2778 test::StreamDelegateDoNothing delegate1(spdy_stream1); |
| 2749 spdy_stream1->SetDelegate(&delegate1); | 2779 spdy_stream1->SetDelegate(&delegate1); |
| 2750 | 2780 |
| 2751 std::unique_ptr<SpdyHeaderBlock> headers1( | 2781 std::unique_ptr<SpdyHeaderBlock> headers1( |
| 2752 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 2782 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 2753 spdy_stream1->SendRequestHeaders(std::move(headers1), NO_MORE_DATA_TO_SEND); | 2783 spdy_stream1->SendRequestHeaders(std::move(headers1), NO_MORE_DATA_TO_SEND); |
| 2754 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); | 2784 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); |
| 2755 | 2785 |
| 2756 // Set up the TaskObserver to verify SpdySession::DoReadLoop doesn't | 2786 // Set up the TaskObserver to verify SpdySession::DoReadLoop doesn't |
| 2757 // post a task. | 2787 // post a task. |
| 2758 SpdySessionTestTaskObserver observer("spdy_session.cc", "DoReadLoop"); | 2788 SpdySessionTestTaskObserver observer("spdy_session.cc", "DoReadLoop"); |
| 2759 | 2789 |
| 2760 // Run until 1st read. | 2790 // Run until 1st read. |
| 2761 EXPECT_EQ(0u, delegate1.stream_id()); | 2791 EXPECT_EQ(0u, delegate1.stream_id()); |
| 2762 base::RunLoop().RunUntilIdle(); | 2792 base::RunLoop().RunUntilIdle(); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2806 CreateInsecureSpdySession(); | 2836 CreateInsecureSpdySession(); |
| 2807 | 2837 |
| 2808 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( | 2838 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( |
| 2809 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); | 2839 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); |
| 2810 ASSERT_TRUE(spdy_stream1); | 2840 ASSERT_TRUE(spdy_stream1); |
| 2811 EXPECT_EQ(0u, spdy_stream1->stream_id()); | 2841 EXPECT_EQ(0u, spdy_stream1->stream_id()); |
| 2812 test::StreamDelegateDoNothing delegate1(spdy_stream1); | 2842 test::StreamDelegateDoNothing delegate1(spdy_stream1); |
| 2813 spdy_stream1->SetDelegate(&delegate1); | 2843 spdy_stream1->SetDelegate(&delegate1); |
| 2814 | 2844 |
| 2815 std::unique_ptr<SpdyHeaderBlock> headers1( | 2845 std::unique_ptr<SpdyHeaderBlock> headers1( |
| 2816 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 2846 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 2817 spdy_stream1->SendRequestHeaders(std::move(headers1), NO_MORE_DATA_TO_SEND); | 2847 spdy_stream1->SendRequestHeaders(std::move(headers1), NO_MORE_DATA_TO_SEND); |
| 2818 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); | 2848 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); |
| 2819 | 2849 |
| 2820 // Set up the TaskObserver to verify that SpdySession::DoReadLoop posts a | 2850 // Set up the TaskObserver to verify that SpdySession::DoReadLoop posts a |
| 2821 // task. | 2851 // task. |
| 2822 SpdySessionTestTaskObserver observer("spdy_session.cc", "DoReadLoop"); | 2852 SpdySessionTestTaskObserver observer("spdy_session.cc", "DoReadLoop"); |
| 2823 | 2853 |
| 2824 EXPECT_EQ(0u, delegate1.stream_id()); | 2854 EXPECT_EQ(0u, delegate1.stream_id()); |
| 2825 EXPECT_EQ(0u, observer.executed_count()); | 2855 EXPECT_EQ(0u, observer.executed_count()); |
| 2826 | 2856 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2877 CreateInsecureSpdySession(); | 2907 CreateInsecureSpdySession(); |
| 2878 | 2908 |
| 2879 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( | 2909 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( |
| 2880 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); | 2910 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); |
| 2881 ASSERT_TRUE(spdy_stream1); | 2911 ASSERT_TRUE(spdy_stream1); |
| 2882 EXPECT_EQ(0u, spdy_stream1->stream_id()); | 2912 EXPECT_EQ(0u, spdy_stream1->stream_id()); |
| 2883 test::StreamDelegateDoNothing delegate1(spdy_stream1); | 2913 test::StreamDelegateDoNothing delegate1(spdy_stream1); |
| 2884 spdy_stream1->SetDelegate(&delegate1); | 2914 spdy_stream1->SetDelegate(&delegate1); |
| 2885 | 2915 |
| 2886 std::unique_ptr<SpdyHeaderBlock> headers1( | 2916 std::unique_ptr<SpdyHeaderBlock> headers1( |
| 2887 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 2917 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 2888 spdy_stream1->SendRequestHeaders(std::move(headers1), NO_MORE_DATA_TO_SEND); | 2918 spdy_stream1->SendRequestHeaders(std::move(headers1), NO_MORE_DATA_TO_SEND); |
| 2889 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); | 2919 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); |
| 2890 | 2920 |
| 2891 // Run until 1st read. | 2921 // Run until 1st read. |
| 2892 EXPECT_EQ(0u, delegate1.stream_id()); | 2922 EXPECT_EQ(0u, delegate1.stream_id()); |
| 2893 base::RunLoop().RunUntilIdle(); | 2923 base::RunLoop().RunUntilIdle(); |
| 2894 EXPECT_EQ(1u, delegate1.stream_id()); | 2924 EXPECT_EQ(1u, delegate1.stream_id()); |
| 2895 | 2925 |
| 2896 // Read all the data and verify SpdySession::DoReadLoop has posted a task. | 2926 // Read all the data and verify SpdySession::DoReadLoop has posted a task. |
| 2897 data.Resume(); | 2927 data.Resume(); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2958 CreateInsecureSpdySession(); | 2988 CreateInsecureSpdySession(); |
| 2959 | 2989 |
| 2960 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( | 2990 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( |
| 2961 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); | 2991 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); |
| 2962 ASSERT_TRUE(spdy_stream1); | 2992 ASSERT_TRUE(spdy_stream1); |
| 2963 EXPECT_EQ(0u, spdy_stream1->stream_id()); | 2993 EXPECT_EQ(0u, spdy_stream1->stream_id()); |
| 2964 test::StreamDelegateDoNothing delegate1(spdy_stream1); | 2994 test::StreamDelegateDoNothing delegate1(spdy_stream1); |
| 2965 spdy_stream1->SetDelegate(&delegate1); | 2995 spdy_stream1->SetDelegate(&delegate1); |
| 2966 | 2996 |
| 2967 std::unique_ptr<SpdyHeaderBlock> headers1( | 2997 std::unique_ptr<SpdyHeaderBlock> headers1( |
| 2968 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 2998 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 2969 spdy_stream1->SendRequestHeaders(std::move(headers1), NO_MORE_DATA_TO_SEND); | 2999 spdy_stream1->SendRequestHeaders(std::move(headers1), NO_MORE_DATA_TO_SEND); |
| 2970 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); | 3000 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); |
| 2971 | 3001 |
| 2972 // Set up the TaskObserver to verify SpdySession::DoReadLoop posts a task. | 3002 // Set up the TaskObserver to verify SpdySession::DoReadLoop posts a task. |
| 2973 SpdySessionTestTaskObserver observer("spdy_session.cc", "DoReadLoop"); | 3003 SpdySessionTestTaskObserver observer("spdy_session.cc", "DoReadLoop"); |
| 2974 | 3004 |
| 2975 // Run until 1st read. | 3005 // Run until 1st read. |
| 2976 EXPECT_EQ(0u, delegate1.stream_id()); | 3006 EXPECT_EQ(0u, delegate1.stream_id()); |
| 2977 base::RunLoop().RunUntilIdle(); | 3007 base::RunLoop().RunUntilIdle(); |
| 2978 EXPECT_EQ(1u, delegate1.stream_id()); | 3008 EXPECT_EQ(1u, delegate1.stream_id()); |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3065 CreateInsecureSpdySession(); | 3095 CreateInsecureSpdySession(); |
| 3066 | 3096 |
| 3067 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( | 3097 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( |
| 3068 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); | 3098 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); |
| 3069 ASSERT_TRUE(spdy_stream1); | 3099 ASSERT_TRUE(spdy_stream1); |
| 3070 EXPECT_EQ(0u, spdy_stream1->stream_id()); | 3100 EXPECT_EQ(0u, spdy_stream1->stream_id()); |
| 3071 test::StreamDelegateDoNothing delegate1(spdy_stream1); | 3101 test::StreamDelegateDoNothing delegate1(spdy_stream1); |
| 3072 spdy_stream1->SetDelegate(&delegate1); | 3102 spdy_stream1->SetDelegate(&delegate1); |
| 3073 | 3103 |
| 3074 std::unique_ptr<SpdyHeaderBlock> headers1( | 3104 std::unique_ptr<SpdyHeaderBlock> headers1( |
| 3075 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 3105 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 3076 spdy_stream1->SendRequestHeaders(std::move(headers1), NO_MORE_DATA_TO_SEND); | 3106 spdy_stream1->SendRequestHeaders(std::move(headers1), NO_MORE_DATA_TO_SEND); |
| 3077 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); | 3107 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); |
| 3078 | 3108 |
| 3079 // Set up the TaskObserver to monitor SpdySession::DoReadLoop | 3109 // Set up the TaskObserver to monitor SpdySession::DoReadLoop |
| 3080 // posting of tasks. | 3110 // posting of tasks. |
| 3081 SpdySessionTestTaskObserver observer("spdy_session.cc", "DoReadLoop"); | 3111 SpdySessionTestTaskObserver observer("spdy_session.cc", "DoReadLoop"); |
| 3082 | 3112 |
| 3083 // Run until 1st read. | 3113 // Run until 1st read. |
| 3084 EXPECT_EQ(0u, delegate1.stream_id()); | 3114 EXPECT_EQ(0u, delegate1.stream_id()); |
| 3085 base::RunLoop().RunUntilIdle(); | 3115 base::RunLoop().RunUntilIdle(); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3134 CreateInsecureSpdySession(); | 3164 CreateInsecureSpdySession(); |
| 3135 | 3165 |
| 3136 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( | 3166 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( |
| 3137 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); | 3167 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); |
| 3138 test::StreamDelegateDoNothing delegate1(spdy_stream1); | 3168 test::StreamDelegateDoNothing delegate1(spdy_stream1); |
| 3139 spdy_stream1->SetDelegate(&delegate1); | 3169 spdy_stream1->SetDelegate(&delegate1); |
| 3140 ASSERT_TRUE(spdy_stream1); | 3170 ASSERT_TRUE(spdy_stream1); |
| 3141 EXPECT_EQ(0u, spdy_stream1->stream_id()); | 3171 EXPECT_EQ(0u, spdy_stream1->stream_id()); |
| 3142 | 3172 |
| 3143 std::unique_ptr<SpdyHeaderBlock> headers1( | 3173 std::unique_ptr<SpdyHeaderBlock> headers1( |
| 3144 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 3174 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 3145 spdy_stream1->SendRequestHeaders(std::move(headers1), NO_MORE_DATA_TO_SEND); | 3175 spdy_stream1->SendRequestHeaders(std::move(headers1), NO_MORE_DATA_TO_SEND); |
| 3146 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); | 3176 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); |
| 3147 | 3177 |
| 3148 // Run until 1st read. | 3178 // Run until 1st read. |
| 3149 EXPECT_EQ(0u, spdy_stream1->stream_id()); | 3179 EXPECT_EQ(0u, spdy_stream1->stream_id()); |
| 3150 base::RunLoop().RunUntilIdle(); | 3180 base::RunLoop().RunUntilIdle(); |
| 3151 EXPECT_EQ(1u, spdy_stream1->stream_id()); | 3181 EXPECT_EQ(1u, spdy_stream1->stream_id()); |
| 3152 | 3182 |
| 3153 // Run until GoAway. | 3183 // Run until GoAway. |
| 3154 data.Resume(); | 3184 data.Resume(); |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3351 | 3381 |
| 3352 TestCompletionCallback callback1; | 3382 TestCompletionCallback callback1; |
| 3353 base::WeakPtr<SpdyStream> spdy_stream1 = | 3383 base::WeakPtr<SpdyStream> spdy_stream1 = |
| 3354 CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, session_, | 3384 CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, session_, |
| 3355 test_url_, DEFAULT_PRIORITY, BoundNetLog()); | 3385 test_url_, DEFAULT_PRIORITY, BoundNetLog()); |
| 3356 ASSERT_TRUE(spdy_stream1.get()); | 3386 ASSERT_TRUE(spdy_stream1.get()); |
| 3357 test::StreamDelegateDoNothing delegate1(spdy_stream1); | 3387 test::StreamDelegateDoNothing delegate1(spdy_stream1); |
| 3358 spdy_stream1->SetDelegate(&delegate1); | 3388 spdy_stream1->SetDelegate(&delegate1); |
| 3359 | 3389 |
| 3360 std::unique_ptr<SpdyHeaderBlock> headers1( | 3390 std::unique_ptr<SpdyHeaderBlock> headers1( |
| 3361 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 3391 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 3362 EXPECT_EQ(ERR_IO_PENDING, spdy_stream1->SendRequestHeaders( | 3392 EXPECT_EQ(ERR_IO_PENDING, spdy_stream1->SendRequestHeaders( |
| 3363 std::move(headers1), NO_MORE_DATA_TO_SEND)); | 3393 std::move(headers1), NO_MORE_DATA_TO_SEND)); |
| 3364 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); | 3394 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); |
| 3365 | 3395 |
| 3366 base::RunLoop().RunUntilIdle(); | 3396 base::RunLoop().RunUntilIdle(); |
| 3367 | 3397 |
| 3368 // Trying to create a new connection should cause the pool to be stalled, and | 3398 // Trying to create a new connection should cause the pool to be stalled, and |
| 3369 // post a task asynchronously to try and close the session. | 3399 // post a task asynchronously to try and close the session. |
| 3370 TestCompletionCallback callback2; | 3400 TestCompletionCallback callback2; |
| 3371 HostPortPair host_port2("2.com", 80); | 3401 HostPortPair host_port2("2.com", 80); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3436 class StreamCreatingDelegate : public test::StreamDelegateDoNothing { | 3466 class StreamCreatingDelegate : public test::StreamDelegateDoNothing { |
| 3437 public: | 3467 public: |
| 3438 StreamCreatingDelegate(const base::WeakPtr<SpdyStream>& stream, | 3468 StreamCreatingDelegate(const base::WeakPtr<SpdyStream>& stream, |
| 3439 const base::WeakPtr<SpdySession>& session) | 3469 const base::WeakPtr<SpdySession>& session) |
| 3440 : StreamDelegateDoNothing(stream), | 3470 : StreamDelegateDoNothing(stream), |
| 3441 session_(session) {} | 3471 session_(session) {} |
| 3442 | 3472 |
| 3443 ~StreamCreatingDelegate() override {} | 3473 ~StreamCreatingDelegate() override {} |
| 3444 | 3474 |
| 3445 void OnClose(int status) override { | 3475 void OnClose(int status) override { |
| 3446 GURL url(kDefaultURL); | 3476 GURL url(kDefaultUrl); |
| 3447 ignore_result( | 3477 ignore_result( |
| 3448 CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, | 3478 CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, |
| 3449 session_, url, MEDIUM, BoundNetLog())); | 3479 session_, url, MEDIUM, BoundNetLog())); |
| 3450 } | 3480 } |
| 3451 | 3481 |
| 3452 private: | 3482 private: |
| 3453 const base::WeakPtr<SpdySession> session_; | 3483 const base::WeakPtr<SpdySession> session_; |
| 3454 }; | 3484 }; |
| 3455 | 3485 |
| 3456 // Create another stream in response to a stream being reset. Nothing | 3486 // Create another stream in response to a stream being reset. Nothing |
| (...skipping 24 matching lines...) Expand all Loading... |
| 3481 | 3511 |
| 3482 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( | 3512 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( |
| 3483 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); | 3513 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); |
| 3484 ASSERT_TRUE(spdy_stream); | 3514 ASSERT_TRUE(spdy_stream); |
| 3485 EXPECT_EQ(0u, spdy_stream->stream_id()); | 3515 EXPECT_EQ(0u, spdy_stream->stream_id()); |
| 3486 | 3516 |
| 3487 StreamCreatingDelegate delegate(spdy_stream, session_); | 3517 StreamCreatingDelegate delegate(spdy_stream, session_); |
| 3488 spdy_stream->SetDelegate(&delegate); | 3518 spdy_stream->SetDelegate(&delegate); |
| 3489 | 3519 |
| 3490 std::unique_ptr<SpdyHeaderBlock> headers( | 3520 std::unique_ptr<SpdyHeaderBlock> headers( |
| 3491 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 3521 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 3492 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 3522 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 3493 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders()); | 3523 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders()); |
| 3494 | 3524 |
| 3495 EXPECT_EQ(0u, spdy_stream->stream_id()); | 3525 EXPECT_EQ(0u, spdy_stream->stream_id()); |
| 3496 | 3526 |
| 3497 base::RunLoop().RunUntilIdle(); | 3527 base::RunLoop().RunUntilIdle(); |
| 3498 | 3528 |
| 3499 EXPECT_EQ(1u, spdy_stream->stream_id()); | 3529 EXPECT_EQ(1u, spdy_stream->stream_id()); |
| 3500 | 3530 |
| 3501 // Cause the stream to be reset, which should cause another stream | 3531 // Cause the stream to be reset, which should cause another stream |
| (...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3768 CreateInsecureSpdySession(); | 3798 CreateInsecureSpdySession(); |
| 3769 | 3799 |
| 3770 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( | 3800 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( |
| 3771 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, LOWEST, BoundNetLog()); | 3801 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, LOWEST, BoundNetLog()); |
| 3772 EXPECT_EQ(stream_max_recv_window_size, spdy_stream->recv_window_size()); | 3802 EXPECT_EQ(stream_max_recv_window_size, spdy_stream->recv_window_size()); |
| 3773 | 3803 |
| 3774 test::StreamDelegateDoNothing delegate(spdy_stream); | 3804 test::StreamDelegateDoNothing delegate(spdy_stream); |
| 3775 spdy_stream->SetDelegate(&delegate); | 3805 spdy_stream->SetDelegate(&delegate); |
| 3776 | 3806 |
| 3777 std::unique_ptr<SpdyHeaderBlock> headers( | 3807 std::unique_ptr<SpdyHeaderBlock> headers( |
| 3778 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 3808 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 3779 EXPECT_EQ(ERR_IO_PENDING, spdy_stream->SendRequestHeaders( | 3809 EXPECT_EQ(ERR_IO_PENDING, spdy_stream->SendRequestHeaders( |
| 3780 std::move(headers), NO_MORE_DATA_TO_SEND)); | 3810 std::move(headers), NO_MORE_DATA_TO_SEND)); |
| 3781 | 3811 |
| 3782 // Request and response. | 3812 // Request and response. |
| 3783 base::RunLoop().RunUntilIdle(); | 3813 base::RunLoop().RunUntilIdle(); |
| 3784 EXPECT_EQ(1u, spdy_stream->stream_id()); | 3814 EXPECT_EQ(1u, spdy_stream->stream_id()); |
| 3785 | 3815 |
| 3786 // Too large data frame causes flow control error, should close stream. | 3816 // Too large data frame causes flow control error, should close stream. |
| 3787 data.Resume(); | 3817 data.Resume(); |
| 3788 base::RunLoop().RunUntilIdle(); | 3818 base::RunLoop().RunUntilIdle(); |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3906 pool_peer.SetStreamInitialRecvWindowSize(stream_max_recv_window_size); | 3936 pool_peer.SetStreamInitialRecvWindowSize(stream_max_recv_window_size); |
| 3907 | 3937 |
| 3908 CreateInsecureSpdySession(); | 3938 CreateInsecureSpdySession(); |
| 3909 | 3939 |
| 3910 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( | 3940 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( |
| 3911 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, LOWEST, BoundNetLog()); | 3941 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, LOWEST, BoundNetLog()); |
| 3912 test::StreamDelegateDoNothing delegate(spdy_stream); | 3942 test::StreamDelegateDoNothing delegate(spdy_stream); |
| 3913 spdy_stream->SetDelegate(&delegate); | 3943 spdy_stream->SetDelegate(&delegate); |
| 3914 | 3944 |
| 3915 std::unique_ptr<SpdyHeaderBlock> headers( | 3945 std::unique_ptr<SpdyHeaderBlock> headers( |
| 3916 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 3946 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 3917 EXPECT_EQ(ERR_IO_PENDING, spdy_stream->SendRequestHeaders( | 3947 EXPECT_EQ(ERR_IO_PENDING, spdy_stream->SendRequestHeaders( |
| 3918 std::move(headers), NO_MORE_DATA_TO_SEND)); | 3948 std::move(headers), NO_MORE_DATA_TO_SEND)); |
| 3919 | 3949 |
| 3920 // Request and response. | 3950 // Request and response. |
| 3921 base::RunLoop().RunUntilIdle(); | 3951 base::RunLoop().RunUntilIdle(); |
| 3922 EXPECT_TRUE(spdy_stream->IsLocallyClosed()); | 3952 EXPECT_TRUE(spdy_stream->IsLocallyClosed()); |
| 3923 EXPECT_EQ(stream_max_recv_window_size, spdy_stream->recv_window_size()); | 3953 EXPECT_EQ(stream_max_recv_window_size, spdy_stream->recv_window_size()); |
| 3924 | 3954 |
| 3925 // First data frame. | 3955 // First data frame. |
| 3926 data.Resume(); | 3956 data.Resume(); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3960 }; | 3990 }; |
| 3961 | 3991 |
| 3962 // Send data back and forth but use a delegate that drops its received | 3992 // Send data back and forth but use a delegate that drops its received |
| 3963 // data. The receive window should still increase to its original | 3993 // data. The receive window should still increase to its original |
| 3964 // value, i.e. we shouldn't "leak" receive window bytes. | 3994 // value, i.e. we shouldn't "leak" receive window bytes. |
| 3965 TEST_P(SpdySessionTest, SessionFlowControlNoReceiveLeaks) { | 3995 TEST_P(SpdySessionTest, SessionFlowControlNoReceiveLeaks) { |
| 3966 const int32_t kMsgDataSize = 100; | 3996 const int32_t kMsgDataSize = 100; |
| 3967 const std::string msg_data(kMsgDataSize, 'a'); | 3997 const std::string msg_data(kMsgDataSize, 'a'); |
| 3968 | 3998 |
| 3969 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( | 3999 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( |
| 3970 kDefaultURL, 1, kMsgDataSize, MEDIUM, nullptr, 0)); | 4000 kDefaultUrl, 1, kMsgDataSize, MEDIUM, nullptr, 0)); |
| 3971 std::unique_ptr<SpdySerializedFrame> msg(spdy_util_.ConstructSpdyBodyFrame( | 4001 std::unique_ptr<SpdySerializedFrame> msg(spdy_util_.ConstructSpdyBodyFrame( |
| 3972 1, msg_data.data(), kMsgDataSize, false)); | 4002 1, msg_data.data(), kMsgDataSize, false)); |
| 3973 MockWrite writes[] = { | 4003 MockWrite writes[] = { |
| 3974 CreateMockWrite(*req, 0), | 4004 CreateMockWrite(*req, 0), |
| 3975 CreateMockWrite(*msg, 2), | 4005 CreateMockWrite(*msg, 2), |
| 3976 }; | 4006 }; |
| 3977 | 4007 |
| 3978 std::unique_ptr<SpdySerializedFrame> resp( | 4008 std::unique_ptr<SpdySerializedFrame> resp( |
| 3979 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); | 4009 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); |
| 3980 std::unique_ptr<SpdySerializedFrame> echo(spdy_util_.ConstructSpdyBodyFrame( | 4010 std::unique_ptr<SpdySerializedFrame> echo(spdy_util_.ConstructSpdyBodyFrame( |
| (...skipping 18 matching lines...) Expand all Loading... |
| 3999 | 4029 |
| 4000 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously( | 4030 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously( |
| 4001 SPDY_BIDIRECTIONAL_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); | 4031 SPDY_BIDIRECTIONAL_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); |
| 4002 ASSERT_TRUE(stream); | 4032 ASSERT_TRUE(stream); |
| 4003 EXPECT_EQ(0u, stream->stream_id()); | 4033 EXPECT_EQ(0u, stream->stream_id()); |
| 4004 | 4034 |
| 4005 DropReceivedDataDelegate delegate(stream, msg_data); | 4035 DropReceivedDataDelegate delegate(stream, msg_data); |
| 4006 stream->SetDelegate(&delegate); | 4036 stream->SetDelegate(&delegate); |
| 4007 | 4037 |
| 4008 std::unique_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock( | 4038 std::unique_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock( |
| 4009 spdy_util_.ConstructPostHeaderBlock(kDefaultURL, kMsgDataSize))); | 4039 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kMsgDataSize))); |
| 4010 EXPECT_EQ(ERR_IO_PENDING, | 4040 EXPECT_EQ(ERR_IO_PENDING, |
| 4011 stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND)); | 4041 stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND)); |
| 4012 EXPECT_TRUE(stream->HasUrlFromHeaders()); | 4042 EXPECT_TRUE(stream->HasUrlFromHeaders()); |
| 4013 | 4043 |
| 4014 const int32_t initial_window_size = | 4044 const int32_t initial_window_size = |
| 4015 SpdySession::GetDefaultInitialWindowSize(GetProtocol()); | 4045 SpdySession::GetDefaultInitialWindowSize(GetProtocol()); |
| 4016 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_); | 4046 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_); |
| 4017 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_); | 4047 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_); |
| 4018 | 4048 |
| 4019 base::RunLoop().RunUntilIdle(); | 4049 base::RunLoop().RunUntilIdle(); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 4035 } | 4065 } |
| 4036 | 4066 |
| 4037 // Send data back and forth but close the stream before its data frame | 4067 // Send data back and forth but close the stream before its data frame |
| 4038 // can be written to the socket. The send window should then increase | 4068 // can be written to the socket. The send window should then increase |
| 4039 // to its original value, i.e. we shouldn't "leak" send window bytes. | 4069 // to its original value, i.e. we shouldn't "leak" send window bytes. |
| 4040 TEST_P(SpdySessionTest, SessionFlowControlNoSendLeaks) { | 4070 TEST_P(SpdySessionTest, SessionFlowControlNoSendLeaks) { |
| 4041 const int32_t kMsgDataSize = 100; | 4071 const int32_t kMsgDataSize = 100; |
| 4042 const std::string msg_data(kMsgDataSize, 'a'); | 4072 const std::string msg_data(kMsgDataSize, 'a'); |
| 4043 | 4073 |
| 4044 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( | 4074 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( |
| 4045 kDefaultURL, 1, kMsgDataSize, MEDIUM, nullptr, 0)); | 4075 kDefaultUrl, 1, kMsgDataSize, MEDIUM, nullptr, 0)); |
| 4046 MockWrite writes[] = { | 4076 MockWrite writes[] = { |
| 4047 CreateMockWrite(*req, 0), | 4077 CreateMockWrite(*req, 0), |
| 4048 }; | 4078 }; |
| 4049 | 4079 |
| 4050 std::unique_ptr<SpdySerializedFrame> resp( | 4080 std::unique_ptr<SpdySerializedFrame> resp( |
| 4051 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); | 4081 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); |
| 4052 MockRead reads[] = { | 4082 MockRead reads[] = { |
| 4053 MockRead(ASYNC, ERR_IO_PENDING, 1), | 4083 MockRead(ASYNC, ERR_IO_PENDING, 1), |
| 4054 CreateMockRead(*resp, 2), | 4084 CreateMockRead(*resp, 2), |
| 4055 MockRead(ASYNC, 0, 3) // EOF | 4085 MockRead(ASYNC, 0, 3) // EOF |
| 4056 }; | 4086 }; |
| 4057 | 4087 |
| 4058 // Create SpdySession and SpdyStream and send the request. | 4088 // Create SpdySession and SpdyStream and send the request. |
| 4059 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 4089 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| 4060 session_deps_.host_resolver->set_synchronous_mode(true); | 4090 session_deps_.host_resolver->set_synchronous_mode(true); |
| 4061 session_deps_.socket_factory->AddSocketDataProvider(&data); | 4091 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 4062 | 4092 |
| 4063 CreateNetworkSession(); | 4093 CreateNetworkSession(); |
| 4064 CreateInsecureSpdySession(); | 4094 CreateInsecureSpdySession(); |
| 4065 | 4095 |
| 4066 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously( | 4096 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously( |
| 4067 SPDY_BIDIRECTIONAL_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); | 4097 SPDY_BIDIRECTIONAL_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); |
| 4068 ASSERT_TRUE(stream); | 4098 ASSERT_TRUE(stream); |
| 4069 EXPECT_EQ(0u, stream->stream_id()); | 4099 EXPECT_EQ(0u, stream->stream_id()); |
| 4070 | 4100 |
| 4071 test::StreamDelegateSendImmediate delegate(stream, msg_data); | 4101 test::StreamDelegateSendImmediate delegate(stream, msg_data); |
| 4072 stream->SetDelegate(&delegate); | 4102 stream->SetDelegate(&delegate); |
| 4073 | 4103 |
| 4074 std::unique_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock( | 4104 std::unique_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock( |
| 4075 spdy_util_.ConstructPostHeaderBlock(kDefaultURL, kMsgDataSize))); | 4105 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kMsgDataSize))); |
| 4076 EXPECT_EQ(ERR_IO_PENDING, | 4106 EXPECT_EQ(ERR_IO_PENDING, |
| 4077 stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND)); | 4107 stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND)); |
| 4078 EXPECT_TRUE(stream->HasUrlFromHeaders()); | 4108 EXPECT_TRUE(stream->HasUrlFromHeaders()); |
| 4079 | 4109 |
| 4080 const int32_t initial_window_size = | 4110 const int32_t initial_window_size = |
| 4081 SpdySession::GetDefaultInitialWindowSize(GetProtocol()); | 4111 SpdySession::GetDefaultInitialWindowSize(GetProtocol()); |
| 4082 EXPECT_EQ(initial_window_size, session_->session_send_window_size_); | 4112 EXPECT_EQ(initial_window_size, session_->session_send_window_size_); |
| 4083 | 4113 |
| 4084 // Write request. | 4114 // Write request. |
| 4085 base::RunLoop().RunUntilIdle(); | 4115 base::RunLoop().RunUntilIdle(); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 4108 EXPECT_TRUE(data.AllReadDataConsumed()); | 4138 EXPECT_TRUE(data.AllReadDataConsumed()); |
| 4109 } | 4139 } |
| 4110 | 4140 |
| 4111 // Send data back and forth; the send and receive windows should | 4141 // Send data back and forth; the send and receive windows should |
| 4112 // change appropriately. | 4142 // change appropriately. |
| 4113 TEST_P(SpdySessionTest, SessionFlowControlEndToEnd) { | 4143 TEST_P(SpdySessionTest, SessionFlowControlEndToEnd) { |
| 4114 const int32_t kMsgDataSize = 100; | 4144 const int32_t kMsgDataSize = 100; |
| 4115 const std::string msg_data(kMsgDataSize, 'a'); | 4145 const std::string msg_data(kMsgDataSize, 'a'); |
| 4116 | 4146 |
| 4117 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( | 4147 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( |
| 4118 kDefaultURL, 1, kMsgDataSize, MEDIUM, nullptr, 0)); | 4148 kDefaultUrl, 1, kMsgDataSize, MEDIUM, nullptr, 0)); |
| 4119 std::unique_ptr<SpdySerializedFrame> msg(spdy_util_.ConstructSpdyBodyFrame( | 4149 std::unique_ptr<SpdySerializedFrame> msg(spdy_util_.ConstructSpdyBodyFrame( |
| 4120 1, msg_data.data(), kMsgDataSize, false)); | 4150 1, msg_data.data(), kMsgDataSize, false)); |
| 4121 MockWrite writes[] = { | 4151 MockWrite writes[] = { |
| 4122 CreateMockWrite(*req, 0), | 4152 CreateMockWrite(*req, 0), |
| 4123 CreateMockWrite(*msg, 2), | 4153 CreateMockWrite(*msg, 2), |
| 4124 }; | 4154 }; |
| 4125 | 4155 |
| 4126 std::unique_ptr<SpdySerializedFrame> resp( | 4156 std::unique_ptr<SpdySerializedFrame> resp( |
| 4127 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); | 4157 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); |
| 4128 std::unique_ptr<SpdySerializedFrame> echo(spdy_util_.ConstructSpdyBodyFrame( | 4158 std::unique_ptr<SpdySerializedFrame> echo(spdy_util_.ConstructSpdyBodyFrame( |
| (...skipping 21 matching lines...) Expand all Loading... |
| 4150 | 4180 |
| 4151 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously( | 4181 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously( |
| 4152 SPDY_BIDIRECTIONAL_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); | 4182 SPDY_BIDIRECTIONAL_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); |
| 4153 ASSERT_TRUE(stream); | 4183 ASSERT_TRUE(stream); |
| 4154 EXPECT_EQ(0u, stream->stream_id()); | 4184 EXPECT_EQ(0u, stream->stream_id()); |
| 4155 | 4185 |
| 4156 test::StreamDelegateSendImmediate delegate(stream, msg_data); | 4186 test::StreamDelegateSendImmediate delegate(stream, msg_data); |
| 4157 stream->SetDelegate(&delegate); | 4187 stream->SetDelegate(&delegate); |
| 4158 | 4188 |
| 4159 std::unique_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock( | 4189 std::unique_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock( |
| 4160 spdy_util_.ConstructPostHeaderBlock(kDefaultURL, kMsgDataSize))); | 4190 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kMsgDataSize))); |
| 4161 EXPECT_EQ(ERR_IO_PENDING, | 4191 EXPECT_EQ(ERR_IO_PENDING, |
| 4162 stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND)); | 4192 stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND)); |
| 4163 EXPECT_TRUE(stream->HasUrlFromHeaders()); | 4193 EXPECT_TRUE(stream->HasUrlFromHeaders()); |
| 4164 | 4194 |
| 4165 const int32_t initial_window_size = | 4195 const int32_t initial_window_size = |
| 4166 SpdySession::GetDefaultInitialWindowSize(GetProtocol()); | 4196 SpdySession::GetDefaultInitialWindowSize(GetProtocol()); |
| 4167 EXPECT_EQ(initial_window_size, session_->session_send_window_size_); | 4197 EXPECT_EQ(initial_window_size, session_->session_send_window_size_); |
| 4168 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_); | 4198 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_); |
| 4169 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_); | 4199 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_); |
| 4170 | 4200 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4218 } | 4248 } |
| 4219 | 4249 |
| 4220 // Given a stall function and an unstall function, runs a test to make | 4250 // Given a stall function and an unstall function, runs a test to make |
| 4221 // sure that a stream resumes after unstall. | 4251 // sure that a stream resumes after unstall. |
| 4222 void SpdySessionTest::RunResumeAfterUnstallTest( | 4252 void SpdySessionTest::RunResumeAfterUnstallTest( |
| 4223 const base::Callback<void(SpdyStream*)>& stall_function, | 4253 const base::Callback<void(SpdyStream*)>& stall_function, |
| 4224 const base::Callback<void(SpdyStream*, int32_t)>& unstall_function) { | 4254 const base::Callback<void(SpdyStream*, int32_t)>& unstall_function) { |
| 4225 session_deps_.host_resolver->set_synchronous_mode(true); | 4255 session_deps_.host_resolver->set_synchronous_mode(true); |
| 4226 | 4256 |
| 4227 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( | 4257 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( |
| 4228 kDefaultURL, 1, kBodyDataSize, LOWEST, nullptr, 0)); | 4258 kDefaultUrl, 1, kBodyDataSize, LOWEST, nullptr, 0)); |
| 4229 std::unique_ptr<SpdySerializedFrame> body( | 4259 std::unique_ptr<SpdySerializedFrame> body( |
| 4230 spdy_util_.ConstructSpdyBodyFrame(1, kBodyData, kBodyDataSize, true)); | 4260 spdy_util_.ConstructSpdyBodyFrame(1, kBodyData, kBodyDataSize, true)); |
| 4231 MockWrite writes[] = { | 4261 MockWrite writes[] = { |
| 4232 CreateMockWrite(*req, 0), | 4262 CreateMockWrite(*req, 0), |
| 4233 CreateMockWrite(*body, 1), | 4263 CreateMockWrite(*body, 1), |
| 4234 }; | 4264 }; |
| 4235 | 4265 |
| 4236 std::unique_ptr<SpdySerializedFrame> resp( | 4266 std::unique_ptr<SpdySerializedFrame> resp( |
| 4237 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); | 4267 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); |
| 4238 std::unique_ptr<SpdySerializedFrame> echo( | 4268 std::unique_ptr<SpdySerializedFrame> echo( |
| (...skipping 12 matching lines...) Expand all Loading... |
| 4251 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, LOWEST, BoundNetLog()); | 4281 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, LOWEST, BoundNetLog()); |
| 4252 ASSERT_TRUE(stream); | 4282 ASSERT_TRUE(stream); |
| 4253 | 4283 |
| 4254 test::StreamDelegateWithBody delegate(stream, kBodyDataStringPiece); | 4284 test::StreamDelegateWithBody delegate(stream, kBodyDataStringPiece); |
| 4255 stream->SetDelegate(&delegate); | 4285 stream->SetDelegate(&delegate); |
| 4256 | 4286 |
| 4257 EXPECT_FALSE(stream->HasUrlFromHeaders()); | 4287 EXPECT_FALSE(stream->HasUrlFromHeaders()); |
| 4258 EXPECT_FALSE(stream->send_stalled_by_flow_control()); | 4288 EXPECT_FALSE(stream->send_stalled_by_flow_control()); |
| 4259 | 4289 |
| 4260 std::unique_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock( | 4290 std::unique_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock( |
| 4261 spdy_util_.ConstructPostHeaderBlock(kDefaultURL, kBodyDataSize))); | 4291 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kBodyDataSize))); |
| 4262 EXPECT_EQ(ERR_IO_PENDING, | 4292 EXPECT_EQ(ERR_IO_PENDING, |
| 4263 stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND)); | 4293 stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND)); |
| 4264 EXPECT_TRUE(stream->HasUrlFromHeaders()); | 4294 EXPECT_TRUE(stream->HasUrlFromHeaders()); |
| 4265 EXPECT_EQ(kDefaultURL, stream->GetUrlFromHeaders().spec()); | 4295 EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec()); |
| 4266 | 4296 |
| 4267 stall_function.Run(stream.get()); | 4297 stall_function.Run(stream.get()); |
| 4268 | 4298 |
| 4269 base::RunLoop().RunUntilIdle(); | 4299 base::RunLoop().RunUntilIdle(); |
| 4270 | 4300 |
| 4271 EXPECT_TRUE(stream->send_stalled_by_flow_control()); | 4301 EXPECT_TRUE(stream->send_stalled_by_flow_control()); |
| 4272 | 4302 |
| 4273 unstall_function.Run(stream.get(), kBodyDataSize); | 4303 unstall_function.Run(stream.get(), kBodyDataSize); |
| 4274 | 4304 |
| 4275 EXPECT_FALSE(stream->send_stalled_by_flow_control()); | 4305 EXPECT_FALSE(stream->send_stalled_by_flow_control()); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4336 base::Unretained(this))); | 4366 base::Unretained(this))); |
| 4337 } | 4367 } |
| 4338 | 4368 |
| 4339 // Cause a stall by reducing the flow control send window to 0. The | 4369 // Cause a stall by reducing the flow control send window to 0. The |
| 4340 // streams should resume in priority order when that window is then | 4370 // streams should resume in priority order when that window is then |
| 4341 // increased. | 4371 // increased. |
| 4342 TEST_P(SpdySessionTest, ResumeByPriorityAfterSendWindowSizeIncrease) { | 4372 TEST_P(SpdySessionTest, ResumeByPriorityAfterSendWindowSizeIncrease) { |
| 4343 session_deps_.host_resolver->set_synchronous_mode(true); | 4373 session_deps_.host_resolver->set_synchronous_mode(true); |
| 4344 | 4374 |
| 4345 std::unique_ptr<SpdySerializedFrame> req1(spdy_util_.ConstructSpdyPost( | 4375 std::unique_ptr<SpdySerializedFrame> req1(spdy_util_.ConstructSpdyPost( |
| 4346 kDefaultURL, 1, kBodyDataSize, LOWEST, nullptr, 0)); | 4376 kDefaultUrl, 1, kBodyDataSize, LOWEST, nullptr, 0)); |
| 4347 std::unique_ptr<SpdySerializedFrame> req2(spdy_util_.ConstructSpdyPost( | 4377 std::unique_ptr<SpdySerializedFrame> req2(spdy_util_.ConstructSpdyPost( |
| 4348 kDefaultURL, 3, kBodyDataSize, MEDIUM, nullptr, 0)); | 4378 kDefaultUrl, 3, kBodyDataSize, MEDIUM, nullptr, 0)); |
| 4349 std::unique_ptr<SpdySerializedFrame> body1( | 4379 std::unique_ptr<SpdySerializedFrame> body1( |
| 4350 spdy_util_.ConstructSpdyBodyFrame(1, kBodyData, kBodyDataSize, true)); | 4380 spdy_util_.ConstructSpdyBodyFrame(1, kBodyData, kBodyDataSize, true)); |
| 4351 std::unique_ptr<SpdySerializedFrame> body2( | 4381 std::unique_ptr<SpdySerializedFrame> body2( |
| 4352 spdy_util_.ConstructSpdyBodyFrame(3, kBodyData, kBodyDataSize, true)); | 4382 spdy_util_.ConstructSpdyBodyFrame(3, kBodyData, kBodyDataSize, true)); |
| 4353 MockWrite writes[] = { | 4383 MockWrite writes[] = { |
| 4354 CreateMockWrite(*req1, 0), | 4384 CreateMockWrite(*req1, 0), |
| 4355 CreateMockWrite(*req2, 1), | 4385 CreateMockWrite(*req2, 1), |
| 4356 CreateMockWrite(*body2, 2), | 4386 CreateMockWrite(*body2, 2), |
| 4357 CreateMockWrite(*body1, 3), | 4387 CreateMockWrite(*body1, 3), |
| 4358 }; | 4388 }; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4390 stream2->SetDelegate(&delegate2); | 4420 stream2->SetDelegate(&delegate2); |
| 4391 | 4421 |
| 4392 EXPECT_FALSE(stream2->HasUrlFromHeaders()); | 4422 EXPECT_FALSE(stream2->HasUrlFromHeaders()); |
| 4393 | 4423 |
| 4394 EXPECT_FALSE(stream1->send_stalled_by_flow_control()); | 4424 EXPECT_FALSE(stream1->send_stalled_by_flow_control()); |
| 4395 EXPECT_FALSE(stream2->send_stalled_by_flow_control()); | 4425 EXPECT_FALSE(stream2->send_stalled_by_flow_control()); |
| 4396 | 4426 |
| 4397 StallSessionSend(); | 4427 StallSessionSend(); |
| 4398 | 4428 |
| 4399 std::unique_ptr<SpdyHeaderBlock> headers1(new SpdyHeaderBlock( | 4429 std::unique_ptr<SpdyHeaderBlock> headers1(new SpdyHeaderBlock( |
| 4400 spdy_util_.ConstructPostHeaderBlock(kDefaultURL, kBodyDataSize))); | 4430 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kBodyDataSize))); |
| 4401 EXPECT_EQ(ERR_IO_PENDING, stream1->SendRequestHeaders(std::move(headers1), | 4431 EXPECT_EQ(ERR_IO_PENDING, stream1->SendRequestHeaders(std::move(headers1), |
| 4402 MORE_DATA_TO_SEND)); | 4432 MORE_DATA_TO_SEND)); |
| 4403 EXPECT_TRUE(stream1->HasUrlFromHeaders()); | 4433 EXPECT_TRUE(stream1->HasUrlFromHeaders()); |
| 4404 EXPECT_EQ(kDefaultURL, stream1->GetUrlFromHeaders().spec()); | 4434 EXPECT_EQ(kDefaultUrl, stream1->GetUrlFromHeaders().spec()); |
| 4405 | 4435 |
| 4406 base::RunLoop().RunUntilIdle(); | 4436 base::RunLoop().RunUntilIdle(); |
| 4407 EXPECT_EQ(1u, stream1->stream_id()); | 4437 EXPECT_EQ(1u, stream1->stream_id()); |
| 4408 EXPECT_TRUE(stream1->send_stalled_by_flow_control()); | 4438 EXPECT_TRUE(stream1->send_stalled_by_flow_control()); |
| 4409 | 4439 |
| 4410 std::unique_ptr<SpdyHeaderBlock> headers2(new SpdyHeaderBlock( | 4440 std::unique_ptr<SpdyHeaderBlock> headers2(new SpdyHeaderBlock( |
| 4411 spdy_util_.ConstructPostHeaderBlock(kDefaultURL, kBodyDataSize))); | 4441 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kBodyDataSize))); |
| 4412 EXPECT_EQ(ERR_IO_PENDING, stream2->SendRequestHeaders(std::move(headers2), | 4442 EXPECT_EQ(ERR_IO_PENDING, stream2->SendRequestHeaders(std::move(headers2), |
| 4413 MORE_DATA_TO_SEND)); | 4443 MORE_DATA_TO_SEND)); |
| 4414 EXPECT_TRUE(stream2->HasUrlFromHeaders()); | 4444 EXPECT_TRUE(stream2->HasUrlFromHeaders()); |
| 4415 EXPECT_EQ(kDefaultURL, stream2->GetUrlFromHeaders().spec()); | 4445 EXPECT_EQ(kDefaultUrl, stream2->GetUrlFromHeaders().spec()); |
| 4416 | 4446 |
| 4417 base::RunLoop().RunUntilIdle(); | 4447 base::RunLoop().RunUntilIdle(); |
| 4418 EXPECT_EQ(3u, stream2->stream_id()); | 4448 EXPECT_EQ(3u, stream2->stream_id()); |
| 4419 EXPECT_TRUE(stream2->send_stalled_by_flow_control()); | 4449 EXPECT_TRUE(stream2->send_stalled_by_flow_control()); |
| 4420 | 4450 |
| 4421 // This should unstall only stream2. | 4451 // This should unstall only stream2. |
| 4422 UnstallSessionSend(kBodyDataSize); | 4452 UnstallSessionSend(kBodyDataSize); |
| 4423 | 4453 |
| 4424 EXPECT_TRUE(stream1->send_stalled_by_flow_control()); | 4454 EXPECT_TRUE(stream1->send_stalled_by_flow_control()); |
| 4425 EXPECT_FALSE(stream2->send_stalled_by_flow_control()); | 4455 EXPECT_FALSE(stream2->send_stalled_by_flow_control()); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4477 private: | 4507 private: |
| 4478 base::WeakPtr<SpdyStream> stream_to_close_; | 4508 base::WeakPtr<SpdyStream> stream_to_close_; |
| 4479 }; | 4509 }; |
| 4480 | 4510 |
| 4481 // Cause a stall by reducing the flow control send window to | 4511 // Cause a stall by reducing the flow control send window to |
| 4482 // 0. Unstalling the session should properly handle deleted streams. | 4512 // 0. Unstalling the session should properly handle deleted streams. |
| 4483 TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedStreams) { | 4513 TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedStreams) { |
| 4484 session_deps_.host_resolver->set_synchronous_mode(true); | 4514 session_deps_.host_resolver->set_synchronous_mode(true); |
| 4485 | 4515 |
| 4486 std::unique_ptr<SpdySerializedFrame> req1(spdy_util_.ConstructSpdyPost( | 4516 std::unique_ptr<SpdySerializedFrame> req1(spdy_util_.ConstructSpdyPost( |
| 4487 kDefaultURL, 1, kBodyDataSize, LOWEST, nullptr, 0)); | 4517 kDefaultUrl, 1, kBodyDataSize, LOWEST, nullptr, 0)); |
| 4488 std::unique_ptr<SpdySerializedFrame> req2(spdy_util_.ConstructSpdyPost( | 4518 std::unique_ptr<SpdySerializedFrame> req2(spdy_util_.ConstructSpdyPost( |
| 4489 kDefaultURL, 3, kBodyDataSize, LOWEST, nullptr, 0)); | 4519 kDefaultUrl, 3, kBodyDataSize, LOWEST, nullptr, 0)); |
| 4490 std::unique_ptr<SpdySerializedFrame> req3(spdy_util_.ConstructSpdyPost( | 4520 std::unique_ptr<SpdySerializedFrame> req3(spdy_util_.ConstructSpdyPost( |
| 4491 kDefaultURL, 5, kBodyDataSize, LOWEST, nullptr, 0)); | 4521 kDefaultUrl, 5, kBodyDataSize, LOWEST, nullptr, 0)); |
| 4492 std::unique_ptr<SpdySerializedFrame> body2( | 4522 std::unique_ptr<SpdySerializedFrame> body2( |
| 4493 spdy_util_.ConstructSpdyBodyFrame(3, kBodyData, kBodyDataSize, true)); | 4523 spdy_util_.ConstructSpdyBodyFrame(3, kBodyData, kBodyDataSize, true)); |
| 4494 MockWrite writes[] = { | 4524 MockWrite writes[] = { |
| 4495 CreateMockWrite(*req1, 0), | 4525 CreateMockWrite(*req1, 0), |
| 4496 CreateMockWrite(*req2, 1), | 4526 CreateMockWrite(*req2, 1), |
| 4497 CreateMockWrite(*req3, 2), | 4527 CreateMockWrite(*req3, 2), |
| 4498 CreateMockWrite(*body2, 3), | 4528 CreateMockWrite(*body2, 3), |
| 4499 }; | 4529 }; |
| 4500 | 4530 |
| 4501 std::unique_ptr<SpdySerializedFrame> resp2( | 4531 std::unique_ptr<SpdySerializedFrame> resp2( |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4539 | 4569 |
| 4540 EXPECT_FALSE(stream3->HasUrlFromHeaders()); | 4570 EXPECT_FALSE(stream3->HasUrlFromHeaders()); |
| 4541 | 4571 |
| 4542 EXPECT_FALSE(stream1->send_stalled_by_flow_control()); | 4572 EXPECT_FALSE(stream1->send_stalled_by_flow_control()); |
| 4543 EXPECT_FALSE(stream2->send_stalled_by_flow_control()); | 4573 EXPECT_FALSE(stream2->send_stalled_by_flow_control()); |
| 4544 EXPECT_FALSE(stream3->send_stalled_by_flow_control()); | 4574 EXPECT_FALSE(stream3->send_stalled_by_flow_control()); |
| 4545 | 4575 |
| 4546 StallSessionSend(); | 4576 StallSessionSend(); |
| 4547 | 4577 |
| 4548 std::unique_ptr<SpdyHeaderBlock> headers1(new SpdyHeaderBlock( | 4578 std::unique_ptr<SpdyHeaderBlock> headers1(new SpdyHeaderBlock( |
| 4549 spdy_util_.ConstructPostHeaderBlock(kDefaultURL, kBodyDataSize))); | 4579 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kBodyDataSize))); |
| 4550 EXPECT_EQ(ERR_IO_PENDING, stream1->SendRequestHeaders(std::move(headers1), | 4580 EXPECT_EQ(ERR_IO_PENDING, stream1->SendRequestHeaders(std::move(headers1), |
| 4551 MORE_DATA_TO_SEND)); | 4581 MORE_DATA_TO_SEND)); |
| 4552 EXPECT_TRUE(stream1->HasUrlFromHeaders()); | 4582 EXPECT_TRUE(stream1->HasUrlFromHeaders()); |
| 4553 EXPECT_EQ(kDefaultURL, stream1->GetUrlFromHeaders().spec()); | 4583 EXPECT_EQ(kDefaultUrl, stream1->GetUrlFromHeaders().spec()); |
| 4554 | 4584 |
| 4555 base::RunLoop().RunUntilIdle(); | 4585 base::RunLoop().RunUntilIdle(); |
| 4556 EXPECT_EQ(1u, stream1->stream_id()); | 4586 EXPECT_EQ(1u, stream1->stream_id()); |
| 4557 EXPECT_TRUE(stream1->send_stalled_by_flow_control()); | 4587 EXPECT_TRUE(stream1->send_stalled_by_flow_control()); |
| 4558 | 4588 |
| 4559 std::unique_ptr<SpdyHeaderBlock> headers2(new SpdyHeaderBlock( | 4589 std::unique_ptr<SpdyHeaderBlock> headers2(new SpdyHeaderBlock( |
| 4560 spdy_util_.ConstructPostHeaderBlock(kDefaultURL, kBodyDataSize))); | 4590 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kBodyDataSize))); |
| 4561 EXPECT_EQ(ERR_IO_PENDING, stream2->SendRequestHeaders(std::move(headers2), | 4591 EXPECT_EQ(ERR_IO_PENDING, stream2->SendRequestHeaders(std::move(headers2), |
| 4562 MORE_DATA_TO_SEND)); | 4592 MORE_DATA_TO_SEND)); |
| 4563 EXPECT_TRUE(stream2->HasUrlFromHeaders()); | 4593 EXPECT_TRUE(stream2->HasUrlFromHeaders()); |
| 4564 EXPECT_EQ(kDefaultURL, stream2->GetUrlFromHeaders().spec()); | 4594 EXPECT_EQ(kDefaultUrl, stream2->GetUrlFromHeaders().spec()); |
| 4565 | 4595 |
| 4566 base::RunLoop().RunUntilIdle(); | 4596 base::RunLoop().RunUntilIdle(); |
| 4567 EXPECT_EQ(3u, stream2->stream_id()); | 4597 EXPECT_EQ(3u, stream2->stream_id()); |
| 4568 EXPECT_TRUE(stream2->send_stalled_by_flow_control()); | 4598 EXPECT_TRUE(stream2->send_stalled_by_flow_control()); |
| 4569 | 4599 |
| 4570 std::unique_ptr<SpdyHeaderBlock> headers3(new SpdyHeaderBlock( | 4600 std::unique_ptr<SpdyHeaderBlock> headers3(new SpdyHeaderBlock( |
| 4571 spdy_util_.ConstructPostHeaderBlock(kDefaultURL, kBodyDataSize))); | 4601 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kBodyDataSize))); |
| 4572 EXPECT_EQ(ERR_IO_PENDING, stream3->SendRequestHeaders(std::move(headers3), | 4602 EXPECT_EQ(ERR_IO_PENDING, stream3->SendRequestHeaders(std::move(headers3), |
| 4573 MORE_DATA_TO_SEND)); | 4603 MORE_DATA_TO_SEND)); |
| 4574 EXPECT_TRUE(stream3->HasUrlFromHeaders()); | 4604 EXPECT_TRUE(stream3->HasUrlFromHeaders()); |
| 4575 EXPECT_EQ(kDefaultURL, stream3->GetUrlFromHeaders().spec()); | 4605 EXPECT_EQ(kDefaultUrl, stream3->GetUrlFromHeaders().spec()); |
| 4576 | 4606 |
| 4577 base::RunLoop().RunUntilIdle(); | 4607 base::RunLoop().RunUntilIdle(); |
| 4578 EXPECT_EQ(5u, stream3->stream_id()); | 4608 EXPECT_EQ(5u, stream3->stream_id()); |
| 4579 EXPECT_TRUE(stream3->send_stalled_by_flow_control()); | 4609 EXPECT_TRUE(stream3->send_stalled_by_flow_control()); |
| 4580 | 4610 |
| 4581 SpdyStreamId stream_id1 = stream1->stream_id(); | 4611 SpdyStreamId stream_id1 = stream1->stream_id(); |
| 4582 SpdyStreamId stream_id2 = stream2->stream_id(); | 4612 SpdyStreamId stream_id2 = stream2->stream_id(); |
| 4583 SpdyStreamId stream_id3 = stream3->stream_id(); | 4613 SpdyStreamId stream_id3 = stream3->stream_id(); |
| 4584 | 4614 |
| 4585 // Close stream1 preemptively. | 4615 // Close stream1 preemptively. |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4624 EXPECT_TRUE(data.AllWriteDataConsumed()); | 4654 EXPECT_TRUE(data.AllWriteDataConsumed()); |
| 4625 } | 4655 } |
| 4626 | 4656 |
| 4627 // Cause a stall by reducing the flow control send window to | 4657 // Cause a stall by reducing the flow control send window to |
| 4628 // 0. Unstalling the session should properly handle the session itself | 4658 // 0. Unstalling the session should properly handle the session itself |
| 4629 // being closed. | 4659 // being closed. |
| 4630 TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedSession) { | 4660 TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedSession) { |
| 4631 session_deps_.host_resolver->set_synchronous_mode(true); | 4661 session_deps_.host_resolver->set_synchronous_mode(true); |
| 4632 | 4662 |
| 4633 std::unique_ptr<SpdySerializedFrame> req1(spdy_util_.ConstructSpdyPost( | 4663 std::unique_ptr<SpdySerializedFrame> req1(spdy_util_.ConstructSpdyPost( |
| 4634 kDefaultURL, 1, kBodyDataSize, LOWEST, nullptr, 0)); | 4664 kDefaultUrl, 1, kBodyDataSize, LOWEST, nullptr, 0)); |
| 4635 std::unique_ptr<SpdySerializedFrame> req2(spdy_util_.ConstructSpdyPost( | 4665 std::unique_ptr<SpdySerializedFrame> req2(spdy_util_.ConstructSpdyPost( |
| 4636 kDefaultURL, 3, kBodyDataSize, LOWEST, nullptr, 0)); | 4666 kDefaultUrl, 3, kBodyDataSize, LOWEST, nullptr, 0)); |
| 4637 std::unique_ptr<SpdySerializedFrame> body1( | 4667 std::unique_ptr<SpdySerializedFrame> body1( |
| 4638 spdy_util_.ConstructSpdyBodyFrame(1, kBodyData, kBodyDataSize, false)); | 4668 spdy_util_.ConstructSpdyBodyFrame(1, kBodyData, kBodyDataSize, false)); |
| 4639 MockWrite writes[] = { | 4669 MockWrite writes[] = { |
| 4640 CreateMockWrite(*req1, 0), | 4670 CreateMockWrite(*req1, 0), |
| 4641 CreateMockWrite(*req2, 1), | 4671 CreateMockWrite(*req2, 1), |
| 4642 }; | 4672 }; |
| 4643 | 4673 |
| 4644 MockRead reads[] = { | 4674 MockRead reads[] = { |
| 4645 MockRead(ASYNC, ERR_IO_PENDING, 2), MockRead(ASYNC, 0, 3) // EOF | 4675 MockRead(ASYNC, ERR_IO_PENDING, 2), MockRead(ASYNC, 0, 3) // EOF |
| 4646 }; | 4676 }; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 4668 stream2->SetDelegate(&delegate2); | 4698 stream2->SetDelegate(&delegate2); |
| 4669 | 4699 |
| 4670 EXPECT_FALSE(stream2->HasUrlFromHeaders()); | 4700 EXPECT_FALSE(stream2->HasUrlFromHeaders()); |
| 4671 | 4701 |
| 4672 EXPECT_FALSE(stream1->send_stalled_by_flow_control()); | 4702 EXPECT_FALSE(stream1->send_stalled_by_flow_control()); |
| 4673 EXPECT_FALSE(stream2->send_stalled_by_flow_control()); | 4703 EXPECT_FALSE(stream2->send_stalled_by_flow_control()); |
| 4674 | 4704 |
| 4675 StallSessionSend(); | 4705 StallSessionSend(); |
| 4676 | 4706 |
| 4677 std::unique_ptr<SpdyHeaderBlock> headers1(new SpdyHeaderBlock( | 4707 std::unique_ptr<SpdyHeaderBlock> headers1(new SpdyHeaderBlock( |
| 4678 spdy_util_.ConstructPostHeaderBlock(kDefaultURL, kBodyDataSize))); | 4708 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kBodyDataSize))); |
| 4679 EXPECT_EQ(ERR_IO_PENDING, stream1->SendRequestHeaders(std::move(headers1), | 4709 EXPECT_EQ(ERR_IO_PENDING, stream1->SendRequestHeaders(std::move(headers1), |
| 4680 MORE_DATA_TO_SEND)); | 4710 MORE_DATA_TO_SEND)); |
| 4681 EXPECT_TRUE(stream1->HasUrlFromHeaders()); | 4711 EXPECT_TRUE(stream1->HasUrlFromHeaders()); |
| 4682 EXPECT_EQ(kDefaultURL, stream1->GetUrlFromHeaders().spec()); | 4712 EXPECT_EQ(kDefaultUrl, stream1->GetUrlFromHeaders().spec()); |
| 4683 | 4713 |
| 4684 base::RunLoop().RunUntilIdle(); | 4714 base::RunLoop().RunUntilIdle(); |
| 4685 EXPECT_EQ(1u, stream1->stream_id()); | 4715 EXPECT_EQ(1u, stream1->stream_id()); |
| 4686 EXPECT_TRUE(stream1->send_stalled_by_flow_control()); | 4716 EXPECT_TRUE(stream1->send_stalled_by_flow_control()); |
| 4687 | 4717 |
| 4688 std::unique_ptr<SpdyHeaderBlock> headers2(new SpdyHeaderBlock( | 4718 std::unique_ptr<SpdyHeaderBlock> headers2(new SpdyHeaderBlock( |
| 4689 spdy_util_.ConstructPostHeaderBlock(kDefaultURL, kBodyDataSize))); | 4719 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kBodyDataSize))); |
| 4690 EXPECT_EQ(ERR_IO_PENDING, stream2->SendRequestHeaders(std::move(headers2), | 4720 EXPECT_EQ(ERR_IO_PENDING, stream2->SendRequestHeaders(std::move(headers2), |
| 4691 MORE_DATA_TO_SEND)); | 4721 MORE_DATA_TO_SEND)); |
| 4692 EXPECT_TRUE(stream2->HasUrlFromHeaders()); | 4722 EXPECT_TRUE(stream2->HasUrlFromHeaders()); |
| 4693 EXPECT_EQ(kDefaultURL, stream2->GetUrlFromHeaders().spec()); | 4723 EXPECT_EQ(kDefaultUrl, stream2->GetUrlFromHeaders().spec()); |
| 4694 | 4724 |
| 4695 base::RunLoop().RunUntilIdle(); | 4725 base::RunLoop().RunUntilIdle(); |
| 4696 EXPECT_EQ(3u, stream2->stream_id()); | 4726 EXPECT_EQ(3u, stream2->stream_id()); |
| 4697 EXPECT_TRUE(stream2->send_stalled_by_flow_control()); | 4727 EXPECT_TRUE(stream2->send_stalled_by_flow_control()); |
| 4698 | 4728 |
| 4699 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_)); | 4729 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_)); |
| 4700 | 4730 |
| 4701 // Unstall stream1. | 4731 // Unstall stream1. |
| 4702 UnstallSessionSend(kBodyDataSize); | 4732 UnstallSessionSend(kBodyDataSize); |
| 4703 | 4733 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4749 CreateNetworkSession(); | 4779 CreateNetworkSession(); |
| 4750 CreateInsecureSpdySession(); | 4780 CreateInsecureSpdySession(); |
| 4751 | 4781 |
| 4752 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( | 4782 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( |
| 4753 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, LOWEST, BoundNetLog()); | 4783 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, LOWEST, BoundNetLog()); |
| 4754 ASSERT_TRUE(spdy_stream); | 4784 ASSERT_TRUE(spdy_stream); |
| 4755 test::StreamDelegateDoNothing delegate(spdy_stream); | 4785 test::StreamDelegateDoNothing delegate(spdy_stream); |
| 4756 spdy_stream->SetDelegate(&delegate); | 4786 spdy_stream->SetDelegate(&delegate); |
| 4757 | 4787 |
| 4758 std::unique_ptr<SpdyHeaderBlock> headers( | 4788 std::unique_ptr<SpdyHeaderBlock> headers( |
| 4759 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 4789 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 4760 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 4790 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 4761 | 4791 |
| 4762 // Write request. | 4792 // Write request. |
| 4763 base::RunLoop().RunUntilIdle(); | 4793 base::RunLoop().RunUntilIdle(); |
| 4764 | 4794 |
| 4765 // Put session on the edge of overflowing it's recv window. | 4795 // Put session on the edge of overflowing it's recv window. |
| 4766 session_->session_recv_window_size_ = 1; | 4796 session_->session_recv_window_size_ = 1; |
| 4767 | 4797 |
| 4768 // Read response headers & body. Body overflows the session window, and a | 4798 // Read response headers & body. Body overflows the session window, and a |
| 4769 // goaway is written. | 4799 // goaway is written. |
| 4770 data.Resume(); | 4800 data.Resume(); |
| 4771 base::RunLoop().RunUntilIdle(); | 4801 base::RunLoop().RunUntilIdle(); |
| 4772 | 4802 |
| 4773 EXPECT_EQ(ERR_SPDY_FLOW_CONTROL_ERROR, delegate.WaitForClose()); | 4803 EXPECT_EQ(ERR_SPDY_FLOW_CONTROL_ERROR, delegate.WaitForClose()); |
| 4774 EXPECT_FALSE(session_); | 4804 EXPECT_FALSE(session_); |
| 4775 } | 4805 } |
| 4776 | 4806 |
| 4777 TEST_P(SpdySessionTest, SplitHeaders) { | 4807 TEST_P(SpdySessionTest, SplitHeaders) { |
| 4778 GURL kStreamUrl("http://www.example.org/foo.dat"); | 4808 GURL kStreamUrl("https://www.example.org/foo.dat"); |
| 4779 SpdyHeaderBlock headers; | 4809 SpdyHeaderBlock headers; |
| 4780 spdy_util_.AddUrlToHeaderBlock(kStreamUrl.spec(), &headers); | 4810 spdy_util_.AddUrlToHeaderBlock(kStreamUrl.spec(), &headers); |
| 4781 headers["alpha"] = "beta"; | 4811 headers["alpha"] = "beta"; |
| 4782 | 4812 |
| 4783 SpdyHeaderBlock request_headers; | 4813 SpdyHeaderBlock request_headers; |
| 4784 SpdyHeaderBlock response_headers; | 4814 SpdyHeaderBlock response_headers; |
| 4785 | 4815 |
| 4786 SplitPushedHeadersToRequestAndResponse( | 4816 SplitPushedHeadersToRequestAndResponse( |
| 4787 headers, spdy_util_.spdy_version(), &request_headers, &response_headers); | 4817 headers, spdy_util_.spdy_version(), &request_headers, &response_headers); |
| 4788 | 4818 |
| 4789 SpdyHeaderBlock::const_iterator it = response_headers.find("alpha"); | 4819 SpdyHeaderBlock::const_iterator it = response_headers.find("alpha"); |
| 4790 std::string alpha_val = | 4820 std::string alpha_val = |
| 4791 (it == response_headers.end()) ? std::string() : it->second.as_string(); | 4821 (it == response_headers.end()) ? std::string() : it->second.as_string(); |
| 4792 EXPECT_EQ("beta", alpha_val); | 4822 EXPECT_EQ("beta", alpha_val); |
| 4793 | 4823 |
| 4794 GURL request_url = | 4824 GURL request_url = |
| 4795 GetUrlFromHeaderBlock(request_headers, spdy_util_.spdy_version()); | 4825 GetUrlFromHeaderBlock(request_headers, spdy_util_.spdy_version()); |
| 4796 EXPECT_EQ(kStreamUrl, request_url); | 4826 EXPECT_EQ(kStreamUrl, request_url); |
| 4797 } | 4827 } |
| 4798 | 4828 |
| 4799 // Regression. Sorta. Push streams and client streams were sharing a single | 4829 // Regression. Sorta. Push streams and client streams were sharing a single |
| 4800 // limit for a long time. | 4830 // limit for a long time. |
| 4801 TEST_P(SpdySessionTest, PushedStreamShouldNotCountToClientConcurrencyLimit) { | 4831 TEST_P(SpdySessionTest, PushedStreamShouldNotCountToClientConcurrencyLimit) { |
| 4802 SettingsMap new_settings; | 4832 SettingsMap new_settings; |
| 4803 new_settings[SETTINGS_MAX_CONCURRENT_STREAMS] = | 4833 new_settings[SETTINGS_MAX_CONCURRENT_STREAMS] = |
| 4804 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 2); | 4834 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 2); |
| 4805 std::unique_ptr<SpdySerializedFrame> settings_frame( | 4835 std::unique_ptr<SpdySerializedFrame> settings_frame( |
| 4806 spdy_util_.ConstructSpdySettings(new_settings)); | 4836 spdy_util_.ConstructSpdySettings(new_settings)); |
| 4807 std::unique_ptr<SpdySerializedFrame> pushed(spdy_util_.ConstructSpdyPush( | 4837 std::unique_ptr<SpdySerializedFrame> pushed(spdy_util_.ConstructSpdyPush( |
| 4808 nullptr, 0, 2, 1, "http://www.example.org/a.dat")); | 4838 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); |
| 4809 MockRead reads[] = { | 4839 MockRead reads[] = { |
| 4810 CreateMockRead(*settings_frame, 0), | 4840 CreateMockRead(*settings_frame, 0), |
| 4811 MockRead(ASYNC, ERR_IO_PENDING, 3), | 4841 MockRead(ASYNC, ERR_IO_PENDING, 3), |
| 4812 CreateMockRead(*pushed, 4), | 4842 CreateMockRead(*pushed, 4), |
| 4813 MockRead(ASYNC, ERR_IO_PENDING, 5), | 4843 MockRead(ASYNC, ERR_IO_PENDING, 5), |
| 4814 MockRead(ASYNC, 0, 6), | 4844 MockRead(ASYNC, 0, 6), |
| 4815 }; | 4845 }; |
| 4816 | 4846 |
| 4817 std::unique_ptr<SpdySerializedFrame> settings_ack( | 4847 std::unique_ptr<SpdySerializedFrame> settings_ack( |
| 4818 spdy_util_.ConstructSpdySettingsAck()); | 4848 spdy_util_.ConstructSpdySettingsAck()); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 4837 EXPECT_EQ(0u, spdy_stream1->stream_id()); | 4867 EXPECT_EQ(0u, spdy_stream1->stream_id()); |
| 4838 test::StreamDelegateDoNothing delegate1(spdy_stream1); | 4868 test::StreamDelegateDoNothing delegate1(spdy_stream1); |
| 4839 spdy_stream1->SetDelegate(&delegate1); | 4869 spdy_stream1->SetDelegate(&delegate1); |
| 4840 | 4870 |
| 4841 EXPECT_EQ(0u, session_->num_active_streams()); | 4871 EXPECT_EQ(0u, session_->num_active_streams()); |
| 4842 EXPECT_EQ(1u, session_->num_created_streams()); | 4872 EXPECT_EQ(1u, session_->num_created_streams()); |
| 4843 EXPECT_EQ(0u, session_->num_pushed_streams()); | 4873 EXPECT_EQ(0u, session_->num_pushed_streams()); |
| 4844 EXPECT_EQ(0u, session_->num_active_pushed_streams()); | 4874 EXPECT_EQ(0u, session_->num_active_pushed_streams()); |
| 4845 | 4875 |
| 4846 std::unique_ptr<SpdyHeaderBlock> headers( | 4876 std::unique_ptr<SpdyHeaderBlock> headers( |
| 4847 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 4877 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 4848 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 4878 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 4849 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); | 4879 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); |
| 4850 | 4880 |
| 4851 // Run until 1st stream is activated. | 4881 // Run until 1st stream is activated. |
| 4852 EXPECT_EQ(0u, delegate1.stream_id()); | 4882 EXPECT_EQ(0u, delegate1.stream_id()); |
| 4853 base::RunLoop().RunUntilIdle(); | 4883 base::RunLoop().RunUntilIdle(); |
| 4854 EXPECT_EQ(1u, delegate1.stream_id()); | 4884 EXPECT_EQ(1u, delegate1.stream_id()); |
| 4855 EXPECT_EQ(1u, session_->num_active_streams()); | 4885 EXPECT_EQ(1u, session_->num_active_streams()); |
| 4856 EXPECT_EQ(0u, session_->num_created_streams()); | 4886 EXPECT_EQ(0u, session_->num_created_streams()); |
| 4857 EXPECT_EQ(0u, session_->num_pushed_streams()); | 4887 EXPECT_EQ(0u, session_->num_pushed_streams()); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 4877 EXPECT_EQ(1u, session_->num_active_pushed_streams()); | 4907 EXPECT_EQ(1u, session_->num_active_pushed_streams()); |
| 4878 | 4908 |
| 4879 // Read EOF. | 4909 // Read EOF. |
| 4880 data.Resume(); | 4910 data.Resume(); |
| 4881 base::RunLoop().RunUntilIdle(); | 4911 base::RunLoop().RunUntilIdle(); |
| 4882 EXPECT_FALSE(session_); | 4912 EXPECT_FALSE(session_); |
| 4883 } | 4913 } |
| 4884 | 4914 |
| 4885 TEST_P(SpdySessionTest, RejectPushedStreamExceedingConcurrencyLimit) { | 4915 TEST_P(SpdySessionTest, RejectPushedStreamExceedingConcurrencyLimit) { |
| 4886 std::unique_ptr<SpdySerializedFrame> push_a(spdy_util_.ConstructSpdyPush( | 4916 std::unique_ptr<SpdySerializedFrame> push_a(spdy_util_.ConstructSpdyPush( |
| 4887 nullptr, 0, 2, 1, "http://www.example.org/a.dat")); | 4917 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); |
| 4888 std::unique_ptr<SpdySerializedFrame> push_b(spdy_util_.ConstructSpdyPush( | 4918 std::unique_ptr<SpdySerializedFrame> push_b(spdy_util_.ConstructSpdyPush( |
| 4889 nullptr, 0, 4, 1, "http://www.example.org/b.dat")); | 4919 nullptr, 0, 4, 1, "https://www.example.org/b.dat")); |
| 4890 MockRead reads[] = { | 4920 MockRead reads[] = { |
| 4891 MockRead(ASYNC, ERR_IO_PENDING, 1), | 4921 MockRead(ASYNC, ERR_IO_PENDING, 1), |
| 4892 CreateMockRead(*push_a, 2), | 4922 CreateMockRead(*push_a, 2), |
| 4893 MockRead(ASYNC, ERR_IO_PENDING, 3), | 4923 MockRead(ASYNC, ERR_IO_PENDING, 3), |
| 4894 CreateMockRead(*push_b, 4), | 4924 CreateMockRead(*push_b, 4), |
| 4895 MockRead(ASYNC, ERR_IO_PENDING, 6), | 4925 MockRead(ASYNC, ERR_IO_PENDING, 6), |
| 4896 MockRead(ASYNC, 0, 7), | 4926 MockRead(ASYNC, 0, 7), |
| 4897 }; | 4927 }; |
| 4898 | 4928 |
| 4899 std::unique_ptr<SpdySerializedFrame> req( | 4929 std::unique_ptr<SpdySerializedFrame> req( |
| (...skipping 17 matching lines...) Expand all Loading... |
| 4917 EXPECT_EQ(0u, spdy_stream1->stream_id()); | 4947 EXPECT_EQ(0u, spdy_stream1->stream_id()); |
| 4918 test::StreamDelegateDoNothing delegate1(spdy_stream1); | 4948 test::StreamDelegateDoNothing delegate1(spdy_stream1); |
| 4919 spdy_stream1->SetDelegate(&delegate1); | 4949 spdy_stream1->SetDelegate(&delegate1); |
| 4920 | 4950 |
| 4921 EXPECT_EQ(0u, session_->num_active_streams()); | 4951 EXPECT_EQ(0u, session_->num_active_streams()); |
| 4922 EXPECT_EQ(1u, session_->num_created_streams()); | 4952 EXPECT_EQ(1u, session_->num_created_streams()); |
| 4923 EXPECT_EQ(0u, session_->num_pushed_streams()); | 4953 EXPECT_EQ(0u, session_->num_pushed_streams()); |
| 4924 EXPECT_EQ(0u, session_->num_active_pushed_streams()); | 4954 EXPECT_EQ(0u, session_->num_active_pushed_streams()); |
| 4925 | 4955 |
| 4926 std::unique_ptr<SpdyHeaderBlock> headers( | 4956 std::unique_ptr<SpdyHeaderBlock> headers( |
| 4927 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 4957 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 4928 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 4958 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 4929 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); | 4959 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); |
| 4930 | 4960 |
| 4931 // Run until 1st stream is activated. | 4961 // Run until 1st stream is activated. |
| 4932 EXPECT_EQ(0u, delegate1.stream_id()); | 4962 EXPECT_EQ(0u, delegate1.stream_id()); |
| 4933 base::RunLoop().RunUntilIdle(); | 4963 base::RunLoop().RunUntilIdle(); |
| 4934 EXPECT_EQ(1u, delegate1.stream_id()); | 4964 EXPECT_EQ(1u, delegate1.stream_id()); |
| 4935 EXPECT_EQ(1u, session_->num_active_streams()); | 4965 EXPECT_EQ(1u, session_->num_active_streams()); |
| 4936 EXPECT_EQ(0u, session_->num_created_streams()); | 4966 EXPECT_EQ(0u, session_->num_created_streams()); |
| 4937 EXPECT_EQ(0u, session_->num_pushed_streams()); | 4967 EXPECT_EQ(0u, session_->num_pushed_streams()); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 4955 | 4985 |
| 4956 // Read EOF. | 4986 // Read EOF. |
| 4957 data.Resume(); | 4987 data.Resume(); |
| 4958 base::RunLoop().RunUntilIdle(); | 4988 base::RunLoop().RunUntilIdle(); |
| 4959 EXPECT_FALSE(session_); | 4989 EXPECT_FALSE(session_); |
| 4960 } | 4990 } |
| 4961 | 4991 |
| 4962 // Tests that HTTP SPDY push streams that advertise an origin different from the | 4992 // Tests that HTTP SPDY push streams that advertise an origin different from the |
| 4963 // associated stream are accepted from a trusted SPDY proxy. | 4993 // associated stream are accepted from a trusted SPDY proxy. |
| 4964 TEST_P(SpdySessionTest, TrustedSpdyProxy) { | 4994 TEST_P(SpdySessionTest, TrustedSpdyProxy) { |
| 4965 // Origin of kDefaultURL should be different from the origin of | 4995 // Origin of kDefaultUrl should be different from the origin of |
| 4966 // kHttpURLFromAnotherOrigin and kHttpsURLFromAnotherOrigin. | 4996 // kHttpURLFromAnotherOrigin and kHttpsURLFromAnotherOrigin. |
| 4967 ASSERT_NE(GURL(kDefaultURL).host(), GURL(kHttpURLFromAnotherOrigin).host()); | 4997 ASSERT_NE(GURL(kDefaultUrl).host(), GURL(kHttpURLFromAnotherOrigin).host()); |
| 4968 ASSERT_NE(GURL(kDefaultURL).host(), GURL(kHttpsURLFromAnotherOrigin).host()); | 4998 ASSERT_NE(GURL(kDefaultUrl).host(), GURL(kHttpsURLFromAnotherOrigin).host()); |
| 4969 | 4999 |
| 4970 // cross_origin_push contains HTTP resource for an origin different from the | 5000 // cross_origin_push contains HTTP resource for an origin different from the |
| 4971 // origin of kDefaultURL, and should be accepted. | 5001 // origin of kDefaultUrl, and should be accepted. |
| 4972 std::unique_ptr<SpdySerializedFrame> cross_origin_push( | 5002 std::unique_ptr<SpdySerializedFrame> cross_origin_push( |
| 4973 spdy_util_.ConstructSpdyPush(nullptr, 0, 2, 1, | 5003 spdy_util_.ConstructSpdyPush(nullptr, 0, 2, 1, |
| 4974 kHttpURLFromAnotherOrigin)); | 5004 kHttpURLFromAnotherOrigin)); |
| 4975 // cross_origin_https_push contains HTTPS resource, and should be refused. | 5005 // cross_origin_https_push contains HTTPS resource, and should be refused. |
| 4976 std::unique_ptr<SpdySerializedFrame> cross_origin_https_push( | 5006 std::unique_ptr<SpdySerializedFrame> cross_origin_https_push( |
| 4977 spdy_util_.ConstructSpdyPush(nullptr, 0, 4, 1, | 5007 spdy_util_.ConstructSpdyPush(nullptr, 0, 4, 1, |
| 4978 kHttpsURLFromAnotherOrigin)); | 5008 kHttpsURLFromAnotherOrigin)); |
| 4979 MockRead reads[] = { | 5009 MockRead reads[] = { |
| 4980 MockRead(ASYNC, ERR_IO_PENDING, 1), | 5010 MockRead(ASYNC, ERR_IO_PENDING, 1), |
| 4981 CreateMockRead(*cross_origin_push, 2), | 5011 CreateMockRead(*cross_origin_push, 2), |
| (...skipping 10 matching lines...) Expand all Loading... |
| 4992 MockWrite writes[] = { | 5022 MockWrite writes[] = { |
| 4993 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5), | 5023 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5), |
| 4994 }; | 5024 }; |
| 4995 | 5025 |
| 4996 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 5026 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| 4997 session_deps_.socket_factory->AddSocketDataProvider(&data); | 5027 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 4998 | 5028 |
| 4999 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); | 5029 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); |
| 5000 proxy_delegate->set_trusted_spdy_proxy( | 5030 proxy_delegate->set_trusted_spdy_proxy( |
| 5001 net::ProxyServer(net::ProxyServer::SCHEME_HTTPS, | 5031 net::ProxyServer(net::ProxyServer::SCHEME_HTTPS, |
| 5002 HostPortPair(GURL(kDefaultURL).host(), 80))); | 5032 HostPortPair(GURL(kDefaultUrl).host(), 443))); |
| 5003 session_deps_.proxy_delegate.reset(proxy_delegate.release()); | 5033 session_deps_.proxy_delegate.reset(proxy_delegate.release()); |
| 5004 | 5034 |
| 5035 // Load a cert that is valid for: |
| 5036 // www.example.org |
| 5037 // mail.example.org |
| 5038 // mail.example.com |
| 5039 base::FilePath certs_dir = GetTestCertsDirectory(); |
| 5040 scoped_refptr<X509Certificate> test_cert( |
| 5041 ImportCertFromFile(certs_dir, "spdy_pooling.pem")); |
| 5042 ASSERT_NE(static_cast<X509Certificate*>(nullptr), test_cert.get()); |
| 5043 |
| 5044 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); |
| 5045 ssl.cert = test_cert; |
| 5046 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 5047 |
| 5005 CreateNetworkSession(); | 5048 CreateNetworkSession(); |
| 5006 CreateInsecureSpdySession(); | 5049 CreateSecureSpdySession(); |
| 5007 | 5050 |
| 5008 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( | 5051 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( |
| 5009 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, LOWEST, BoundNetLog()); | 5052 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, LOWEST, BoundNetLog()); |
| 5010 ASSERT_TRUE(spdy_stream); | 5053 ASSERT_TRUE(spdy_stream); |
| 5011 EXPECT_EQ(0u, spdy_stream->stream_id()); | 5054 EXPECT_EQ(0u, spdy_stream->stream_id()); |
| 5012 test::StreamDelegateDoNothing delegate(spdy_stream); | 5055 test::StreamDelegateDoNothing delegate(spdy_stream); |
| 5013 spdy_stream->SetDelegate(&delegate); | 5056 spdy_stream->SetDelegate(&delegate); |
| 5014 | 5057 |
| 5015 EXPECT_EQ(0u, session_->num_active_streams()); | 5058 EXPECT_EQ(0u, session_->num_active_streams()); |
| 5016 EXPECT_EQ(1u, session_->num_created_streams()); | 5059 EXPECT_EQ(1u, session_->num_created_streams()); |
| 5017 EXPECT_EQ(0u, session_->num_pushed_streams()); | 5060 EXPECT_EQ(0u, session_->num_pushed_streams()); |
| 5018 EXPECT_EQ(0u, session_->num_active_pushed_streams()); | 5061 EXPECT_EQ(0u, session_->num_active_pushed_streams()); |
| 5019 | 5062 |
| 5020 std::unique_ptr<SpdyHeaderBlock> headers( | 5063 std::unique_ptr<SpdyHeaderBlock> headers( |
| 5021 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 5064 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 5022 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 5065 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 5023 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders()); | 5066 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders()); |
| 5024 | 5067 |
| 5025 // Run until 1st stream is activated. | 5068 // Run until 1st stream is activated. |
| 5026 EXPECT_EQ(0u, delegate.stream_id()); | 5069 EXPECT_EQ(0u, delegate.stream_id()); |
| 5027 base::RunLoop().RunUntilIdle(); | 5070 base::RunLoop().RunUntilIdle(); |
| 5028 EXPECT_EQ(1u, delegate.stream_id()); | 5071 EXPECT_EQ(1u, delegate.stream_id()); |
| 5029 EXPECT_EQ(1u, session_->num_active_streams()); | 5072 EXPECT_EQ(1u, session_->num_active_streams()); |
| 5030 EXPECT_EQ(0u, session_->num_created_streams()); | 5073 EXPECT_EQ(0u, session_->num_created_streams()); |
| 5031 EXPECT_EQ(0u, session_->num_pushed_streams()); | 5074 EXPECT_EQ(0u, session_->num_pushed_streams()); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 5049 | 5092 |
| 5050 // Read EOF. | 5093 // Read EOF. |
| 5051 data.Resume(); | 5094 data.Resume(); |
| 5052 base::RunLoop().RunUntilIdle(); | 5095 base::RunLoop().RunUntilIdle(); |
| 5053 EXPECT_FALSE(session_); | 5096 EXPECT_FALSE(session_); |
| 5054 } | 5097 } |
| 5055 | 5098 |
| 5056 // Tests that if the SPDY trusted proxy is not set, then push streams that | 5099 // Tests that if the SPDY trusted proxy is not set, then push streams that |
| 5057 // advertise an origin different from the associated stream are refused. | 5100 // advertise an origin different from the associated stream are refused. |
| 5058 TEST_P(SpdySessionTest, TrustedSpdyProxyNotSet) { | 5101 TEST_P(SpdySessionTest, TrustedSpdyProxyNotSet) { |
| 5059 // Origin of kDefaultURL should be different from the origin of | 5102 // Origin of kDefaultUrl should be different from the origin of |
| 5060 // kHttpURLFromAnotherOrigin. | 5103 // kHttpURLFromAnotherOrigin. |
| 5061 ASSERT_NE(GURL(kDefaultURL).host(), GURL(kHttpURLFromAnotherOrigin).host()); | 5104 ASSERT_NE(GURL(kDefaultUrl).host(), GURL(kHttpURLFromAnotherOrigin).host()); |
| 5062 | 5105 |
| 5063 // cross_origin_push contains resource for an origin different from the | 5106 // cross_origin_push contains resource for an origin different from the |
| 5064 // origin of kDefaultURL, and should be refused. | 5107 // origin of kDefaultUrl, and should be refused. |
| 5065 std::unique_ptr<SpdySerializedFrame> cross_origin_push( | 5108 std::unique_ptr<SpdySerializedFrame> cross_origin_push( |
| 5066 spdy_util_.ConstructSpdyPush(nullptr, 0, 2, 1, | 5109 spdy_util_.ConstructSpdyPush(nullptr, 0, 2, 1, |
| 5067 kHttpURLFromAnotherOrigin)); | 5110 kHttpURLFromAnotherOrigin)); |
| 5068 MockRead reads[] = { | 5111 MockRead reads[] = { |
| 5069 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(*cross_origin_push, 2), | 5112 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(*cross_origin_push, 2), |
| 5070 MockRead(ASYNC, 0, 4), | 5113 MockRead(ASYNC, 0, 4), |
| 5071 }; | 5114 }; |
| 5072 | 5115 |
| 5073 std::unique_ptr<SpdySerializedFrame> req( | 5116 std::unique_ptr<SpdySerializedFrame> req( |
| 5074 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 5117 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 5075 std::unique_ptr<SpdySerializedFrame> rst( | 5118 std::unique_ptr<SpdySerializedFrame> rst( |
| 5076 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); | 5119 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); |
| 5077 MockWrite writes[] = { | 5120 MockWrite writes[] = { |
| 5078 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 3), | 5121 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 3), |
| 5079 }; | 5122 }; |
| 5080 | 5123 |
| 5081 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 5124 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| 5082 session_deps_.socket_factory->AddSocketDataProvider(&data); | 5125 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 5083 | 5126 |
| 5127 // Load a cert that is valid for: |
| 5128 // www.example.org |
| 5129 // mail.example.org |
| 5130 // mail.example.com |
| 5131 base::FilePath certs_dir = GetTestCertsDirectory(); |
| 5132 scoped_refptr<X509Certificate> test_cert( |
| 5133 ImportCertFromFile(certs_dir, "spdy_pooling.pem")); |
| 5134 ASSERT_NE(static_cast<X509Certificate*>(nullptr), test_cert.get()); |
| 5135 |
| 5136 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); |
| 5137 ssl.cert = test_cert; |
| 5138 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 5139 |
| 5084 CreateNetworkSession(); | 5140 CreateNetworkSession(); |
| 5085 CreateInsecureSpdySession(); | 5141 CreateSecureSpdySession(); |
| 5086 | 5142 |
| 5087 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( | 5143 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( |
| 5088 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, LOWEST, BoundNetLog()); | 5144 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, LOWEST, BoundNetLog()); |
| 5089 ASSERT_TRUE(spdy_stream); | 5145 ASSERT_TRUE(spdy_stream); |
| 5090 EXPECT_EQ(0u, spdy_stream->stream_id()); | 5146 EXPECT_EQ(0u, spdy_stream->stream_id()); |
| 5091 test::StreamDelegateDoNothing delegate(spdy_stream); | 5147 test::StreamDelegateDoNothing delegate(spdy_stream); |
| 5092 spdy_stream->SetDelegate(&delegate); | 5148 spdy_stream->SetDelegate(&delegate); |
| 5093 | 5149 |
| 5094 EXPECT_EQ(0u, session_->num_active_streams()); | 5150 EXPECT_EQ(0u, session_->num_active_streams()); |
| 5095 EXPECT_EQ(1u, session_->num_created_streams()); | 5151 EXPECT_EQ(1u, session_->num_created_streams()); |
| 5096 EXPECT_EQ(0u, session_->num_pushed_streams()); | 5152 EXPECT_EQ(0u, session_->num_pushed_streams()); |
| 5097 EXPECT_EQ(0u, session_->num_active_pushed_streams()); | 5153 EXPECT_EQ(0u, session_->num_active_pushed_streams()); |
| 5098 | 5154 |
| 5099 std::unique_ptr<SpdyHeaderBlock> headers( | 5155 std::unique_ptr<SpdyHeaderBlock> headers( |
| 5100 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 5156 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 5101 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 5157 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 5102 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders()); | 5158 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders()); |
| 5103 | 5159 |
| 5104 // Run until 1st stream is activated. | 5160 // Run until 1st stream is activated. |
| 5105 EXPECT_EQ(0u, delegate.stream_id()); | 5161 EXPECT_EQ(0u, delegate.stream_id()); |
| 5106 base::RunLoop().RunUntilIdle(); | 5162 base::RunLoop().RunUntilIdle(); |
| 5107 EXPECT_EQ(1u, delegate.stream_id()); | 5163 EXPECT_EQ(1u, delegate.stream_id()); |
| 5108 EXPECT_EQ(1u, session_->num_active_streams()); | 5164 EXPECT_EQ(1u, session_->num_active_streams()); |
| 5109 EXPECT_EQ(0u, session_->num_created_streams()); | 5165 EXPECT_EQ(0u, session_->num_created_streams()); |
| 5110 EXPECT_EQ(0u, session_->num_pushed_streams()); | 5166 EXPECT_EQ(0u, session_->num_pushed_streams()); |
| 5111 EXPECT_EQ(0u, session_->num_active_pushed_streams()); | 5167 EXPECT_EQ(0u, session_->num_active_pushed_streams()); |
| 5112 | 5168 |
| 5113 // Read EOF. | 5169 // Read EOF. |
| 5114 data.Resume(); | 5170 data.Resume(); |
| 5115 base::RunLoop().RunUntilIdle(); | 5171 base::RunLoop().RunUntilIdle(); |
| 5116 EXPECT_FALSE(session_); | 5172 EXPECT_FALSE(session_); |
| 5117 } | 5173 } |
| 5118 | 5174 |
| 5119 TEST_P(SpdySessionTest, IgnoreReservedRemoteStreamsCount) { | 5175 TEST_P(SpdySessionTest, IgnoreReservedRemoteStreamsCount) { |
| 5120 // Streams in reserved remote state exist only in HTTP/2. | 5176 // Streams in reserved remote state exist only in HTTP/2. |
| 5121 if (spdy_util_.spdy_version() < HTTP2) | 5177 if (spdy_util_.spdy_version() < HTTP2) |
| 5122 return; | 5178 return; |
| 5123 | 5179 |
| 5124 std::unique_ptr<SpdySerializedFrame> push_a(spdy_util_.ConstructSpdyPush( | 5180 std::unique_ptr<SpdySerializedFrame> push_a(spdy_util_.ConstructSpdyPush( |
| 5125 nullptr, 0, 2, 1, "http://www.example.org/a.dat")); | 5181 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); |
| 5126 SpdyHeaderBlock push_headers; | 5182 SpdyHeaderBlock push_headers; |
| 5127 spdy_util_.AddUrlToHeaderBlock("http://www.example.org/b.dat", &push_headers); | 5183 spdy_util_.AddUrlToHeaderBlock("https://www.example.org/b.dat", |
| 5184 &push_headers); |
| 5128 std::unique_ptr<SpdySerializedFrame> push_b( | 5185 std::unique_ptr<SpdySerializedFrame> push_b( |
| 5129 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 4, 1)); | 5186 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 4, 1)); |
| 5130 std::unique_ptr<SpdySerializedFrame> headers_b( | 5187 std::unique_ptr<SpdySerializedFrame> headers_b( |
| 5131 spdy_util_.ConstructSpdyPushHeaders(4, nullptr, 0)); | 5188 spdy_util_.ConstructSpdyPushHeaders(4, nullptr, 0)); |
| 5132 MockRead reads[] = { | 5189 MockRead reads[] = { |
| 5133 MockRead(ASYNC, ERR_IO_PENDING, 1), | 5190 MockRead(ASYNC, ERR_IO_PENDING, 1), |
| 5134 CreateMockRead(*push_a, 2), | 5191 CreateMockRead(*push_a, 2), |
| 5135 MockRead(ASYNC, ERR_IO_PENDING, 3), | 5192 MockRead(ASYNC, ERR_IO_PENDING, 3), |
| 5136 CreateMockRead(*push_b, 4), | 5193 CreateMockRead(*push_b, 4), |
| 5137 MockRead(ASYNC, ERR_IO_PENDING, 5), | 5194 MockRead(ASYNC, ERR_IO_PENDING, 5), |
| (...skipping 23 matching lines...) Expand all Loading... |
| 5161 EXPECT_EQ(0u, spdy_stream1->stream_id()); | 5218 EXPECT_EQ(0u, spdy_stream1->stream_id()); |
| 5162 test::StreamDelegateDoNothing delegate1(spdy_stream1); | 5219 test::StreamDelegateDoNothing delegate1(spdy_stream1); |
| 5163 spdy_stream1->SetDelegate(&delegate1); | 5220 spdy_stream1->SetDelegate(&delegate1); |
| 5164 | 5221 |
| 5165 EXPECT_EQ(0u, session_->num_active_streams()); | 5222 EXPECT_EQ(0u, session_->num_active_streams()); |
| 5166 EXPECT_EQ(1u, session_->num_created_streams()); | 5223 EXPECT_EQ(1u, session_->num_created_streams()); |
| 5167 EXPECT_EQ(0u, session_->num_pushed_streams()); | 5224 EXPECT_EQ(0u, session_->num_pushed_streams()); |
| 5168 EXPECT_EQ(0u, session_->num_active_pushed_streams()); | 5225 EXPECT_EQ(0u, session_->num_active_pushed_streams()); |
| 5169 | 5226 |
| 5170 std::unique_ptr<SpdyHeaderBlock> headers( | 5227 std::unique_ptr<SpdyHeaderBlock> headers( |
| 5171 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 5228 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 5172 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 5229 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 5173 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); | 5230 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); |
| 5174 | 5231 |
| 5175 // Run until 1st stream is activated. | 5232 // Run until 1st stream is activated. |
| 5176 EXPECT_EQ(0u, delegate1.stream_id()); | 5233 EXPECT_EQ(0u, delegate1.stream_id()); |
| 5177 base::RunLoop().RunUntilIdle(); | 5234 base::RunLoop().RunUntilIdle(); |
| 5178 EXPECT_EQ(1u, delegate1.stream_id()); | 5235 EXPECT_EQ(1u, delegate1.stream_id()); |
| 5179 EXPECT_EQ(1u, session_->num_active_streams()); | 5236 EXPECT_EQ(1u, session_->num_active_streams()); |
| 5180 EXPECT_EQ(0u, session_->num_created_streams()); | 5237 EXPECT_EQ(0u, session_->num_created_streams()); |
| 5181 EXPECT_EQ(0u, session_->num_pushed_streams()); | 5238 EXPECT_EQ(0u, session_->num_pushed_streams()); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 5210 data.Resume(); | 5267 data.Resume(); |
| 5211 base::RunLoop().RunUntilIdle(); | 5268 base::RunLoop().RunUntilIdle(); |
| 5212 EXPECT_FALSE(session_); | 5269 EXPECT_FALSE(session_); |
| 5213 } | 5270 } |
| 5214 | 5271 |
| 5215 TEST_P(SpdySessionTest, CancelReservedStreamOnHeadersReceived) { | 5272 TEST_P(SpdySessionTest, CancelReservedStreamOnHeadersReceived) { |
| 5216 // Streams in reserved remote state exist only in HTTP/2. | 5273 // Streams in reserved remote state exist only in HTTP/2. |
| 5217 if (spdy_util_.spdy_version() < HTTP2) | 5274 if (spdy_util_.spdy_version() < HTTP2) |
| 5218 return; | 5275 return; |
| 5219 | 5276 |
| 5220 const char kPushedUrl[] = "http://www.example.org/a.dat"; | 5277 const char kPushedUrl[] = "https://www.example.org/a.dat"; |
| 5221 SpdyHeaderBlock push_headers; | 5278 SpdyHeaderBlock push_headers; |
| 5222 spdy_util_.AddUrlToHeaderBlock(kPushedUrl, &push_headers); | 5279 spdy_util_.AddUrlToHeaderBlock(kPushedUrl, &push_headers); |
| 5223 std::unique_ptr<SpdySerializedFrame> push_promise( | 5280 std::unique_ptr<SpdySerializedFrame> push_promise( |
| 5224 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 2, 1)); | 5281 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 2, 1)); |
| 5225 std::unique_ptr<SpdySerializedFrame> headers_frame( | 5282 std::unique_ptr<SpdySerializedFrame> headers_frame( |
| 5226 spdy_util_.ConstructSpdyPushHeaders(2, nullptr, 0)); | 5283 spdy_util_.ConstructSpdyPushHeaders(2, nullptr, 0)); |
| 5227 MockRead reads[] = { | 5284 MockRead reads[] = { |
| 5228 MockRead(ASYNC, ERR_IO_PENDING, 1), | 5285 MockRead(ASYNC, ERR_IO_PENDING, 1), |
| 5229 CreateMockRead(*push_promise, 2), | 5286 CreateMockRead(*push_promise, 2), |
| 5230 MockRead(ASYNC, ERR_IO_PENDING, 3), | 5287 MockRead(ASYNC, ERR_IO_PENDING, 3), |
| (...skipping 22 matching lines...) Expand all Loading... |
| 5253 EXPECT_EQ(0u, spdy_stream1->stream_id()); | 5310 EXPECT_EQ(0u, spdy_stream1->stream_id()); |
| 5254 test::StreamDelegateDoNothing delegate1(spdy_stream1); | 5311 test::StreamDelegateDoNothing delegate1(spdy_stream1); |
| 5255 spdy_stream1->SetDelegate(&delegate1); | 5312 spdy_stream1->SetDelegate(&delegate1); |
| 5256 | 5313 |
| 5257 EXPECT_EQ(0u, session_->num_active_streams()); | 5314 EXPECT_EQ(0u, session_->num_active_streams()); |
| 5258 EXPECT_EQ(1u, session_->num_created_streams()); | 5315 EXPECT_EQ(1u, session_->num_created_streams()); |
| 5259 EXPECT_EQ(0u, session_->num_pushed_streams()); | 5316 EXPECT_EQ(0u, session_->num_pushed_streams()); |
| 5260 EXPECT_EQ(0u, session_->num_active_pushed_streams()); | 5317 EXPECT_EQ(0u, session_->num_active_pushed_streams()); |
| 5261 | 5318 |
| 5262 std::unique_ptr<SpdyHeaderBlock> headers( | 5319 std::unique_ptr<SpdyHeaderBlock> headers( |
| 5263 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultURL))); | 5320 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); |
| 5264 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 5321 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 5265 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); | 5322 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); |
| 5266 | 5323 |
| 5267 // Run until 1st stream is activated. | 5324 // Run until 1st stream is activated. |
| 5268 EXPECT_EQ(0u, delegate1.stream_id()); | 5325 EXPECT_EQ(0u, delegate1.stream_id()); |
| 5269 base::RunLoop().RunUntilIdle(); | 5326 base::RunLoop().RunUntilIdle(); |
| 5270 EXPECT_EQ(1u, delegate1.stream_id()); | 5327 EXPECT_EQ(1u, delegate1.stream_id()); |
| 5271 EXPECT_EQ(1u, session_->num_active_streams()); | 5328 EXPECT_EQ(1u, session_->num_active_streams()); |
| 5272 EXPECT_EQ(0u, session_->num_created_streams()); | 5329 EXPECT_EQ(0u, session_->num_created_streams()); |
| 5273 EXPECT_EQ(0u, session_->num_pushed_streams()); | 5330 EXPECT_EQ(0u, session_->num_pushed_streams()); |
| (...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5836 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), | 5893 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), |
| 5837 "spdy_pooling.pem"); | 5894 "spdy_pooling.pem"); |
| 5838 ssl_info.is_issued_by_known_root = true; | 5895 ssl_info.is_issued_by_known_root = true; |
| 5839 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin)); | 5896 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin)); |
| 5840 | 5897 |
| 5841 EXPECT_TRUE(SpdySession::CanPool( | 5898 EXPECT_TRUE(SpdySession::CanPool( |
| 5842 &tss, ssl_info, "www.example.org", "mail.example.org")); | 5899 &tss, ssl_info, "www.example.org", "mail.example.org")); |
| 5843 } | 5900 } |
| 5844 | 5901 |
| 5845 } // namespace net | 5902 } // namespace net |
| OLD | NEW |