Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(173)

Side by Side Diff: net/spdy/spdy_session_unittest.cc

Issue 2109803002: Change a number of SPDY unittests from http to https. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/spdy/spdy_network_transaction_unittest.cc ('k') | net/spdy/spdy_stream_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « net/spdy/spdy_network_transaction_unittest.cc ('k') | net/spdy/spdy_stream_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698