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 |