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

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

Issue 1852423004: Implement SpdySerializedFrame move semantics. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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_session_pool_unittest.cc ('k') | net/spdy/spdy_stream.h » ('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 <utility> 7 #include <utility>
8 8
9 #include "base/base64.h" 9 #include "base/base64.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 305
306 session_->CloseSessionOnError(ERR_ABORTED, "Aborting session"); 306 session_->CloseSessionOnError(ERR_ABORTED, "Aborting session");
307 307
308 EXPECT_EQ(ERR_ABORTED, callback1.WaitForResult()); 308 EXPECT_EQ(ERR_ABORTED, callback1.WaitForResult());
309 } 309 }
310 310
311 // A session receiving a GOAWAY frame with no active streams should close. 311 // A session receiving a GOAWAY frame with no active streams should close.
312 TEST_P(SpdySessionTest, GoAwayWithNoActiveStreams) { 312 TEST_P(SpdySessionTest, GoAwayWithNoActiveStreams) {
313 session_deps_.host_resolver->set_synchronous_mode(true); 313 session_deps_.host_resolver->set_synchronous_mode(true);
314 314
315 scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(1)); 315 scoped_ptr<SpdySerializedFrame> goaway(spdy_util_.ConstructSpdyGoAway(1));
316 MockRead reads[] = { 316 MockRead reads[] = {
317 CreateMockRead(*goaway, 0), 317 CreateMockRead(*goaway, 0),
318 }; 318 };
319 SequencedSocketData data(reads, arraysize(reads), nullptr, 0); 319 SequencedSocketData data(reads, arraysize(reads), nullptr, 0);
320 session_deps_.socket_factory->AddSocketDataProvider(&data); 320 session_deps_.socket_factory->AddSocketDataProvider(&data);
321 321
322 CreateNetworkSession(); 322 CreateNetworkSession();
323 CreateInsecureSpdySession(); 323 CreateInsecureSpdySession();
324 324
325 EXPECT_EQ(spdy_util_.spdy_version(), session_->GetProtocolVersion()); 325 EXPECT_EQ(spdy_util_.spdy_version(), session_->GetProtocolVersion());
326 326
327 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_)); 327 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_));
328 328
329 // Read and process the GOAWAY frame. 329 // Read and process the GOAWAY frame.
330 base::RunLoop().RunUntilIdle(); 330 base::RunLoop().RunUntilIdle();
331 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_)); 331 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
332 EXPECT_FALSE(session_); 332 EXPECT_FALSE(session_);
333 } 333 }
334 334
335 // A session receiving a GOAWAY frame immediately with no active 335 // A session receiving a GOAWAY frame immediately with no active
336 // streams should then close. 336 // streams should then close.
337 TEST_P(SpdySessionTest, GoAwayImmediatelyWithNoActiveStreams) { 337 TEST_P(SpdySessionTest, GoAwayImmediatelyWithNoActiveStreams) {
338 session_deps_.host_resolver->set_synchronous_mode(true); 338 session_deps_.host_resolver->set_synchronous_mode(true);
339 339
340 scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(1)); 340 scoped_ptr<SpdySerializedFrame> goaway(spdy_util_.ConstructSpdyGoAway(1));
341 MockRead reads[] = { 341 MockRead reads[] = {
342 CreateMockRead(*goaway, 0, SYNCHRONOUS), MockRead(ASYNC, 0, 1) // EOF 342 CreateMockRead(*goaway, 0, SYNCHRONOUS), MockRead(ASYNC, 0, 1) // EOF
343 }; 343 };
344 SequencedSocketData data(reads, arraysize(reads), nullptr, 0); 344 SequencedSocketData data(reads, arraysize(reads), nullptr, 0);
345 session_deps_.socket_factory->AddSocketDataProvider(&data); 345 session_deps_.socket_factory->AddSocketDataProvider(&data);
346 346
347 CreateNetworkSession(); 347 CreateNetworkSession();
348 348
349 session_ = TryCreateInsecureSpdySessionExpectingFailure( 349 session_ = TryCreateInsecureSpdySessionExpectingFailure(
350 http_session_.get(), key_, ERR_CONNECTION_CLOSED, BoundNetLog()); 350 http_session_.get(), key_, ERR_CONNECTION_CLOSED, BoundNetLog());
351 base::RunLoop().RunUntilIdle(); 351 base::RunLoop().RunUntilIdle();
352 352
353 EXPECT_FALSE(session_); 353 EXPECT_FALSE(session_);
354 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_)); 354 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
355 EXPECT_FALSE(data.AllReadDataConsumed()); 355 EXPECT_FALSE(data.AllReadDataConsumed());
356 } 356 }
357 357
358 // A session receiving a GOAWAY frame with active streams should close 358 // A session receiving a GOAWAY frame with active streams should close
359 // when the last active stream is closed. 359 // when the last active stream is closed.
360 TEST_P(SpdySessionTest, GoAwayWithActiveStreams) { 360 TEST_P(SpdySessionTest, GoAwayWithActiveStreams) {
361 session_deps_.host_resolver->set_synchronous_mode(true); 361 session_deps_.host_resolver->set_synchronous_mode(true);
362 362
363 scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(1)); 363 scoped_ptr<SpdySerializedFrame> goaway(spdy_util_.ConstructSpdyGoAway(1));
364 MockRead reads[] = { 364 MockRead reads[] = {
365 MockRead(ASYNC, ERR_IO_PENDING, 2), 365 MockRead(ASYNC, ERR_IO_PENDING, 2),
366 CreateMockRead(*goaway, 3), 366 CreateMockRead(*goaway, 3),
367 MockRead(ASYNC, ERR_IO_PENDING, 4), 367 MockRead(ASYNC, ERR_IO_PENDING, 4),
368 MockRead(ASYNC, 0, 5) // EOF 368 MockRead(ASYNC, 0, 5) // EOF
369 }; 369 };
370 scoped_ptr<SpdyFrame> req1( 370 scoped_ptr<SpdySerializedFrame> req1(
371 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 371 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
372 scoped_ptr<SpdyFrame> req2( 372 scoped_ptr<SpdySerializedFrame> req2(
373 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, MEDIUM, true)); 373 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, MEDIUM, true));
374 MockWrite writes[] = { 374 MockWrite writes[] = {
375 CreateMockWrite(*req1, 0), 375 CreateMockWrite(*req1, 0),
376 CreateMockWrite(*req2, 1), 376 CreateMockWrite(*req2, 1),
377 }; 377 };
378 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 378 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
379 session_deps_.socket_factory->AddSocketDataProvider(&data); 379 session_deps_.socket_factory->AddSocketDataProvider(&data);
380 380
381 CreateNetworkSession(); 381 CreateNetworkSession();
382 CreateInsecureSpdySession(); 382 CreateInsecureSpdySession();
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 EXPECT_TRUE(session_); 428 EXPECT_TRUE(session_);
429 data.Resume(); 429 data.Resume();
430 base::RunLoop().RunUntilIdle(); 430 base::RunLoop().RunUntilIdle();
431 EXPECT_FALSE(session_); 431 EXPECT_FALSE(session_);
432 } 432 }
433 433
434 // Regression test for https://crbug.com/547130. 434 // Regression test for https://crbug.com/547130.
435 TEST_P(SpdySessionTest, GoAwayWithActiveAndCreatedStream) { 435 TEST_P(SpdySessionTest, GoAwayWithActiveAndCreatedStream) {
436 session_deps_.host_resolver->set_synchronous_mode(true); 436 session_deps_.host_resolver->set_synchronous_mode(true);
437 437
438 scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(0)); 438 scoped_ptr<SpdySerializedFrame> goaway(spdy_util_.ConstructSpdyGoAway(0));
439 MockRead reads[] = { 439 MockRead reads[] = {
440 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(*goaway, 2), 440 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(*goaway, 2),
441 }; 441 };
442 442
443 // No |req2|, because the second stream will never get activated. 443 // No |req2|, because the second stream will never get activated.
444 scoped_ptr<SpdyFrame> req1( 444 scoped_ptr<SpdySerializedFrame> req1(
445 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 445 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
446 MockWrite writes[] = { 446 MockWrite writes[] = {
447 CreateMockWrite(*req1, 0), 447 CreateMockWrite(*req1, 0),
448 }; 448 };
449 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 449 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
450 session_deps_.socket_factory->AddSocketDataProvider(&data); 450 session_deps_.socket_factory->AddSocketDataProvider(&data);
451 451
452 CreateNetworkSession(); 452 CreateNetworkSession();
453 CreateInsecureSpdySession(); 453 CreateInsecureSpdySession();
454 454
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 EXPECT_TRUE(data.AllWriteDataConsumed()); 486 EXPECT_TRUE(data.AllWriteDataConsumed());
487 EXPECT_TRUE(data.AllReadDataConsumed()); 487 EXPECT_TRUE(data.AllReadDataConsumed());
488 } 488 }
489 489
490 // Have a session receive two GOAWAY frames, with the last one causing 490 // Have a session receive two GOAWAY frames, with the last one causing
491 // the last active stream to be closed. The session should then be 491 // the last active stream to be closed. The session should then be
492 // closed after the second GOAWAY frame. 492 // closed after the second GOAWAY frame.
493 TEST_P(SpdySessionTest, GoAwayTwice) { 493 TEST_P(SpdySessionTest, GoAwayTwice) {
494 session_deps_.host_resolver->set_synchronous_mode(true); 494 session_deps_.host_resolver->set_synchronous_mode(true);
495 495
496 scoped_ptr<SpdyFrame> goaway1(spdy_util_.ConstructSpdyGoAway(1)); 496 scoped_ptr<SpdySerializedFrame> goaway1(spdy_util_.ConstructSpdyGoAway(1));
497 scoped_ptr<SpdyFrame> goaway2(spdy_util_.ConstructSpdyGoAway(0)); 497 scoped_ptr<SpdySerializedFrame> goaway2(spdy_util_.ConstructSpdyGoAway(0));
498 MockRead reads[] = { 498 MockRead reads[] = {
499 MockRead(ASYNC, ERR_IO_PENDING, 2), 499 MockRead(ASYNC, ERR_IO_PENDING, 2),
500 CreateMockRead(*goaway1, 3), 500 CreateMockRead(*goaway1, 3),
501 MockRead(ASYNC, ERR_IO_PENDING, 4), 501 MockRead(ASYNC, ERR_IO_PENDING, 4),
502 CreateMockRead(*goaway2, 5), 502 CreateMockRead(*goaway2, 5),
503 MockRead(ASYNC, ERR_IO_PENDING, 6), 503 MockRead(ASYNC, ERR_IO_PENDING, 6),
504 MockRead(ASYNC, 0, 7) // EOF 504 MockRead(ASYNC, 0, 7) // EOF
505 }; 505 };
506 scoped_ptr<SpdyFrame> req1( 506 scoped_ptr<SpdySerializedFrame> req1(
507 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 507 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
508 scoped_ptr<SpdyFrame> req2( 508 scoped_ptr<SpdySerializedFrame> req2(
509 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, MEDIUM, true)); 509 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, MEDIUM, true));
510 MockWrite writes[] = { 510 MockWrite writes[] = {
511 CreateMockWrite(*req1, 0), 511 CreateMockWrite(*req1, 0),
512 CreateMockWrite(*req2, 1), 512 CreateMockWrite(*req2, 1),
513 }; 513 };
514 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 514 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
515 session_deps_.socket_factory->AddSocketDataProvider(&data); 515 session_deps_.socket_factory->AddSocketDataProvider(&data);
516 516
517 CreateNetworkSession(); 517 CreateNetworkSession();
518 CreateInsecureSpdySession(); 518 CreateInsecureSpdySession();
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
562 base::RunLoop().RunUntilIdle(); 562 base::RunLoop().RunUntilIdle();
563 EXPECT_FALSE(session_); 563 EXPECT_FALSE(session_);
564 } 564 }
565 565
566 // Have a session with active streams receive a GOAWAY frame and then 566 // Have a session with active streams receive a GOAWAY frame and then
567 // close it. It should handle the close properly (i.e., not try to 567 // close it. It should handle the close properly (i.e., not try to
568 // make itself unavailable in its pool twice). 568 // make itself unavailable in its pool twice).
569 TEST_P(SpdySessionTest, GoAwayWithActiveStreamsThenClose) { 569 TEST_P(SpdySessionTest, GoAwayWithActiveStreamsThenClose) {
570 session_deps_.host_resolver->set_synchronous_mode(true); 570 session_deps_.host_resolver->set_synchronous_mode(true);
571 571
572 scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(1)); 572 scoped_ptr<SpdySerializedFrame> goaway(spdy_util_.ConstructSpdyGoAway(1));
573 MockRead reads[] = { 573 MockRead reads[] = {
574 MockRead(ASYNC, ERR_IO_PENDING, 2), 574 MockRead(ASYNC, ERR_IO_PENDING, 2),
575 CreateMockRead(*goaway, 3), 575 CreateMockRead(*goaway, 3),
576 MockRead(ASYNC, ERR_IO_PENDING, 4), 576 MockRead(ASYNC, ERR_IO_PENDING, 4),
577 MockRead(ASYNC, 0, 5) // EOF 577 MockRead(ASYNC, 0, 5) // EOF
578 }; 578 };
579 scoped_ptr<SpdyFrame> req1( 579 scoped_ptr<SpdySerializedFrame> req1(
580 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 580 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
581 scoped_ptr<SpdyFrame> req2( 581 scoped_ptr<SpdySerializedFrame> req2(
582 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, MEDIUM, true)); 582 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, MEDIUM, true));
583 MockWrite writes[] = { 583 MockWrite writes[] = {
584 CreateMockWrite(*req1, 0), 584 CreateMockWrite(*req1, 0),
585 CreateMockWrite(*req2, 1), 585 CreateMockWrite(*req2, 1),
586 }; 586 };
587 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 587 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
588 session_deps_.socket_factory->AddSocketDataProvider(&data); 588 session_deps_.socket_factory->AddSocketDataProvider(&data);
589 589
590 CreateNetworkSession(); 590 CreateNetworkSession();
591 CreateInsecureSpdySession(); 591 CreateInsecureSpdySession();
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
636 base::RunLoop().RunUntilIdle(); 636 base::RunLoop().RunUntilIdle();
637 EXPECT_FALSE(session_); 637 EXPECT_FALSE(session_);
638 } 638 }
639 639
640 // Process a joint read buffer which causes the session to begin draining, and 640 // Process a joint read buffer which causes the session to begin draining, and
641 // then processes a GOAWAY. The session should gracefully drain. Regression test 641 // then processes a GOAWAY. The session should gracefully drain. Regression test
642 // for crbug.com/379469 642 // for crbug.com/379469
643 TEST_P(SpdySessionTest, GoAwayWhileDraining) { 643 TEST_P(SpdySessionTest, GoAwayWhileDraining) {
644 session_deps_.host_resolver->set_synchronous_mode(true); 644 session_deps_.host_resolver->set_synchronous_mode(true);
645 645
646 scoped_ptr<SpdyFrame> req( 646 scoped_ptr<SpdySerializedFrame> req(
647 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 647 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
648 MockWrite writes[] = { 648 MockWrite writes[] = {
649 CreateMockWrite(*req, 0), 649 CreateMockWrite(*req, 0),
650 }; 650 };
651 651
652 scoped_ptr<SpdyFrame> resp( 652 scoped_ptr<SpdySerializedFrame> resp(
653 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 653 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
654 scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(1)); 654 scoped_ptr<SpdySerializedFrame> goaway(spdy_util_.ConstructSpdyGoAway(1));
655 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true)); 655 scoped_ptr<SpdySerializedFrame> body(
656 spdy_util_.ConstructSpdyBodyFrame(1, true));
656 size_t joint_size = goaway->size() * 2 + body->size(); 657 size_t joint_size = goaway->size() * 2 + body->size();
657 658
658 // Compose interleaved |goaway| and |body| frames into a single read. 659 // Compose interleaved |goaway| and |body| frames into a single read.
659 scoped_ptr<char[]> buffer(new char[joint_size]); 660 scoped_ptr<char[]> buffer(new char[joint_size]);
660 { 661 {
661 size_t out = 0; 662 size_t out = 0;
662 memcpy(&buffer[out], goaway->data(), goaway->size()); 663 memcpy(&buffer[out], goaway->data(), goaway->size());
663 out += goaway->size(); 664 out += goaway->size();
664 memcpy(&buffer[out], body->data(), body->size()); 665 memcpy(&buffer[out], body->data(), body->size());
665 out += body->size(); 666 out += body->size();
666 memcpy(&buffer[out], goaway->data(), goaway->size()); 667 memcpy(&buffer[out], goaway->data(), goaway->size());
667 out += goaway->size(); 668 out += goaway->size();
668 ASSERT_EQ(out, joint_size); 669 ASSERT_EQ(out, joint_size);
669 } 670 }
670 SpdyFrame joint_frames(buffer.get(), joint_size, false); 671 SpdySerializedFrame joint_frames(buffer.get(), joint_size, false);
671 672
672 MockRead reads[] = { 673 MockRead reads[] = {
673 CreateMockRead(*resp, 1), CreateMockRead(joint_frames, 2), 674 CreateMockRead(*resp, 1), CreateMockRead(joint_frames, 2),
674 MockRead(ASYNC, 0, 3) // EOF 675 MockRead(ASYNC, 0, 3) // EOF
675 }; 676 };
676 677
677 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 678 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
678 session_deps_.socket_factory->AddSocketDataProvider(&data); 679 session_deps_.socket_factory->AddSocketDataProvider(&data);
679 680
680 CreateNetworkSession(); 681 CreateNetworkSession();
(...skipping 16 matching lines...) Expand all
697 EXPECT_EQ(OK, delegate.WaitForClose()); 698 EXPECT_EQ(OK, delegate.WaitForClose());
698 EXPECT_EQ(kUploadData, delegate.TakeReceivedData()); 699 EXPECT_EQ(kUploadData, delegate.TakeReceivedData());
699 EXPECT_FALSE(session_); 700 EXPECT_FALSE(session_);
700 } 701 }
701 702
702 // Try to create a stream after receiving a GOAWAY frame. It should 703 // Try to create a stream after receiving a GOAWAY frame. It should
703 // fail. 704 // fail.
704 TEST_P(SpdySessionTest, CreateStreamAfterGoAway) { 705 TEST_P(SpdySessionTest, CreateStreamAfterGoAway) {
705 session_deps_.host_resolver->set_synchronous_mode(true); 706 session_deps_.host_resolver->set_synchronous_mode(true);
706 707
707 scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(1)); 708 scoped_ptr<SpdySerializedFrame> goaway(spdy_util_.ConstructSpdyGoAway(1));
708 MockRead reads[] = { 709 MockRead reads[] = {
709 MockRead(ASYNC, ERR_IO_PENDING, 1), 710 MockRead(ASYNC, ERR_IO_PENDING, 1),
710 CreateMockRead(*goaway, 2), 711 CreateMockRead(*goaway, 2),
711 MockRead(ASYNC, ERR_IO_PENDING, 3), 712 MockRead(ASYNC, ERR_IO_PENDING, 3),
712 MockRead(ASYNC, 0, 4) // EOF 713 MockRead(ASYNC, 0, 4) // EOF
713 }; 714 };
714 scoped_ptr<SpdyFrame> req( 715 scoped_ptr<SpdySerializedFrame> req(
715 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 716 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
716 MockWrite writes[] = { 717 MockWrite writes[] = {
717 CreateMockWrite(*req, 0), 718 CreateMockWrite(*req, 0),
718 }; 719 };
719 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 720 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
720 session_deps_.socket_factory->AddSocketDataProvider(&data); 721 session_deps_.socket_factory->AddSocketDataProvider(&data);
721 722
722 CreateNetworkSession(); 723 CreateNetworkSession();
723 CreateInsecureSpdySession(); 724 CreateInsecureSpdySession();
724 725
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
757 data.Resume(); 758 data.Resume();
758 base::RunLoop().RunUntilIdle(); 759 base::RunLoop().RunUntilIdle();
759 EXPECT_FALSE(session_); 760 EXPECT_FALSE(session_);
760 } 761 }
761 762
762 // Receiving a SYN_STREAM frame after a GOAWAY frame should result in 763 // Receiving a SYN_STREAM frame after a GOAWAY frame should result in
763 // the stream being refused. 764 // the stream being refused.
764 TEST_P(SpdySessionTest, SynStreamAfterGoAway) { 765 TEST_P(SpdySessionTest, SynStreamAfterGoAway) {
765 session_deps_.host_resolver->set_synchronous_mode(true); 766 session_deps_.host_resolver->set_synchronous_mode(true);
766 767
767 scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(1)); 768 scoped_ptr<SpdySerializedFrame> goaway(spdy_util_.ConstructSpdyGoAway(1));
768 scoped_ptr<SpdyFrame> push( 769 scoped_ptr<SpdySerializedFrame> push(
769 spdy_util_.ConstructSpdyPush(nullptr, 0, 2, 1, kDefaultURL)); 770 spdy_util_.ConstructSpdyPush(nullptr, 0, 2, 1, kDefaultURL));
770 MockRead reads[] = { 771 MockRead reads[] = {
771 MockRead(ASYNC, ERR_IO_PENDING, 1), 772 MockRead(ASYNC, ERR_IO_PENDING, 1),
772 CreateMockRead(*goaway, 2), 773 CreateMockRead(*goaway, 2),
773 MockRead(ASYNC, ERR_IO_PENDING, 3), 774 MockRead(ASYNC, ERR_IO_PENDING, 3),
774 CreateMockRead(*push, 4), 775 CreateMockRead(*push, 4),
775 MockRead(ASYNC, 0, 6) // EOF 776 MockRead(ASYNC, 0, 6) // EOF
776 }; 777 };
777 scoped_ptr<SpdyFrame> req( 778 scoped_ptr<SpdySerializedFrame> req(
778 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 779 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
779 scoped_ptr<SpdyFrame> rst( 780 scoped_ptr<SpdySerializedFrame> rst(
780 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); 781 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM));
781 MockWrite writes[] = {CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5)}; 782 MockWrite writes[] = {CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5)};
782 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 783 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
783 session_deps_.socket_factory->AddSocketDataProvider(&data); 784 session_deps_.socket_factory->AddSocketDataProvider(&data);
784 785
785 CreateNetworkSession(); 786 CreateNetworkSession();
786 CreateInsecureSpdySession(); 787 CreateInsecureSpdySession();
787 788
788 EXPECT_EQ(spdy_util_.spdy_version(), session_->GetProtocolVersion()); 789 EXPECT_EQ(spdy_util_.spdy_version(), session_->GetProtocolVersion());
789 790
(...skipping 28 matching lines...) Expand all
818 } 819 }
819 820
820 // A session observing a network change with active streams should close 821 // A session observing a network change with active streams should close
821 // when the last active stream is closed. 822 // when the last active stream is closed.
822 TEST_P(SpdySessionTest, NetworkChangeWithActiveStreams) { 823 TEST_P(SpdySessionTest, NetworkChangeWithActiveStreams) {
823 session_deps_.host_resolver->set_synchronous_mode(true); 824 session_deps_.host_resolver->set_synchronous_mode(true);
824 825
825 MockRead reads[] = { 826 MockRead reads[] = {
826 MockRead(ASYNC, ERR_IO_PENDING, 1), MockRead(ASYNC, 0, 2) // EOF 827 MockRead(ASYNC, ERR_IO_PENDING, 1), MockRead(ASYNC, 0, 2) // EOF
827 }; 828 };
828 scoped_ptr<SpdyFrame> req1( 829 scoped_ptr<SpdySerializedFrame> req1(
829 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 830 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
830 MockWrite writes[] = { 831 MockWrite writes[] = {
831 CreateMockWrite(*req1, 0), 832 CreateMockWrite(*req1, 0),
832 }; 833 };
833 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 834 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
834 session_deps_.socket_factory->AddSocketDataProvider(&data); 835 session_deps_.socket_factory->AddSocketDataProvider(&data);
835 836
836 CreateNetworkSession(); 837 CreateNetworkSession();
837 CreateInsecureSpdySession(); 838 CreateInsecureSpdySession();
838 839
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
877 878
878 data.Resume(); 879 data.Resume();
879 base::RunLoop().RunUntilIdle(); 880 base::RunLoop().RunUntilIdle();
880 EXPECT_FALSE(session_); 881 EXPECT_FALSE(session_);
881 } 882 }
882 883
883 TEST_P(SpdySessionTest, ClientPing) { 884 TEST_P(SpdySessionTest, ClientPing) {
884 session_deps_.enable_ping = true; 885 session_deps_.enable_ping = true;
885 session_deps_.host_resolver->set_synchronous_mode(true); 886 session_deps_.host_resolver->set_synchronous_mode(true);
886 887
887 scoped_ptr<SpdyFrame> read_ping(spdy_util_.ConstructSpdyPing(1, true)); 888 scoped_ptr<SpdySerializedFrame> read_ping(
889 spdy_util_.ConstructSpdyPing(1, true));
888 MockRead reads[] = { 890 MockRead reads[] = {
889 CreateMockRead(*read_ping, 1), 891 CreateMockRead(*read_ping, 1),
890 MockRead(ASYNC, ERR_IO_PENDING, 2), 892 MockRead(ASYNC, ERR_IO_PENDING, 2),
891 MockRead(ASYNC, 0, 3) // EOF 893 MockRead(ASYNC, 0, 3) // EOF
892 }; 894 };
893 scoped_ptr<SpdyFrame> write_ping(spdy_util_.ConstructSpdyPing(1, false)); 895 scoped_ptr<SpdySerializedFrame> write_ping(
896 spdy_util_.ConstructSpdyPing(1, false));
894 MockWrite writes[] = { 897 MockWrite writes[] = {
895 CreateMockWrite(*write_ping, 0), 898 CreateMockWrite(*write_ping, 0),
896 }; 899 };
897 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 900 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
898 session_deps_.socket_factory->AddSocketDataProvider(&data); 901 session_deps_.socket_factory->AddSocketDataProvider(&data);
899 902
900 CreateNetworkSession(); 903 CreateNetworkSession();
901 CreateInsecureSpdySession(); 904 CreateInsecureSpdySession();
902 905
903 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( 906 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
(...skipping 24 matching lines...) Expand all
928 931
929 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose()); 932 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose());
930 933
931 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_)); 934 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
932 EXPECT_FALSE(session_); 935 EXPECT_FALSE(session_);
933 } 936 }
934 937
935 TEST_P(SpdySessionTest, ServerPing) { 938 TEST_P(SpdySessionTest, ServerPing) {
936 session_deps_.host_resolver->set_synchronous_mode(true); 939 session_deps_.host_resolver->set_synchronous_mode(true);
937 940
938 scoped_ptr<SpdyFrame> read_ping(spdy_util_.ConstructSpdyPing(2, false)); 941 scoped_ptr<SpdySerializedFrame> read_ping(
942 spdy_util_.ConstructSpdyPing(2, false));
939 MockRead reads[] = { 943 MockRead reads[] = {
940 CreateMockRead(*read_ping), 944 CreateMockRead(*read_ping),
941 MockRead(SYNCHRONOUS, 0, 0) // EOF 945 MockRead(SYNCHRONOUS, 0, 0) // EOF
942 }; 946 };
943 scoped_ptr<SpdyFrame> write_ping(spdy_util_.ConstructSpdyPing(2, true)); 947 scoped_ptr<SpdySerializedFrame> write_ping(
948 spdy_util_.ConstructSpdyPing(2, true));
944 MockWrite writes[] = { 949 MockWrite writes[] = {
945 CreateMockWrite(*write_ping), 950 CreateMockWrite(*write_ping),
946 }; 951 };
947 StaticSocketDataProvider data( 952 StaticSocketDataProvider data(
948 reads, arraysize(reads), writes, arraysize(writes)); 953 reads, arraysize(reads), writes, arraysize(writes));
949 session_deps_.socket_factory->AddSocketDataProvider(&data); 954 session_deps_.socket_factory->AddSocketDataProvider(&data);
950 955
951 CreateNetworkSession(); 956 CreateNetworkSession();
952 CreateInsecureSpdySession(); 957 CreateInsecureSpdySession();
953 958
(...skipping 13 matching lines...) Expand all
967 } 972 }
968 973
969 // Cause a ping to be sent out while producing a write. The write loop 974 // Cause a ping to be sent out while producing a write. The write loop
970 // should handle this properly, i.e. another DoWriteLoop task should 975 // should handle this properly, i.e. another DoWriteLoop task should
971 // not be posted. This is a regression test for 976 // not be posted. This is a regression test for
972 // http://crbug.com/261043 . 977 // http://crbug.com/261043 .
973 TEST_P(SpdySessionTest, PingAndWriteLoop) { 978 TEST_P(SpdySessionTest, PingAndWriteLoop) {
974 session_deps_.enable_ping = true; 979 session_deps_.enable_ping = true;
975 session_deps_.time_func = TheNearFuture; 980 session_deps_.time_func = TheNearFuture;
976 981
977 scoped_ptr<SpdyFrame> write_ping(spdy_util_.ConstructSpdyPing(1, false)); 982 scoped_ptr<SpdySerializedFrame> write_ping(
978 scoped_ptr<SpdyFrame> req( 983 spdy_util_.ConstructSpdyPing(1, false));
984 scoped_ptr<SpdySerializedFrame> req(
979 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 985 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
980 MockWrite writes[] = { 986 MockWrite writes[] = {
981 CreateMockWrite(*req, 0), 987 CreateMockWrite(*req, 0),
982 CreateMockWrite(*write_ping, 1), 988 CreateMockWrite(*write_ping, 1),
983 }; 989 };
984 990
985 MockRead reads[] = { 991 MockRead reads[] = {
986 MockRead(ASYNC, ERR_IO_PENDING, 2), MockRead(ASYNC, 0, 3) // EOF 992 MockRead(ASYNC, ERR_IO_PENDING, 2), MockRead(ASYNC, 0, 3) // EOF
987 }; 993 };
988 994
(...skipping 29 matching lines...) Expand all
1018 const SpdyStreamId kLastStreamId = 0x7fffffff; 1024 const SpdyStreamId kLastStreamId = 0x7fffffff;
1019 session_deps_.host_resolver->set_synchronous_mode(true); 1025 session_deps_.host_resolver->set_synchronous_mode(true);
1020 1026
1021 // Test setup: |stream_hi_water_mark_| and |max_concurrent_streams_| are 1027 // Test setup: |stream_hi_water_mark_| and |max_concurrent_streams_| are
1022 // fixed to allow for two stream ID assignments, and three concurrent 1028 // fixed to allow for two stream ID assignments, and three concurrent
1023 // streams. Four streams are started, and two are activated. Verify the 1029 // streams. Four streams are started, and two are activated. Verify the
1024 // session goes away, and that the created (but not activated) and 1030 // session goes away, and that the created (but not activated) and
1025 // stalled streams are aborted. Also verify the activated streams complete, 1031 // stalled streams are aborted. Also verify the activated streams complete,
1026 // at which point the session closes. 1032 // at which point the session closes.
1027 1033
1028 scoped_ptr<SpdyFrame> req1( 1034 scoped_ptr<SpdySerializedFrame> req1(
1029 spdy_util_.ConstructSpdyGet(nullptr, 0, kLastStreamId - 2, MEDIUM, true)); 1035 spdy_util_.ConstructSpdyGet(nullptr, 0, kLastStreamId - 2, MEDIUM, true));
1030 scoped_ptr<SpdyFrame> req2( 1036 scoped_ptr<SpdySerializedFrame> req2(
1031 spdy_util_.ConstructSpdyGet(nullptr, 0, kLastStreamId, MEDIUM, true)); 1037 spdy_util_.ConstructSpdyGet(nullptr, 0, kLastStreamId, MEDIUM, true));
1032 1038
1033 MockWrite writes[] = { 1039 MockWrite writes[] = {
1034 CreateMockWrite(*req1, 0), CreateMockWrite(*req2, 1), 1040 CreateMockWrite(*req1, 0), CreateMockWrite(*req2, 1),
1035 }; 1041 };
1036 1042
1037 scoped_ptr<SpdyFrame> resp1( 1043 scoped_ptr<SpdySerializedFrame> resp1(
1038 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, kLastStreamId - 2)); 1044 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, kLastStreamId - 2));
1039 scoped_ptr<SpdyFrame> resp2( 1045 scoped_ptr<SpdySerializedFrame> resp2(
1040 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, kLastStreamId)); 1046 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, kLastStreamId));
1041 1047
1042 scoped_ptr<SpdyFrame> body1( 1048 scoped_ptr<SpdySerializedFrame> body1(
1043 spdy_util_.ConstructSpdyBodyFrame(kLastStreamId - 2, true)); 1049 spdy_util_.ConstructSpdyBodyFrame(kLastStreamId - 2, true));
1044 scoped_ptr<SpdyFrame> body2( 1050 scoped_ptr<SpdySerializedFrame> body2(
1045 spdy_util_.ConstructSpdyBodyFrame(kLastStreamId, true)); 1051 spdy_util_.ConstructSpdyBodyFrame(kLastStreamId, true));
1046 1052
1047 MockRead reads[] = { 1053 MockRead reads[] = {
1048 CreateMockRead(*resp1, 2), 1054 CreateMockRead(*resp1, 2),
1049 CreateMockRead(*resp2, 3), 1055 CreateMockRead(*resp2, 3),
1050 MockRead(ASYNC, ERR_IO_PENDING, 4), 1056 MockRead(ASYNC, ERR_IO_PENDING, 4),
1051 CreateMockRead(*body1, 5), 1057 CreateMockRead(*body1, 5),
1052 CreateMockRead(*body2, 6), 1058 CreateMockRead(*body2, 6),
1053 MockRead(ASYNC, 0, 7) // EOF 1059 MockRead(ASYNC, 0, 7) // EOF
1054 }; 1060 };
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1138 TEST_P(SpdySessionTest, MaxConcurrentStreamsZero) { 1144 TEST_P(SpdySessionTest, MaxConcurrentStreamsZero) {
1139 session_deps_.host_resolver->set_synchronous_mode(true); 1145 session_deps_.host_resolver->set_synchronous_mode(true);
1140 1146
1141 int seq = 0; 1147 int seq = 0;
1142 std::vector<MockRead> reads; 1148 std::vector<MockRead> reads;
1143 1149
1144 // Receive SETTINGS frame that sets max_concurrent_streams to zero. 1150 // Receive SETTINGS frame that sets max_concurrent_streams to zero.
1145 SettingsMap settings_zero; 1151 SettingsMap settings_zero;
1146 settings_zero[SETTINGS_MAX_CONCURRENT_STREAMS] = 1152 settings_zero[SETTINGS_MAX_CONCURRENT_STREAMS] =
1147 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 0); 1153 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 0);
1148 scoped_ptr<SpdyFrame> settings_frame_zero( 1154 scoped_ptr<SpdySerializedFrame> settings_frame_zero(
1149 spdy_util_.ConstructSpdySettings(settings_zero)); 1155 spdy_util_.ConstructSpdySettings(settings_zero));
1150 reads.push_back(CreateMockRead(*settings_frame_zero, seq++)); 1156 reads.push_back(CreateMockRead(*settings_frame_zero, seq++));
1151 1157
1152 // Acknowledge it. 1158 // Acknowledge it.
1153 std::vector<MockWrite> writes; 1159 std::vector<MockWrite> writes;
1154 scoped_ptr<SpdyFrame> settings_ack0; 1160 scoped_ptr<SpdySerializedFrame> settings_ack0;
1155 if (GetProtocol() == kProtoHTTP2) { 1161 if (GetProtocol() == kProtoHTTP2) {
1156 settings_ack0.reset(spdy_util_.ConstructSpdySettingsAck()); 1162 settings_ack0.reset(spdy_util_.ConstructSpdySettingsAck());
1157 writes.push_back(CreateMockWrite(*settings_ack0, seq++)); 1163 writes.push_back(CreateMockWrite(*settings_ack0, seq++));
1158 } 1164 }
1159 1165
1160 // Pause. 1166 // Pause.
1161 reads.push_back(MockRead(ASYNC, ERR_IO_PENDING, seq++)); 1167 reads.push_back(MockRead(ASYNC, ERR_IO_PENDING, seq++));
1162 1168
1163 // Receive SETTINGS frame that sets max_concurrent_streams to one. 1169 // Receive SETTINGS frame that sets max_concurrent_streams to one.
1164 SettingsMap settings_one; 1170 SettingsMap settings_one;
1165 settings_one[SETTINGS_MAX_CONCURRENT_STREAMS] = 1171 settings_one[SETTINGS_MAX_CONCURRENT_STREAMS] =
1166 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 1); 1172 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 1);
1167 scoped_ptr<SpdyFrame> settings_frame_one( 1173 scoped_ptr<SpdySerializedFrame> settings_frame_one(
1168 spdy_util_.ConstructSpdySettings(settings_one)); 1174 spdy_util_.ConstructSpdySettings(settings_one));
1169 reads.push_back(CreateMockRead(*settings_frame_one, seq++)); 1175 reads.push_back(CreateMockRead(*settings_frame_one, seq++));
1170 1176
1171 // Acknowledge it. 1177 // Acknowledge it.
1172 scoped_ptr<SpdyFrame> settings_ack1; 1178 scoped_ptr<SpdySerializedFrame> settings_ack1;
1173 if (GetProtocol() == kProtoHTTP2) { 1179 if (GetProtocol() == kProtoHTTP2) {
1174 settings_ack1.reset(spdy_util_.ConstructSpdySettingsAck()); 1180 settings_ack1.reset(spdy_util_.ConstructSpdySettingsAck());
1175 writes.push_back(CreateMockWrite(*settings_ack1, seq++)); 1181 writes.push_back(CreateMockWrite(*settings_ack1, seq++));
1176 } 1182 }
1177 1183
1178 // Request and response. 1184 // Request and response.
1179 scoped_ptr<SpdyFrame> req( 1185 scoped_ptr<SpdySerializedFrame> req(
1180 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 1186 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
1181 writes.push_back(CreateMockWrite(*req, seq++)); 1187 writes.push_back(CreateMockWrite(*req, seq++));
1182 1188
1183 scoped_ptr<SpdyFrame> resp( 1189 scoped_ptr<SpdySerializedFrame> resp(
1184 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 1190 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
1185 reads.push_back(CreateMockRead(*resp, seq++)); 1191 reads.push_back(CreateMockRead(*resp, seq++));
1186 1192
1187 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true)); 1193 scoped_ptr<SpdySerializedFrame> body(
1194 spdy_util_.ConstructSpdyBodyFrame(1, true));
1188 reads.push_back(CreateMockRead(*body, seq++)); 1195 reads.push_back(CreateMockRead(*body, seq++));
1189 1196
1190 reads.push_back(MockRead(ASYNC, 0, seq++)); 1197 reads.push_back(MockRead(ASYNC, 0, seq++));
1191 1198
1192 SequencedSocketData data(reads.data(), reads.size(), writes.data(), 1199 SequencedSocketData data(reads.data(), reads.size(), writes.data(),
1193 writes.size()); 1200 writes.size());
1194 session_deps_.socket_factory->AddSocketDataProvider(&data); 1201 session_deps_.socket_factory->AddSocketDataProvider(&data);
1195 1202
1196 // Create session. 1203 // Create session.
1197 CreateNetworkSession(); 1204 CreateNetworkSession();
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
1299 1306
1300 EXPECT_EQ(1u, session_->num_created_streams()); 1307 EXPECT_EQ(1u, session_->num_created_streams());
1301 EXPECT_EQ(0u, session_->pending_create_stream_queue_size(MEDIUM)); 1308 EXPECT_EQ(0u, session_->pending_create_stream_queue_size(MEDIUM));
1302 EXPECT_EQ(OK, callback2.WaitForResult()); 1309 EXPECT_EQ(OK, callback2.WaitForResult());
1303 } 1310 }
1304 1311
1305 TEST_P(SpdySessionTest, DeleteExpiredPushStreams) { 1312 TEST_P(SpdySessionTest, DeleteExpiredPushStreams) {
1306 session_deps_.host_resolver->set_synchronous_mode(true); 1313 session_deps_.host_resolver->set_synchronous_mode(true);
1307 session_deps_.time_func = TheNearFuture; 1314 session_deps_.time_func = TheNearFuture;
1308 1315
1309 scoped_ptr<SpdyFrame> req( 1316 scoped_ptr<SpdySerializedFrame> req(
1310 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 1317 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
1311 scoped_ptr<SpdyFrame> rst( 1318 scoped_ptr<SpdySerializedFrame> rst(
1312 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); 1319 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM));
1313 MockWrite writes[] = {CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5)}; 1320 MockWrite writes[] = {CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5)};
1314 1321
1315 scoped_ptr<SpdyFrame> push_a(spdy_util_.ConstructSpdyPush( 1322 scoped_ptr<SpdySerializedFrame> push_a(spdy_util_.ConstructSpdyPush(
1316 nullptr, 0, 2, 1, "http://www.example.org/a.dat")); 1323 nullptr, 0, 2, 1, "http://www.example.org/a.dat"));
1317 scoped_ptr<SpdyFrame> push_a_body( 1324 scoped_ptr<SpdySerializedFrame> push_a_body(
1318 spdy_util_.ConstructSpdyBodyFrame(2, false)); 1325 spdy_util_.ConstructSpdyBodyFrame(2, false));
1319 // In ascii "0" < "a". We use it to verify that we properly handle std::map 1326 // In ascii "0" < "a". We use it to verify that we properly handle std::map
1320 // iterators inside. See http://crbug.com/443490 1327 // iterators inside. See http://crbug.com/443490
1321 scoped_ptr<SpdyFrame> push_b(spdy_util_.ConstructSpdyPush( 1328 scoped_ptr<SpdySerializedFrame> push_b(spdy_util_.ConstructSpdyPush(
1322 nullptr, 0, 4, 1, "http://www.example.org/0.dat")); 1329 nullptr, 0, 4, 1, "http://www.example.org/0.dat"));
1323 MockRead reads[] = { 1330 MockRead reads[] = {
1324 CreateMockRead(*push_a, 1), 1331 CreateMockRead(*push_a, 1),
1325 CreateMockRead(*push_a_body, 2), 1332 CreateMockRead(*push_a_body, 2),
1326 MockRead(ASYNC, ERR_IO_PENDING, 3), 1333 MockRead(ASYNC, ERR_IO_PENDING, 3),
1327 CreateMockRead(*push_b, 4), 1334 CreateMockRead(*push_b, 4),
1328 MockRead(ASYNC, ERR_IO_PENDING, 6), 1335 MockRead(ASYNC, ERR_IO_PENDING, 6),
1329 MockRead(ASYNC, 0, 7) // EOF 1336 MockRead(ASYNC, 0, 7) // EOF
1330 }; 1337 };
1331 1338
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1380 base::RunLoop().RunUntilIdle(); 1387 base::RunLoop().RunUntilIdle();
1381 EXPECT_FALSE(session_); 1388 EXPECT_FALSE(session_);
1382 } 1389 }
1383 1390
1384 TEST_P(SpdySessionTest, FailedPing) { 1391 TEST_P(SpdySessionTest, FailedPing) {
1385 session_deps_.host_resolver->set_synchronous_mode(true); 1392 session_deps_.host_resolver->set_synchronous_mode(true);
1386 1393
1387 MockRead reads[] = { 1394 MockRead reads[] = {
1388 MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever. 1395 MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever.
1389 }; 1396 };
1390 scoped_ptr<SpdyFrame> write_ping(spdy_util_.ConstructSpdyPing(1, false)); 1397 scoped_ptr<SpdySerializedFrame> write_ping(
1391 scoped_ptr<SpdyFrame> goaway( 1398 spdy_util_.ConstructSpdyPing(1, false));
1399 scoped_ptr<SpdySerializedFrame> goaway(
1392 spdy_util_.ConstructSpdyGoAway(0, GOAWAY_PROTOCOL_ERROR, "Failed ping.")); 1400 spdy_util_.ConstructSpdyGoAway(0, GOAWAY_PROTOCOL_ERROR, "Failed ping."));
1393 MockWrite writes[] = {CreateMockWrite(*write_ping), CreateMockWrite(*goaway)}; 1401 MockWrite writes[] = {CreateMockWrite(*write_ping), CreateMockWrite(*goaway)};
1394 1402
1395 StaticSocketDataProvider data( 1403 StaticSocketDataProvider data(
1396 reads, arraysize(reads), writes, arraysize(writes)); 1404 reads, arraysize(reads), writes, arraysize(writes));
1397 session_deps_.socket_factory->AddSocketDataProvider(&data); 1405 session_deps_.socket_factory->AddSocketDataProvider(&data);
1398 1406
1399 CreateNetworkSession(); 1407 CreateNetworkSession();
1400 CreateInsecureSpdySession(); 1408 CreateInsecureSpdySession();
1401 1409
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1437 // settings frame increasing the max concurrent streams by 1. Make 1445 // settings frame increasing the max concurrent streams by 1. Make
1438 // sure nothing blows up. This is a regression test for 1446 // sure nothing blows up. This is a regression test for
1439 // http://crbug.com/57331 . 1447 // http://crbug.com/57331 .
1440 TEST_P(SpdySessionTest, OnSettings) { 1448 TEST_P(SpdySessionTest, OnSettings) {
1441 session_deps_.host_resolver->set_synchronous_mode(true); 1449 session_deps_.host_resolver->set_synchronous_mode(true);
1442 1450
1443 const SpdySettingsIds kSpdySettingsIds = SETTINGS_MAX_CONCURRENT_STREAMS; 1451 const SpdySettingsIds kSpdySettingsIds = SETTINGS_MAX_CONCURRENT_STREAMS;
1444 1452
1445 int seq = 0; 1453 int seq = 0;
1446 std::vector<MockWrite> writes; 1454 std::vector<MockWrite> writes;
1447 scoped_ptr<SpdyFrame> settings_ack(spdy_util_.ConstructSpdySettingsAck()); 1455 scoped_ptr<SpdySerializedFrame> settings_ack(
1456 spdy_util_.ConstructSpdySettingsAck());
1448 if (GetProtocol() == kProtoHTTP2) { 1457 if (GetProtocol() == kProtoHTTP2) {
1449 writes.push_back(CreateMockWrite(*settings_ack, ++seq)); 1458 writes.push_back(CreateMockWrite(*settings_ack, ++seq));
1450 } 1459 }
1451 1460
1452 SettingsMap new_settings; 1461 SettingsMap new_settings;
1453 const uint32_t max_concurrent_streams = kInitialMaxConcurrentStreams + 1; 1462 const uint32_t max_concurrent_streams = kInitialMaxConcurrentStreams + 1;
1454 new_settings[kSpdySettingsIds] = 1463 new_settings[kSpdySettingsIds] =
1455 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams); 1464 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams);
1456 scoped_ptr<SpdyFrame> settings_frame( 1465 scoped_ptr<SpdySerializedFrame> settings_frame(
1457 spdy_util_.ConstructSpdySettings(new_settings)); 1466 spdy_util_.ConstructSpdySettings(new_settings));
1458 MockRead reads[] = { 1467 MockRead reads[] = {
1459 CreateMockRead(*settings_frame, 0), 1468 CreateMockRead(*settings_frame, 0),
1460 MockRead(ASYNC, ERR_IO_PENDING, ++seq), 1469 MockRead(ASYNC, ERR_IO_PENDING, ++seq),
1461 MockRead(ASYNC, 0, ++seq), 1470 MockRead(ASYNC, 0, ++seq),
1462 }; 1471 };
1463 1472
1464 SequencedSocketData data(reads, arraysize(reads), writes.data(), 1473 SequencedSocketData data(reads, arraysize(reads), writes.data(),
1465 writes.size()); 1474 writes.size());
1466 session_deps_.socket_factory->AddSocketDataProvider(&data); 1475 session_deps_.socket_factory->AddSocketDataProvider(&data);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1503 // HTTP/2 doesn't include settings persistence, or a CLEAR_SETTINGS flag. 1512 // HTTP/2 doesn't include settings persistence, or a CLEAR_SETTINGS flag.
1504 // Flag 0x1, CLEAR_SETTINGS in SPDY3, is instead settings ACK in HTTP/2. 1513 // Flag 0x1, CLEAR_SETTINGS in SPDY3, is instead settings ACK in HTTP/2.
1505 return; 1514 return;
1506 } 1515 }
1507 session_deps_.host_resolver->set_synchronous_mode(true); 1516 session_deps_.host_resolver->set_synchronous_mode(true);
1508 1517
1509 SettingsMap new_settings; 1518 SettingsMap new_settings;
1510 const uint32_t max_concurrent_streams = kInitialMaxConcurrentStreams + 1; 1519 const uint32_t max_concurrent_streams = kInitialMaxConcurrentStreams + 1;
1511 new_settings[SETTINGS_MAX_CONCURRENT_STREAMS] = 1520 new_settings[SETTINGS_MAX_CONCURRENT_STREAMS] =
1512 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams); 1521 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams);
1513 scoped_ptr<SpdyFrame> settings_frame( 1522 scoped_ptr<SpdySerializedFrame> settings_frame(
1514 spdy_util_.ConstructSpdySettings(new_settings)); 1523 spdy_util_.ConstructSpdySettings(new_settings));
1515 uint8_t flags = SETTINGS_FLAG_CLEAR_PREVIOUSLY_PERSISTED_SETTINGS; 1524 uint8_t flags = SETTINGS_FLAG_CLEAR_PREVIOUSLY_PERSISTED_SETTINGS;
1516 test::SetFrameFlags(settings_frame.get(), flags, spdy_util_.spdy_version()); 1525 test::SetFrameFlags(settings_frame.get(), flags, spdy_util_.spdy_version());
1517 MockRead reads[] = { 1526 MockRead reads[] = {
1518 CreateMockRead(*settings_frame, 0), 1527 CreateMockRead(*settings_frame, 0),
1519 MockRead(ASYNC, ERR_IO_PENDING, 1), 1528 MockRead(ASYNC, ERR_IO_PENDING, 1),
1520 MockRead(ASYNC, 0, 2), 1529 MockRead(ASYNC, 0, 2),
1521 }; 1530 };
1522 1531
1523 SequencedSocketData data(reads, arraysize(reads), nullptr, 0); 1532 SequencedSocketData data(reads, arraysize(reads), nullptr, 0);
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1632 TEST_P(SpdySessionTest, SendInitialDataOnNewSession) { 1641 TEST_P(SpdySessionTest, SendInitialDataOnNewSession) {
1633 session_deps_.host_resolver->set_synchronous_mode(true); 1642 session_deps_.host_resolver->set_synchronous_mode(true);
1634 1643
1635 MockRead reads[] = { 1644 MockRead reads[] = {
1636 MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever. 1645 MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever.
1637 }; 1646 };
1638 1647
1639 SettingsMap settings; 1648 SettingsMap settings;
1640 settings[SETTINGS_MAX_CONCURRENT_STREAMS] = 1649 settings[SETTINGS_MAX_CONCURRENT_STREAMS] =
1641 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, kMaxConcurrentPushedStreams); 1650 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, kMaxConcurrentPushedStreams);
1642 scoped_ptr<SpdyFrame> settings_frame( 1651 scoped_ptr<SpdySerializedFrame> settings_frame(
1643 spdy_util_.ConstructSpdySettings(settings)); 1652 spdy_util_.ConstructSpdySettings(settings));
1644 std::vector<MockWrite> writes; 1653 std::vector<MockWrite> writes;
1645 if (GetProtocol() == kProtoHTTP2) { 1654 if (GetProtocol() == kProtoHTTP2) {
1646 writes.push_back( 1655 writes.push_back(
1647 MockWrite(ASYNC, 1656 MockWrite(ASYNC,
1648 kHttp2ConnectionHeaderPrefix, 1657 kHttp2ConnectionHeaderPrefix,
1649 kHttp2ConnectionHeaderPrefixSize)); 1658 kHttp2ConnectionHeaderPrefixSize));
1650 } 1659 }
1651 writes.push_back(CreateMockWrite(*settings_frame)); 1660 writes.push_back(CreateMockWrite(*settings_frame));
1652 1661
1653 SettingsMap server_settings; 1662 SettingsMap server_settings;
1654 const uint32_t initial_max_concurrent_streams = 1; 1663 const uint32_t initial_max_concurrent_streams = 1;
1655 server_settings[SETTINGS_MAX_CONCURRENT_STREAMS] = 1664 server_settings[SETTINGS_MAX_CONCURRENT_STREAMS] =
1656 SettingsFlagsAndValue(SETTINGS_FLAG_PERSISTED, 1665 SettingsFlagsAndValue(SETTINGS_FLAG_PERSISTED,
1657 initial_max_concurrent_streams); 1666 initial_max_concurrent_streams);
1658 scoped_ptr<SpdyFrame> server_settings_frame( 1667 scoped_ptr<SpdySerializedFrame> server_settings_frame(
1659 spdy_util_.ConstructSpdySettings(server_settings)); 1668 spdy_util_.ConstructSpdySettings(server_settings));
1660 if (GetProtocol() == kProtoSPDY31) { 1669 if (GetProtocol() == kProtoSPDY31) {
1661 writes.push_back(CreateMockWrite(*server_settings_frame)); 1670 writes.push_back(CreateMockWrite(*server_settings_frame));
1662 } 1671 }
1663 1672
1664 StaticSocketDataProvider data(reads, arraysize(reads), writes.data(), 1673 StaticSocketDataProvider data(reads, arraysize(reads), writes.data(),
1665 writes.size()); 1674 writes.size());
1666 session_deps_.socket_factory->AddSocketDataProvider(&data); 1675 session_deps_.socket_factory->AddSocketDataProvider(&data);
1667 1676
1668 CreateNetworkSession(); 1677 CreateNetworkSession();
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1730 NetLog::Source socket_source; 1739 NetLog::Source socket_source;
1731 EXPECT_TRUE(NetLog::Source::FromEventParameters(entry.params.get(), 1740 EXPECT_TRUE(NetLog::Source::FromEventParameters(entry.params.get(),
1732 &socket_source)); 1741 &socket_source));
1733 EXPECT_TRUE(socket_source.IsValid()); 1742 EXPECT_TRUE(socket_source.IsValid());
1734 EXPECT_NE(log_.bound().source().id, socket_source.id); 1743 EXPECT_NE(log_.bound().source().id, socket_source.id);
1735 } 1744 }
1736 1745
1737 TEST_P(SpdySessionTest, NetLogOnSessionGoaway) { 1746 TEST_P(SpdySessionTest, NetLogOnSessionGoaway) {
1738 session_deps_.host_resolver->set_synchronous_mode(true); 1747 session_deps_.host_resolver->set_synchronous_mode(true);
1739 1748
1740 scoped_ptr<SpdyFrame> goaway( 1749 scoped_ptr<SpdySerializedFrame> goaway(
1741 spdy_util_.ConstructSpdyGoAway(42, GOAWAY_ENHANCE_YOUR_CALM, "foo")); 1750 spdy_util_.ConstructSpdyGoAway(42, GOAWAY_ENHANCE_YOUR_CALM, "foo"));
1742 MockRead reads[] = { 1751 MockRead reads[] = {
1743 CreateMockRead(*goaway), 1752 CreateMockRead(*goaway),
1744 MockRead(SYNCHRONOUS, 0, 0) // EOF 1753 MockRead(SYNCHRONOUS, 0, 0) // EOF
1745 }; 1754 };
1746 1755
1747 StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0); 1756 StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0);
1748 session_deps_.socket_factory->AddSocketDataProvider(&data); 1757 session_deps_.socket_factory->AddSocketDataProvider(&data);
1749 1758
1750 CreateNetworkSession(); 1759 CreateNetworkSession();
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
1826 TestNetLogEntry entry = entries[pos]; 1835 TestNetLogEntry entry = entries[pos];
1827 int error_code = 0; 1836 int error_code = 0;
1828 ASSERT_TRUE(entry.GetNetErrorCode(&error_code)); 1837 ASSERT_TRUE(entry.GetNetErrorCode(&error_code));
1829 EXPECT_EQ(ERR_CONNECTION_CLOSED, error_code); 1838 EXPECT_EQ(ERR_CONNECTION_CLOSED, error_code);
1830 } else { 1839 } else {
1831 ADD_FAILURE(); 1840 ADD_FAILURE();
1832 } 1841 }
1833 } 1842 }
1834 1843
1835 TEST_P(SpdySessionTest, SynCompressionHistograms) { 1844 TEST_P(SpdySessionTest, SynCompressionHistograms) {
1836 scoped_ptr<SpdyFrame> req( 1845 scoped_ptr<SpdySerializedFrame> req(
1837 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 1846 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
1838 MockWrite writes[] = { 1847 MockWrite writes[] = {
1839 CreateMockWrite(*req, 0), 1848 CreateMockWrite(*req, 0),
1840 }; 1849 };
1841 MockRead reads[] = { 1850 MockRead reads[] = {
1842 MockRead(ASYNC, ERR_IO_PENDING, 1), MockRead(ASYNC, 0, 2) // EOF 1851 MockRead(ASYNC, ERR_IO_PENDING, 1), MockRead(ASYNC, 0, 2) // EOF
1843 }; 1852 };
1844 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 1853 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
1845 session_deps_.socket_factory->AddSocketDataProvider(&data); 1854 session_deps_.socket_factory->AddSocketDataProvider(&data);
1846 1855
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1880 data.Resume(); 1889 data.Resume();
1881 base::RunLoop().RunUntilIdle(); 1890 base::RunLoop().RunUntilIdle();
1882 EXPECT_FALSE(session_); 1891 EXPECT_FALSE(session_);
1883 } 1892 }
1884 1893
1885 // Queue up a low-priority SYN_STREAM followed by a high-priority 1894 // Queue up a low-priority SYN_STREAM followed by a high-priority
1886 // one. The high priority one should still send first and receive 1895 // one. The high priority one should still send first and receive
1887 // first. 1896 // first.
1888 TEST_P(SpdySessionTest, OutOfOrderSynStreams) { 1897 TEST_P(SpdySessionTest, OutOfOrderSynStreams) {
1889 // Construct the request. 1898 // Construct the request.
1890 scoped_ptr<SpdyFrame> req_highest( 1899 scoped_ptr<SpdySerializedFrame> req_highest(
1891 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, HIGHEST, true)); 1900 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, HIGHEST, true));
1892 scoped_ptr<SpdyFrame> req_lowest( 1901 scoped_ptr<SpdySerializedFrame> req_lowest(
1893 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, LOWEST, true)); 1902 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, LOWEST, true));
1894 MockWrite writes[] = { 1903 MockWrite writes[] = {
1895 CreateMockWrite(*req_highest, 0), 1904 CreateMockWrite(*req_highest, 0),
1896 CreateMockWrite(*req_lowest, 1), 1905 CreateMockWrite(*req_lowest, 1),
1897 }; 1906 };
1898 1907
1899 scoped_ptr<SpdyFrame> resp_highest( 1908 scoped_ptr<SpdySerializedFrame> resp_highest(
1900 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 1909 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
1901 scoped_ptr<SpdyFrame> body_highest( 1910 scoped_ptr<SpdySerializedFrame> body_highest(
1902 spdy_util_.ConstructSpdyBodyFrame(1, true)); 1911 spdy_util_.ConstructSpdyBodyFrame(1, true));
1903 scoped_ptr<SpdyFrame> resp_lowest( 1912 scoped_ptr<SpdySerializedFrame> resp_lowest(
1904 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 3)); 1913 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 3));
1905 scoped_ptr<SpdyFrame> body_lowest( 1914 scoped_ptr<SpdySerializedFrame> body_lowest(
1906 spdy_util_.ConstructSpdyBodyFrame(3, true)); 1915 spdy_util_.ConstructSpdyBodyFrame(3, true));
1907 MockRead reads[] = { 1916 MockRead reads[] = {
1908 CreateMockRead(*resp_highest, 2), 1917 CreateMockRead(*resp_highest, 2),
1909 CreateMockRead(*body_highest, 3), 1918 CreateMockRead(*body_highest, 3),
1910 CreateMockRead(*resp_lowest, 4), 1919 CreateMockRead(*resp_lowest, 4),
1911 CreateMockRead(*body_lowest, 5), 1920 CreateMockRead(*body_lowest, 5),
1912 MockRead(ASYNC, 0, 6) // EOF 1921 MockRead(ASYNC, 0, 6) // EOF
1913 }; 1922 };
1914 1923
1915 session_deps_.host_resolver->set_synchronous_mode(true); 1924 session_deps_.host_resolver->set_synchronous_mode(true);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1953 1962
1954 EXPECT_FALSE(spdy_stream_lowest); 1963 EXPECT_FALSE(spdy_stream_lowest);
1955 EXPECT_FALSE(spdy_stream_highest); 1964 EXPECT_FALSE(spdy_stream_highest);
1956 EXPECT_EQ(3u, delegate_lowest.stream_id()); 1965 EXPECT_EQ(3u, delegate_lowest.stream_id());
1957 EXPECT_EQ(1u, delegate_highest.stream_id()); 1966 EXPECT_EQ(1u, delegate_highest.stream_id());
1958 } 1967 }
1959 1968
1960 TEST_P(SpdySessionTest, CancelStream) { 1969 TEST_P(SpdySessionTest, CancelStream) {
1961 // Request 1, at HIGHEST priority, will be cancelled before it writes data. 1970 // Request 1, at HIGHEST priority, will be cancelled before it writes data.
1962 // Request 2, at LOWEST priority, will be a full request and will be id 1. 1971 // Request 2, at LOWEST priority, will be a full request and will be id 1.
1963 scoped_ptr<SpdyFrame> req2( 1972 scoped_ptr<SpdySerializedFrame> req2(
1964 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 1973 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
1965 MockWrite writes[] = { 1974 MockWrite writes[] = {
1966 CreateMockWrite(*req2, 0), 1975 CreateMockWrite(*req2, 0),
1967 }; 1976 };
1968 1977
1969 scoped_ptr<SpdyFrame> resp2( 1978 scoped_ptr<SpdySerializedFrame> resp2(
1970 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 1979 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
1971 scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(1, true)); 1980 scoped_ptr<SpdySerializedFrame> body2(
1981 spdy_util_.ConstructSpdyBodyFrame(1, true));
1972 MockRead reads[] = { 1982 MockRead reads[] = {
1973 CreateMockRead(*resp2, 1), 1983 CreateMockRead(*resp2, 1),
1974 MockRead(ASYNC, ERR_IO_PENDING, 2), 1984 MockRead(ASYNC, ERR_IO_PENDING, 2),
1975 CreateMockRead(*body2, 3), 1985 CreateMockRead(*body2, 3),
1976 MockRead(ASYNC, 0, 4) // EOF 1986 MockRead(ASYNC, 0, 4) // EOF
1977 }; 1987 };
1978 1988
1979 session_deps_.host_resolver->set_synchronous_mode(true); 1989 session_deps_.host_resolver->set_synchronous_mode(true);
1980 1990
1981 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 1991 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
2143 2153
2144 base::RunLoop().RunUntilIdle(); 2154 base::RunLoop().RunUntilIdle();
2145 EXPECT_FALSE(session_); 2155 EXPECT_FALSE(session_);
2146 } 2156 }
2147 2157
2148 // Create two streams that are set to re-close themselves on close, 2158 // Create two streams that are set to re-close themselves on close,
2149 // activate them, and then close the session. Nothing should blow up. 2159 // activate them, and then close the session. Nothing should blow up.
2150 TEST_P(SpdySessionTest, CloseSessionWithTwoActivatedSelfClosingStreams) { 2160 TEST_P(SpdySessionTest, CloseSessionWithTwoActivatedSelfClosingStreams) {
2151 session_deps_.host_resolver->set_synchronous_mode(true); 2161 session_deps_.host_resolver->set_synchronous_mode(true);
2152 2162
2153 scoped_ptr<SpdyFrame> req1( 2163 scoped_ptr<SpdySerializedFrame> req1(
2154 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2164 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
2155 scoped_ptr<SpdyFrame> req2( 2165 scoped_ptr<SpdySerializedFrame> req2(
2156 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, MEDIUM, true)); 2166 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, MEDIUM, true));
2157 MockWrite writes[] = { 2167 MockWrite writes[] = {
2158 CreateMockWrite(*req1, 0), 2168 CreateMockWrite(*req1, 0),
2159 CreateMockWrite(*req2, 1), 2169 CreateMockWrite(*req2, 1),
2160 }; 2170 };
2161 2171
2162 MockRead reads[] = { 2172 MockRead reads[] = {
2163 MockRead(ASYNC, ERR_IO_PENDING, 2), MockRead(ASYNC, 0, 3) // EOF 2173 MockRead(ASYNC, ERR_IO_PENDING, 2), MockRead(ASYNC, 0, 3) // EOF
2164 }; 2174 };
2165 2175
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
2217 data.Resume(); 2227 data.Resume();
2218 base::RunLoop().RunUntilIdle(); 2228 base::RunLoop().RunUntilIdle();
2219 EXPECT_FALSE(session_); 2229 EXPECT_FALSE(session_);
2220 } 2230 }
2221 2231
2222 // Create two streams that are set to close each other on close, 2232 // Create two streams that are set to close each other on close,
2223 // activate them, and then close the session. Nothing should blow up. 2233 // activate them, and then close the session. Nothing should blow up.
2224 TEST_P(SpdySessionTest, CloseSessionWithTwoActivatedMutuallyClosingStreams) { 2234 TEST_P(SpdySessionTest, CloseSessionWithTwoActivatedMutuallyClosingStreams) {
2225 session_deps_.host_resolver->set_synchronous_mode(true); 2235 session_deps_.host_resolver->set_synchronous_mode(true);
2226 2236
2227 scoped_ptr<SpdyFrame> req1( 2237 scoped_ptr<SpdySerializedFrame> req1(
2228 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2238 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
2229 scoped_ptr<SpdyFrame> req2( 2239 scoped_ptr<SpdySerializedFrame> req2(
2230 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, MEDIUM, true)); 2240 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, MEDIUM, true));
2231 MockWrite writes[] = { 2241 MockWrite writes[] = {
2232 CreateMockWrite(*req1, 0), 2242 CreateMockWrite(*req1, 0),
2233 CreateMockWrite(*req2, 1), 2243 CreateMockWrite(*req2, 1),
2234 }; 2244 };
2235 2245
2236 MockRead reads[] = { 2246 MockRead reads[] = {
2237 MockRead(ASYNC, ERR_IO_PENDING, 2), MockRead(ASYNC, 0, 3) // EOF 2247 MockRead(ASYNC, ERR_IO_PENDING, 2), MockRead(ASYNC, 0, 3) // EOF
2238 }; 2248 };
2239 2249
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
2311 2321
2312 private: 2322 private:
2313 base::WeakPtr<SpdySession> session_to_close_; 2323 base::WeakPtr<SpdySession> session_to_close_;
2314 }; 2324 };
2315 2325
2316 // Close an activated stream that closes its session. Nothing should 2326 // Close an activated stream that closes its session. Nothing should
2317 // blow up. This is a regression test for https://crbug.com/263691. 2327 // blow up. This is a regression test for https://crbug.com/263691.
2318 TEST_P(SpdySessionTest, CloseActivatedStreamThatClosesSession) { 2328 TEST_P(SpdySessionTest, CloseActivatedStreamThatClosesSession) {
2319 session_deps_.host_resolver->set_synchronous_mode(true); 2329 session_deps_.host_resolver->set_synchronous_mode(true);
2320 2330
2321 scoped_ptr<SpdyFrame> req( 2331 scoped_ptr<SpdySerializedFrame> req(
2322 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2332 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
2323 scoped_ptr<SpdyFrame> rst( 2333 scoped_ptr<SpdySerializedFrame> rst(
2324 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); 2334 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
2325 scoped_ptr<SpdyFrame> goaway( 2335 scoped_ptr<SpdySerializedFrame> goaway(
2326 spdy_util_.ConstructSpdyGoAway(0, GOAWAY_PROTOCOL_ERROR, "Error")); 2336 spdy_util_.ConstructSpdyGoAway(0, GOAWAY_PROTOCOL_ERROR, "Error"));
2327 // The GOAWAY has higher-priority than the RST_STREAM, and is written first 2337 // The GOAWAY has higher-priority than the RST_STREAM, and is written first
2328 // despite being queued second. 2338 // despite being queued second.
2329 MockWrite writes[] = { 2339 MockWrite writes[] = {
2330 CreateMockWrite(*req, 0), 2340 CreateMockWrite(*req, 0),
2331 CreateMockWrite(*goaway, 1), 2341 CreateMockWrite(*goaway, 1),
2332 CreateMockWrite(*rst, 3), 2342 CreateMockWrite(*rst, 3),
2333 }; 2343 };
2334 2344
2335 MockRead reads[] = { 2345 MockRead reads[] = {
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
2434 2444
2435 TEST_P(SpdySessionTest, CloseTwoStalledCreateStream) { 2445 TEST_P(SpdySessionTest, CloseTwoStalledCreateStream) {
2436 // TODO(rtenneti): Define a helper class/methods and move the common code in 2446 // TODO(rtenneti): Define a helper class/methods and move the common code in
2437 // this file. 2447 // this file.
2438 SettingsMap new_settings; 2448 SettingsMap new_settings;
2439 const SpdySettingsIds kSpdySettingsIds1 = SETTINGS_MAX_CONCURRENT_STREAMS; 2449 const SpdySettingsIds kSpdySettingsIds1 = SETTINGS_MAX_CONCURRENT_STREAMS;
2440 const uint32_t max_concurrent_streams = 1; 2450 const uint32_t max_concurrent_streams = 1;
2441 new_settings[kSpdySettingsIds1] = 2451 new_settings[kSpdySettingsIds1] =
2442 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams); 2452 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams);
2443 2453
2444 scoped_ptr<SpdyFrame> settings_ack(spdy_util_.ConstructSpdySettingsAck()); 2454 scoped_ptr<SpdySerializedFrame> settings_ack(
2445 scoped_ptr<SpdyFrame> req1( 2455 spdy_util_.ConstructSpdySettingsAck());
2456 scoped_ptr<SpdySerializedFrame> req1(
2446 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 2457 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
2447 spdy_util_.UpdateWithStreamDestruction(1); 2458 spdy_util_.UpdateWithStreamDestruction(1);
2448 scoped_ptr<SpdyFrame> req2( 2459 scoped_ptr<SpdySerializedFrame> req2(
2449 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, LOWEST, true)); 2460 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, LOWEST, true));
2450 spdy_util_.UpdateWithStreamDestruction(3); 2461 spdy_util_.UpdateWithStreamDestruction(3);
2451 scoped_ptr<SpdyFrame> req3( 2462 scoped_ptr<SpdySerializedFrame> req3(
2452 spdy_util_.ConstructSpdyGet(nullptr, 0, 5, LOWEST, true)); 2463 spdy_util_.ConstructSpdyGet(nullptr, 0, 5, LOWEST, true));
2453 MockWrite writes[] = { 2464 MockWrite writes[] = {
2454 CreateMockWrite(*settings_ack, 1), 2465 CreateMockWrite(*settings_ack, 1),
2455 CreateMockWrite(*req1, 2), 2466 CreateMockWrite(*req1, 2),
2456 CreateMockWrite(*req2, 5), 2467 CreateMockWrite(*req2, 5),
2457 CreateMockWrite(*req3, 8), 2468 CreateMockWrite(*req3, 8),
2458 }; 2469 };
2459 2470
2460 // Set up the socket so we read a SETTINGS frame that sets max concurrent 2471 // Set up the socket so we read a SETTINGS frame that sets max concurrent
2461 // streams to 1. 2472 // streams to 1.
2462 scoped_ptr<SpdyFrame> settings_frame( 2473 scoped_ptr<SpdySerializedFrame> settings_frame(
2463 spdy_util_.ConstructSpdySettings(new_settings)); 2474 spdy_util_.ConstructSpdySettings(new_settings));
2464 2475
2465 scoped_ptr<SpdyFrame> resp1( 2476 scoped_ptr<SpdySerializedFrame> resp1(
2466 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 2477 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
2467 scoped_ptr<SpdyFrame> body1(spdy_util_.ConstructSpdyBodyFrame(1, true)); 2478 scoped_ptr<SpdySerializedFrame> body1(
2479 spdy_util_.ConstructSpdyBodyFrame(1, true));
2468 2480
2469 scoped_ptr<SpdyFrame> resp2( 2481 scoped_ptr<SpdySerializedFrame> resp2(
2470 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 3)); 2482 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 3));
2471 scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(3, true)); 2483 scoped_ptr<SpdySerializedFrame> body2(
2484 spdy_util_.ConstructSpdyBodyFrame(3, true));
2472 2485
2473 scoped_ptr<SpdyFrame> resp3( 2486 scoped_ptr<SpdySerializedFrame> resp3(
2474 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 5)); 2487 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 5));
2475 scoped_ptr<SpdyFrame> body3(spdy_util_.ConstructSpdyBodyFrame(5, true)); 2488 scoped_ptr<SpdySerializedFrame> body3(
2489 spdy_util_.ConstructSpdyBodyFrame(5, true));
2476 2490
2477 MockRead reads[] = { 2491 MockRead reads[] = {
2478 CreateMockRead(*settings_frame, 0), 2492 CreateMockRead(*settings_frame, 0),
2479 CreateMockRead(*resp1, 3), 2493 CreateMockRead(*resp1, 3),
2480 CreateMockRead(*body1, 4), 2494 CreateMockRead(*body1, 4),
2481 CreateMockRead(*resp2, 6), 2495 CreateMockRead(*resp2, 6),
2482 CreateMockRead(*body2, 7), 2496 CreateMockRead(*body2, 7),
2483 CreateMockRead(*resp3, 9), 2497 CreateMockRead(*resp3, 9),
2484 CreateMockRead(*body3, 10), 2498 CreateMockRead(*body3, 10),
2485 MockRead(ASYNC, ERR_IO_PENDING, 11), 2499 MockRead(ASYNC, ERR_IO_PENDING, 11),
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
2662 // Test that SpdySession::DoReadLoop reads data from the socket 2676 // Test that SpdySession::DoReadLoop reads data from the socket
2663 // without yielding. This test makes 32k - 1 bytes of data available 2677 // without yielding. This test makes 32k - 1 bytes of data available
2664 // on the socket for reading. It then verifies that it has read all 2678 // on the socket for reading. It then verifies that it has read all
2665 // the available data without yielding. 2679 // the available data without yielding.
2666 TEST_P(SpdySessionTest, ReadDataWithoutYielding) { 2680 TEST_P(SpdySessionTest, ReadDataWithoutYielding) {
2667 session_deps_.host_resolver->set_synchronous_mode(true); 2681 session_deps_.host_resolver->set_synchronous_mode(true);
2668 session_deps_.time_func = InstantaneousReads; 2682 session_deps_.time_func = InstantaneousReads;
2669 2683
2670 BufferedSpdyFramer framer(spdy_util_.spdy_version()); 2684 BufferedSpdyFramer framer(spdy_util_.spdy_version());
2671 2685
2672 scoped_ptr<SpdyFrame> req1( 2686 scoped_ptr<SpdySerializedFrame> req1(
2673 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2687 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
2674 MockWrite writes[] = { 2688 MockWrite writes[] = {
2675 CreateMockWrite(*req1, 0), 2689 CreateMockWrite(*req1, 0),
2676 }; 2690 };
2677 2691
2678 // Build buffer of size kYieldAfterBytesRead / 4 2692 // Build buffer of size kYieldAfterBytesRead / 4
2679 // (-spdy_data_frame_size). 2693 // (-spdy_data_frame_size).
2680 ASSERT_EQ(32 * 1024, kYieldAfterBytesRead); 2694 ASSERT_EQ(32 * 1024, kYieldAfterBytesRead);
2681 const int kPayloadSize = 2695 const int kPayloadSize =
2682 kYieldAfterBytesRead / 4 - framer.GetControlFrameHeaderSize(); 2696 kYieldAfterBytesRead / 4 - framer.GetControlFrameHeaderSize();
2683 TestDataStream test_stream; 2697 TestDataStream test_stream;
2684 scoped_refptr<IOBuffer> payload(new IOBuffer(kPayloadSize)); 2698 scoped_refptr<IOBuffer> payload(new IOBuffer(kPayloadSize));
2685 char* payload_data = payload->data(); 2699 char* payload_data = payload->data();
2686 test_stream.GetBytes(payload_data, kPayloadSize); 2700 test_stream.GetBytes(payload_data, kPayloadSize);
2687 2701
2688 scoped_ptr<SpdyFrame> partial_data_frame( 2702 scoped_ptr<SpdySerializedFrame> partial_data_frame(
2689 framer.CreateDataFrame(1, payload_data, kPayloadSize, DATA_FLAG_NONE)); 2703 framer.CreateDataFrame(1, payload_data, kPayloadSize, DATA_FLAG_NONE));
2690 scoped_ptr<SpdyFrame> finish_data_frame( 2704 scoped_ptr<SpdySerializedFrame> finish_data_frame(
2691 framer.CreateDataFrame(1, payload_data, kPayloadSize - 1, DATA_FLAG_FIN)); 2705 framer.CreateDataFrame(1, payload_data, kPayloadSize - 1, DATA_FLAG_FIN));
2692 2706
2693 scoped_ptr<SpdyFrame> resp1( 2707 scoped_ptr<SpdySerializedFrame> resp1(
2694 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 2708 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
2695 2709
2696 // Write 1 byte less than kMaxReadBytes to check that DoRead reads up to 32k 2710 // Write 1 byte less than kMaxReadBytes to check that DoRead reads up to 32k
2697 // bytes. 2711 // bytes.
2698 MockRead reads[] = { 2712 MockRead reads[] = {
2699 CreateMockRead(*resp1, 1), 2713 CreateMockRead(*resp1, 1),
2700 MockRead(ASYNC, ERR_IO_PENDING, 2), 2714 MockRead(ASYNC, ERR_IO_PENDING, 2),
2701 CreateMockRead(*partial_data_frame, 3), 2715 CreateMockRead(*partial_data_frame, 3),
2702 CreateMockRead(*partial_data_frame, 4, SYNCHRONOUS), 2716 CreateMockRead(*partial_data_frame, 4, SYNCHRONOUS),
2703 CreateMockRead(*partial_data_frame, 5, SYNCHRONOUS), 2717 CreateMockRead(*partial_data_frame, 5, SYNCHRONOUS),
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
2749 2763
2750 // Test that SpdySession::DoReadLoop yields if more than 2764 // Test that SpdySession::DoReadLoop yields if more than
2751 // |kYieldAfterDurationMilliseconds| has passed. This test uses a mock time 2765 // |kYieldAfterDurationMilliseconds| has passed. This test uses a mock time
2752 // function that makes the response frame look very slow to read. 2766 // function that makes the response frame look very slow to read.
2753 TEST_P(SpdySessionTest, TestYieldingSlowReads) { 2767 TEST_P(SpdySessionTest, TestYieldingSlowReads) {
2754 session_deps_.host_resolver->set_synchronous_mode(true); 2768 session_deps_.host_resolver->set_synchronous_mode(true);
2755 session_deps_.time_func = SlowReads; 2769 session_deps_.time_func = SlowReads;
2756 2770
2757 BufferedSpdyFramer framer(spdy_util_.spdy_version()); 2771 BufferedSpdyFramer framer(spdy_util_.spdy_version());
2758 2772
2759 scoped_ptr<SpdyFrame> req1( 2773 scoped_ptr<SpdySerializedFrame> req1(
2760 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2774 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
2761 MockWrite writes[] = { 2775 MockWrite writes[] = {
2762 CreateMockWrite(*req1, 0), 2776 CreateMockWrite(*req1, 0),
2763 }; 2777 };
2764 2778
2765 scoped_ptr<SpdyFrame> resp1( 2779 scoped_ptr<SpdySerializedFrame> resp1(
2766 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 2780 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
2767 2781
2768 MockRead reads[] = { 2782 MockRead reads[] = {
2769 CreateMockRead(*resp1, 1), MockRead(ASYNC, 0, 2) // EOF 2783 CreateMockRead(*resp1, 1), MockRead(ASYNC, 0, 2) // EOF
2770 }; 2784 };
2771 2785
2772 // Create SpdySession and SpdyStream and send the request. 2786 // Create SpdySession and SpdyStream and send the request.
2773 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 2787 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
2774 session_deps_.socket_factory->AddSocketDataProvider(&data); 2788 session_deps_.socket_factory->AddSocketDataProvider(&data);
2775 2789
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
2810 } 2824 }
2811 2825
2812 // Regression test for https://crbug.com/531570. 2826 // Regression test for https://crbug.com/531570.
2813 // Test the case where DoRead() takes long but returns synchronously. 2827 // Test the case where DoRead() takes long but returns synchronously.
2814 TEST_P(SpdySessionTest, TestYieldingSlowSynchronousReads) { 2828 TEST_P(SpdySessionTest, TestYieldingSlowSynchronousReads) {
2815 session_deps_.host_resolver->set_synchronous_mode(true); 2829 session_deps_.host_resolver->set_synchronous_mode(true);
2816 session_deps_.time_func = SlowReads; 2830 session_deps_.time_func = SlowReads;
2817 2831
2818 BufferedSpdyFramer framer(spdy_util_.spdy_version()); 2832 BufferedSpdyFramer framer(spdy_util_.spdy_version());
2819 2833
2820 scoped_ptr<SpdyFrame> req1( 2834 scoped_ptr<SpdySerializedFrame> req1(
2821 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2835 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
2822 MockWrite writes[] = { 2836 MockWrite writes[] = {
2823 CreateMockWrite(*req1, 0), 2837 CreateMockWrite(*req1, 0),
2824 }; 2838 };
2825 2839
2826 scoped_ptr<SpdyFrame> partial_data_frame( 2840 scoped_ptr<SpdySerializedFrame> partial_data_frame(
2827 framer.CreateDataFrame(1, "foo ", 4, DATA_FLAG_NONE)); 2841 framer.CreateDataFrame(1, "foo ", 4, DATA_FLAG_NONE));
2828 scoped_ptr<SpdyFrame> finish_data_frame( 2842 scoped_ptr<SpdySerializedFrame> finish_data_frame(
2829 framer.CreateDataFrame(1, "bar", 3, DATA_FLAG_FIN)); 2843 framer.CreateDataFrame(1, "bar", 3, DATA_FLAG_FIN));
2830 2844
2831 scoped_ptr<SpdyFrame> resp1( 2845 scoped_ptr<SpdySerializedFrame> resp1(
2832 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 2846 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
2833 2847
2834 MockRead reads[] = { 2848 MockRead reads[] = {
2835 CreateMockRead(*resp1, 1), MockRead(ASYNC, ERR_IO_PENDING, 2), 2849 CreateMockRead(*resp1, 1), MockRead(ASYNC, ERR_IO_PENDING, 2),
2836 CreateMockRead(*partial_data_frame, 3, ASYNC), 2850 CreateMockRead(*partial_data_frame, 3, ASYNC),
2837 CreateMockRead(*partial_data_frame, 4, SYNCHRONOUS), 2851 CreateMockRead(*partial_data_frame, 4, SYNCHRONOUS),
2838 CreateMockRead(*partial_data_frame, 5, SYNCHRONOUS), 2852 CreateMockRead(*partial_data_frame, 5, SYNCHRONOUS),
2839 CreateMockRead(*finish_data_frame, 6, SYNCHRONOUS), 2853 CreateMockRead(*finish_data_frame, 6, SYNCHRONOUS),
2840 MockRead(ASYNC, 0, 7) // EOF 2854 MockRead(ASYNC, 0, 7) // EOF
2841 }; 2855 };
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
2878 // data. This test makes 32k + 1 bytes of data available on the socket 2892 // data. This test makes 32k + 1 bytes of data available on the socket
2879 // for reading. It then verifies that DoRead has yielded even though 2893 // for reading. It then verifies that DoRead has yielded even though
2880 // there is data available for it to read (i.e, socket()->Read didn't 2894 // there is data available for it to read (i.e, socket()->Read didn't
2881 // return ERR_IO_PENDING during socket reads). 2895 // return ERR_IO_PENDING during socket reads).
2882 TEST_P(SpdySessionTest, TestYieldingDuringReadData) { 2896 TEST_P(SpdySessionTest, TestYieldingDuringReadData) {
2883 session_deps_.host_resolver->set_synchronous_mode(true); 2897 session_deps_.host_resolver->set_synchronous_mode(true);
2884 session_deps_.time_func = InstantaneousReads; 2898 session_deps_.time_func = InstantaneousReads;
2885 2899
2886 BufferedSpdyFramer framer(spdy_util_.spdy_version()); 2900 BufferedSpdyFramer framer(spdy_util_.spdy_version());
2887 2901
2888 scoped_ptr<SpdyFrame> req1( 2902 scoped_ptr<SpdySerializedFrame> req1(
2889 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2903 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
2890 MockWrite writes[] = { 2904 MockWrite writes[] = {
2891 CreateMockWrite(*req1, 0), 2905 CreateMockWrite(*req1, 0),
2892 }; 2906 };
2893 2907
2894 // Build buffer of size kYieldAfterBytesRead / 4 2908 // Build buffer of size kYieldAfterBytesRead / 4
2895 // (-spdy_data_frame_size). 2909 // (-spdy_data_frame_size).
2896 ASSERT_EQ(32 * 1024, kYieldAfterBytesRead); 2910 ASSERT_EQ(32 * 1024, kYieldAfterBytesRead);
2897 const int kPayloadSize = 2911 const int kPayloadSize =
2898 kYieldAfterBytesRead / 4 - framer.GetControlFrameHeaderSize(); 2912 kYieldAfterBytesRead / 4 - framer.GetControlFrameHeaderSize();
2899 TestDataStream test_stream; 2913 TestDataStream test_stream;
2900 scoped_refptr<IOBuffer> payload(new IOBuffer(kPayloadSize)); 2914 scoped_refptr<IOBuffer> payload(new IOBuffer(kPayloadSize));
2901 char* payload_data = payload->data(); 2915 char* payload_data = payload->data();
2902 test_stream.GetBytes(payload_data, kPayloadSize); 2916 test_stream.GetBytes(payload_data, kPayloadSize);
2903 2917
2904 scoped_ptr<SpdyFrame> partial_data_frame( 2918 scoped_ptr<SpdySerializedFrame> partial_data_frame(
2905 framer.CreateDataFrame(1, payload_data, kPayloadSize, DATA_FLAG_NONE)); 2919 framer.CreateDataFrame(1, payload_data, kPayloadSize, DATA_FLAG_NONE));
2906 scoped_ptr<SpdyFrame> finish_data_frame( 2920 scoped_ptr<SpdySerializedFrame> finish_data_frame(
2907 framer.CreateDataFrame(1, "h", 1, DATA_FLAG_FIN)); 2921 framer.CreateDataFrame(1, "h", 1, DATA_FLAG_FIN));
2908 2922
2909 scoped_ptr<SpdyFrame> resp1( 2923 scoped_ptr<SpdySerializedFrame> resp1(
2910 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 2924 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
2911 2925
2912 // Write 1 byte more than kMaxReadBytes to check that DoRead yields. 2926 // Write 1 byte more than kMaxReadBytes to check that DoRead yields.
2913 MockRead reads[] = { 2927 MockRead reads[] = {
2914 CreateMockRead(*resp1, 1), 2928 CreateMockRead(*resp1, 1),
2915 MockRead(ASYNC, ERR_IO_PENDING, 2), 2929 MockRead(ASYNC, ERR_IO_PENDING, 2),
2916 CreateMockRead(*partial_data_frame, 3), 2930 CreateMockRead(*partial_data_frame, 3),
2917 CreateMockRead(*partial_data_frame, 4, SYNCHRONOUS), 2931 CreateMockRead(*partial_data_frame, 4, SYNCHRONOUS),
2918 CreateMockRead(*partial_data_frame, 5, SYNCHRONOUS), 2932 CreateMockRead(*partial_data_frame, 5, SYNCHRONOUS),
2919 CreateMockRead(*partial_data_frame, 6, SYNCHRONOUS), 2933 CreateMockRead(*partial_data_frame, 6, SYNCHRONOUS),
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
2972 // will attempt to read again. However, that DoRead() will return 2986 // will attempt to read again. However, that DoRead() will return
2973 // ERR_IO_PENDING (because of async read), so DoReadLoop() will 2987 // ERR_IO_PENDING (because of async read), so DoReadLoop() will
2974 // yield. When we come back, DoRead() will read the results from the 2988 // yield. When we come back, DoRead() will read the results from the
2975 // async read, and rest of the data synchronously. 2989 // async read, and rest of the data synchronously.
2976 TEST_P(SpdySessionTest, TestYieldingDuringAsyncReadData) { 2990 TEST_P(SpdySessionTest, TestYieldingDuringAsyncReadData) {
2977 session_deps_.host_resolver->set_synchronous_mode(true); 2991 session_deps_.host_resolver->set_synchronous_mode(true);
2978 session_deps_.time_func = InstantaneousReads; 2992 session_deps_.time_func = InstantaneousReads;
2979 2993
2980 BufferedSpdyFramer framer(spdy_util_.spdy_version()); 2994 BufferedSpdyFramer framer(spdy_util_.spdy_version());
2981 2995
2982 scoped_ptr<SpdyFrame> req1( 2996 scoped_ptr<SpdySerializedFrame> req1(
2983 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2997 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
2984 MockWrite writes[] = { 2998 MockWrite writes[] = {
2985 CreateMockWrite(*req1, 0), 2999 CreateMockWrite(*req1, 0),
2986 }; 3000 };
2987 3001
2988 // Build buffer of size kYieldAfterBytesRead / 4 3002 // Build buffer of size kYieldAfterBytesRead / 4
2989 // (-spdy_data_frame_size). 3003 // (-spdy_data_frame_size).
2990 ASSERT_EQ(32 * 1024, kYieldAfterBytesRead); 3004 ASSERT_EQ(32 * 1024, kYieldAfterBytesRead);
2991 TestDataStream test_stream; 3005 TestDataStream test_stream;
2992 const int kEightKPayloadSize = 3006 const int kEightKPayloadSize =
2993 kYieldAfterBytesRead / 4 - framer.GetControlFrameHeaderSize(); 3007 kYieldAfterBytesRead / 4 - framer.GetControlFrameHeaderSize();
2994 scoped_refptr<IOBuffer> eightk_payload(new IOBuffer(kEightKPayloadSize)); 3008 scoped_refptr<IOBuffer> eightk_payload(new IOBuffer(kEightKPayloadSize));
2995 char* eightk_payload_data = eightk_payload->data(); 3009 char* eightk_payload_data = eightk_payload->data();
2996 test_stream.GetBytes(eightk_payload_data, kEightKPayloadSize); 3010 test_stream.GetBytes(eightk_payload_data, kEightKPayloadSize);
2997 3011
2998 // Build buffer of 2k size. 3012 // Build buffer of 2k size.
2999 TestDataStream test_stream2; 3013 TestDataStream test_stream2;
3000 const int kTwoKPayloadSize = kEightKPayloadSize - 6 * 1024; 3014 const int kTwoKPayloadSize = kEightKPayloadSize - 6 * 1024;
3001 scoped_refptr<IOBuffer> twok_payload(new IOBuffer(kTwoKPayloadSize)); 3015 scoped_refptr<IOBuffer> twok_payload(new IOBuffer(kTwoKPayloadSize));
3002 char* twok_payload_data = twok_payload->data(); 3016 char* twok_payload_data = twok_payload->data();
3003 test_stream2.GetBytes(twok_payload_data, kTwoKPayloadSize); 3017 test_stream2.GetBytes(twok_payload_data, kTwoKPayloadSize);
3004 3018
3005 scoped_ptr<SpdyFrame> eightk_data_frame(framer.CreateDataFrame( 3019 scoped_ptr<SpdySerializedFrame> eightk_data_frame(framer.CreateDataFrame(
3006 1, eightk_payload_data, kEightKPayloadSize, DATA_FLAG_NONE)); 3020 1, eightk_payload_data, kEightKPayloadSize, DATA_FLAG_NONE));
3007 scoped_ptr<SpdyFrame> twok_data_frame(framer.CreateDataFrame( 3021 scoped_ptr<SpdySerializedFrame> twok_data_frame(framer.CreateDataFrame(
3008 1, twok_payload_data, kTwoKPayloadSize, DATA_FLAG_NONE)); 3022 1, twok_payload_data, kTwoKPayloadSize, DATA_FLAG_NONE));
3009 scoped_ptr<SpdyFrame> finish_data_frame(framer.CreateDataFrame( 3023 scoped_ptr<SpdySerializedFrame> finish_data_frame(
3010 1, "h", 1, DATA_FLAG_FIN)); 3024 framer.CreateDataFrame(1, "h", 1, DATA_FLAG_FIN));
3011 3025
3012 scoped_ptr<SpdyFrame> resp1( 3026 scoped_ptr<SpdySerializedFrame> resp1(
3013 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 3027 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
3014 3028
3015 MockRead reads[] = { 3029 MockRead reads[] = {
3016 CreateMockRead(*resp1, 1), 3030 CreateMockRead(*resp1, 1),
3017 MockRead(ASYNC, ERR_IO_PENDING, 2), 3031 MockRead(ASYNC, ERR_IO_PENDING, 2),
3018 CreateMockRead(*eightk_data_frame, 3), 3032 CreateMockRead(*eightk_data_frame, 3),
3019 CreateMockRead(*eightk_data_frame, 4, SYNCHRONOUS), 3033 CreateMockRead(*eightk_data_frame, 4, SYNCHRONOUS),
3020 CreateMockRead(*eightk_data_frame, 5, SYNCHRONOUS), 3034 CreateMockRead(*eightk_data_frame, 5, SYNCHRONOUS),
3021 CreateMockRead(*twok_data_frame, 6, SYNCHRONOUS), 3035 CreateMockRead(*twok_data_frame, 6, SYNCHRONOUS),
3022 CreateMockRead(*eightk_data_frame, 7, ASYNC), 3036 CreateMockRead(*eightk_data_frame, 7, ASYNC),
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
3071 EXPECT_TRUE(data.AllReadDataConsumed()); 3085 EXPECT_TRUE(data.AllReadDataConsumed());
3072 } 3086 }
3073 3087
3074 // Send a GoAway frame when SpdySession is in DoReadLoop. Make sure 3088 // Send a GoAway frame when SpdySession is in DoReadLoop. Make sure
3075 // nothing blows up. 3089 // nothing blows up.
3076 TEST_P(SpdySessionTest, GoAwayWhileInDoReadLoop) { 3090 TEST_P(SpdySessionTest, GoAwayWhileInDoReadLoop) {
3077 session_deps_.host_resolver->set_synchronous_mode(true); 3091 session_deps_.host_resolver->set_synchronous_mode(true);
3078 3092
3079 BufferedSpdyFramer framer(spdy_util_.spdy_version()); 3093 BufferedSpdyFramer framer(spdy_util_.spdy_version());
3080 3094
3081 scoped_ptr<SpdyFrame> req1( 3095 scoped_ptr<SpdySerializedFrame> req1(
3082 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 3096 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
3083 MockWrite writes[] = { 3097 MockWrite writes[] = {
3084 CreateMockWrite(*req1, 0), 3098 CreateMockWrite(*req1, 0),
3085 }; 3099 };
3086 3100
3087 scoped_ptr<SpdyFrame> resp1( 3101 scoped_ptr<SpdySerializedFrame> resp1(
3088 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 3102 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
3089 scoped_ptr<SpdyFrame> body1(spdy_util_.ConstructSpdyBodyFrame(1, true)); 3103 scoped_ptr<SpdySerializedFrame> body1(
3090 scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway()); 3104 spdy_util_.ConstructSpdyBodyFrame(1, true));
3105 scoped_ptr<SpdySerializedFrame> goaway(spdy_util_.ConstructSpdyGoAway());
3091 3106
3092 MockRead reads[] = { 3107 MockRead reads[] = {
3093 CreateMockRead(*resp1, 1), 3108 CreateMockRead(*resp1, 1),
3094 MockRead(ASYNC, ERR_IO_PENDING, 2), 3109 MockRead(ASYNC, ERR_IO_PENDING, 2),
3095 CreateMockRead(*body1, 3), 3110 CreateMockRead(*body1, 3),
3096 CreateMockRead(*goaway, 4), 3111 CreateMockRead(*goaway, 4),
3097 }; 3112 };
3098 3113
3099 // Create SpdySession and SpdyStream and send the request. 3114 // Create SpdySession and SpdyStream and send the request.
3100 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 3115 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
3280 // a lower layer pool stalled on the per-pool socket limit. 3295 // a lower layer pool stalled on the per-pool socket limit.
3281 TEST_P(SpdySessionTest, CloseSessionOnIdleWhenPoolStalled) { 3296 TEST_P(SpdySessionTest, CloseSessionOnIdleWhenPoolStalled) {
3282 ClientSocketPoolManager::set_max_sockets_per_group( 3297 ClientSocketPoolManager::set_max_sockets_per_group(
3283 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); 3298 HttpNetworkSession::NORMAL_SOCKET_POOL, 1);
3284 ClientSocketPoolManager::set_max_sockets_per_pool( 3299 ClientSocketPoolManager::set_max_sockets_per_pool(
3285 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); 3300 HttpNetworkSession::NORMAL_SOCKET_POOL, 1);
3286 3301
3287 MockRead reads[] = { 3302 MockRead reads[] = {
3288 MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever. 3303 MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever.
3289 }; 3304 };
3290 scoped_ptr<SpdyFrame> req1( 3305 scoped_ptr<SpdySerializedFrame> req1(
3291 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 3306 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
3292 scoped_ptr<SpdyFrame> cancel1( 3307 scoped_ptr<SpdySerializedFrame> cancel1(
3293 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); 3308 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
3294 MockWrite writes[] = { 3309 MockWrite writes[] = {
3295 CreateMockWrite(*req1, 1), 3310 CreateMockWrite(*req1, 1),
3296 CreateMockWrite(*cancel1, 1), 3311 CreateMockWrite(*cancel1, 1),
3297 }; 3312 };
3298 StaticSocketDataProvider data(reads, arraysize(reads), 3313 StaticSocketDataProvider data(reads, arraysize(reads),
3299 writes, arraysize(writes)); 3314 writes, arraysize(writes));
3300 session_deps_.socket_factory->AddSocketDataProvider(&data); 3315 session_deps_.socket_factory->AddSocketDataProvider(&data);
3301 3316
3302 MockRead http_reads[] = { 3317 MockRead http_reads[] = {
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
3422 private: 3437 private:
3423 const base::WeakPtr<SpdySession> session_; 3438 const base::WeakPtr<SpdySession> session_;
3424 }; 3439 };
3425 3440
3426 // Create another stream in response to a stream being reset. Nothing 3441 // Create another stream in response to a stream being reset. Nothing
3427 // should blow up. This is a regression test for 3442 // should blow up. This is a regression test for
3428 // http://crbug.com/263690 . 3443 // http://crbug.com/263690 .
3429 TEST_P(SpdySessionTest, CreateStreamOnStreamReset) { 3444 TEST_P(SpdySessionTest, CreateStreamOnStreamReset) {
3430 session_deps_.host_resolver->set_synchronous_mode(true); 3445 session_deps_.host_resolver->set_synchronous_mode(true);
3431 3446
3432 scoped_ptr<SpdyFrame> req( 3447 scoped_ptr<SpdySerializedFrame> req(
3433 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 3448 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
3434 MockWrite writes[] = { 3449 MockWrite writes[] = {
3435 CreateMockWrite(*req, 0), 3450 CreateMockWrite(*req, 0),
3436 }; 3451 };
3437 3452
3438 scoped_ptr<SpdyFrame> rst( 3453 scoped_ptr<SpdySerializedFrame> rst(
3439 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_REFUSED_STREAM)); 3454 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_REFUSED_STREAM));
3440 MockRead reads[] = { 3455 MockRead reads[] = {
3441 MockRead(ASYNC, ERR_IO_PENDING, 1), 3456 MockRead(ASYNC, ERR_IO_PENDING, 1),
3442 CreateMockRead(*rst, 2), 3457 CreateMockRead(*rst, 2),
3443 MockRead(ASYNC, ERR_IO_PENDING, 3), 3458 MockRead(ASYNC, ERR_IO_PENDING, 3),
3444 MockRead(ASYNC, 0, 4) // EOF 3459 MockRead(ASYNC, 0, 4) // EOF
3445 }; 3460 };
3446 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 3461 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
3447 session_deps_.socket_factory->AddSocketDataProvider(&data); 3462 session_deps_.socket_factory->AddSocketDataProvider(&data);
3448 3463
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
3486 TEST_P(SpdySessionTest, UpdateStreamsSendWindowSize) { 3501 TEST_P(SpdySessionTest, UpdateStreamsSendWindowSize) {
3487 // Set SETTINGS_INITIAL_WINDOW_SIZE to a small number so that WINDOW_UPDATE 3502 // Set SETTINGS_INITIAL_WINDOW_SIZE to a small number so that WINDOW_UPDATE
3488 // gets sent. 3503 // gets sent.
3489 SettingsMap new_settings; 3504 SettingsMap new_settings;
3490 int32_t window_size = 1; 3505 int32_t window_size = 1;
3491 new_settings[SETTINGS_INITIAL_WINDOW_SIZE] = 3506 new_settings[SETTINGS_INITIAL_WINDOW_SIZE] =
3492 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, window_size); 3507 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, window_size);
3493 3508
3494 // Set up the socket so we read a SETTINGS frame that sets 3509 // Set up the socket so we read a SETTINGS frame that sets
3495 // INITIAL_WINDOW_SIZE. 3510 // INITIAL_WINDOW_SIZE.
3496 scoped_ptr<SpdyFrame> settings_frame( 3511 scoped_ptr<SpdySerializedFrame> settings_frame(
3497 spdy_util_.ConstructSpdySettings(new_settings)); 3512 spdy_util_.ConstructSpdySettings(new_settings));
3498 MockRead reads[] = { 3513 MockRead reads[] = {
3499 CreateMockRead(*settings_frame, 0), 3514 CreateMockRead(*settings_frame, 0),
3500 MockRead(ASYNC, ERR_IO_PENDING, 1), 3515 MockRead(ASYNC, ERR_IO_PENDING, 1),
3501 MockRead(ASYNC, 0, 2) // EOF 3516 MockRead(ASYNC, 0, 2) // EOF
3502 }; 3517 };
3503 3518
3504 scoped_ptr<SpdyFrame> settings_ack(spdy_util_.ConstructSpdySettingsAck()); 3519 scoped_ptr<SpdySerializedFrame> settings_ack(
3520 spdy_util_.ConstructSpdySettingsAck());
3505 MockWrite writes[] = { 3521 MockWrite writes[] = {
3506 CreateMockWrite(*settings_ack, 3), 3522 CreateMockWrite(*settings_ack, 3),
3507 }; 3523 };
3508 3524
3509 session_deps_.host_resolver->set_synchronous_mode(true); 3525 session_deps_.host_resolver->set_synchronous_mode(true);
3510 3526
3511 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 3527 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
3512 session_deps_.socket_factory->AddSocketDataProvider(&data); 3528 session_deps_.socket_factory->AddSocketDataProvider(&data);
3513 3529
3514 CreateNetworkSession(); 3530 CreateNetworkSession();
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
3548 TEST_P(SpdySessionTest, AdjustRecvWindowSize) { 3564 TEST_P(SpdySessionTest, AdjustRecvWindowSize) {
3549 session_deps_.host_resolver->set_synchronous_mode(true); 3565 session_deps_.host_resolver->set_synchronous_mode(true);
3550 3566
3551 const int32_t initial_window_size = 3567 const int32_t initial_window_size =
3552 SpdySession::GetDefaultInitialWindowSize(GetProtocol()); 3568 SpdySession::GetDefaultInitialWindowSize(GetProtocol());
3553 const int32_t delta_window_size = 100; 3569 const int32_t delta_window_size = 100;
3554 3570
3555 MockRead reads[] = { 3571 MockRead reads[] = {
3556 MockRead(ASYNC, ERR_IO_PENDING, 1), MockRead(ASYNC, 0, 2) // EOF 3572 MockRead(ASYNC, ERR_IO_PENDING, 1), MockRead(ASYNC, 0, 2) // EOF
3557 }; 3573 };
3558 scoped_ptr<SpdyFrame> window_update(spdy_util_.ConstructSpdyWindowUpdate( 3574 scoped_ptr<SpdySerializedFrame> window_update(
3559 kSessionFlowControlStreamId, initial_window_size + delta_window_size)); 3575 spdy_util_.ConstructSpdyWindowUpdate(
3576 kSessionFlowControlStreamId,
3577 initial_window_size + delta_window_size));
3560 MockWrite writes[] = { 3578 MockWrite writes[] = {
3561 CreateMockWrite(*window_update, 0), 3579 CreateMockWrite(*window_update, 0),
3562 }; 3580 };
3563 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 3581 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
3564 session_deps_.socket_factory->AddSocketDataProvider(&data); 3582 session_deps_.socket_factory->AddSocketDataProvider(&data);
3565 3583
3566 CreateNetworkSession(); 3584 CreateNetworkSession();
3567 CreateInsecureSpdySession(); 3585 CreateInsecureSpdySession();
3568 3586
3569 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_); 3587 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
3624 session_->DecreaseSendWindowSize(delta_window_size); 3642 session_->DecreaseSendWindowSize(delta_window_size);
3625 EXPECT_EQ(initial_window_size, session_->session_send_window_size_); 3643 EXPECT_EQ(initial_window_size, session_->session_send_window_size_);
3626 } 3644 }
3627 3645
3628 // Incoming data for an inactive stream should not cause the session 3646 // Incoming data for an inactive stream should not cause the session
3629 // receive window size to decrease, but it should cause the unacked 3647 // receive window size to decrease, but it should cause the unacked
3630 // bytes to increase. 3648 // bytes to increase.
3631 TEST_P(SpdySessionTest, SessionFlowControlInactiveStream) { 3649 TEST_P(SpdySessionTest, SessionFlowControlInactiveStream) {
3632 session_deps_.host_resolver->set_synchronous_mode(true); 3650 session_deps_.host_resolver->set_synchronous_mode(true);
3633 3651
3634 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyBodyFrame(1, false)); 3652 scoped_ptr<SpdySerializedFrame> resp(
3653 spdy_util_.ConstructSpdyBodyFrame(1, false));
3635 MockRead reads[] = { 3654 MockRead reads[] = {
3636 CreateMockRead(*resp, 0), 3655 CreateMockRead(*resp, 0),
3637 MockRead(ASYNC, ERR_IO_PENDING, 1), 3656 MockRead(ASYNC, ERR_IO_PENDING, 1),
3638 MockRead(ASYNC, 0, 2) // EOF 3657 MockRead(ASYNC, 0, 2) // EOF
3639 }; 3658 };
3640 SequencedSocketData data(reads, arraysize(reads), nullptr, 0); 3659 SequencedSocketData data(reads, arraysize(reads), nullptr, 0);
3641 session_deps_.socket_factory->AddSocketDataProvider(&data); 3660 session_deps_.socket_factory->AddSocketDataProvider(&data);
3642 3661
3643 CreateNetworkSession(); 3662 CreateNetworkSession();
3644 CreateInsecureSpdySession(); 3663 CreateInsecureSpdySession();
(...skipping 17 matching lines...) Expand all
3662 // The frame header is not included in flow control, but frame payload 3681 // The frame header is not included in flow control, but frame payload
3663 // (including optional pad length and padding) is. 3682 // (including optional pad length and padding) is.
3664 TEST_P(SpdySessionTest, SessionFlowControlPadding) { 3683 TEST_P(SpdySessionTest, SessionFlowControlPadding) {
3665 // Padding only exists in HTTP/2. 3684 // Padding only exists in HTTP/2.
3666 if (GetProtocol() < kProtoHTTP2) 3685 if (GetProtocol() < kProtoHTTP2)
3667 return; 3686 return;
3668 3687
3669 session_deps_.host_resolver->set_synchronous_mode(true); 3688 session_deps_.host_resolver->set_synchronous_mode(true);
3670 3689
3671 const int padding_length = 42; 3690 const int padding_length = 42;
3672 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyBodyFrame( 3691 scoped_ptr<SpdySerializedFrame> resp(spdy_util_.ConstructSpdyBodyFrame(
3673 1, kUploadData, kUploadDataSize, false, padding_length)); 3692 1, kUploadData, kUploadDataSize, false, padding_length));
3674 MockRead reads[] = { 3693 MockRead reads[] = {
3675 CreateMockRead(*resp, 0), 3694 CreateMockRead(*resp, 0),
3676 MockRead(ASYNC, ERR_IO_PENDING, 1), 3695 MockRead(ASYNC, ERR_IO_PENDING, 1),
3677 MockRead(ASYNC, 0, 2) // EOF 3696 MockRead(ASYNC, 0, 2) // EOF
3678 }; 3697 };
3679 SequencedSocketData data(reads, arraysize(reads), nullptr, 0); 3698 SequencedSocketData data(reads, arraysize(reads), nullptr, 0);
3680 session_deps_.socket_factory->AddSocketDataProvider(&data); 3699 session_deps_.socket_factory->AddSocketDataProvider(&data);
3681 3700
3682 CreateNetworkSession(); 3701 CreateNetworkSession();
(...skipping 13 matching lines...) Expand all
3696 data.Resume(); 3715 data.Resume();
3697 base::RunLoop().RunUntilIdle(); 3716 base::RunLoop().RunUntilIdle();
3698 EXPECT_FALSE(session_); 3717 EXPECT_FALSE(session_);
3699 } 3718 }
3700 3719
3701 // Peer sends more data than stream level receiving flow control window. 3720 // Peer sends more data than stream level receiving flow control window.
3702 TEST_P(SpdySessionTest, StreamFlowControlTooMuchData) { 3721 TEST_P(SpdySessionTest, StreamFlowControlTooMuchData) {
3703 const int32_t stream_max_recv_window_size = 1024; 3722 const int32_t stream_max_recv_window_size = 1024;
3704 const int32_t data_frame_size = 2 * stream_max_recv_window_size; 3723 const int32_t data_frame_size = 2 * stream_max_recv_window_size;
3705 3724
3706 scoped_ptr<SpdyFrame> req( 3725 scoped_ptr<SpdySerializedFrame> req(
3707 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 3726 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
3708 scoped_ptr<SpdyFrame> rst( 3727 scoped_ptr<SpdySerializedFrame> rst(
3709 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_FLOW_CONTROL_ERROR)); 3728 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_FLOW_CONTROL_ERROR));
3710 MockWrite writes[] = { 3729 MockWrite writes[] = {
3711 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4), 3730 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4),
3712 }; 3731 };
3713 3732
3714 scoped_ptr<SpdyFrame> resp( 3733 scoped_ptr<SpdySerializedFrame> resp(
3715 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 3734 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
3716 const std::string payload(data_frame_size, 'a'); 3735 const std::string payload(data_frame_size, 'a');
3717 scoped_ptr<SpdyFrame> data_frame(spdy_util_.ConstructSpdyBodyFrame( 3736 scoped_ptr<SpdySerializedFrame> data_frame(spdy_util_.ConstructSpdyBodyFrame(
3718 1, payload.data(), data_frame_size, false)); 3737 1, payload.data(), data_frame_size, false));
3719 MockRead reads[] = { 3738 MockRead reads[] = {
3720 CreateMockRead(*resp, 1), 3739 CreateMockRead(*resp, 1),
3721 MockRead(ASYNC, ERR_IO_PENDING, 2), 3740 MockRead(ASYNC, ERR_IO_PENDING, 2),
3722 CreateMockRead(*data_frame, 3), 3741 CreateMockRead(*data_frame, 3),
3723 MockRead(ASYNC, ERR_IO_PENDING, 5), 3742 MockRead(ASYNC, ERR_IO_PENDING, 5),
3724 MockRead(ASYNC, 0, 6), 3743 MockRead(ASYNC, 0, 6),
3725 }; 3744 };
3726 3745
3727 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 3746 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
3771 ASSERT_GT(session_max_recv_window_size / 2, first_data_frame_size); 3790 ASSERT_GT(session_max_recv_window_size / 2, first_data_frame_size);
3772 // Second data frame would be fine had there been a WINDOW_UPDATE. 3791 // Second data frame would be fine had there been a WINDOW_UPDATE.
3773 ASSERT_GT(session_max_recv_window_size, second_data_frame_size); 3792 ASSERT_GT(session_max_recv_window_size, second_data_frame_size);
3774 // But in fact, the two data frames together overflow the receiving window at 3793 // But in fact, the two data frames together overflow the receiving window at
3775 // session level. 3794 // session level.
3776 ASSERT_LT(session_max_recv_window_size, 3795 ASSERT_LT(session_max_recv_window_size,
3777 first_data_frame_size + second_data_frame_size); 3796 first_data_frame_size + second_data_frame_size);
3778 3797
3779 session_deps_.host_resolver->set_synchronous_mode(true); 3798 session_deps_.host_resolver->set_synchronous_mode(true);
3780 3799
3781 scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway( 3800 scoped_ptr<SpdySerializedFrame> goaway(spdy_util_.ConstructSpdyGoAway(
3782 0, GOAWAY_FLOW_CONTROL_ERROR, 3801 0, GOAWAY_FLOW_CONTROL_ERROR,
3783 "delta_window_size is 400 in DecreaseRecvWindowSize, which is larger " 3802 "delta_window_size is 400 in DecreaseRecvWindowSize, which is larger "
3784 "than the receive window size of 500")); 3803 "than the receive window size of 500"));
3785 MockWrite writes[] = { 3804 MockWrite writes[] = {
3786 CreateMockWrite(*goaway, 4), 3805 CreateMockWrite(*goaway, 4),
3787 }; 3806 };
3788 3807
3789 const std::string first_data_frame(first_data_frame_size, 'a'); 3808 const std::string first_data_frame(first_data_frame_size, 'a');
3790 scoped_ptr<SpdyFrame> first(spdy_util_.ConstructSpdyBodyFrame( 3809 scoped_ptr<SpdySerializedFrame> first(spdy_util_.ConstructSpdyBodyFrame(
3791 1, first_data_frame.data(), first_data_frame_size, false)); 3810 1, first_data_frame.data(), first_data_frame_size, false));
3792 const std::string second_data_frame(second_data_frame_size, 'b'); 3811 const std::string second_data_frame(second_data_frame_size, 'b');
3793 scoped_ptr<SpdyFrame> second(spdy_util_.ConstructSpdyBodyFrame( 3812 scoped_ptr<SpdySerializedFrame> second(spdy_util_.ConstructSpdyBodyFrame(
3794 1, second_data_frame.data(), second_data_frame_size, false)); 3813 1, second_data_frame.data(), second_data_frame_size, false));
3795 MockRead reads[] = { 3814 MockRead reads[] = {
3796 CreateMockRead(*first, 0), 3815 CreateMockRead(*first, 0),
3797 MockRead(ASYNC, ERR_IO_PENDING, 1), 3816 MockRead(ASYNC, ERR_IO_PENDING, 1),
3798 CreateMockRead(*second, 2), 3817 CreateMockRead(*second, 2),
3799 MockRead(ASYNC, 0, 3), 3818 MockRead(ASYNC, 0, 3),
3800 }; 3819 };
3801 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 3820 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
3802 session_deps_.socket_factory->AddSocketDataProvider(&data); 3821 session_deps_.socket_factory->AddSocketDataProvider(&data);
3803 3822
(...skipping 26 matching lines...) Expand all
3830 const int32_t second_data_frame_size = 400; 3849 const int32_t second_data_frame_size = 400;
3831 3850
3832 // First data frame should not trigger a WINDOW_UPDATE. 3851 // First data frame should not trigger a WINDOW_UPDATE.
3833 ASSERT_GT(stream_max_recv_window_size / 2, first_data_frame_size); 3852 ASSERT_GT(stream_max_recv_window_size / 2, first_data_frame_size);
3834 // Second data frame would be fine had there been a WINDOW_UPDATE. 3853 // Second data frame would be fine had there been a WINDOW_UPDATE.
3835 ASSERT_GT(stream_max_recv_window_size, second_data_frame_size); 3854 ASSERT_GT(stream_max_recv_window_size, second_data_frame_size);
3836 // But in fact, they should overflow the receiving window at stream level. 3855 // But in fact, they should overflow the receiving window at stream level.
3837 ASSERT_LT(stream_max_recv_window_size, 3856 ASSERT_LT(stream_max_recv_window_size,
3838 first_data_frame_size + second_data_frame_size); 3857 first_data_frame_size + second_data_frame_size);
3839 3858
3840 scoped_ptr<SpdyFrame> req( 3859 scoped_ptr<SpdySerializedFrame> req(
3841 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 3860 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
3842 scoped_ptr<SpdyFrame> rst( 3861 scoped_ptr<SpdySerializedFrame> rst(
3843 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_FLOW_CONTROL_ERROR)); 3862 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_FLOW_CONTROL_ERROR));
3844 MockWrite writes[] = { 3863 MockWrite writes[] = {
3845 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 6), 3864 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 6),
3846 }; 3865 };
3847 3866
3848 scoped_ptr<SpdyFrame> resp( 3867 scoped_ptr<SpdySerializedFrame> resp(
3849 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 3868 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
3850 const std::string first_data_frame(first_data_frame_size, 'a'); 3869 const std::string first_data_frame(first_data_frame_size, 'a');
3851 scoped_ptr<SpdyFrame> first(spdy_util_.ConstructSpdyBodyFrame( 3870 scoped_ptr<SpdySerializedFrame> first(spdy_util_.ConstructSpdyBodyFrame(
3852 1, first_data_frame.data(), first_data_frame_size, false)); 3871 1, first_data_frame.data(), first_data_frame_size, false));
3853 const std::string second_data_frame(second_data_frame_size, 'b'); 3872 const std::string second_data_frame(second_data_frame_size, 'b');
3854 scoped_ptr<SpdyFrame> second(spdy_util_.ConstructSpdyBodyFrame( 3873 scoped_ptr<SpdySerializedFrame> second(spdy_util_.ConstructSpdyBodyFrame(
3855 1, second_data_frame.data(), second_data_frame_size, false)); 3874 1, second_data_frame.data(), second_data_frame_size, false));
3856 MockRead reads[] = { 3875 MockRead reads[] = {
3857 CreateMockRead(*resp, 1), 3876 CreateMockRead(*resp, 1),
3858 MockRead(ASYNC, ERR_IO_PENDING, 2), 3877 MockRead(ASYNC, ERR_IO_PENDING, 2),
3859 CreateMockRead(*first, 3), 3878 CreateMockRead(*first, 3),
3860 MockRead(ASYNC, ERR_IO_PENDING, 4), 3879 MockRead(ASYNC, ERR_IO_PENDING, 4),
3861 CreateMockRead(*second, 5), 3880 CreateMockRead(*second, 5),
3862 MockRead(ASYNC, ERR_IO_PENDING, 7), 3881 MockRead(ASYNC, ERR_IO_PENDING, 7),
3863 MockRead(ASYNC, 0, 8), 3882 MockRead(ASYNC, 0, 8),
3864 }; 3883 };
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
3924 void OnDataReceived(scoped_ptr<SpdyBuffer> buffer) override {} 3943 void OnDataReceived(scoped_ptr<SpdyBuffer> buffer) override {}
3925 }; 3944 };
3926 3945
3927 // Send data back and forth but use a delegate that drops its received 3946 // Send data back and forth but use a delegate that drops its received
3928 // data. The receive window should still increase to its original 3947 // data. The receive window should still increase to its original
3929 // value, i.e. we shouldn't "leak" receive window bytes. 3948 // value, i.e. we shouldn't "leak" receive window bytes.
3930 TEST_P(SpdySessionTest, SessionFlowControlNoReceiveLeaks) { 3949 TEST_P(SpdySessionTest, SessionFlowControlNoReceiveLeaks) {
3931 const int32_t kMsgDataSize = 100; 3950 const int32_t kMsgDataSize = 100;
3932 const std::string msg_data(kMsgDataSize, 'a'); 3951 const std::string msg_data(kMsgDataSize, 'a');
3933 3952
3934 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost( 3953 scoped_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
3935 kDefaultURL, 1, kMsgDataSize, MEDIUM, nullptr, 0)); 3954 kDefaultURL, 1, kMsgDataSize, MEDIUM, nullptr, 0));
3936 scoped_ptr<SpdyFrame> msg(spdy_util_.ConstructSpdyBodyFrame( 3955 scoped_ptr<SpdySerializedFrame> msg(spdy_util_.ConstructSpdyBodyFrame(
3937 1, msg_data.data(), kMsgDataSize, false)); 3956 1, msg_data.data(), kMsgDataSize, false));
3938 MockWrite writes[] = { 3957 MockWrite writes[] = {
3939 CreateMockWrite(*req, 0), 3958 CreateMockWrite(*req, 0),
3940 CreateMockWrite(*msg, 2), 3959 CreateMockWrite(*msg, 2),
3941 }; 3960 };
3942 3961
3943 scoped_ptr<SpdyFrame> resp( 3962 scoped_ptr<SpdySerializedFrame> resp(
3944 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 3963 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
3945 scoped_ptr<SpdyFrame> echo(spdy_util_.ConstructSpdyBodyFrame( 3964 scoped_ptr<SpdySerializedFrame> echo(spdy_util_.ConstructSpdyBodyFrame(
3946 1, msg_data.data(), kMsgDataSize, false)); 3965 1, msg_data.data(), kMsgDataSize, false));
3947 scoped_ptr<SpdyFrame> window_update(spdy_util_.ConstructSpdyWindowUpdate( 3966 scoped_ptr<SpdySerializedFrame> window_update(
3948 kSessionFlowControlStreamId, kMsgDataSize)); 3967 spdy_util_.ConstructSpdyWindowUpdate(kSessionFlowControlStreamId,
3968 kMsgDataSize));
3949 MockRead reads[] = { 3969 MockRead reads[] = {
3950 CreateMockRead(*resp, 1), 3970 CreateMockRead(*resp, 1),
3951 CreateMockRead(*echo, 3), 3971 CreateMockRead(*echo, 3),
3952 MockRead(ASYNC, ERR_IO_PENDING, 4), 3972 MockRead(ASYNC, ERR_IO_PENDING, 4),
3953 MockRead(ASYNC, 0, 5) // EOF 3973 MockRead(ASYNC, 0, 5) // EOF
3954 }; 3974 };
3955 3975
3956 // Create SpdySession and SpdyStream and send the request. 3976 // Create SpdySession and SpdyStream and send the request.
3957 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 3977 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
3958 session_deps_.host_resolver->set_synchronous_mode(true); 3978 session_deps_.host_resolver->set_synchronous_mode(true);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
3998 EXPECT_FALSE(session_); 4018 EXPECT_FALSE(session_);
3999 } 4019 }
4000 4020
4001 // Send data back and forth but close the stream before its data frame 4021 // Send data back and forth but close the stream before its data frame
4002 // can be written to the socket. The send window should then increase 4022 // can be written to the socket. The send window should then increase
4003 // to its original value, i.e. we shouldn't "leak" send window bytes. 4023 // to its original value, i.e. we shouldn't "leak" send window bytes.
4004 TEST_P(SpdySessionTest, SessionFlowControlNoSendLeaks) { 4024 TEST_P(SpdySessionTest, SessionFlowControlNoSendLeaks) {
4005 const int32_t kMsgDataSize = 100; 4025 const int32_t kMsgDataSize = 100;
4006 const std::string msg_data(kMsgDataSize, 'a'); 4026 const std::string msg_data(kMsgDataSize, 'a');
4007 4027
4008 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost( 4028 scoped_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
4009 kDefaultURL, 1, kMsgDataSize, MEDIUM, nullptr, 0)); 4029 kDefaultURL, 1, kMsgDataSize, MEDIUM, nullptr, 0));
4010 MockWrite writes[] = { 4030 MockWrite writes[] = {
4011 CreateMockWrite(*req, 0), 4031 CreateMockWrite(*req, 0),
4012 }; 4032 };
4013 4033
4014 scoped_ptr<SpdyFrame> resp( 4034 scoped_ptr<SpdySerializedFrame> resp(
4015 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 4035 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
4016 MockRead reads[] = { 4036 MockRead reads[] = {
4017 MockRead(ASYNC, ERR_IO_PENDING, 1), 4037 MockRead(ASYNC, ERR_IO_PENDING, 1),
4018 CreateMockRead(*resp, 2), 4038 CreateMockRead(*resp, 2),
4019 MockRead(ASYNC, 0, 3) // EOF 4039 MockRead(ASYNC, 0, 3) // EOF
4020 }; 4040 };
4021 4041
4022 // Create SpdySession and SpdyStream and send the request. 4042 // Create SpdySession and SpdyStream and send the request.
4023 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 4043 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
4024 session_deps_.host_resolver->set_synchronous_mode(true); 4044 session_deps_.host_resolver->set_synchronous_mode(true);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
4071 EXPECT_TRUE(data.AllWriteDataConsumed()); 4091 EXPECT_TRUE(data.AllWriteDataConsumed());
4072 EXPECT_TRUE(data.AllReadDataConsumed()); 4092 EXPECT_TRUE(data.AllReadDataConsumed());
4073 } 4093 }
4074 4094
4075 // Send data back and forth; the send and receive windows should 4095 // Send data back and forth; the send and receive windows should
4076 // change appropriately. 4096 // change appropriately.
4077 TEST_P(SpdySessionTest, SessionFlowControlEndToEnd) { 4097 TEST_P(SpdySessionTest, SessionFlowControlEndToEnd) {
4078 const int32_t kMsgDataSize = 100; 4098 const int32_t kMsgDataSize = 100;
4079 const std::string msg_data(kMsgDataSize, 'a'); 4099 const std::string msg_data(kMsgDataSize, 'a');
4080 4100
4081 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost( 4101 scoped_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
4082 kDefaultURL, 1, kMsgDataSize, MEDIUM, nullptr, 0)); 4102 kDefaultURL, 1, kMsgDataSize, MEDIUM, nullptr, 0));
4083 scoped_ptr<SpdyFrame> msg(spdy_util_.ConstructSpdyBodyFrame( 4103 scoped_ptr<SpdySerializedFrame> msg(spdy_util_.ConstructSpdyBodyFrame(
4084 1, msg_data.data(), kMsgDataSize, false)); 4104 1, msg_data.data(), kMsgDataSize, false));
4085 MockWrite writes[] = { 4105 MockWrite writes[] = {
4086 CreateMockWrite(*req, 0), 4106 CreateMockWrite(*req, 0),
4087 CreateMockWrite(*msg, 2), 4107 CreateMockWrite(*msg, 2),
4088 }; 4108 };
4089 4109
4090 scoped_ptr<SpdyFrame> resp( 4110 scoped_ptr<SpdySerializedFrame> resp(
4091 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 4111 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
4092 scoped_ptr<SpdyFrame> echo(spdy_util_.ConstructSpdyBodyFrame( 4112 scoped_ptr<SpdySerializedFrame> echo(spdy_util_.ConstructSpdyBodyFrame(
4093 1, msg_data.data(), kMsgDataSize, false)); 4113 1, msg_data.data(), kMsgDataSize, false));
4094 scoped_ptr<SpdyFrame> window_update(spdy_util_.ConstructSpdyWindowUpdate( 4114 scoped_ptr<SpdySerializedFrame> window_update(
4095 kSessionFlowControlStreamId, kMsgDataSize)); 4115 spdy_util_.ConstructSpdyWindowUpdate(kSessionFlowControlStreamId,
4116 kMsgDataSize));
4096 MockRead reads[] = { 4117 MockRead reads[] = {
4097 CreateMockRead(*resp, 1), 4118 CreateMockRead(*resp, 1),
4098 MockRead(ASYNC, ERR_IO_PENDING, 3), 4119 MockRead(ASYNC, ERR_IO_PENDING, 3),
4099 CreateMockRead(*echo, 4), 4120 CreateMockRead(*echo, 4),
4100 MockRead(ASYNC, ERR_IO_PENDING, 5), 4121 MockRead(ASYNC, ERR_IO_PENDING, 5),
4101 CreateMockRead(*window_update, 6), 4122 CreateMockRead(*window_update, 6),
4102 MockRead(ASYNC, ERR_IO_PENDING, 7), 4123 MockRead(ASYNC, ERR_IO_PENDING, 7),
4103 MockRead(ASYNC, 0, 8) // EOF 4124 MockRead(ASYNC, 0, 8) // EOF
4104 }; 4125 };
4105 4126
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
4180 EXPECT_FALSE(session_); 4201 EXPECT_FALSE(session_);
4181 } 4202 }
4182 4203
4183 // Given a stall function and an unstall function, runs a test to make 4204 // Given a stall function and an unstall function, runs a test to make
4184 // sure that a stream resumes after unstall. 4205 // sure that a stream resumes after unstall.
4185 void SpdySessionTest::RunResumeAfterUnstallTest( 4206 void SpdySessionTest::RunResumeAfterUnstallTest(
4186 const base::Callback<void(SpdyStream*)>& stall_function, 4207 const base::Callback<void(SpdyStream*)>& stall_function,
4187 const base::Callback<void(SpdyStream*, int32_t)>& unstall_function) { 4208 const base::Callback<void(SpdyStream*, int32_t)>& unstall_function) {
4188 session_deps_.host_resolver->set_synchronous_mode(true); 4209 session_deps_.host_resolver->set_synchronous_mode(true);
4189 4210
4190 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost( 4211 scoped_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
4191 kDefaultURL, 1, kBodyDataSize, LOWEST, nullptr, 0)); 4212 kDefaultURL, 1, kBodyDataSize, LOWEST, nullptr, 0));
4192 scoped_ptr<SpdyFrame> body( 4213 scoped_ptr<SpdySerializedFrame> body(
4193 spdy_util_.ConstructSpdyBodyFrame(1, kBodyData, kBodyDataSize, true)); 4214 spdy_util_.ConstructSpdyBodyFrame(1, kBodyData, kBodyDataSize, true));
4194 MockWrite writes[] = { 4215 MockWrite writes[] = {
4195 CreateMockWrite(*req, 0), 4216 CreateMockWrite(*req, 0),
4196 CreateMockWrite(*body, 1), 4217 CreateMockWrite(*body, 1),
4197 }; 4218 };
4198 4219
4199 scoped_ptr<SpdyFrame> resp( 4220 scoped_ptr<SpdySerializedFrame> resp(
4200 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 4221 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
4201 scoped_ptr<SpdyFrame> echo( 4222 scoped_ptr<SpdySerializedFrame> echo(
4202 spdy_util_.ConstructSpdyBodyFrame(1, kBodyData, kBodyDataSize, false)); 4223 spdy_util_.ConstructSpdyBodyFrame(1, kBodyData, kBodyDataSize, false));
4203 MockRead reads[] = { 4224 MockRead reads[] = {
4204 CreateMockRead(*resp, 2), MockRead(ASYNC, 0, 3) // EOF 4225 CreateMockRead(*resp, 2), MockRead(ASYNC, 0, 3) // EOF
4205 }; 4226 };
4206 4227
4207 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 4228 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
4208 session_deps_.socket_factory->AddSocketDataProvider(&data); 4229 session_deps_.socket_factory->AddSocketDataProvider(&data);
4209 4230
4210 CreateNetworkSession(); 4231 CreateNetworkSession();
4211 CreateInsecureSpdySession(); 4232 CreateInsecureSpdySession();
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
4298 base::Bind(&SpdySessionTest::UnstallStreamSession, 4319 base::Bind(&SpdySessionTest::UnstallStreamSession,
4299 base::Unretained(this))); 4320 base::Unretained(this)));
4300 } 4321 }
4301 4322
4302 // Cause a stall by reducing the flow control send window to 0. The 4323 // Cause a stall by reducing the flow control send window to 0. The
4303 // streams should resume in priority order when that window is then 4324 // streams should resume in priority order when that window is then
4304 // increased. 4325 // increased.
4305 TEST_P(SpdySessionTest, ResumeByPriorityAfterSendWindowSizeIncrease) { 4326 TEST_P(SpdySessionTest, ResumeByPriorityAfterSendWindowSizeIncrease) {
4306 session_deps_.host_resolver->set_synchronous_mode(true); 4327 session_deps_.host_resolver->set_synchronous_mode(true);
4307 4328
4308 scoped_ptr<SpdyFrame> req1(spdy_util_.ConstructSpdyPost( 4329 scoped_ptr<SpdySerializedFrame> req1(spdy_util_.ConstructSpdyPost(
4309 kDefaultURL, 1, kBodyDataSize, LOWEST, nullptr, 0)); 4330 kDefaultURL, 1, kBodyDataSize, LOWEST, nullptr, 0));
4310 scoped_ptr<SpdyFrame> req2(spdy_util_.ConstructSpdyPost( 4331 scoped_ptr<SpdySerializedFrame> req2(spdy_util_.ConstructSpdyPost(
4311 kDefaultURL, 3, kBodyDataSize, MEDIUM, nullptr, 0)); 4332 kDefaultURL, 3, kBodyDataSize, MEDIUM, nullptr, 0));
4312 scoped_ptr<SpdyFrame> body1( 4333 scoped_ptr<SpdySerializedFrame> body1(
4313 spdy_util_.ConstructSpdyBodyFrame(1, kBodyData, kBodyDataSize, true)); 4334 spdy_util_.ConstructSpdyBodyFrame(1, kBodyData, kBodyDataSize, true));
4314 scoped_ptr<SpdyFrame> body2( 4335 scoped_ptr<SpdySerializedFrame> body2(
4315 spdy_util_.ConstructSpdyBodyFrame(3, kBodyData, kBodyDataSize, true)); 4336 spdy_util_.ConstructSpdyBodyFrame(3, kBodyData, kBodyDataSize, true));
4316 MockWrite writes[] = { 4337 MockWrite writes[] = {
4317 CreateMockWrite(*req1, 0), 4338 CreateMockWrite(*req1, 0),
4318 CreateMockWrite(*req2, 1), 4339 CreateMockWrite(*req2, 1),
4319 CreateMockWrite(*body2, 2), 4340 CreateMockWrite(*body2, 2),
4320 CreateMockWrite(*body1, 3), 4341 CreateMockWrite(*body1, 3),
4321 }; 4342 };
4322 4343
4323 scoped_ptr<SpdyFrame> resp1( 4344 scoped_ptr<SpdySerializedFrame> resp1(
4324 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 4345 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
4325 scoped_ptr<SpdyFrame> resp2( 4346 scoped_ptr<SpdySerializedFrame> resp2(
4326 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 3)); 4347 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 3));
4327 MockRead reads[] = { 4348 MockRead reads[] = {
4328 CreateMockRead(*resp1, 4), 4349 CreateMockRead(*resp1, 4),
4329 CreateMockRead(*resp2, 5), 4350 CreateMockRead(*resp2, 5),
4330 MockRead(ASYNC, 0, 6) // EOF 4351 MockRead(ASYNC, 0, 6) // EOF
4331 }; 4352 };
4332 4353
4333 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 4354 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
4334 session_deps_.socket_factory->AddSocketDataProvider(&data); 4355 session_deps_.socket_factory->AddSocketDataProvider(&data);
4335 4356
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
4439 4460
4440 private: 4461 private:
4441 base::WeakPtr<SpdyStream> stream_to_close_; 4462 base::WeakPtr<SpdyStream> stream_to_close_;
4442 }; 4463 };
4443 4464
4444 // Cause a stall by reducing the flow control send window to 4465 // Cause a stall by reducing the flow control send window to
4445 // 0. Unstalling the session should properly handle deleted streams. 4466 // 0. Unstalling the session should properly handle deleted streams.
4446 TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedStreams) { 4467 TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedStreams) {
4447 session_deps_.host_resolver->set_synchronous_mode(true); 4468 session_deps_.host_resolver->set_synchronous_mode(true);
4448 4469
4449 scoped_ptr<SpdyFrame> req1(spdy_util_.ConstructSpdyPost( 4470 scoped_ptr<SpdySerializedFrame> req1(spdy_util_.ConstructSpdyPost(
4450 kDefaultURL, 1, kBodyDataSize, LOWEST, nullptr, 0)); 4471 kDefaultURL, 1, kBodyDataSize, LOWEST, nullptr, 0));
4451 scoped_ptr<SpdyFrame> req2(spdy_util_.ConstructSpdyPost( 4472 scoped_ptr<SpdySerializedFrame> req2(spdy_util_.ConstructSpdyPost(
4452 kDefaultURL, 3, kBodyDataSize, LOWEST, nullptr, 0)); 4473 kDefaultURL, 3, kBodyDataSize, LOWEST, nullptr, 0));
4453 scoped_ptr<SpdyFrame> req3(spdy_util_.ConstructSpdyPost( 4474 scoped_ptr<SpdySerializedFrame> req3(spdy_util_.ConstructSpdyPost(
4454 kDefaultURL, 5, kBodyDataSize, LOWEST, nullptr, 0)); 4475 kDefaultURL, 5, kBodyDataSize, LOWEST, nullptr, 0));
4455 scoped_ptr<SpdyFrame> body2( 4476 scoped_ptr<SpdySerializedFrame> body2(
4456 spdy_util_.ConstructSpdyBodyFrame(3, kBodyData, kBodyDataSize, true)); 4477 spdy_util_.ConstructSpdyBodyFrame(3, kBodyData, kBodyDataSize, true));
4457 MockWrite writes[] = { 4478 MockWrite writes[] = {
4458 CreateMockWrite(*req1, 0), 4479 CreateMockWrite(*req1, 0),
4459 CreateMockWrite(*req2, 1), 4480 CreateMockWrite(*req2, 1),
4460 CreateMockWrite(*req3, 2), 4481 CreateMockWrite(*req3, 2),
4461 CreateMockWrite(*body2, 3), 4482 CreateMockWrite(*body2, 3),
4462 }; 4483 };
4463 4484
4464 scoped_ptr<SpdyFrame> resp2( 4485 scoped_ptr<SpdySerializedFrame> resp2(
4465 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 3)); 4486 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 3));
4466 MockRead reads[] = { 4487 MockRead reads[] = {
4467 CreateMockRead(*resp2, 4), 4488 CreateMockRead(*resp2, 4),
4468 MockRead(ASYNC, ERR_IO_PENDING, 5), 4489 MockRead(ASYNC, ERR_IO_PENDING, 5),
4469 MockRead(ASYNC, 0, 6) // EOF 4490 MockRead(ASYNC, 0, 6) // EOF
4470 }; 4491 };
4471 4492
4472 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 4493 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
4473 session_deps_.socket_factory->AddSocketDataProvider(&data); 4494 session_deps_.socket_factory->AddSocketDataProvider(&data);
4474 4495
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
4586 4607
4587 EXPECT_TRUE(data.AllWriteDataConsumed()); 4608 EXPECT_TRUE(data.AllWriteDataConsumed());
4588 } 4609 }
4589 4610
4590 // Cause a stall by reducing the flow control send window to 4611 // Cause a stall by reducing the flow control send window to
4591 // 0. Unstalling the session should properly handle the session itself 4612 // 0. Unstalling the session should properly handle the session itself
4592 // being closed. 4613 // being closed.
4593 TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedSession) { 4614 TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedSession) {
4594 session_deps_.host_resolver->set_synchronous_mode(true); 4615 session_deps_.host_resolver->set_synchronous_mode(true);
4595 4616
4596 scoped_ptr<SpdyFrame> req1(spdy_util_.ConstructSpdyPost( 4617 scoped_ptr<SpdySerializedFrame> req1(spdy_util_.ConstructSpdyPost(
4597 kDefaultURL, 1, kBodyDataSize, LOWEST, nullptr, 0)); 4618 kDefaultURL, 1, kBodyDataSize, LOWEST, nullptr, 0));
4598 scoped_ptr<SpdyFrame> req2(spdy_util_.ConstructSpdyPost( 4619 scoped_ptr<SpdySerializedFrame> req2(spdy_util_.ConstructSpdyPost(
4599 kDefaultURL, 3, kBodyDataSize, LOWEST, nullptr, 0)); 4620 kDefaultURL, 3, kBodyDataSize, LOWEST, nullptr, 0));
4600 scoped_ptr<SpdyFrame> body1( 4621 scoped_ptr<SpdySerializedFrame> body1(
4601 spdy_util_.ConstructSpdyBodyFrame(1, kBodyData, kBodyDataSize, false)); 4622 spdy_util_.ConstructSpdyBodyFrame(1, kBodyData, kBodyDataSize, false));
4602 MockWrite writes[] = { 4623 MockWrite writes[] = {
4603 CreateMockWrite(*req1, 0), 4624 CreateMockWrite(*req1, 0),
4604 CreateMockWrite(*req2, 1), 4625 CreateMockWrite(*req2, 1),
4605 }; 4626 };
4606 4627
4607 MockRead reads[] = { 4628 MockRead reads[] = {
4608 MockRead(ASYNC, ERR_IO_PENDING, 2), MockRead(ASYNC, 0, 3) // EOF 4629 MockRead(ASYNC, ERR_IO_PENDING, 2), MockRead(ASYNC, 0, 3) // EOF
4609 }; 4630 };
4610 4631
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
4679 EXPECT_TRUE(delegate1.send_headers_completed()); 4700 EXPECT_TRUE(delegate1.send_headers_completed());
4680 EXPECT_EQ(std::string(), delegate1.TakeReceivedData()); 4701 EXPECT_EQ(std::string(), delegate1.TakeReceivedData());
4681 4702
4682 EXPECT_TRUE(delegate2.send_headers_completed()); 4703 EXPECT_TRUE(delegate2.send_headers_completed());
4683 EXPECT_EQ(std::string(), delegate2.TakeReceivedData()); 4704 EXPECT_EQ(std::string(), delegate2.TakeReceivedData());
4684 4705
4685 EXPECT_TRUE(data.AllWriteDataConsumed()); 4706 EXPECT_TRUE(data.AllWriteDataConsumed());
4686 } 4707 }
4687 4708
4688 TEST_P(SpdySessionTest, GoAwayOnSessionFlowControlError) { 4709 TEST_P(SpdySessionTest, GoAwayOnSessionFlowControlError) {
4689 scoped_ptr<SpdyFrame> req( 4710 scoped_ptr<SpdySerializedFrame> req(
4690 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 4711 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
4691 scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway( 4712 scoped_ptr<SpdySerializedFrame> goaway(spdy_util_.ConstructSpdyGoAway(
4692 0, GOAWAY_FLOW_CONTROL_ERROR, 4713 0, GOAWAY_FLOW_CONTROL_ERROR,
4693 "delta_window_size is 6 in DecreaseRecvWindowSize, which is larger than " 4714 "delta_window_size is 6 in DecreaseRecvWindowSize, which is larger than "
4694 "the receive window size of 1")); 4715 "the receive window size of 1"));
4695 MockWrite writes[] = { 4716 MockWrite writes[] = {
4696 CreateMockWrite(*req, 0), CreateMockWrite(*goaway, 4), 4717 CreateMockWrite(*req, 0), CreateMockWrite(*goaway, 4),
4697 }; 4718 };
4698 4719
4699 scoped_ptr<SpdyFrame> resp( 4720 scoped_ptr<SpdySerializedFrame> resp(
4700 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 4721 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
4701 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true)); 4722 scoped_ptr<SpdySerializedFrame> body(
4723 spdy_util_.ConstructSpdyBodyFrame(1, true));
4702 MockRead reads[] = { 4724 MockRead reads[] = {
4703 MockRead(ASYNC, ERR_IO_PENDING, 1), 4725 MockRead(ASYNC, ERR_IO_PENDING, 1),
4704 CreateMockRead(*resp, 2), 4726 CreateMockRead(*resp, 2),
4705 CreateMockRead(*body, 3), 4727 CreateMockRead(*body, 3),
4706 }; 4728 };
4707 4729
4708 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 4730 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
4709 session_deps_.socket_factory->AddSocketDataProvider(&data); 4731 session_deps_.socket_factory->AddSocketDataProvider(&data);
4710 4732
4711 CreateNetworkSession(); 4733 CreateNetworkSession();
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
4757 GetUrlFromHeaderBlock(request_headers, spdy_util_.spdy_version()); 4779 GetUrlFromHeaderBlock(request_headers, spdy_util_.spdy_version());
4758 EXPECT_EQ(kStreamUrl, request_url); 4780 EXPECT_EQ(kStreamUrl, request_url);
4759 } 4781 }
4760 4782
4761 // Regression. Sorta. Push streams and client streams were sharing a single 4783 // Regression. Sorta. Push streams and client streams were sharing a single
4762 // limit for a long time. 4784 // limit for a long time.
4763 TEST_P(SpdySessionTest, PushedStreamShouldNotCountToClientConcurrencyLimit) { 4785 TEST_P(SpdySessionTest, PushedStreamShouldNotCountToClientConcurrencyLimit) {
4764 SettingsMap new_settings; 4786 SettingsMap new_settings;
4765 new_settings[SETTINGS_MAX_CONCURRENT_STREAMS] = 4787 new_settings[SETTINGS_MAX_CONCURRENT_STREAMS] =
4766 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 2); 4788 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 2);
4767 scoped_ptr<SpdyFrame> settings_frame( 4789 scoped_ptr<SpdySerializedFrame> settings_frame(
4768 spdy_util_.ConstructSpdySettings(new_settings)); 4790 spdy_util_.ConstructSpdySettings(new_settings));
4769 scoped_ptr<SpdyFrame> pushed(spdy_util_.ConstructSpdyPush( 4791 scoped_ptr<SpdySerializedFrame> pushed(spdy_util_.ConstructSpdyPush(
4770 nullptr, 0, 2, 1, "http://www.example.org/a.dat")); 4792 nullptr, 0, 2, 1, "http://www.example.org/a.dat"));
4771 MockRead reads[] = { 4793 MockRead reads[] = {
4772 CreateMockRead(*settings_frame, 0), 4794 CreateMockRead(*settings_frame, 0),
4773 MockRead(ASYNC, ERR_IO_PENDING, 3), 4795 MockRead(ASYNC, ERR_IO_PENDING, 3),
4774 CreateMockRead(*pushed, 4), 4796 CreateMockRead(*pushed, 4),
4775 MockRead(ASYNC, ERR_IO_PENDING, 5), 4797 MockRead(ASYNC, ERR_IO_PENDING, 5),
4776 MockRead(ASYNC, 0, 6), 4798 MockRead(ASYNC, 0, 6),
4777 }; 4799 };
4778 4800
4779 scoped_ptr<SpdyFrame> settings_ack(spdy_util_.ConstructSpdySettingsAck()); 4801 scoped_ptr<SpdySerializedFrame> settings_ack(
4780 scoped_ptr<SpdyFrame> req( 4802 spdy_util_.ConstructSpdySettingsAck());
4803 scoped_ptr<SpdySerializedFrame> req(
4781 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 4804 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
4782 MockWrite writes[] = { 4805 MockWrite writes[] = {
4783 CreateMockWrite(*settings_ack, 1), CreateMockWrite(*req, 2), 4806 CreateMockWrite(*settings_ack, 1), CreateMockWrite(*req, 2),
4784 }; 4807 };
4785 4808
4786 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 4809 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
4787 session_deps_.socket_factory->AddSocketDataProvider(&data); 4810 session_deps_.socket_factory->AddSocketDataProvider(&data);
4788 4811
4789 CreateNetworkSession(); 4812 CreateNetworkSession();
4790 CreateInsecureSpdySession(); 4813 CreateInsecureSpdySession();
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
4837 EXPECT_EQ(1u, session_->num_pushed_streams()); 4860 EXPECT_EQ(1u, session_->num_pushed_streams());
4838 EXPECT_EQ(1u, session_->num_active_pushed_streams()); 4861 EXPECT_EQ(1u, session_->num_active_pushed_streams());
4839 4862
4840 // Read EOF. 4863 // Read EOF.
4841 data.Resume(); 4864 data.Resume();
4842 base::RunLoop().RunUntilIdle(); 4865 base::RunLoop().RunUntilIdle();
4843 EXPECT_FALSE(session_); 4866 EXPECT_FALSE(session_);
4844 } 4867 }
4845 4868
4846 TEST_P(SpdySessionTest, RejectPushedStreamExceedingConcurrencyLimit) { 4869 TEST_P(SpdySessionTest, RejectPushedStreamExceedingConcurrencyLimit) {
4847 scoped_ptr<SpdyFrame> push_a(spdy_util_.ConstructSpdyPush( 4870 scoped_ptr<SpdySerializedFrame> push_a(spdy_util_.ConstructSpdyPush(
4848 nullptr, 0, 2, 1, "http://www.example.org/a.dat")); 4871 nullptr, 0, 2, 1, "http://www.example.org/a.dat"));
4849 scoped_ptr<SpdyFrame> push_b(spdy_util_.ConstructSpdyPush( 4872 scoped_ptr<SpdySerializedFrame> push_b(spdy_util_.ConstructSpdyPush(
4850 nullptr, 0, 4, 1, "http://www.example.org/b.dat")); 4873 nullptr, 0, 4, 1, "http://www.example.org/b.dat"));
4851 MockRead reads[] = { 4874 MockRead reads[] = {
4852 MockRead(ASYNC, ERR_IO_PENDING, 1), 4875 MockRead(ASYNC, ERR_IO_PENDING, 1),
4853 CreateMockRead(*push_a, 2), 4876 CreateMockRead(*push_a, 2),
4854 MockRead(ASYNC, ERR_IO_PENDING, 3), 4877 MockRead(ASYNC, ERR_IO_PENDING, 3),
4855 CreateMockRead(*push_b, 4), 4878 CreateMockRead(*push_b, 4),
4856 MockRead(ASYNC, ERR_IO_PENDING, 6), 4879 MockRead(ASYNC, ERR_IO_PENDING, 6),
4857 MockRead(ASYNC, 0, 7), 4880 MockRead(ASYNC, 0, 7),
4858 }; 4881 };
4859 4882
4860 scoped_ptr<SpdyFrame> req( 4883 scoped_ptr<SpdySerializedFrame> req(
4861 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 4884 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
4862 scoped_ptr<SpdyFrame> rst( 4885 scoped_ptr<SpdySerializedFrame> rst(
4863 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM)); 4886 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM));
4864 MockWrite writes[] = { 4887 MockWrite writes[] = {
4865 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5), 4888 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5),
4866 }; 4889 };
4867 4890
4868 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 4891 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
4869 session_deps_.socket_factory->AddSocketDataProvider(&data); 4892 session_deps_.socket_factory->AddSocketDataProvider(&data);
4870 4893
4871 CreateNetworkSession(); 4894 CreateNetworkSession();
4872 CreateInsecureSpdySession(); 4895 CreateInsecureSpdySession();
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
4923 // Tests that HTTP SPDY push streams that advertise an origin different from the 4946 // Tests that HTTP SPDY push streams that advertise an origin different from the
4924 // associated stream are accepted from a trusted SPDY proxy. 4947 // associated stream are accepted from a trusted SPDY proxy.
4925 TEST_P(SpdySessionTest, TrustedSpdyProxy) { 4948 TEST_P(SpdySessionTest, TrustedSpdyProxy) {
4926 // Origin of kDefaultURL should be different from the origin of 4949 // Origin of kDefaultURL should be different from the origin of
4927 // kHttpURLFromAnotherOrigin and kHttpsURLFromAnotherOrigin. 4950 // kHttpURLFromAnotherOrigin and kHttpsURLFromAnotherOrigin.
4928 ASSERT_NE(GURL(kDefaultURL).host(), GURL(kHttpURLFromAnotherOrigin).host()); 4951 ASSERT_NE(GURL(kDefaultURL).host(), GURL(kHttpURLFromAnotherOrigin).host());
4929 ASSERT_NE(GURL(kDefaultURL).host(), GURL(kHttpsURLFromAnotherOrigin).host()); 4952 ASSERT_NE(GURL(kDefaultURL).host(), GURL(kHttpsURLFromAnotherOrigin).host());
4930 4953
4931 // cross_origin_push contains HTTP resource for an origin different from the 4954 // cross_origin_push contains HTTP resource for an origin different from the
4932 // origin of kDefaultURL, and should be accepted. 4955 // origin of kDefaultURL, and should be accepted.
4933 scoped_ptr<SpdyFrame> cross_origin_push(spdy_util_.ConstructSpdyPush( 4956 scoped_ptr<SpdySerializedFrame> cross_origin_push(
4934 nullptr, 0, 2, 1, kHttpURLFromAnotherOrigin)); 4957 spdy_util_.ConstructSpdyPush(nullptr, 0, 2, 1,
4958 kHttpURLFromAnotherOrigin));
4935 // cross_origin_https_push contains HTTPS resource, and should be refused. 4959 // cross_origin_https_push contains HTTPS resource, and should be refused.
4936 scoped_ptr<SpdyFrame> cross_origin_https_push(spdy_util_.ConstructSpdyPush( 4960 scoped_ptr<SpdySerializedFrame> cross_origin_https_push(
4937 nullptr, 0, 4, 1, kHttpsURLFromAnotherOrigin)); 4961 spdy_util_.ConstructSpdyPush(nullptr, 0, 4, 1,
4962 kHttpsURLFromAnotherOrigin));
4938 MockRead reads[] = { 4963 MockRead reads[] = {
4939 MockRead(ASYNC, ERR_IO_PENDING, 1), 4964 MockRead(ASYNC, ERR_IO_PENDING, 1),
4940 CreateMockRead(*cross_origin_push, 2), 4965 CreateMockRead(*cross_origin_push, 2),
4941 MockRead(ASYNC, ERR_IO_PENDING, 3), 4966 MockRead(ASYNC, ERR_IO_PENDING, 3),
4942 CreateMockRead(*cross_origin_https_push, 4), 4967 CreateMockRead(*cross_origin_https_push, 4),
4943 MockRead(ASYNC, ERR_IO_PENDING, 6), 4968 MockRead(ASYNC, ERR_IO_PENDING, 6),
4944 MockRead(ASYNC, 0, 7), 4969 MockRead(ASYNC, 0, 7),
4945 }; 4970 };
4946 4971
4947 scoped_ptr<SpdyFrame> req( 4972 scoped_ptr<SpdySerializedFrame> req(
4948 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 4973 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
4949 scoped_ptr<SpdyFrame> rst( 4974 scoped_ptr<SpdySerializedFrame> rst(
4950 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM)); 4975 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM));
4951 MockWrite writes[] = { 4976 MockWrite writes[] = {
4952 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5), 4977 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5),
4953 }; 4978 };
4954 4979
4955 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 4980 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
4956 session_deps_.socket_factory->AddSocketDataProvider(&data); 4981 session_deps_.socket_factory->AddSocketDataProvider(&data);
4957 4982
4958 scoped_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); 4983 scoped_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate());
4959 proxy_delegate->set_trusted_spdy_proxy( 4984 proxy_delegate->set_trusted_spdy_proxy(
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
5014 5039
5015 // Tests that if the SPDY trusted proxy is not set, then push streams that 5040 // Tests that if the SPDY trusted proxy is not set, then push streams that
5016 // advertise an origin different from the associated stream are refused. 5041 // advertise an origin different from the associated stream are refused.
5017 TEST_P(SpdySessionTest, TrustedSpdyProxyNotSet) { 5042 TEST_P(SpdySessionTest, TrustedSpdyProxyNotSet) {
5018 // Origin of kDefaultURL should be different from the origin of 5043 // Origin of kDefaultURL should be different from the origin of
5019 // kHttpURLFromAnotherOrigin. 5044 // kHttpURLFromAnotherOrigin.
5020 ASSERT_NE(GURL(kDefaultURL).host(), GURL(kHttpURLFromAnotherOrigin).host()); 5045 ASSERT_NE(GURL(kDefaultURL).host(), GURL(kHttpURLFromAnotherOrigin).host());
5021 5046
5022 // cross_origin_push contains resource for an origin different from the 5047 // cross_origin_push contains resource for an origin different from the
5023 // origin of kDefaultURL, and should be refused. 5048 // origin of kDefaultURL, and should be refused.
5024 scoped_ptr<SpdyFrame> cross_origin_push(spdy_util_.ConstructSpdyPush( 5049 scoped_ptr<SpdySerializedFrame> cross_origin_push(
5025 nullptr, 0, 2, 1, kHttpURLFromAnotherOrigin)); 5050 spdy_util_.ConstructSpdyPush(nullptr, 0, 2, 1,
5051 kHttpURLFromAnotherOrigin));
5026 MockRead reads[] = { 5052 MockRead reads[] = {
5027 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(*cross_origin_push, 2), 5053 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(*cross_origin_push, 2),
5028 MockRead(ASYNC, 0, 4), 5054 MockRead(ASYNC, 0, 4),
5029 }; 5055 };
5030 5056
5031 scoped_ptr<SpdyFrame> req( 5057 scoped_ptr<SpdySerializedFrame> req(
5032 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 5058 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
5033 scoped_ptr<SpdyFrame> rst( 5059 scoped_ptr<SpdySerializedFrame> rst(
5034 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); 5060 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM));
5035 MockWrite writes[] = { 5061 MockWrite writes[] = {
5036 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 3), 5062 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 3),
5037 }; 5063 };
5038 5064
5039 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 5065 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
5040 session_deps_.socket_factory->AddSocketDataProvider(&data); 5066 session_deps_.socket_factory->AddSocketDataProvider(&data);
5041 5067
5042 CreateNetworkSession(); 5068 CreateNetworkSession();
5043 CreateInsecureSpdySession(); 5069 CreateInsecureSpdySession();
(...skipping 28 matching lines...) Expand all
5072 data.Resume(); 5098 data.Resume();
5073 base::RunLoop().RunUntilIdle(); 5099 base::RunLoop().RunUntilIdle();
5074 EXPECT_FALSE(session_); 5100 EXPECT_FALSE(session_);
5075 } 5101 }
5076 5102
5077 TEST_P(SpdySessionTest, IgnoreReservedRemoteStreamsCount) { 5103 TEST_P(SpdySessionTest, IgnoreReservedRemoteStreamsCount) {
5078 // Streams in reserved remote state exist only in HTTP/2. 5104 // Streams in reserved remote state exist only in HTTP/2.
5079 if (spdy_util_.spdy_version() < HTTP2) 5105 if (spdy_util_.spdy_version() < HTTP2)
5080 return; 5106 return;
5081 5107
5082 scoped_ptr<SpdyFrame> push_a(spdy_util_.ConstructSpdyPush( 5108 scoped_ptr<SpdySerializedFrame> push_a(spdy_util_.ConstructSpdyPush(
5083 nullptr, 0, 2, 1, "http://www.example.org/a.dat")); 5109 nullptr, 0, 2, 1, "http://www.example.org/a.dat"));
5084 scoped_ptr<SpdyHeaderBlock> push_headers(new SpdyHeaderBlock); 5110 scoped_ptr<SpdyHeaderBlock> push_headers(new SpdyHeaderBlock);
5085 spdy_util_.AddUrlToHeaderBlock("http://www.example.org/b.dat", 5111 spdy_util_.AddUrlToHeaderBlock("http://www.example.org/b.dat",
5086 push_headers.get()); 5112 push_headers.get());
5087 scoped_ptr<SpdyFrame> push_b( 5113 scoped_ptr<SpdySerializedFrame> push_b(
5088 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 4, 1)); 5114 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 4, 1));
5089 scoped_ptr<SpdyFrame> headers_b( 5115 scoped_ptr<SpdySerializedFrame> headers_b(
5090 spdy_util_.ConstructSpdyPushHeaders(4, nullptr, 0)); 5116 spdy_util_.ConstructSpdyPushHeaders(4, nullptr, 0));
5091 MockRead reads[] = { 5117 MockRead reads[] = {
5092 MockRead(ASYNC, ERR_IO_PENDING, 1), 5118 MockRead(ASYNC, ERR_IO_PENDING, 1),
5093 CreateMockRead(*push_a, 2), 5119 CreateMockRead(*push_a, 2),
5094 MockRead(ASYNC, ERR_IO_PENDING, 3), 5120 MockRead(ASYNC, ERR_IO_PENDING, 3),
5095 CreateMockRead(*push_b, 4), 5121 CreateMockRead(*push_b, 4),
5096 MockRead(ASYNC, ERR_IO_PENDING, 5), 5122 MockRead(ASYNC, ERR_IO_PENDING, 5),
5097 CreateMockRead(*headers_b, 6), 5123 CreateMockRead(*headers_b, 6),
5098 MockRead(ASYNC, ERR_IO_PENDING, 8), 5124 MockRead(ASYNC, ERR_IO_PENDING, 8),
5099 MockRead(ASYNC, 0, 9), 5125 MockRead(ASYNC, 0, 9),
5100 }; 5126 };
5101 5127
5102 scoped_ptr<SpdyFrame> req( 5128 scoped_ptr<SpdySerializedFrame> req(
5103 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 5129 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
5104 scoped_ptr<SpdyFrame> rst( 5130 scoped_ptr<SpdySerializedFrame> rst(
5105 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM)); 5131 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM));
5106 MockWrite writes[] = { 5132 MockWrite writes[] = {
5107 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 7), 5133 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 7),
5108 }; 5134 };
5109 5135
5110 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 5136 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
5111 session_deps_.socket_factory->AddSocketDataProvider(&data); 5137 session_deps_.socket_factory->AddSocketDataProvider(&data);
5112 5138
5113 CreateNetworkSession(); 5139 CreateNetworkSession();
5114 CreateInsecureSpdySession(); 5140 CreateInsecureSpdySession();
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
5172 } 5198 }
5173 5199
5174 TEST_P(SpdySessionTest, CancelReservedStreamOnHeadersReceived) { 5200 TEST_P(SpdySessionTest, CancelReservedStreamOnHeadersReceived) {
5175 // Streams in reserved remote state exist only in HTTP/2. 5201 // Streams in reserved remote state exist only in HTTP/2.
5176 if (spdy_util_.spdy_version() < HTTP2) 5202 if (spdy_util_.spdy_version() < HTTP2)
5177 return; 5203 return;
5178 5204
5179 const char kPushedUrl[] = "http://www.example.org/a.dat"; 5205 const char kPushedUrl[] = "http://www.example.org/a.dat";
5180 scoped_ptr<SpdyHeaderBlock> push_headers(new SpdyHeaderBlock); 5206 scoped_ptr<SpdyHeaderBlock> push_headers(new SpdyHeaderBlock);
5181 spdy_util_.AddUrlToHeaderBlock(kPushedUrl, push_headers.get()); 5207 spdy_util_.AddUrlToHeaderBlock(kPushedUrl, push_headers.get());
5182 scoped_ptr<SpdyFrame> push_promise( 5208 scoped_ptr<SpdySerializedFrame> push_promise(
5183 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 2, 1)); 5209 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 2, 1));
5184 scoped_ptr<SpdyFrame> headers_frame( 5210 scoped_ptr<SpdySerializedFrame> headers_frame(
5185 spdy_util_.ConstructSpdyPushHeaders(2, nullptr, 0)); 5211 spdy_util_.ConstructSpdyPushHeaders(2, nullptr, 0));
5186 MockRead reads[] = { 5212 MockRead reads[] = {
5187 MockRead(ASYNC, ERR_IO_PENDING, 1), 5213 MockRead(ASYNC, ERR_IO_PENDING, 1),
5188 CreateMockRead(*push_promise, 2), 5214 CreateMockRead(*push_promise, 2),
5189 MockRead(ASYNC, ERR_IO_PENDING, 3), 5215 MockRead(ASYNC, ERR_IO_PENDING, 3),
5190 CreateMockRead(*headers_frame, 4), 5216 CreateMockRead(*headers_frame, 4),
5191 MockRead(ASYNC, ERR_IO_PENDING, 6), 5217 MockRead(ASYNC, ERR_IO_PENDING, 6),
5192 MockRead(ASYNC, 0, 7), 5218 MockRead(ASYNC, 0, 7),
5193 }; 5219 };
5194 5220
5195 scoped_ptr<SpdyFrame> req( 5221 scoped_ptr<SpdySerializedFrame> req(
5196 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 5222 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
5197 scoped_ptr<SpdyFrame> rst( 5223 scoped_ptr<SpdySerializedFrame> rst(
5198 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_CANCEL)); 5224 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_CANCEL));
5199 MockWrite writes[] = { 5225 MockWrite writes[] = {
5200 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5), 5226 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5),
5201 }; 5227 };
5202 5228
5203 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 5229 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
5204 session_deps_.socket_factory->AddSocketDataProvider(&data); 5230 session_deps_.socket_factory->AddSocketDataProvider(&data);
5205 5231
5206 CreateNetworkSession(); 5232 CreateNetworkSession();
5207 CreateInsecureSpdySession(); 5233 CreateInsecureSpdySession();
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
5441 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), 5467 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(),
5442 "spdy_pooling.pem"); 5468 "spdy_pooling.pem");
5443 ssl_info.is_issued_by_known_root = true; 5469 ssl_info.is_issued_by_known_root = true;
5444 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin)); 5470 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin));
5445 5471
5446 EXPECT_TRUE(SpdySession::CanPool( 5472 EXPECT_TRUE(SpdySession::CanPool(
5447 &tss, ssl_info, "www.example.org", "mail.example.org")); 5473 &tss, ssl_info, "www.example.org", "mail.example.org"));
5448 } 5474 }
5449 5475
5450 } // namespace net 5476 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_session_pool_unittest.cc ('k') | net/spdy/spdy_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698