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

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

Issue 2156643002: Move ~1000 SpdySerializedFrame instances from heap to stack in tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/spdy/spdy_session_pool_unittest.cc ('k') | net/spdy/spdy_stream_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/spdy/spdy_session.h" 5 #include "net/spdy/spdy_session.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/base64.h" 10 #include "base/base64.h"
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 311
312 session_->CloseSessionOnError(ERR_ABORTED, "Aborting session"); 312 session_->CloseSessionOnError(ERR_ABORTED, "Aborting session");
313 313
314 EXPECT_THAT(callback1.WaitForResult(), IsError(ERR_ABORTED)); 314 EXPECT_THAT(callback1.WaitForResult(), IsError(ERR_ABORTED));
315 } 315 }
316 316
317 // A session receiving a GOAWAY frame with no active streams should close. 317 // A session receiving a GOAWAY frame with no active streams should close.
318 TEST_P(SpdySessionTest, GoAwayWithNoActiveStreams) { 318 TEST_P(SpdySessionTest, GoAwayWithNoActiveStreams) {
319 session_deps_.host_resolver->set_synchronous_mode(true); 319 session_deps_.host_resolver->set_synchronous_mode(true);
320 320
321 std::unique_ptr<SpdySerializedFrame> goaway( 321 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway(1));
322 spdy_util_.ConstructSpdyGoAway(1));
323 MockRead reads[] = { 322 MockRead reads[] = {
324 CreateMockRead(*goaway, 0), 323 CreateMockRead(goaway, 0),
325 }; 324 };
326 SequencedSocketData data(reads, arraysize(reads), nullptr, 0); 325 SequencedSocketData data(reads, arraysize(reads), nullptr, 0);
327 session_deps_.socket_factory->AddSocketDataProvider(&data); 326 session_deps_.socket_factory->AddSocketDataProvider(&data);
328 327
329 CreateNetworkSession(); 328 CreateNetworkSession();
330 CreateInsecureSpdySession(); 329 CreateInsecureSpdySession();
331 330
332 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_)); 331 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_));
333 332
334 // Read and process the GOAWAY frame. 333 // Read and process the GOAWAY frame.
335 base::RunLoop().RunUntilIdle(); 334 base::RunLoop().RunUntilIdle();
336 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_)); 335 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
337 EXPECT_FALSE(session_); 336 EXPECT_FALSE(session_);
338 } 337 }
339 338
340 // A session receiving a GOAWAY frame immediately with no active 339 // A session receiving a GOAWAY frame immediately with no active
341 // streams should then close. 340 // streams should then close.
342 TEST_P(SpdySessionTest, GoAwayImmediatelyWithNoActiveStreams) { 341 TEST_P(SpdySessionTest, GoAwayImmediatelyWithNoActiveStreams) {
343 session_deps_.host_resolver->set_synchronous_mode(true); 342 session_deps_.host_resolver->set_synchronous_mode(true);
344 343
345 std::unique_ptr<SpdySerializedFrame> goaway( 344 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway(1));
346 spdy_util_.ConstructSpdyGoAway(1));
347 MockRead reads[] = { 345 MockRead reads[] = {
348 CreateMockRead(*goaway, 0, SYNCHRONOUS), MockRead(ASYNC, 0, 1) // EOF 346 CreateMockRead(goaway, 0, SYNCHRONOUS), MockRead(ASYNC, 0, 1) // EOF
349 }; 347 };
350 SequencedSocketData data(reads, arraysize(reads), nullptr, 0); 348 SequencedSocketData data(reads, arraysize(reads), nullptr, 0);
351 session_deps_.socket_factory->AddSocketDataProvider(&data); 349 session_deps_.socket_factory->AddSocketDataProvider(&data);
352 350
353 CreateNetworkSession(); 351 CreateNetworkSession();
354 352
355 session_ = TryCreateInsecureSpdySessionExpectingFailure( 353 session_ = TryCreateInsecureSpdySessionExpectingFailure(
356 http_session_.get(), key_, ERR_CONNECTION_CLOSED, BoundNetLog()); 354 http_session_.get(), key_, ERR_CONNECTION_CLOSED, BoundNetLog());
357 base::RunLoop().RunUntilIdle(); 355 base::RunLoop().RunUntilIdle();
358 356
359 EXPECT_FALSE(session_); 357 EXPECT_FALSE(session_);
360 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_)); 358 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
361 EXPECT_FALSE(data.AllReadDataConsumed()); 359 EXPECT_FALSE(data.AllReadDataConsumed());
362 } 360 }
363 361
364 // A session receiving a GOAWAY frame with active streams should close 362 // A session receiving a GOAWAY frame with active streams should close
365 // when the last active stream is closed. 363 // when the last active stream is closed.
366 TEST_P(SpdySessionTest, GoAwayWithActiveStreams) { 364 TEST_P(SpdySessionTest, GoAwayWithActiveStreams) {
367 session_deps_.host_resolver->set_synchronous_mode(true); 365 session_deps_.host_resolver->set_synchronous_mode(true);
368 366
369 std::unique_ptr<SpdySerializedFrame> goaway( 367 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway(1));
370 spdy_util_.ConstructSpdyGoAway(1));
371 MockRead reads[] = { 368 MockRead reads[] = {
372 MockRead(ASYNC, ERR_IO_PENDING, 2), 369 MockRead(ASYNC, ERR_IO_PENDING, 2), CreateMockRead(goaway, 3),
373 CreateMockRead(*goaway, 3), 370 MockRead(ASYNC, ERR_IO_PENDING, 4), MockRead(ASYNC, 0, 5) // EOF
374 MockRead(ASYNC, ERR_IO_PENDING, 4),
375 MockRead(ASYNC, 0, 5) // EOF
376 }; 371 };
377 std::unique_ptr<SpdySerializedFrame> req1( 372 SpdySerializedFrame req1(
378 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 373 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
379 std::unique_ptr<SpdySerializedFrame> req2( 374 SpdySerializedFrame req2(
380 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, MEDIUM, true)); 375 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, MEDIUM, true));
381 MockWrite writes[] = { 376 MockWrite writes[] = {
382 CreateMockWrite(*req1, 0), 377 CreateMockWrite(req1, 0), CreateMockWrite(req2, 1),
383 CreateMockWrite(*req2, 1),
384 }; 378 };
385 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 379 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
386 session_deps_.socket_factory->AddSocketDataProvider(&data); 380 session_deps_.socket_factory->AddSocketDataProvider(&data);
387 381
388 CreateNetworkSession(); 382 CreateNetworkSession();
389 CreateInsecureSpdySession(); 383 CreateInsecureSpdySession();
390 384
391 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( 385 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
392 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 386 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
393 test::StreamDelegateDoNothing delegate1(spdy_stream1); 387 test::StreamDelegateDoNothing delegate1(spdy_stream1);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 EXPECT_TRUE(session_); 428 EXPECT_TRUE(session_);
435 data.Resume(); 429 data.Resume();
436 base::RunLoop().RunUntilIdle(); 430 base::RunLoop().RunUntilIdle();
437 EXPECT_FALSE(session_); 431 EXPECT_FALSE(session_);
438 } 432 }
439 433
440 // Regression test for https://crbug.com/547130. 434 // Regression test for https://crbug.com/547130.
441 TEST_P(SpdySessionTest, GoAwayWithActiveAndCreatedStream) { 435 TEST_P(SpdySessionTest, GoAwayWithActiveAndCreatedStream) {
442 session_deps_.host_resolver->set_synchronous_mode(true); 436 session_deps_.host_resolver->set_synchronous_mode(true);
443 437
444 std::unique_ptr<SpdySerializedFrame> goaway( 438 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway(0));
445 spdy_util_.ConstructSpdyGoAway(0));
446 MockRead reads[] = { 439 MockRead reads[] = {
447 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(*goaway, 2), 440 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(goaway, 2),
448 }; 441 };
449 442
450 // No |req2|, because the second stream will never get activated. 443 // No |req2|, because the second stream will never get activated.
451 std::unique_ptr<SpdySerializedFrame> req1( 444 SpdySerializedFrame req1(
452 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 445 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
453 MockWrite writes[] = { 446 MockWrite writes[] = {
454 CreateMockWrite(*req1, 0), 447 CreateMockWrite(req1, 0),
455 }; 448 };
456 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 449 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
457 session_deps_.socket_factory->AddSocketDataProvider(&data); 450 session_deps_.socket_factory->AddSocketDataProvider(&data);
458 451
459 CreateNetworkSession(); 452 CreateNetworkSession();
460 CreateInsecureSpdySession(); 453 CreateInsecureSpdySession();
461 454
462 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( 455 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
463 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 456 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
464 test::StreamDelegateDoNothing delegate1(spdy_stream1); 457 test::StreamDelegateDoNothing delegate1(spdy_stream1);
(...skipping 26 matching lines...) Expand all
491 EXPECT_TRUE(data.AllWriteDataConsumed()); 484 EXPECT_TRUE(data.AllWriteDataConsumed());
492 EXPECT_TRUE(data.AllReadDataConsumed()); 485 EXPECT_TRUE(data.AllReadDataConsumed());
493 } 486 }
494 487
495 // Have a session receive two GOAWAY frames, with the last one causing 488 // Have a session receive two GOAWAY frames, with the last one causing
496 // the last active stream to be closed. The session should then be 489 // the last active stream to be closed. The session should then be
497 // closed after the second GOAWAY frame. 490 // closed after the second GOAWAY frame.
498 TEST_P(SpdySessionTest, GoAwayTwice) { 491 TEST_P(SpdySessionTest, GoAwayTwice) {
499 session_deps_.host_resolver->set_synchronous_mode(true); 492 session_deps_.host_resolver->set_synchronous_mode(true);
500 493
501 std::unique_ptr<SpdySerializedFrame> goaway1( 494 SpdySerializedFrame goaway1(spdy_util_.ConstructSpdyGoAway(1));
502 spdy_util_.ConstructSpdyGoAway(1)); 495 SpdySerializedFrame goaway2(spdy_util_.ConstructSpdyGoAway(0));
503 std::unique_ptr<SpdySerializedFrame> goaway2(
504 spdy_util_.ConstructSpdyGoAway(0));
505 MockRead reads[] = { 496 MockRead reads[] = {
506 MockRead(ASYNC, ERR_IO_PENDING, 2), 497 MockRead(ASYNC, ERR_IO_PENDING, 2), CreateMockRead(goaway1, 3),
507 CreateMockRead(*goaway1, 3), 498 MockRead(ASYNC, ERR_IO_PENDING, 4), CreateMockRead(goaway2, 5),
508 MockRead(ASYNC, ERR_IO_PENDING, 4), 499 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7) // EOF
509 CreateMockRead(*goaway2, 5),
510 MockRead(ASYNC, ERR_IO_PENDING, 6),
511 MockRead(ASYNC, 0, 7) // EOF
512 }; 500 };
513 std::unique_ptr<SpdySerializedFrame> req1( 501 SpdySerializedFrame req1(
514 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 502 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
515 std::unique_ptr<SpdySerializedFrame> req2( 503 SpdySerializedFrame req2(
516 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, MEDIUM, true)); 504 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, MEDIUM, true));
517 MockWrite writes[] = { 505 MockWrite writes[] = {
518 CreateMockWrite(*req1, 0), 506 CreateMockWrite(req1, 0), CreateMockWrite(req2, 1),
519 CreateMockWrite(*req2, 1),
520 }; 507 };
521 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 508 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
522 session_deps_.socket_factory->AddSocketDataProvider(&data); 509 session_deps_.socket_factory->AddSocketDataProvider(&data);
523 510
524 CreateNetworkSession(); 511 CreateNetworkSession();
525 CreateInsecureSpdySession(); 512 CreateInsecureSpdySession();
526 513
527 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( 514 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
528 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 515 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
529 test::StreamDelegateDoNothing delegate1(spdy_stream1); 516 test::StreamDelegateDoNothing delegate1(spdy_stream1);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 base::RunLoop().RunUntilIdle(); 555 base::RunLoop().RunUntilIdle();
569 EXPECT_FALSE(session_); 556 EXPECT_FALSE(session_);
570 } 557 }
571 558
572 // Have a session with active streams receive a GOAWAY frame and then 559 // Have a session with active streams receive a GOAWAY frame and then
573 // close it. It should handle the close properly (i.e., not try to 560 // close it. It should handle the close properly (i.e., not try to
574 // make itself unavailable in its pool twice). 561 // make itself unavailable in its pool twice).
575 TEST_P(SpdySessionTest, GoAwayWithActiveStreamsThenClose) { 562 TEST_P(SpdySessionTest, GoAwayWithActiveStreamsThenClose) {
576 session_deps_.host_resolver->set_synchronous_mode(true); 563 session_deps_.host_resolver->set_synchronous_mode(true);
577 564
578 std::unique_ptr<SpdySerializedFrame> goaway( 565 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway(1));
579 spdy_util_.ConstructSpdyGoAway(1));
580 MockRead reads[] = { 566 MockRead reads[] = {
581 MockRead(ASYNC, ERR_IO_PENDING, 2), 567 MockRead(ASYNC, ERR_IO_PENDING, 2), CreateMockRead(goaway, 3),
582 CreateMockRead(*goaway, 3), 568 MockRead(ASYNC, ERR_IO_PENDING, 4), MockRead(ASYNC, 0, 5) // EOF
583 MockRead(ASYNC, ERR_IO_PENDING, 4),
584 MockRead(ASYNC, 0, 5) // EOF
585 }; 569 };
586 std::unique_ptr<SpdySerializedFrame> req1( 570 SpdySerializedFrame req1(
587 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 571 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
588 std::unique_ptr<SpdySerializedFrame> req2( 572 SpdySerializedFrame req2(
589 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, MEDIUM, true)); 573 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, MEDIUM, true));
590 MockWrite writes[] = { 574 MockWrite writes[] = {
591 CreateMockWrite(*req1, 0), 575 CreateMockWrite(req1, 0), CreateMockWrite(req2, 1),
592 CreateMockWrite(*req2, 1),
593 }; 576 };
594 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 577 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
595 session_deps_.socket_factory->AddSocketDataProvider(&data); 578 session_deps_.socket_factory->AddSocketDataProvider(&data);
596 579
597 CreateNetworkSession(); 580 CreateNetworkSession();
598 CreateInsecureSpdySession(); 581 CreateInsecureSpdySession();
599 582
600 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( 583 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
601 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 584 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
602 test::StreamDelegateDoNothing delegate1(spdy_stream1); 585 test::StreamDelegateDoNothing delegate1(spdy_stream1);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
642 base::RunLoop().RunUntilIdle(); 625 base::RunLoop().RunUntilIdle();
643 EXPECT_FALSE(session_); 626 EXPECT_FALSE(session_);
644 } 627 }
645 628
646 // Process a joint read buffer which causes the session to begin draining, and 629 // Process a joint read buffer which causes the session to begin draining, and
647 // then processes a GOAWAY. The session should gracefully drain. Regression test 630 // then processes a GOAWAY. The session should gracefully drain. Regression test
648 // for crbug.com/379469 631 // for crbug.com/379469
649 TEST_P(SpdySessionTest, GoAwayWhileDraining) { 632 TEST_P(SpdySessionTest, GoAwayWhileDraining) {
650 session_deps_.host_resolver->set_synchronous_mode(true); 633 session_deps_.host_resolver->set_synchronous_mode(true);
651 634
652 std::unique_ptr<SpdySerializedFrame> req( 635 SpdySerializedFrame req(
653 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 636 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
654 MockWrite writes[] = { 637 MockWrite writes[] = {
655 CreateMockWrite(*req, 0), 638 CreateMockWrite(req, 0),
656 }; 639 };
657 640
658 std::unique_ptr<SpdySerializedFrame> resp( 641 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
659 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 642 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway(1));
660 std::unique_ptr<SpdySerializedFrame> goaway( 643 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true));
661 spdy_util_.ConstructSpdyGoAway(1)); 644 size_t joint_size = goaway.size() * 2 + body.size();
662 std::unique_ptr<SpdySerializedFrame> body(
663 spdy_util_.ConstructSpdyBodyFrame(1, true));
664 size_t joint_size = goaway->size() * 2 + body->size();
665 645
666 // Compose interleaved |goaway| and |body| frames into a single read. 646 // Compose interleaved |goaway| and |body| frames into a single read.
667 std::unique_ptr<char[]> buffer(new char[joint_size]); 647 std::unique_ptr<char[]> buffer(new char[joint_size]);
668 { 648 {
669 size_t out = 0; 649 size_t out = 0;
670 memcpy(&buffer[out], goaway->data(), goaway->size()); 650 memcpy(&buffer[out], goaway.data(), goaway.size());
671 out += goaway->size(); 651 out += goaway.size();
672 memcpy(&buffer[out], body->data(), body->size()); 652 memcpy(&buffer[out], body.data(), body.size());
673 out += body->size(); 653 out += body.size();
674 memcpy(&buffer[out], goaway->data(), goaway->size()); 654 memcpy(&buffer[out], goaway.data(), goaway.size());
675 out += goaway->size(); 655 out += goaway.size();
676 ASSERT_EQ(out, joint_size); 656 ASSERT_EQ(out, joint_size);
677 } 657 }
678 SpdySerializedFrame joint_frames(buffer.get(), joint_size, false); 658 SpdySerializedFrame joint_frames(buffer.get(), joint_size, false);
679 659
680 MockRead reads[] = { 660 MockRead reads[] = {
681 CreateMockRead(*resp, 1), CreateMockRead(joint_frames, 2), 661 CreateMockRead(resp, 1), CreateMockRead(joint_frames, 2),
682 MockRead(ASYNC, 0, 3) // EOF 662 MockRead(ASYNC, 0, 3) // EOF
683 }; 663 };
684 664
685 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 665 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
686 session_deps_.socket_factory->AddSocketDataProvider(&data); 666 session_deps_.socket_factory->AddSocketDataProvider(&data);
687 667
688 CreateNetworkSession(); 668 CreateNetworkSession();
689 CreateInsecureSpdySession(); 669 CreateInsecureSpdySession();
690 670
691 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( 671 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously(
(...skipping 13 matching lines...) Expand all
705 EXPECT_THAT(delegate.WaitForClose(), IsOk()); 685 EXPECT_THAT(delegate.WaitForClose(), IsOk());
706 EXPECT_EQ(kUploadData, delegate.TakeReceivedData()); 686 EXPECT_EQ(kUploadData, delegate.TakeReceivedData());
707 EXPECT_FALSE(session_); 687 EXPECT_FALSE(session_);
708 } 688 }
709 689
710 // Try to create a stream after receiving a GOAWAY frame. It should 690 // Try to create a stream after receiving a GOAWAY frame. It should
711 // fail. 691 // fail.
712 TEST_P(SpdySessionTest, CreateStreamAfterGoAway) { 692 TEST_P(SpdySessionTest, CreateStreamAfterGoAway) {
713 session_deps_.host_resolver->set_synchronous_mode(true); 693 session_deps_.host_resolver->set_synchronous_mode(true);
714 694
715 std::unique_ptr<SpdySerializedFrame> goaway( 695 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway(1));
716 spdy_util_.ConstructSpdyGoAway(1));
717 MockRead reads[] = { 696 MockRead reads[] = {
718 MockRead(ASYNC, ERR_IO_PENDING, 1), 697 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(goaway, 2),
719 CreateMockRead(*goaway, 2), 698 MockRead(ASYNC, ERR_IO_PENDING, 3), MockRead(ASYNC, 0, 4) // EOF
720 MockRead(ASYNC, ERR_IO_PENDING, 3),
721 MockRead(ASYNC, 0, 4) // EOF
722 }; 699 };
723 std::unique_ptr<SpdySerializedFrame> req( 700 SpdySerializedFrame req(
724 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 701 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
725 MockWrite writes[] = { 702 MockWrite writes[] = {
726 CreateMockWrite(*req, 0), 703 CreateMockWrite(req, 0),
727 }; 704 };
728 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 705 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
729 session_deps_.socket_factory->AddSocketDataProvider(&data); 706 session_deps_.socket_factory->AddSocketDataProvider(&data);
730 707
731 CreateNetworkSession(); 708 CreateNetworkSession();
732 CreateInsecureSpdySession(); 709 CreateInsecureSpdySession();
733 710
734 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( 711 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously(
735 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 712 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
736 test::StreamDelegateDoNothing delegate(spdy_stream); 713 test::StreamDelegateDoNothing delegate(spdy_stream);
(...skipping 27 matching lines...) Expand all
764 data.Resume(); 741 data.Resume();
765 base::RunLoop().RunUntilIdle(); 742 base::RunLoop().RunUntilIdle();
766 EXPECT_FALSE(session_); 743 EXPECT_FALSE(session_);
767 } 744 }
768 745
769 // Receiving a SYN_STREAM frame after a GOAWAY frame should result in 746 // Receiving a SYN_STREAM frame after a GOAWAY frame should result in
770 // the stream being refused. 747 // the stream being refused.
771 TEST_P(SpdySessionTest, SynStreamAfterGoAway) { 748 TEST_P(SpdySessionTest, SynStreamAfterGoAway) {
772 session_deps_.host_resolver->set_synchronous_mode(true); 749 session_deps_.host_resolver->set_synchronous_mode(true);
773 750
774 std::unique_ptr<SpdySerializedFrame> goaway( 751 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway(1));
775 spdy_util_.ConstructSpdyGoAway(1)); 752 SpdySerializedFrame push(
776 std::unique_ptr<SpdySerializedFrame> push(
777 spdy_util_.ConstructSpdyPush(nullptr, 0, 2, 1, kDefaultUrl)); 753 spdy_util_.ConstructSpdyPush(nullptr, 0, 2, 1, kDefaultUrl));
778 MockRead reads[] = { 754 MockRead reads[] = {
779 MockRead(ASYNC, ERR_IO_PENDING, 1), 755 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(goaway, 2),
780 CreateMockRead(*goaway, 2), 756 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(push, 4),
781 MockRead(ASYNC, ERR_IO_PENDING, 3),
782 CreateMockRead(*push, 4),
783 MockRead(ASYNC, 0, 6) // EOF 757 MockRead(ASYNC, 0, 6) // EOF
784 }; 758 };
785 std::unique_ptr<SpdySerializedFrame> req( 759 SpdySerializedFrame req(
786 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 760 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
787 std::unique_ptr<SpdySerializedFrame> rst( 761 SpdySerializedFrame rst(
788 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); 762 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM));
789 MockWrite writes[] = {CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5)}; 763 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 5)};
790 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 764 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
791 session_deps_.socket_factory->AddSocketDataProvider(&data); 765 session_deps_.socket_factory->AddSocketDataProvider(&data);
792 766
793 CreateNetworkSession(); 767 CreateNetworkSession();
794 CreateInsecureSpdySession(); 768 CreateInsecureSpdySession();
795 769
796 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( 770 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously(
797 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 771 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
798 test::StreamDelegateDoNothing delegate(spdy_stream); 772 test::StreamDelegateDoNothing delegate(spdy_stream);
799 spdy_stream->SetDelegate(&delegate); 773 spdy_stream->SetDelegate(&delegate);
(...skipping 24 matching lines...) Expand all
824 } 798 }
825 799
826 // A session observing a network change with active streams should close 800 // A session observing a network change with active streams should close
827 // when the last active stream is closed. 801 // when the last active stream is closed.
828 TEST_P(SpdySessionTest, NetworkChangeWithActiveStreams) { 802 TEST_P(SpdySessionTest, NetworkChangeWithActiveStreams) {
829 session_deps_.host_resolver->set_synchronous_mode(true); 803 session_deps_.host_resolver->set_synchronous_mode(true);
830 804
831 MockRead reads[] = { 805 MockRead reads[] = {
832 MockRead(ASYNC, ERR_IO_PENDING, 1), MockRead(ASYNC, 0, 2) // EOF 806 MockRead(ASYNC, ERR_IO_PENDING, 1), MockRead(ASYNC, 0, 2) // EOF
833 }; 807 };
834 std::unique_ptr<SpdySerializedFrame> req1( 808 SpdySerializedFrame req1(
835 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 809 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
836 MockWrite writes[] = { 810 MockWrite writes[] = {
837 CreateMockWrite(*req1, 0), 811 CreateMockWrite(req1, 0),
838 }; 812 };
839 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 813 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
840 session_deps_.socket_factory->AddSocketDataProvider(&data); 814 session_deps_.socket_factory->AddSocketDataProvider(&data);
841 815
842 CreateNetworkSession(); 816 CreateNetworkSession();
843 CreateInsecureSpdySession(); 817 CreateInsecureSpdySession();
844 818
845 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( 819 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously(
846 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 820 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
847 test::StreamDelegateDoNothing delegate(spdy_stream); 821 test::StreamDelegateDoNothing delegate(spdy_stream);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
881 855
882 data.Resume(); 856 data.Resume();
883 base::RunLoop().RunUntilIdle(); 857 base::RunLoop().RunUntilIdle();
884 EXPECT_FALSE(session_); 858 EXPECT_FALSE(session_);
885 } 859 }
886 860
887 TEST_P(SpdySessionTest, ClientPing) { 861 TEST_P(SpdySessionTest, ClientPing) {
888 session_deps_.enable_ping = true; 862 session_deps_.enable_ping = true;
889 session_deps_.host_resolver->set_synchronous_mode(true); 863 session_deps_.host_resolver->set_synchronous_mode(true);
890 864
891 std::unique_ptr<SpdySerializedFrame> read_ping( 865 SpdySerializedFrame read_ping(spdy_util_.ConstructSpdyPing(1, true));
892 spdy_util_.ConstructSpdyPing(1, true));
893 MockRead reads[] = { 866 MockRead reads[] = {
894 CreateMockRead(*read_ping, 1), 867 CreateMockRead(read_ping, 1), MockRead(ASYNC, ERR_IO_PENDING, 2),
895 MockRead(ASYNC, ERR_IO_PENDING, 2),
896 MockRead(ASYNC, 0, 3) // EOF 868 MockRead(ASYNC, 0, 3) // EOF
897 }; 869 };
898 std::unique_ptr<SpdySerializedFrame> write_ping( 870 SpdySerializedFrame write_ping(spdy_util_.ConstructSpdyPing(1, false));
899 spdy_util_.ConstructSpdyPing(1, false));
900 MockWrite writes[] = { 871 MockWrite writes[] = {
901 CreateMockWrite(*write_ping, 0), 872 CreateMockWrite(write_ping, 0),
902 }; 873 };
903 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 874 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
904 session_deps_.socket_factory->AddSocketDataProvider(&data); 875 session_deps_.socket_factory->AddSocketDataProvider(&data);
905 876
906 CreateNetworkSession(); 877 CreateNetworkSession();
907 CreateInsecureSpdySession(); 878 CreateInsecureSpdySession();
908 879
909 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( 880 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
910 SPDY_BIDIRECTIONAL_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 881 SPDY_BIDIRECTIONAL_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
911 ASSERT_TRUE(spdy_stream1); 882 ASSERT_TRUE(spdy_stream1);
(...skipping 22 matching lines...) Expand all
934 905
935 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); 906 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED));
936 907
937 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_)); 908 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
938 EXPECT_FALSE(session_); 909 EXPECT_FALSE(session_);
939 } 910 }
940 911
941 TEST_P(SpdySessionTest, ServerPing) { 912 TEST_P(SpdySessionTest, ServerPing) {
942 session_deps_.host_resolver->set_synchronous_mode(true); 913 session_deps_.host_resolver->set_synchronous_mode(true);
943 914
944 std::unique_ptr<SpdySerializedFrame> read_ping( 915 SpdySerializedFrame read_ping(spdy_util_.ConstructSpdyPing(2, false));
945 spdy_util_.ConstructSpdyPing(2, false));
946 MockRead reads[] = { 916 MockRead reads[] = {
947 CreateMockRead(*read_ping), 917 CreateMockRead(read_ping), MockRead(SYNCHRONOUS, 0, 0) // EOF
948 MockRead(SYNCHRONOUS, 0, 0) // EOF
949 }; 918 };
950 std::unique_ptr<SpdySerializedFrame> write_ping( 919 SpdySerializedFrame write_ping(spdy_util_.ConstructSpdyPing(2, true));
951 spdy_util_.ConstructSpdyPing(2, true));
952 MockWrite writes[] = { 920 MockWrite writes[] = {
953 CreateMockWrite(*write_ping), 921 CreateMockWrite(write_ping),
954 }; 922 };
955 StaticSocketDataProvider data( 923 StaticSocketDataProvider data(
956 reads, arraysize(reads), writes, arraysize(writes)); 924 reads, arraysize(reads), writes, arraysize(writes));
957 session_deps_.socket_factory->AddSocketDataProvider(&data); 925 session_deps_.socket_factory->AddSocketDataProvider(&data);
958 926
959 CreateNetworkSession(); 927 CreateNetworkSession();
960 CreateInsecureSpdySession(); 928 CreateInsecureSpdySession();
961 929
962 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( 930 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
963 SPDY_BIDIRECTIONAL_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 931 SPDY_BIDIRECTIONAL_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
(...skipping 11 matching lines...) Expand all
975 } 943 }
976 944
977 // Cause a ping to be sent out while producing a write. The write loop 945 // Cause a ping to be sent out while producing a write. The write loop
978 // should handle this properly, i.e. another DoWriteLoop task should 946 // should handle this properly, i.e. another DoWriteLoop task should
979 // not be posted. This is a regression test for 947 // not be posted. This is a regression test for
980 // http://crbug.com/261043 . 948 // http://crbug.com/261043 .
981 TEST_P(SpdySessionTest, PingAndWriteLoop) { 949 TEST_P(SpdySessionTest, PingAndWriteLoop) {
982 session_deps_.enable_ping = true; 950 session_deps_.enable_ping = true;
983 session_deps_.time_func = TheNearFuture; 951 session_deps_.time_func = TheNearFuture;
984 952
985 std::unique_ptr<SpdySerializedFrame> write_ping( 953 SpdySerializedFrame write_ping(spdy_util_.ConstructSpdyPing(1, false));
986 spdy_util_.ConstructSpdyPing(1, false)); 954 SpdySerializedFrame req(
987 std::unique_ptr<SpdySerializedFrame> req(
988 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 955 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
989 MockWrite writes[] = { 956 MockWrite writes[] = {
990 CreateMockWrite(*req, 0), 957 CreateMockWrite(req, 0), CreateMockWrite(write_ping, 1),
991 CreateMockWrite(*write_ping, 1),
992 }; 958 };
993 959
994 MockRead reads[] = { 960 MockRead reads[] = {
995 MockRead(ASYNC, ERR_IO_PENDING, 2), MockRead(ASYNC, 0, 3) // EOF 961 MockRead(ASYNC, ERR_IO_PENDING, 2), MockRead(ASYNC, 0, 3) // EOF
996 }; 962 };
997 963
998 session_deps_.host_resolver->set_synchronous_mode(true); 964 session_deps_.host_resolver->set_synchronous_mode(true);
999 965
1000 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 966 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
1001 session_deps_.socket_factory->AddSocketDataProvider(&data); 967 session_deps_.socket_factory->AddSocketDataProvider(&data);
(...skipping 25 matching lines...) Expand all
1027 const SpdyStreamId kLastStreamId = 0x7fffffff; 993 const SpdyStreamId kLastStreamId = 0x7fffffff;
1028 session_deps_.host_resolver->set_synchronous_mode(true); 994 session_deps_.host_resolver->set_synchronous_mode(true);
1029 995
1030 // Test setup: |stream_hi_water_mark_| and |max_concurrent_streams_| are 996 // Test setup: |stream_hi_water_mark_| and |max_concurrent_streams_| are
1031 // fixed to allow for two stream ID assignments, and three concurrent 997 // fixed to allow for two stream ID assignments, and three concurrent
1032 // streams. Four streams are started, and two are activated. Verify the 998 // streams. Four streams are started, and two are activated. Verify the
1033 // session goes away, and that the created (but not activated) and 999 // session goes away, and that the created (but not activated) and
1034 // stalled streams are aborted. Also verify the activated streams complete, 1000 // stalled streams are aborted. Also verify the activated streams complete,
1035 // at which point the session closes. 1001 // at which point the session closes.
1036 1002
1037 std::unique_ptr<SpdySerializedFrame> req1( 1003 SpdySerializedFrame req1(
1038 spdy_util_.ConstructSpdyGet(nullptr, 0, kLastStreamId - 2, MEDIUM, true)); 1004 spdy_util_.ConstructSpdyGet(nullptr, 0, kLastStreamId - 2, MEDIUM, true));
1039 std::unique_ptr<SpdySerializedFrame> req2( 1005 SpdySerializedFrame req2(
1040 spdy_util_.ConstructSpdyGet(nullptr, 0, kLastStreamId, MEDIUM, true)); 1006 spdy_util_.ConstructSpdyGet(nullptr, 0, kLastStreamId, MEDIUM, true));
1041 1007
1042 MockWrite writes[] = { 1008 MockWrite writes[] = {
1043 CreateMockWrite(*req1, 0), CreateMockWrite(*req2, 1), 1009 CreateMockWrite(req1, 0), CreateMockWrite(req2, 1),
1044 }; 1010 };
1045 1011
1046 std::unique_ptr<SpdySerializedFrame> resp1( 1012 SpdySerializedFrame resp1(
1047 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, kLastStreamId - 2)); 1013 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, kLastStreamId - 2));
1048 std::unique_ptr<SpdySerializedFrame> resp2( 1014 SpdySerializedFrame resp2(
1049 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, kLastStreamId)); 1015 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, kLastStreamId));
1050 1016
1051 std::unique_ptr<SpdySerializedFrame> body1( 1017 SpdySerializedFrame body1(
1052 spdy_util_.ConstructSpdyBodyFrame(kLastStreamId - 2, true)); 1018 spdy_util_.ConstructSpdyDataFrame(kLastStreamId - 2, true));
1053 std::unique_ptr<SpdySerializedFrame> body2( 1019 SpdySerializedFrame body2(
1054 spdy_util_.ConstructSpdyBodyFrame(kLastStreamId, true)); 1020 spdy_util_.ConstructSpdyDataFrame(kLastStreamId, true));
1055 1021
1056 MockRead reads[] = { 1022 MockRead reads[] = {
1057 CreateMockRead(*resp1, 2), 1023 CreateMockRead(resp1, 2), CreateMockRead(resp2, 3),
1058 CreateMockRead(*resp2, 3), 1024 MockRead(ASYNC, ERR_IO_PENDING, 4), CreateMockRead(body1, 5),
1059 MockRead(ASYNC, ERR_IO_PENDING, 4), 1025 CreateMockRead(body2, 6), MockRead(ASYNC, 0, 7) // EOF
1060 CreateMockRead(*body1, 5),
1061 CreateMockRead(*body2, 6),
1062 MockRead(ASYNC, 0, 7) // EOF
1063 }; 1026 };
1064 1027
1065 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 1028 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
1066 session_deps_.socket_factory->AddSocketDataProvider(&data); 1029 session_deps_.socket_factory->AddSocketDataProvider(&data);
1067 1030
1068 CreateNetworkSession(); 1031 CreateNetworkSession();
1069 CreateInsecureSpdySession(); 1032 CreateInsecureSpdySession();
1070 1033
1071 // Fix stream_hi_water_mark_ to allow for two stream activations. 1034 // Fix stream_hi_water_mark_ to allow for two stream activations.
1072 session_->stream_hi_water_mark_ = kLastStreamId - 2; 1035 session_->stream_hi_water_mark_ = kLastStreamId - 2;
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1144 } 1107 }
1145 1108
1146 // Regression test for https://crbug.com/481009. 1109 // Regression test for https://crbug.com/481009.
1147 TEST_P(SpdySessionTest, MaxConcurrentStreamsZero) { 1110 TEST_P(SpdySessionTest, MaxConcurrentStreamsZero) {
1148 session_deps_.host_resolver->set_synchronous_mode(true); 1111 session_deps_.host_resolver->set_synchronous_mode(true);
1149 1112
1150 // Receive SETTINGS frame that sets max_concurrent_streams to zero. 1113 // Receive SETTINGS frame that sets max_concurrent_streams to zero.
1151 SettingsMap settings_zero; 1114 SettingsMap settings_zero;
1152 settings_zero[SETTINGS_MAX_CONCURRENT_STREAMS] = 1115 settings_zero[SETTINGS_MAX_CONCURRENT_STREAMS] =
1153 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 0); 1116 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 0);
1154 std::unique_ptr<SpdySerializedFrame> settings_frame_zero( 1117 SpdySerializedFrame settings_frame_zero(
1155 spdy_util_.ConstructSpdySettings(settings_zero)); 1118 spdy_util_.ConstructSpdySettings(settings_zero));
1156 1119
1157 // Acknowledge it. 1120 // Acknowledge it.
1158 std::unique_ptr<SpdySerializedFrame> settings_ack0( 1121 SpdySerializedFrame settings_ack0(spdy_util_.ConstructSpdySettingsAck());
1159 spdy_util_.ConstructSpdySettingsAck());
1160 1122
1161 // Receive SETTINGS frame that sets max_concurrent_streams to one. 1123 // Receive SETTINGS frame that sets max_concurrent_streams to one.
1162 SettingsMap settings_one; 1124 SettingsMap settings_one;
1163 settings_one[SETTINGS_MAX_CONCURRENT_STREAMS] = 1125 settings_one[SETTINGS_MAX_CONCURRENT_STREAMS] =
1164 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 1); 1126 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 1);
1165 std::unique_ptr<SpdySerializedFrame> settings_frame_one( 1127 SpdySerializedFrame settings_frame_one(
1166 spdy_util_.ConstructSpdySettings(settings_one)); 1128 spdy_util_.ConstructSpdySettings(settings_one));
1167 1129
1168 // Acknowledge it. 1130 // Acknowledge it.
1169 std::unique_ptr<SpdySerializedFrame> settings_ack1( 1131 SpdySerializedFrame settings_ack1(spdy_util_.ConstructSpdySettingsAck());
1170 spdy_util_.ConstructSpdySettingsAck());
1171 1132
1172 // Request and response. 1133 // Request and response.
1173 std::unique_ptr<SpdySerializedFrame> req( 1134 SpdySerializedFrame req(
1174 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 1135 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
1175 1136
1176 std::unique_ptr<SpdySerializedFrame> resp( 1137 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
1177 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
1178 1138
1179 std::unique_ptr<SpdySerializedFrame> body( 1139 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true));
1180 spdy_util_.ConstructSpdyBodyFrame(1, true));
1181 1140
1182 MockRead reads[] = {CreateMockRead(*settings_frame_zero, 0), 1141 MockRead reads[] = {CreateMockRead(settings_frame_zero, 0),
1183 MockRead(ASYNC, ERR_IO_PENDING, 2), 1142 MockRead(ASYNC, ERR_IO_PENDING, 2),
1184 CreateMockRead(*settings_frame_one, 3), 1143 CreateMockRead(settings_frame_one, 3),
1185 CreateMockRead(*resp, 6), 1144 CreateMockRead(resp, 6),
1186 CreateMockRead(*body, 7), 1145 CreateMockRead(body, 7),
1187 MockRead(ASYNC, 0, 8)}; 1146 MockRead(ASYNC, 0, 8)};
1188 1147
1189 MockWrite writes[] = {CreateMockWrite(*settings_ack0, 1), 1148 MockWrite writes[] = {CreateMockWrite(settings_ack0, 1),
1190 CreateMockWrite(*settings_ack1, 4), 1149 CreateMockWrite(settings_ack1, 4),
1191 CreateMockWrite(*req, 5)}; 1150 CreateMockWrite(req, 5)};
1192 1151
1193 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 1152 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
1194 session_deps_.socket_factory->AddSocketDataProvider(&data); 1153 session_deps_.socket_factory->AddSocketDataProvider(&data);
1195 1154
1196 // Create session. 1155 // Create session.
1197 CreateNetworkSession(); 1156 CreateNetworkSession();
1198 CreateInsecureSpdySession(); 1157 CreateInsecureSpdySession();
1199 1158
1200 // Receive SETTINGS frame that sets max_concurrent_streams to zero. 1159 // Receive SETTINGS frame that sets max_concurrent_streams to zero.
1201 base::RunLoop().RunUntilIdle(); 1160 base::RunLoop().RunUntilIdle();
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
1299 1258
1300 EXPECT_EQ(1u, session_->num_created_streams()); 1259 EXPECT_EQ(1u, session_->num_created_streams());
1301 EXPECT_EQ(0u, session_->pending_create_stream_queue_size(MEDIUM)); 1260 EXPECT_EQ(0u, session_->pending_create_stream_queue_size(MEDIUM));
1302 EXPECT_THAT(callback2.WaitForResult(), IsOk()); 1261 EXPECT_THAT(callback2.WaitForResult(), IsOk());
1303 } 1262 }
1304 1263
1305 TEST_P(SpdySessionTest, DeleteExpiredPushStreams) { 1264 TEST_P(SpdySessionTest, DeleteExpiredPushStreams) {
1306 session_deps_.host_resolver->set_synchronous_mode(true); 1265 session_deps_.host_resolver->set_synchronous_mode(true);
1307 session_deps_.time_func = TheNearFuture; 1266 session_deps_.time_func = TheNearFuture;
1308 1267
1309 std::unique_ptr<SpdySerializedFrame> req( 1268 SpdySerializedFrame req(
1310 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 1269 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
1311 std::unique_ptr<SpdySerializedFrame> rst( 1270 SpdySerializedFrame rst(
1312 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); 1271 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM));
1313 MockWrite writes[] = {CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5)}; 1272 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 5)};
1314 1273
1315 std::unique_ptr<SpdySerializedFrame> push_a(spdy_util_.ConstructSpdyPush( 1274 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush(
1316 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); 1275 nullptr, 0, 2, 1, "https://www.example.org/a.dat"));
1317 std::unique_ptr<SpdySerializedFrame> push_a_body( 1276 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false));
1318 spdy_util_.ConstructSpdyBodyFrame(2, false));
1319 // In ascii "0" < "a". We use it to verify that we properly handle std::map 1277 // In ascii "0" < "a". We use it to verify that we properly handle std::map
1320 // iterators inside. See http://crbug.com/443490 1278 // iterators inside. See http://crbug.com/443490
1321 std::unique_ptr<SpdySerializedFrame> push_b(spdy_util_.ConstructSpdyPush( 1279 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush(
1322 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); 1280 nullptr, 0, 4, 1, "https://www.example.org/0.dat"));
1323 MockRead reads[] = { 1281 MockRead reads[] = {
1324 CreateMockRead(*push_a, 1), 1282 CreateMockRead(push_a, 1), CreateMockRead(push_a_body, 2),
1325 CreateMockRead(*push_a_body, 2), 1283 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(push_b, 4),
1326 MockRead(ASYNC, ERR_IO_PENDING, 3), 1284 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7) // EOF
1327 CreateMockRead(*push_b, 4),
1328 MockRead(ASYNC, ERR_IO_PENDING, 6),
1329 MockRead(ASYNC, 0, 7) // EOF
1330 }; 1285 };
1331 1286
1332 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 1287 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
1333 session_deps_.socket_factory->AddSocketDataProvider(&data); 1288 session_deps_.socket_factory->AddSocketDataProvider(&data);
1334 1289
1335 CreateNetworkSession(); 1290 CreateNetworkSession();
1336 CreateInsecureSpdySession(); 1291 CreateInsecureSpdySession();
1337 1292
1338 // Process the principal request, and the first push stream request & body. 1293 // Process the principal request, and the first push stream request & body.
1339 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( 1294 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously(
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1378 base::RunLoop().RunUntilIdle(); 1333 base::RunLoop().RunUntilIdle();
1379 EXPECT_FALSE(session_); 1334 EXPECT_FALSE(session_);
1380 } 1335 }
1381 1336
1382 TEST_P(SpdySessionTest, FailedPing) { 1337 TEST_P(SpdySessionTest, FailedPing) {
1383 session_deps_.host_resolver->set_synchronous_mode(true); 1338 session_deps_.host_resolver->set_synchronous_mode(true);
1384 1339
1385 MockRead reads[] = { 1340 MockRead reads[] = {
1386 MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever. 1341 MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever.
1387 }; 1342 };
1388 std::unique_ptr<SpdySerializedFrame> write_ping( 1343 SpdySerializedFrame write_ping(spdy_util_.ConstructSpdyPing(1, false));
1389 spdy_util_.ConstructSpdyPing(1, false)); 1344 SpdySerializedFrame goaway(
1390 std::unique_ptr<SpdySerializedFrame> goaway(
1391 spdy_util_.ConstructSpdyGoAway(0, GOAWAY_PROTOCOL_ERROR, "Failed ping.")); 1345 spdy_util_.ConstructSpdyGoAway(0, GOAWAY_PROTOCOL_ERROR, "Failed ping."));
1392 MockWrite writes[] = {CreateMockWrite(*write_ping), CreateMockWrite(*goaway)}; 1346 MockWrite writes[] = {CreateMockWrite(write_ping), CreateMockWrite(goaway)};
1393 1347
1394 StaticSocketDataProvider data( 1348 StaticSocketDataProvider data(
1395 reads, arraysize(reads), writes, arraysize(writes)); 1349 reads, arraysize(reads), writes, arraysize(writes));
1396 session_deps_.socket_factory->AddSocketDataProvider(&data); 1350 session_deps_.socket_factory->AddSocketDataProvider(&data);
1397 1351
1398 CreateNetworkSession(); 1352 CreateNetworkSession();
1399 CreateInsecureSpdySession(); 1353 CreateInsecureSpdySession();
1400 1354
1401 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( 1355 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
1402 SPDY_BIDIRECTIONAL_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 1356 SPDY_BIDIRECTIONAL_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1438 // http://crbug.com/57331 . 1392 // http://crbug.com/57331 .
1439 TEST_P(SpdySessionTest, OnSettings) { 1393 TEST_P(SpdySessionTest, OnSettings) {
1440 session_deps_.host_resolver->set_synchronous_mode(true); 1394 session_deps_.host_resolver->set_synchronous_mode(true);
1441 1395
1442 const SpdySettingsIds kSpdySettingsIds = SETTINGS_MAX_CONCURRENT_STREAMS; 1396 const SpdySettingsIds kSpdySettingsIds = SETTINGS_MAX_CONCURRENT_STREAMS;
1443 1397
1444 SettingsMap new_settings; 1398 SettingsMap new_settings;
1445 const uint32_t max_concurrent_streams = kInitialMaxConcurrentStreams + 1; 1399 const uint32_t max_concurrent_streams = kInitialMaxConcurrentStreams + 1;
1446 new_settings[kSpdySettingsIds] = 1400 new_settings[kSpdySettingsIds] =
1447 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams); 1401 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams);
1448 std::unique_ptr<SpdySerializedFrame> settings_frame( 1402 SpdySerializedFrame settings_frame(
1449 spdy_util_.ConstructSpdySettings(new_settings)); 1403 spdy_util_.ConstructSpdySettings(new_settings));
1450 MockRead reads[] = { 1404 MockRead reads[] = {
1451 CreateMockRead(*settings_frame, 0), MockRead(ASYNC, ERR_IO_PENDING, 2), 1405 CreateMockRead(settings_frame, 0), MockRead(ASYNC, ERR_IO_PENDING, 2),
1452 MockRead(ASYNC, 0, 3), 1406 MockRead(ASYNC, 0, 3),
1453 }; 1407 };
1454 1408
1455 std::unique_ptr<SpdySerializedFrame> settings_ack( 1409 SpdySerializedFrame settings_ack(spdy_util_.ConstructSpdySettingsAck());
1456 spdy_util_.ConstructSpdySettingsAck()); 1410 MockWrite writes[] = {CreateMockWrite(settings_ack, 1)};
1457 MockWrite writes[] = {CreateMockWrite(*settings_ack, 1)};
1458 1411
1459 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 1412 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
1460 session_deps_.socket_factory->AddSocketDataProvider(&data); 1413 session_deps_.socket_factory->AddSocketDataProvider(&data);
1461 1414
1462 CreateNetworkSession(); 1415 CreateNetworkSession();
1463 CreateInsecureSpdySession(); 1416 CreateInsecureSpdySession();
1464 1417
1465 // Create the maximum number of concurrent streams. 1418 // Create the maximum number of concurrent streams.
1466 for (size_t i = 0; i < kInitialMaxConcurrentStreams; ++i) { 1419 for (size_t i = 0; i < kInitialMaxConcurrentStreams; ++i) {
1467 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( 1420 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously(
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
1547 TEST_P(SpdySessionTest, SendInitialDataOnNewSession) { 1500 TEST_P(SpdySessionTest, SendInitialDataOnNewSession) {
1548 session_deps_.host_resolver->set_synchronous_mode(true); 1501 session_deps_.host_resolver->set_synchronous_mode(true);
1549 1502
1550 MockRead reads[] = { 1503 MockRead reads[] = {
1551 MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever. 1504 MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever.
1552 }; 1505 };
1553 1506
1554 SettingsMap settings; 1507 SettingsMap settings;
1555 settings[SETTINGS_MAX_CONCURRENT_STREAMS] = 1508 settings[SETTINGS_MAX_CONCURRENT_STREAMS] =
1556 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, kMaxConcurrentPushedStreams); 1509 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, kMaxConcurrentPushedStreams);
1557 std::unique_ptr<SpdySerializedFrame> settings_frame( 1510 SpdySerializedFrame settings_frame(
1558 spdy_util_.ConstructSpdySettings(settings)); 1511 spdy_util_.ConstructSpdySettings(settings));
1559 MockWrite writes[] = {MockWrite(ASYNC, kHttp2ConnectionHeaderPrefix, 1512 MockWrite writes[] = {MockWrite(ASYNC, kHttp2ConnectionHeaderPrefix,
1560 kHttp2ConnectionHeaderPrefixSize), 1513 kHttp2ConnectionHeaderPrefixSize),
1561 CreateMockWrite(*settings_frame)}; 1514 CreateMockWrite(settings_frame)};
1562 1515
1563 StaticSocketDataProvider data(reads, arraysize(reads), writes, 1516 StaticSocketDataProvider data(reads, arraysize(reads), writes,
1564 arraysize(writes)); 1517 arraysize(writes));
1565 session_deps_.socket_factory->AddSocketDataProvider(&data); 1518 session_deps_.socket_factory->AddSocketDataProvider(&data);
1566 1519
1567 // Load a cert that is valid for: 1520 // Load a cert that is valid for:
1568 // www.example.org 1521 // www.example.org
1569 // mail.example.org 1522 // mail.example.org
1570 // mail.example.com 1523 // mail.example.com
1571 base::FilePath certs_dir = GetTestCertsDirectory(); 1524 base::FilePath certs_dir = GetTestCertsDirectory();
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1639 NetLog::Source socket_source; 1592 NetLog::Source socket_source;
1640 EXPECT_TRUE(NetLog::Source::FromEventParameters(entry.params.get(), 1593 EXPECT_TRUE(NetLog::Source::FromEventParameters(entry.params.get(),
1641 &socket_source)); 1594 &socket_source));
1642 EXPECT_TRUE(socket_source.IsValid()); 1595 EXPECT_TRUE(socket_source.IsValid());
1643 EXPECT_NE(log_.bound().source().id, socket_source.id); 1596 EXPECT_NE(log_.bound().source().id, socket_source.id);
1644 } 1597 }
1645 1598
1646 TEST_P(SpdySessionTest, NetLogOnSessionGoaway) { 1599 TEST_P(SpdySessionTest, NetLogOnSessionGoaway) {
1647 session_deps_.host_resolver->set_synchronous_mode(true); 1600 session_deps_.host_resolver->set_synchronous_mode(true);
1648 1601
1649 std::unique_ptr<SpdySerializedFrame> goaway( 1602 SpdySerializedFrame goaway(
1650 spdy_util_.ConstructSpdyGoAway(42, GOAWAY_ENHANCE_YOUR_CALM, "foo")); 1603 spdy_util_.ConstructSpdyGoAway(42, GOAWAY_ENHANCE_YOUR_CALM, "foo"));
1651 MockRead reads[] = { 1604 MockRead reads[] = {
1652 CreateMockRead(*goaway), 1605 CreateMockRead(goaway), MockRead(SYNCHRONOUS, 0, 0) // EOF
1653 MockRead(SYNCHRONOUS, 0, 0) // EOF
1654 }; 1606 };
1655 1607
1656 StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0); 1608 StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0);
1657 session_deps_.socket_factory->AddSocketDataProvider(&data); 1609 session_deps_.socket_factory->AddSocketDataProvider(&data);
1658 1610
1659 CreateNetworkSession(); 1611 CreateNetworkSession();
1660 CreateInsecureSpdySession(); 1612 CreateInsecureSpdySession();
1661 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_)); 1613 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_));
1662 1614
1663 // Flush the read completion task. 1615 // Flush the read completion task.
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1733 TestNetLogEntry entry = entries[pos]; 1685 TestNetLogEntry entry = entries[pos];
1734 int error_code = 0; 1686 int error_code = 0;
1735 ASSERT_TRUE(entry.GetNetErrorCode(&error_code)); 1687 ASSERT_TRUE(entry.GetNetErrorCode(&error_code));
1736 EXPECT_THAT(error_code, IsError(ERR_CONNECTION_CLOSED)); 1688 EXPECT_THAT(error_code, IsError(ERR_CONNECTION_CLOSED));
1737 } else { 1689 } else {
1738 ADD_FAILURE(); 1690 ADD_FAILURE();
1739 } 1691 }
1740 } 1692 }
1741 1693
1742 TEST_P(SpdySessionTest, SynCompressionHistograms) { 1694 TEST_P(SpdySessionTest, SynCompressionHistograms) {
1743 std::unique_ptr<SpdySerializedFrame> req( 1695 SpdySerializedFrame req(
1744 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 1696 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
1745 MockWrite writes[] = { 1697 MockWrite writes[] = {
1746 CreateMockWrite(*req, 0), 1698 CreateMockWrite(req, 0),
1747 }; 1699 };
1748 MockRead reads[] = { 1700 MockRead reads[] = {
1749 MockRead(ASYNC, ERR_IO_PENDING, 1), MockRead(ASYNC, 0, 2) // EOF 1701 MockRead(ASYNC, ERR_IO_PENDING, 1), MockRead(ASYNC, 0, 2) // EOF
1750 }; 1702 };
1751 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 1703 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
1752 session_deps_.socket_factory->AddSocketDataProvider(&data); 1704 session_deps_.socket_factory->AddSocketDataProvider(&data);
1753 1705
1754 CreateNetworkSession(); 1706 CreateNetworkSession();
1755 CreateInsecureSpdySession(); 1707 CreateInsecureSpdySession();
1756 1708
(...skipping 20 matching lines...) Expand all
1777 data.Resume(); 1729 data.Resume();
1778 base::RunLoop().RunUntilIdle(); 1730 base::RunLoop().RunUntilIdle();
1779 EXPECT_FALSE(session_); 1731 EXPECT_FALSE(session_);
1780 } 1732 }
1781 1733
1782 // Queue up a low-priority SYN_STREAM followed by a high-priority 1734 // Queue up a low-priority SYN_STREAM followed by a high-priority
1783 // one. The high priority one should still send first and receive 1735 // one. The high priority one should still send first and receive
1784 // first. 1736 // first.
1785 TEST_P(SpdySessionTest, OutOfOrderSynStreams) { 1737 TEST_P(SpdySessionTest, OutOfOrderSynStreams) {
1786 // Construct the request. 1738 // Construct the request.
1787 std::unique_ptr<SpdySerializedFrame> req_highest( 1739 SpdySerializedFrame req_highest(
1788 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, HIGHEST, true)); 1740 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, HIGHEST, true));
1789 std::unique_ptr<SpdySerializedFrame> req_lowest( 1741 SpdySerializedFrame req_lowest(
1790 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, LOWEST, true)); 1742 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, LOWEST, true));
1791 MockWrite writes[] = { 1743 MockWrite writes[] = {
1792 CreateMockWrite(*req_highest, 0), 1744 CreateMockWrite(req_highest, 0), CreateMockWrite(req_lowest, 1),
1793 CreateMockWrite(*req_lowest, 1),
1794 }; 1745 };
1795 1746
1796 std::unique_ptr<SpdySerializedFrame> resp_highest( 1747 SpdySerializedFrame resp_highest(
1797 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 1748 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
1798 std::unique_ptr<SpdySerializedFrame> body_highest( 1749 SpdySerializedFrame body_highest(spdy_util_.ConstructSpdyDataFrame(1, true));
1799 spdy_util_.ConstructSpdyBodyFrame(1, true)); 1750 SpdySerializedFrame resp_lowest(
1800 std::unique_ptr<SpdySerializedFrame> resp_lowest(
1801 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 3)); 1751 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 3));
1802 std::unique_ptr<SpdySerializedFrame> body_lowest( 1752 SpdySerializedFrame body_lowest(spdy_util_.ConstructSpdyDataFrame(3, true));
1803 spdy_util_.ConstructSpdyBodyFrame(3, true));
1804 MockRead reads[] = { 1753 MockRead reads[] = {
1805 CreateMockRead(*resp_highest, 2), 1754 CreateMockRead(resp_highest, 2), CreateMockRead(body_highest, 3),
1806 CreateMockRead(*body_highest, 3), 1755 CreateMockRead(resp_lowest, 4), CreateMockRead(body_lowest, 5),
1807 CreateMockRead(*resp_lowest, 4), 1756 MockRead(ASYNC, 0, 6) // EOF
1808 CreateMockRead(*body_lowest, 5),
1809 MockRead(ASYNC, 0, 6) // EOF
1810 }; 1757 };
1811 1758
1812 session_deps_.host_resolver->set_synchronous_mode(true); 1759 session_deps_.host_resolver->set_synchronous_mode(true);
1813 1760
1814 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 1761 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
1815 session_deps_.socket_factory->AddSocketDataProvider(&data); 1762 session_deps_.socket_factory->AddSocketDataProvider(&data);
1816 1763
1817 CreateNetworkSession(); 1764 CreateNetworkSession();
1818 CreateInsecureSpdySession(); 1765 CreateInsecureSpdySession();
1819 1766
(...skipping 30 matching lines...) Expand all
1850 1797
1851 EXPECT_FALSE(spdy_stream_lowest); 1798 EXPECT_FALSE(spdy_stream_lowest);
1852 EXPECT_FALSE(spdy_stream_highest); 1799 EXPECT_FALSE(spdy_stream_highest);
1853 EXPECT_EQ(3u, delegate_lowest.stream_id()); 1800 EXPECT_EQ(3u, delegate_lowest.stream_id());
1854 EXPECT_EQ(1u, delegate_highest.stream_id()); 1801 EXPECT_EQ(1u, delegate_highest.stream_id());
1855 } 1802 }
1856 1803
1857 TEST_P(SpdySessionTest, CancelStream) { 1804 TEST_P(SpdySessionTest, CancelStream) {
1858 // Request 1, at HIGHEST priority, will be cancelled before it writes data. 1805 // Request 1, at HIGHEST priority, will be cancelled before it writes data.
1859 // Request 2, at LOWEST priority, will be a full request and will be id 1. 1806 // Request 2, at LOWEST priority, will be a full request and will be id 1.
1860 std::unique_ptr<SpdySerializedFrame> req2( 1807 SpdySerializedFrame req2(
1861 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 1808 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
1862 MockWrite writes[] = { 1809 MockWrite writes[] = {
1863 CreateMockWrite(*req2, 0), 1810 CreateMockWrite(req2, 0),
1864 }; 1811 };
1865 1812
1866 std::unique_ptr<SpdySerializedFrame> resp2( 1813 SpdySerializedFrame resp2(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
1867 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 1814 SpdySerializedFrame body2(spdy_util_.ConstructSpdyDataFrame(1, true));
1868 std::unique_ptr<SpdySerializedFrame> body2(
1869 spdy_util_.ConstructSpdyBodyFrame(1, true));
1870 MockRead reads[] = { 1815 MockRead reads[] = {
1871 CreateMockRead(*resp2, 1), 1816 CreateMockRead(resp2, 1), MockRead(ASYNC, ERR_IO_PENDING, 2),
1872 MockRead(ASYNC, ERR_IO_PENDING, 2), 1817 CreateMockRead(body2, 3), MockRead(ASYNC, 0, 4) // EOF
1873 CreateMockRead(*body2, 3),
1874 MockRead(ASYNC, 0, 4) // EOF
1875 }; 1818 };
1876 1819
1877 session_deps_.host_resolver->set_synchronous_mode(true); 1820 session_deps_.host_resolver->set_synchronous_mode(true);
1878 1821
1879 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 1822 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
1880 session_deps_.socket_factory->AddSocketDataProvider(&data); 1823 session_deps_.socket_factory->AddSocketDataProvider(&data);
1881 1824
1882 CreateNetworkSession(); 1825 CreateNetworkSession();
1883 CreateInsecureSpdySession(); 1826 CreateInsecureSpdySession();
1884 1827
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
2041 1984
2042 base::RunLoop().RunUntilIdle(); 1985 base::RunLoop().RunUntilIdle();
2043 EXPECT_FALSE(session_); 1986 EXPECT_FALSE(session_);
2044 } 1987 }
2045 1988
2046 // Create two streams that are set to re-close themselves on close, 1989 // Create two streams that are set to re-close themselves on close,
2047 // activate them, and then close the session. Nothing should blow up. 1990 // activate them, and then close the session. Nothing should blow up.
2048 TEST_P(SpdySessionTest, CloseSessionWithTwoActivatedSelfClosingStreams) { 1991 TEST_P(SpdySessionTest, CloseSessionWithTwoActivatedSelfClosingStreams) {
2049 session_deps_.host_resolver->set_synchronous_mode(true); 1992 session_deps_.host_resolver->set_synchronous_mode(true);
2050 1993
2051 std::unique_ptr<SpdySerializedFrame> req1( 1994 SpdySerializedFrame req1(
2052 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 1995 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
2053 std::unique_ptr<SpdySerializedFrame> req2( 1996 SpdySerializedFrame req2(
2054 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, MEDIUM, true)); 1997 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, MEDIUM, true));
2055 MockWrite writes[] = { 1998 MockWrite writes[] = {
2056 CreateMockWrite(*req1, 0), 1999 CreateMockWrite(req1, 0), CreateMockWrite(req2, 1),
2057 CreateMockWrite(*req2, 1),
2058 }; 2000 };
2059 2001
2060 MockRead reads[] = { 2002 MockRead reads[] = {
2061 MockRead(ASYNC, ERR_IO_PENDING, 2), MockRead(ASYNC, 0, 3) // EOF 2003 MockRead(ASYNC, ERR_IO_PENDING, 2), MockRead(ASYNC, 0, 3) // EOF
2062 }; 2004 };
2063 2005
2064 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 2006 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
2065 session_deps_.socket_factory->AddSocketDataProvider(&data); 2007 session_deps_.socket_factory->AddSocketDataProvider(&data);
2066 2008
2067 CreateNetworkSession(); 2009 CreateNetworkSession();
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
2115 data.Resume(); 2057 data.Resume();
2116 base::RunLoop().RunUntilIdle(); 2058 base::RunLoop().RunUntilIdle();
2117 EXPECT_FALSE(session_); 2059 EXPECT_FALSE(session_);
2118 } 2060 }
2119 2061
2120 // Create two streams that are set to close each other on close, 2062 // Create two streams that are set to close each other on close,
2121 // activate them, and then close the session. Nothing should blow up. 2063 // activate them, and then close the session. Nothing should blow up.
2122 TEST_P(SpdySessionTest, CloseSessionWithTwoActivatedMutuallyClosingStreams) { 2064 TEST_P(SpdySessionTest, CloseSessionWithTwoActivatedMutuallyClosingStreams) {
2123 session_deps_.host_resolver->set_synchronous_mode(true); 2065 session_deps_.host_resolver->set_synchronous_mode(true);
2124 2066
2125 std::unique_ptr<SpdySerializedFrame> req1( 2067 SpdySerializedFrame req1(
2126 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2068 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
2127 std::unique_ptr<SpdySerializedFrame> req2( 2069 SpdySerializedFrame req2(
2128 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, MEDIUM, true)); 2070 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, MEDIUM, true));
2129 MockWrite writes[] = { 2071 MockWrite writes[] = {
2130 CreateMockWrite(*req1, 0), 2072 CreateMockWrite(req1, 0), CreateMockWrite(req2, 1),
2131 CreateMockWrite(*req2, 1),
2132 }; 2073 };
2133 2074
2134 MockRead reads[] = { 2075 MockRead reads[] = {
2135 MockRead(ASYNC, ERR_IO_PENDING, 2), MockRead(ASYNC, 0, 3) // EOF 2076 MockRead(ASYNC, ERR_IO_PENDING, 2), MockRead(ASYNC, 0, 3) // EOF
2136 }; 2077 };
2137 2078
2138 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 2079 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
2139 session_deps_.socket_factory->AddSocketDataProvider(&data); 2080 session_deps_.socket_factory->AddSocketDataProvider(&data);
2140 2081
2141 CreateNetworkSession(); 2082 CreateNetworkSession();
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
2209 2150
2210 private: 2151 private:
2211 base::WeakPtr<SpdySession> session_to_close_; 2152 base::WeakPtr<SpdySession> session_to_close_;
2212 }; 2153 };
2213 2154
2214 // Close an activated stream that closes its session. Nothing should 2155 // Close an activated stream that closes its session. Nothing should
2215 // blow up. This is a regression test for https://crbug.com/263691. 2156 // blow up. This is a regression test for https://crbug.com/263691.
2216 TEST_P(SpdySessionTest, CloseActivatedStreamThatClosesSession) { 2157 TEST_P(SpdySessionTest, CloseActivatedStreamThatClosesSession) {
2217 session_deps_.host_resolver->set_synchronous_mode(true); 2158 session_deps_.host_resolver->set_synchronous_mode(true);
2218 2159
2219 std::unique_ptr<SpdySerializedFrame> req( 2160 SpdySerializedFrame req(
2220 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2161 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
2221 std::unique_ptr<SpdySerializedFrame> rst( 2162 SpdySerializedFrame rst(
2222 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); 2163 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
2223 std::unique_ptr<SpdySerializedFrame> goaway( 2164 SpdySerializedFrame goaway(
2224 spdy_util_.ConstructSpdyGoAway(0, GOAWAY_PROTOCOL_ERROR, "Error")); 2165 spdy_util_.ConstructSpdyGoAway(0, GOAWAY_PROTOCOL_ERROR, "Error"));
2225 // The GOAWAY has higher-priority than the RST_STREAM, and is written first 2166 // The GOAWAY has higher-priority than the RST_STREAM, and is written first
2226 // despite being queued second. 2167 // despite being queued second.
2227 MockWrite writes[] = { 2168 MockWrite writes[] = {
2228 CreateMockWrite(*req, 0), 2169 CreateMockWrite(req, 0), CreateMockWrite(goaway, 1),
2229 CreateMockWrite(*goaway, 1), 2170 CreateMockWrite(rst, 3),
2230 CreateMockWrite(*rst, 3),
2231 }; 2171 };
2232 2172
2233 MockRead reads[] = { 2173 MockRead reads[] = {
2234 MockRead(ASYNC, 0, 2) // EOF 2174 MockRead(ASYNC, 0, 2) // EOF
2235 }; 2175 };
2236 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 2176 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
2237 session_deps_.socket_factory->AddSocketDataProvider(&data); 2177 session_deps_.socket_factory->AddSocketDataProvider(&data);
2238 2178
2239 CreateNetworkSession(); 2179 CreateNetworkSession();
2240 CreateInsecureSpdySession(); 2180 CreateInsecureSpdySession();
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
2330 2270
2331 TEST_P(SpdySessionTest, CloseTwoStalledCreateStream) { 2271 TEST_P(SpdySessionTest, CloseTwoStalledCreateStream) {
2332 // TODO(rtenneti): Define a helper class/methods and move the common code in 2272 // TODO(rtenneti): Define a helper class/methods and move the common code in
2333 // this file. 2273 // this file.
2334 SettingsMap new_settings; 2274 SettingsMap new_settings;
2335 const SpdySettingsIds kSpdySettingsIds1 = SETTINGS_MAX_CONCURRENT_STREAMS; 2275 const SpdySettingsIds kSpdySettingsIds1 = SETTINGS_MAX_CONCURRENT_STREAMS;
2336 const uint32_t max_concurrent_streams = 1; 2276 const uint32_t max_concurrent_streams = 1;
2337 new_settings[kSpdySettingsIds1] = 2277 new_settings[kSpdySettingsIds1] =
2338 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams); 2278 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, max_concurrent_streams);
2339 2279
2340 std::unique_ptr<SpdySerializedFrame> settings_ack( 2280 SpdySerializedFrame settings_ack(spdy_util_.ConstructSpdySettingsAck());
2341 spdy_util_.ConstructSpdySettingsAck()); 2281 SpdySerializedFrame req1(
2342 std::unique_ptr<SpdySerializedFrame> req1(
2343 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 2282 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
2344 spdy_util_.UpdateWithStreamDestruction(1); 2283 spdy_util_.UpdateWithStreamDestruction(1);
2345 std::unique_ptr<SpdySerializedFrame> req2( 2284 SpdySerializedFrame req2(
2346 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, LOWEST, true)); 2285 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, LOWEST, true));
2347 spdy_util_.UpdateWithStreamDestruction(3); 2286 spdy_util_.UpdateWithStreamDestruction(3);
2348 std::unique_ptr<SpdySerializedFrame> req3( 2287 SpdySerializedFrame req3(
2349 spdy_util_.ConstructSpdyGet(nullptr, 0, 5, LOWEST, true)); 2288 spdy_util_.ConstructSpdyGet(nullptr, 0, 5, LOWEST, true));
2350 MockWrite writes[] = { 2289 MockWrite writes[] = {
2351 CreateMockWrite(*settings_ack, 1), 2290 CreateMockWrite(settings_ack, 1), CreateMockWrite(req1, 2),
2352 CreateMockWrite(*req1, 2), 2291 CreateMockWrite(req2, 5), CreateMockWrite(req3, 8),
2353 CreateMockWrite(*req2, 5),
2354 CreateMockWrite(*req3, 8),
2355 }; 2292 };
2356 2293
2357 // Set up the socket so we read a SETTINGS frame that sets max concurrent 2294 // Set up the socket so we read a SETTINGS frame that sets max concurrent
2358 // streams to 1. 2295 // streams to 1.
2359 std::unique_ptr<SpdySerializedFrame> settings_frame( 2296 SpdySerializedFrame settings_frame(
2360 spdy_util_.ConstructSpdySettings(new_settings)); 2297 spdy_util_.ConstructSpdySettings(new_settings));
2361 2298
2362 std::unique_ptr<SpdySerializedFrame> resp1( 2299 SpdySerializedFrame resp1(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
2363 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 2300 SpdySerializedFrame body1(spdy_util_.ConstructSpdyDataFrame(1, true));
2364 std::unique_ptr<SpdySerializedFrame> body1(
2365 spdy_util_.ConstructSpdyBodyFrame(1, true));
2366 2301
2367 std::unique_ptr<SpdySerializedFrame> resp2( 2302 SpdySerializedFrame resp2(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 3));
2368 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 3)); 2303 SpdySerializedFrame body2(spdy_util_.ConstructSpdyDataFrame(3, true));
2369 std::unique_ptr<SpdySerializedFrame> body2(
2370 spdy_util_.ConstructSpdyBodyFrame(3, true));
2371 2304
2372 std::unique_ptr<SpdySerializedFrame> resp3( 2305 SpdySerializedFrame resp3(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 5));
2373 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 5)); 2306 SpdySerializedFrame body3(spdy_util_.ConstructSpdyDataFrame(5, true));
2374 std::unique_ptr<SpdySerializedFrame> body3(
2375 spdy_util_.ConstructSpdyBodyFrame(5, true));
2376 2307
2377 MockRead reads[] = { 2308 MockRead reads[] = {
2378 CreateMockRead(*settings_frame, 0), 2309 CreateMockRead(settings_frame, 0),
2379 CreateMockRead(*resp1, 3), 2310 CreateMockRead(resp1, 3),
2380 CreateMockRead(*body1, 4), 2311 CreateMockRead(body1, 4),
2381 CreateMockRead(*resp2, 6), 2312 CreateMockRead(resp2, 6),
2382 CreateMockRead(*body2, 7), 2313 CreateMockRead(body2, 7),
2383 CreateMockRead(*resp3, 9), 2314 CreateMockRead(resp3, 9),
2384 CreateMockRead(*body3, 10), 2315 CreateMockRead(body3, 10),
2385 MockRead(ASYNC, ERR_IO_PENDING, 11), 2316 MockRead(ASYNC, ERR_IO_PENDING, 11),
2386 MockRead(ASYNC, 0, 12) // EOF 2317 MockRead(ASYNC, 0, 12) // EOF
2387 }; 2318 };
2388 2319
2389 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 2320 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
2390 session_deps_.socket_factory->AddSocketDataProvider(&data); 2321 session_deps_.socket_factory->AddSocketDataProvider(&data);
2391 2322
2392 CreateNetworkSession(); 2323 CreateNetworkSession();
2393 CreateInsecureSpdySession(); 2324 CreateInsecureSpdySession();
2394 2325
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
2562 // Test that SpdySession::DoReadLoop reads data from the socket 2493 // Test that SpdySession::DoReadLoop reads data from the socket
2563 // without yielding. This test makes 32k - 1 bytes of data available 2494 // without yielding. This test makes 32k - 1 bytes of data available
2564 // on the socket for reading. It then verifies that it has read all 2495 // on the socket for reading. It then verifies that it has read all
2565 // the available data without yielding. 2496 // the available data without yielding.
2566 TEST_P(SpdySessionTest, ReadDataWithoutYielding) { 2497 TEST_P(SpdySessionTest, ReadDataWithoutYielding) {
2567 session_deps_.host_resolver->set_synchronous_mode(true); 2498 session_deps_.host_resolver->set_synchronous_mode(true);
2568 session_deps_.time_func = InstantaneousReads; 2499 session_deps_.time_func = InstantaneousReads;
2569 2500
2570 BufferedSpdyFramer framer; 2501 BufferedSpdyFramer framer;
2571 2502
2572 std::unique_ptr<SpdySerializedFrame> req1( 2503 SpdySerializedFrame req1(
2573 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2504 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
2574 MockWrite writes[] = { 2505 MockWrite writes[] = {
2575 CreateMockWrite(*req1, 0), 2506 CreateMockWrite(req1, 0),
2576 }; 2507 };
2577 2508
2578 // Build buffer of size kYieldAfterBytesRead / 4 2509 // Build buffer of size kYieldAfterBytesRead / 4
2579 // (-spdy_data_frame_size). 2510 // (-spdy_data_frame_size).
2580 ASSERT_EQ(32 * 1024, kYieldAfterBytesRead); 2511 ASSERT_EQ(32 * 1024, kYieldAfterBytesRead);
2581 const int kPayloadSize = 2512 const int kPayloadSize =
2582 kYieldAfterBytesRead / 4 - framer.GetControlFrameHeaderSize(); 2513 kYieldAfterBytesRead / 4 - framer.GetControlFrameHeaderSize();
2583 TestDataStream test_stream; 2514 TestDataStream test_stream;
2584 scoped_refptr<IOBuffer> payload(new IOBuffer(kPayloadSize)); 2515 scoped_refptr<IOBuffer> payload(new IOBuffer(kPayloadSize));
2585 char* payload_data = payload->data(); 2516 char* payload_data = payload->data();
2586 test_stream.GetBytes(payload_data, kPayloadSize); 2517 test_stream.GetBytes(payload_data, kPayloadSize);
2587 2518
2588 std::unique_ptr<SpdySerializedFrame> partial_data_frame( 2519 SpdySerializedFrame partial_data_frame(spdy_util_.ConstructSpdyDataFrame(
2589 framer.CreateDataFrame(1, payload_data, kPayloadSize, DATA_FLAG_NONE)); 2520 1, payload_data, kPayloadSize, /*fin=*/false));
2590 std::unique_ptr<SpdySerializedFrame> finish_data_frame( 2521 SpdySerializedFrame finish_data_frame(spdy_util_.ConstructSpdyDataFrame(
2591 framer.CreateDataFrame(1, payload_data, kPayloadSize - 1, DATA_FLAG_FIN)); 2522 1, payload_data, kPayloadSize - 1, /*fin=*/true));
2592 2523
2593 std::unique_ptr<SpdySerializedFrame> resp1( 2524 SpdySerializedFrame resp1(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
2594 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
2595 2525
2596 // Write 1 byte less than kMaxReadBytes to check that DoRead reads up to 32k 2526 // Write 1 byte less than kMaxReadBytes to check that DoRead reads up to 32k
2597 // bytes. 2527 // bytes.
2598 MockRead reads[] = { 2528 MockRead reads[] = {
2599 CreateMockRead(*resp1, 1), 2529 CreateMockRead(resp1, 1),
2600 MockRead(ASYNC, ERR_IO_PENDING, 2), 2530 MockRead(ASYNC, ERR_IO_PENDING, 2),
2601 CreateMockRead(*partial_data_frame, 3), 2531 CreateMockRead(partial_data_frame, 3),
2602 CreateMockRead(*partial_data_frame, 4, SYNCHRONOUS), 2532 CreateMockRead(partial_data_frame, 4, SYNCHRONOUS),
2603 CreateMockRead(*partial_data_frame, 5, SYNCHRONOUS), 2533 CreateMockRead(partial_data_frame, 5, SYNCHRONOUS),
2604 CreateMockRead(*finish_data_frame, 6, SYNCHRONOUS), 2534 CreateMockRead(finish_data_frame, 6, SYNCHRONOUS),
2605 MockRead(ASYNC, 0, 7) // EOF 2535 MockRead(ASYNC, 0, 7) // EOF
2606 }; 2536 };
2607 2537
2608 // Create SpdySession and SpdyStream and send the request. 2538 // Create SpdySession and SpdyStream and send the request.
2609 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 2539 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
2610 session_deps_.socket_factory->AddSocketDataProvider(&data); 2540 session_deps_.socket_factory->AddSocketDataProvider(&data);
2611 2541
2612 CreateNetworkSession(); 2542 CreateNetworkSession();
2613 CreateInsecureSpdySession(); 2543 CreateInsecureSpdySession();
2614 2544
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2647 EXPECT_TRUE(data.AllReadDataConsumed()); 2577 EXPECT_TRUE(data.AllReadDataConsumed());
2648 } 2578 }
2649 2579
2650 // Test that SpdySession::DoReadLoop yields if more than 2580 // Test that SpdySession::DoReadLoop yields if more than
2651 // |kYieldAfterDurationMilliseconds| has passed. This test uses a mock time 2581 // |kYieldAfterDurationMilliseconds| has passed. This test uses a mock time
2652 // function that makes the response frame look very slow to read. 2582 // function that makes the response frame look very slow to read.
2653 TEST_P(SpdySessionTest, TestYieldingSlowReads) { 2583 TEST_P(SpdySessionTest, TestYieldingSlowReads) {
2654 session_deps_.host_resolver->set_synchronous_mode(true); 2584 session_deps_.host_resolver->set_synchronous_mode(true);
2655 session_deps_.time_func = SlowReads; 2585 session_deps_.time_func = SlowReads;
2656 2586
2657 BufferedSpdyFramer framer; 2587 SpdySerializedFrame req1(
2658
2659 std::unique_ptr<SpdySerializedFrame> req1(
2660 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2588 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
2661 MockWrite writes[] = { 2589 MockWrite writes[] = {
2662 CreateMockWrite(*req1, 0), 2590 CreateMockWrite(req1, 0),
2663 }; 2591 };
2664 2592
2665 std::unique_ptr<SpdySerializedFrame> resp1( 2593 SpdySerializedFrame resp1(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
2666 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
2667 2594
2668 MockRead reads[] = { 2595 MockRead reads[] = {
2669 CreateMockRead(*resp1, 1), MockRead(ASYNC, 0, 2) // EOF 2596 CreateMockRead(resp1, 1), MockRead(ASYNC, 0, 2) // EOF
2670 }; 2597 };
2671 2598
2672 // Create SpdySession and SpdyStream and send the request. 2599 // Create SpdySession and SpdyStream and send the request.
2673 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 2600 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
2674 session_deps_.socket_factory->AddSocketDataProvider(&data); 2601 session_deps_.socket_factory->AddSocketDataProvider(&data);
2675 2602
2676 CreateNetworkSession(); 2603 CreateNetworkSession();
2677 CreateInsecureSpdySession(); 2604 CreateInsecureSpdySession();
2678 2605
2679 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( 2606 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
(...skipping 28 matching lines...) Expand all
2708 EXPECT_TRUE(data.AllWriteDataConsumed()); 2635 EXPECT_TRUE(data.AllWriteDataConsumed());
2709 EXPECT_TRUE(data.AllReadDataConsumed()); 2636 EXPECT_TRUE(data.AllReadDataConsumed());
2710 } 2637 }
2711 2638
2712 // Regression test for https://crbug.com/531570. 2639 // Regression test for https://crbug.com/531570.
2713 // Test the case where DoRead() takes long but returns synchronously. 2640 // Test the case where DoRead() takes long but returns synchronously.
2714 TEST_P(SpdySessionTest, TestYieldingSlowSynchronousReads) { 2641 TEST_P(SpdySessionTest, TestYieldingSlowSynchronousReads) {
2715 session_deps_.host_resolver->set_synchronous_mode(true); 2642 session_deps_.host_resolver->set_synchronous_mode(true);
2716 session_deps_.time_func = SlowReads; 2643 session_deps_.time_func = SlowReads;
2717 2644
2718 BufferedSpdyFramer framer; 2645 SpdySerializedFrame req1(
2719
2720 std::unique_ptr<SpdySerializedFrame> req1(
2721 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2646 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
2722 MockWrite writes[] = { 2647 MockWrite writes[] = {
2723 CreateMockWrite(*req1, 0), 2648 CreateMockWrite(req1, 0),
2724 }; 2649 };
2725 2650
2726 std::unique_ptr<SpdySerializedFrame> partial_data_frame( 2651 SpdySerializedFrame partial_data_frame(
2727 framer.CreateDataFrame(1, "foo ", 4, DATA_FLAG_NONE)); 2652 spdy_util_.ConstructSpdyDataFrame(1, "foo ", 4, /*fin=*/false));
2728 std::unique_ptr<SpdySerializedFrame> finish_data_frame( 2653 SpdySerializedFrame finish_data_frame(
2729 framer.CreateDataFrame(1, "bar", 3, DATA_FLAG_FIN)); 2654 spdy_util_.ConstructSpdyDataFrame(1, "bar", 3, /*fin=*/true));
2730 2655
2731 std::unique_ptr<SpdySerializedFrame> resp1( 2656 SpdySerializedFrame resp1(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
2732 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
2733 2657
2734 MockRead reads[] = { 2658 MockRead reads[] = {
2735 CreateMockRead(*resp1, 1), MockRead(ASYNC, ERR_IO_PENDING, 2), 2659 CreateMockRead(resp1, 1),
2736 CreateMockRead(*partial_data_frame, 3, ASYNC), 2660 MockRead(ASYNC, ERR_IO_PENDING, 2),
2737 CreateMockRead(*partial_data_frame, 4, SYNCHRONOUS), 2661 CreateMockRead(partial_data_frame, 3, ASYNC),
2738 CreateMockRead(*partial_data_frame, 5, SYNCHRONOUS), 2662 CreateMockRead(partial_data_frame, 4, SYNCHRONOUS),
2739 CreateMockRead(*finish_data_frame, 6, SYNCHRONOUS), 2663 CreateMockRead(partial_data_frame, 5, SYNCHRONOUS),
2664 CreateMockRead(finish_data_frame, 6, SYNCHRONOUS),
2740 MockRead(ASYNC, 0, 7) // EOF 2665 MockRead(ASYNC, 0, 7) // EOF
2741 }; 2666 };
2742 2667
2743 // Create SpdySession and SpdyStream and send the request. 2668 // Create SpdySession and SpdyStream and send the request.
2744 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 2669 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
2745 session_deps_.socket_factory->AddSocketDataProvider(&data); 2670 session_deps_.socket_factory->AddSocketDataProvider(&data);
2746 2671
2747 CreateNetworkSession(); 2672 CreateNetworkSession();
2748 CreateInsecureSpdySession(); 2673 CreateInsecureSpdySession();
2749 2674
(...skipping 28 matching lines...) Expand all
2778 // data. This test makes 32k + 1 bytes of data available on the socket 2703 // data. This test makes 32k + 1 bytes of data available on the socket
2779 // for reading. It then verifies that DoRead has yielded even though 2704 // for reading. It then verifies that DoRead has yielded even though
2780 // there is data available for it to read (i.e, socket()->Read didn't 2705 // there is data available for it to read (i.e, socket()->Read didn't
2781 // return ERR_IO_PENDING during socket reads). 2706 // return ERR_IO_PENDING during socket reads).
2782 TEST_P(SpdySessionTest, TestYieldingDuringReadData) { 2707 TEST_P(SpdySessionTest, TestYieldingDuringReadData) {
2783 session_deps_.host_resolver->set_synchronous_mode(true); 2708 session_deps_.host_resolver->set_synchronous_mode(true);
2784 session_deps_.time_func = InstantaneousReads; 2709 session_deps_.time_func = InstantaneousReads;
2785 2710
2786 BufferedSpdyFramer framer; 2711 BufferedSpdyFramer framer;
2787 2712
2788 std::unique_ptr<SpdySerializedFrame> req1( 2713 SpdySerializedFrame req1(
2789 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2714 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
2790 MockWrite writes[] = { 2715 MockWrite writes[] = {
2791 CreateMockWrite(*req1, 0), 2716 CreateMockWrite(req1, 0),
2792 }; 2717 };
2793 2718
2794 // Build buffer of size kYieldAfterBytesRead / 4 2719 // Build buffer of size kYieldAfterBytesRead / 4
2795 // (-spdy_data_frame_size). 2720 // (-spdy_data_frame_size).
2796 ASSERT_EQ(32 * 1024, kYieldAfterBytesRead); 2721 ASSERT_EQ(32 * 1024, kYieldAfterBytesRead);
2797 const int kPayloadSize = 2722 const int kPayloadSize =
2798 kYieldAfterBytesRead / 4 - framer.GetControlFrameHeaderSize(); 2723 kYieldAfterBytesRead / 4 - framer.GetControlFrameHeaderSize();
2799 TestDataStream test_stream; 2724 TestDataStream test_stream;
2800 scoped_refptr<IOBuffer> payload(new IOBuffer(kPayloadSize)); 2725 scoped_refptr<IOBuffer> payload(new IOBuffer(kPayloadSize));
2801 char* payload_data = payload->data(); 2726 char* payload_data = payload->data();
2802 test_stream.GetBytes(payload_data, kPayloadSize); 2727 test_stream.GetBytes(payload_data, kPayloadSize);
2803 2728
2804 std::unique_ptr<SpdySerializedFrame> partial_data_frame( 2729 SpdySerializedFrame partial_data_frame(spdy_util_.ConstructSpdyDataFrame(
2805 framer.CreateDataFrame(1, payload_data, kPayloadSize, DATA_FLAG_NONE)); 2730 1, payload_data, kPayloadSize, /*fin=*/false));
2806 std::unique_ptr<SpdySerializedFrame> finish_data_frame( 2731 SpdySerializedFrame finish_data_frame(
2807 framer.CreateDataFrame(1, "h", 1, DATA_FLAG_FIN)); 2732 spdy_util_.ConstructSpdyDataFrame(1, "h", 1, /*fin=*/true));
2808 2733
2809 std::unique_ptr<SpdySerializedFrame> resp1( 2734 SpdySerializedFrame resp1(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
2810 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
2811 2735
2812 // Write 1 byte more than kMaxReadBytes to check that DoRead yields. 2736 // Write 1 byte more than kMaxReadBytes to check that DoRead yields.
2813 MockRead reads[] = { 2737 MockRead reads[] = {
2814 CreateMockRead(*resp1, 1), 2738 CreateMockRead(resp1, 1),
2815 MockRead(ASYNC, ERR_IO_PENDING, 2), 2739 MockRead(ASYNC, ERR_IO_PENDING, 2),
2816 CreateMockRead(*partial_data_frame, 3), 2740 CreateMockRead(partial_data_frame, 3),
2817 CreateMockRead(*partial_data_frame, 4, SYNCHRONOUS), 2741 CreateMockRead(partial_data_frame, 4, SYNCHRONOUS),
2818 CreateMockRead(*partial_data_frame, 5, SYNCHRONOUS), 2742 CreateMockRead(partial_data_frame, 5, SYNCHRONOUS),
2819 CreateMockRead(*partial_data_frame, 6, SYNCHRONOUS), 2743 CreateMockRead(partial_data_frame, 6, SYNCHRONOUS),
2820 CreateMockRead(*finish_data_frame, 7, SYNCHRONOUS), 2744 CreateMockRead(finish_data_frame, 7, SYNCHRONOUS),
2821 MockRead(ASYNC, 0, 8) // EOF 2745 MockRead(ASYNC, 0, 8) // EOF
2822 }; 2746 };
2823 2747
2824 // Create SpdySession and SpdyStream and send the request. 2748 // Create SpdySession and SpdyStream and send the request.
2825 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 2749 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
2826 session_deps_.socket_factory->AddSocketDataProvider(&data); 2750 session_deps_.socket_factory->AddSocketDataProvider(&data);
2827 2751
2828 CreateNetworkSession(); 2752 CreateNetworkSession();
2829 CreateInsecureSpdySession(); 2753 CreateInsecureSpdySession();
2830 2754
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
2872 // will attempt to read again. However, that DoRead() will return 2796 // will attempt to read again. However, that DoRead() will return
2873 // ERR_IO_PENDING (because of async read), so DoReadLoop() will 2797 // ERR_IO_PENDING (because of async read), so DoReadLoop() will
2874 // yield. When we come back, DoRead() will read the results from the 2798 // yield. When we come back, DoRead() will read the results from the
2875 // async read, and rest of the data synchronously. 2799 // async read, and rest of the data synchronously.
2876 TEST_P(SpdySessionTest, TestYieldingDuringAsyncReadData) { 2800 TEST_P(SpdySessionTest, TestYieldingDuringAsyncReadData) {
2877 session_deps_.host_resolver->set_synchronous_mode(true); 2801 session_deps_.host_resolver->set_synchronous_mode(true);
2878 session_deps_.time_func = InstantaneousReads; 2802 session_deps_.time_func = InstantaneousReads;
2879 2803
2880 BufferedSpdyFramer framer; 2804 BufferedSpdyFramer framer;
2881 2805
2882 std::unique_ptr<SpdySerializedFrame> req1( 2806 SpdySerializedFrame req1(
2883 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2807 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
2884 MockWrite writes[] = { 2808 MockWrite writes[] = {
2885 CreateMockWrite(*req1, 0), 2809 CreateMockWrite(req1, 0),
2886 }; 2810 };
2887 2811
2888 // Build buffer of size kYieldAfterBytesRead / 4 2812 // Build buffer of size kYieldAfterBytesRead / 4
2889 // (-spdy_data_frame_size). 2813 // (-spdy_data_frame_size).
2890 ASSERT_EQ(32 * 1024, kYieldAfterBytesRead); 2814 ASSERT_EQ(32 * 1024, kYieldAfterBytesRead);
2891 TestDataStream test_stream; 2815 TestDataStream test_stream;
2892 const int kEightKPayloadSize = 2816 const int kEightKPayloadSize =
2893 kYieldAfterBytesRead / 4 - framer.GetControlFrameHeaderSize(); 2817 kYieldAfterBytesRead / 4 - framer.GetControlFrameHeaderSize();
2894 scoped_refptr<IOBuffer> eightk_payload(new IOBuffer(kEightKPayloadSize)); 2818 scoped_refptr<IOBuffer> eightk_payload(new IOBuffer(kEightKPayloadSize));
2895 char* eightk_payload_data = eightk_payload->data(); 2819 char* eightk_payload_data = eightk_payload->data();
2896 test_stream.GetBytes(eightk_payload_data, kEightKPayloadSize); 2820 test_stream.GetBytes(eightk_payload_data, kEightKPayloadSize);
2897 2821
2898 // Build buffer of 2k size. 2822 // Build buffer of 2k size.
2899 TestDataStream test_stream2; 2823 TestDataStream test_stream2;
2900 const int kTwoKPayloadSize = kEightKPayloadSize - 6 * 1024; 2824 const int kTwoKPayloadSize = kEightKPayloadSize - 6 * 1024;
2901 scoped_refptr<IOBuffer> twok_payload(new IOBuffer(kTwoKPayloadSize)); 2825 scoped_refptr<IOBuffer> twok_payload(new IOBuffer(kTwoKPayloadSize));
2902 char* twok_payload_data = twok_payload->data(); 2826 char* twok_payload_data = twok_payload->data();
2903 test_stream2.GetBytes(twok_payload_data, kTwoKPayloadSize); 2827 test_stream2.GetBytes(twok_payload_data, kTwoKPayloadSize);
2904 2828
2905 std::unique_ptr<SpdySerializedFrame> eightk_data_frame(framer.CreateDataFrame( 2829 SpdySerializedFrame eightk_data_frame(spdy_util_.ConstructSpdyDataFrame(
2906 1, eightk_payload_data, kEightKPayloadSize, DATA_FLAG_NONE)); 2830 1, eightk_payload_data, kEightKPayloadSize, /*fin=*/false));
2907 std::unique_ptr<SpdySerializedFrame> twok_data_frame(framer.CreateDataFrame( 2831 SpdySerializedFrame twok_data_frame(spdy_util_.ConstructSpdyDataFrame(
2908 1, twok_payload_data, kTwoKPayloadSize, DATA_FLAG_NONE)); 2832 1, twok_payload_data, kTwoKPayloadSize, /*fin=*/false));
2909 std::unique_ptr<SpdySerializedFrame> finish_data_frame( 2833 SpdySerializedFrame finish_data_frame(
2910 framer.CreateDataFrame(1, "h", 1, DATA_FLAG_FIN)); 2834 spdy_util_.ConstructSpdyDataFrame(1, "h", 1, /*fin=*/true));
2911 2835
2912 std::unique_ptr<SpdySerializedFrame> resp1( 2836 SpdySerializedFrame resp1(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
2913 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
2914 2837
2915 MockRead reads[] = { 2838 MockRead reads[] = {
2916 CreateMockRead(*resp1, 1), 2839 CreateMockRead(resp1, 1),
2917 MockRead(ASYNC, ERR_IO_PENDING, 2), 2840 MockRead(ASYNC, ERR_IO_PENDING, 2),
2918 CreateMockRead(*eightk_data_frame, 3), 2841 CreateMockRead(eightk_data_frame, 3),
2919 CreateMockRead(*eightk_data_frame, 4, SYNCHRONOUS), 2842 CreateMockRead(eightk_data_frame, 4, SYNCHRONOUS),
2920 CreateMockRead(*eightk_data_frame, 5, SYNCHRONOUS), 2843 CreateMockRead(eightk_data_frame, 5, SYNCHRONOUS),
2921 CreateMockRead(*twok_data_frame, 6, SYNCHRONOUS), 2844 CreateMockRead(twok_data_frame, 6, SYNCHRONOUS),
2922 CreateMockRead(*eightk_data_frame, 7, ASYNC), 2845 CreateMockRead(eightk_data_frame, 7, ASYNC),
2923 CreateMockRead(*eightk_data_frame, 8, SYNCHRONOUS), 2846 CreateMockRead(eightk_data_frame, 8, SYNCHRONOUS),
2924 CreateMockRead(*eightk_data_frame, 9, SYNCHRONOUS), 2847 CreateMockRead(eightk_data_frame, 9, SYNCHRONOUS),
2925 CreateMockRead(*eightk_data_frame, 10, SYNCHRONOUS), 2848 CreateMockRead(eightk_data_frame, 10, SYNCHRONOUS),
2926 CreateMockRead(*twok_data_frame, 11, SYNCHRONOUS), 2849 CreateMockRead(twok_data_frame, 11, SYNCHRONOUS),
2927 CreateMockRead(*finish_data_frame, 12, SYNCHRONOUS), 2850 CreateMockRead(finish_data_frame, 12, SYNCHRONOUS),
2928 MockRead(ASYNC, 0, 13) // EOF 2851 MockRead(ASYNC, 0, 13) // EOF
2929 }; 2852 };
2930 2853
2931 // Create SpdySession and SpdyStream and send the request. 2854 // Create SpdySession and SpdyStream and send the request.
2932 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 2855 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
2933 session_deps_.socket_factory->AddSocketDataProvider(&data); 2856 session_deps_.socket_factory->AddSocketDataProvider(&data);
2934 2857
2935 CreateNetworkSession(); 2858 CreateNetworkSession();
2936 CreateInsecureSpdySession(); 2859 CreateInsecureSpdySession();
2937 2860
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
2969 EXPECT_EQ(1u, observer.executed_count()); 2892 EXPECT_EQ(1u, observer.executed_count());
2970 EXPECT_TRUE(data.AllWriteDataConsumed()); 2893 EXPECT_TRUE(data.AllWriteDataConsumed());
2971 EXPECT_TRUE(data.AllReadDataConsumed()); 2894 EXPECT_TRUE(data.AllReadDataConsumed());
2972 } 2895 }
2973 2896
2974 // Send a GoAway frame when SpdySession is in DoReadLoop. Make sure 2897 // Send a GoAway frame when SpdySession is in DoReadLoop. Make sure
2975 // nothing blows up. 2898 // nothing blows up.
2976 TEST_P(SpdySessionTest, GoAwayWhileInDoReadLoop) { 2899 TEST_P(SpdySessionTest, GoAwayWhileInDoReadLoop) {
2977 session_deps_.host_resolver->set_synchronous_mode(true); 2900 session_deps_.host_resolver->set_synchronous_mode(true);
2978 2901
2979 BufferedSpdyFramer framer; 2902 SpdySerializedFrame req1(
2980
2981 std::unique_ptr<SpdySerializedFrame> req1(
2982 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2903 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
2983 MockWrite writes[] = { 2904 MockWrite writes[] = {
2984 CreateMockWrite(*req1, 0), 2905 CreateMockWrite(req1, 0),
2985 }; 2906 };
2986 2907
2987 std::unique_ptr<SpdySerializedFrame> resp1( 2908 SpdySerializedFrame resp1(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
2988 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 2909 SpdySerializedFrame body1(spdy_util_.ConstructSpdyDataFrame(1, true));
2989 std::unique_ptr<SpdySerializedFrame> body1( 2910 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway());
2990 spdy_util_.ConstructSpdyBodyFrame(1, true));
2991 std::unique_ptr<SpdySerializedFrame> goaway(spdy_util_.ConstructSpdyGoAway());
2992 2911
2993 MockRead reads[] = { 2912 MockRead reads[] = {
2994 CreateMockRead(*resp1, 1), 2913 CreateMockRead(resp1, 1), MockRead(ASYNC, ERR_IO_PENDING, 2),
2995 MockRead(ASYNC, ERR_IO_PENDING, 2), 2914 CreateMockRead(body1, 3), CreateMockRead(goaway, 4),
2996 CreateMockRead(*body1, 3),
2997 CreateMockRead(*goaway, 4),
2998 }; 2915 };
2999 2916
3000 // Create SpdySession and SpdyStream and send the request. 2917 // Create SpdySession and SpdyStream and send the request.
3001 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 2918 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
3002 session_deps_.socket_factory->AddSocketDataProvider(&data); 2919 session_deps_.socket_factory->AddSocketDataProvider(&data);
3003 2920
3004 CreateNetworkSession(); 2921 CreateNetworkSession();
3005 CreateInsecureSpdySession(); 2922 CreateInsecureSpdySession();
3006 2923
3007 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( 2924 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
3177 // a lower layer pool stalled on the per-pool socket limit. 3094 // a lower layer pool stalled on the per-pool socket limit.
3178 TEST_P(SpdySessionTest, CloseSessionOnIdleWhenPoolStalled) { 3095 TEST_P(SpdySessionTest, CloseSessionOnIdleWhenPoolStalled) {
3179 ClientSocketPoolManager::set_max_sockets_per_group( 3096 ClientSocketPoolManager::set_max_sockets_per_group(
3180 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); 3097 HttpNetworkSession::NORMAL_SOCKET_POOL, 1);
3181 ClientSocketPoolManager::set_max_sockets_per_pool( 3098 ClientSocketPoolManager::set_max_sockets_per_pool(
3182 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); 3099 HttpNetworkSession::NORMAL_SOCKET_POOL, 1);
3183 3100
3184 MockRead reads[] = { 3101 MockRead reads[] = {
3185 MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever. 3102 MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever.
3186 }; 3103 };
3187 std::unique_ptr<SpdySerializedFrame> req1( 3104 SpdySerializedFrame req1(
3188 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 3105 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
3189 std::unique_ptr<SpdySerializedFrame> cancel1( 3106 SpdySerializedFrame cancel1(
3190 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); 3107 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
3191 MockWrite writes[] = { 3108 MockWrite writes[] = {
3192 CreateMockWrite(*req1, 1), 3109 CreateMockWrite(req1, 1), CreateMockWrite(cancel1, 1),
3193 CreateMockWrite(*cancel1, 1),
3194 }; 3110 };
3195 StaticSocketDataProvider data(reads, arraysize(reads), 3111 StaticSocketDataProvider data(reads, arraysize(reads),
3196 writes, arraysize(writes)); 3112 writes, arraysize(writes));
3197 session_deps_.socket_factory->AddSocketDataProvider(&data); 3113 session_deps_.socket_factory->AddSocketDataProvider(&data);
3198 3114
3199 MockRead http_reads[] = { 3115 MockRead http_reads[] = {
3200 MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever. 3116 MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever.
3201 }; 3117 };
3202 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, 3118 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
3203 0); 3119 0);
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
3319 private: 3235 private:
3320 const base::WeakPtr<SpdySession> session_; 3236 const base::WeakPtr<SpdySession> session_;
3321 }; 3237 };
3322 3238
3323 // Create another stream in response to a stream being reset. Nothing 3239 // Create another stream in response to a stream being reset. Nothing
3324 // should blow up. This is a regression test for 3240 // should blow up. This is a regression test for
3325 // http://crbug.com/263690 . 3241 // http://crbug.com/263690 .
3326 TEST_P(SpdySessionTest, CreateStreamOnStreamReset) { 3242 TEST_P(SpdySessionTest, CreateStreamOnStreamReset) {
3327 session_deps_.host_resolver->set_synchronous_mode(true); 3243 session_deps_.host_resolver->set_synchronous_mode(true);
3328 3244
3329 std::unique_ptr<SpdySerializedFrame> req( 3245 SpdySerializedFrame req(
3330 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 3246 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
3331 MockWrite writes[] = { 3247 MockWrite writes[] = {
3332 CreateMockWrite(*req, 0), 3248 CreateMockWrite(req, 0),
3333 }; 3249 };
3334 3250
3335 std::unique_ptr<SpdySerializedFrame> rst( 3251 SpdySerializedFrame rst(
3336 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_REFUSED_STREAM)); 3252 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_REFUSED_STREAM));
3337 MockRead reads[] = { 3253 MockRead reads[] = {
3338 MockRead(ASYNC, ERR_IO_PENDING, 1), 3254 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(rst, 2),
3339 CreateMockRead(*rst, 2), 3255 MockRead(ASYNC, ERR_IO_PENDING, 3), MockRead(ASYNC, 0, 4) // EOF
3340 MockRead(ASYNC, ERR_IO_PENDING, 3),
3341 MockRead(ASYNC, 0, 4) // EOF
3342 }; 3256 };
3343 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 3257 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
3344 session_deps_.socket_factory->AddSocketDataProvider(&data); 3258 session_deps_.socket_factory->AddSocketDataProvider(&data);
3345 3259
3346 CreateNetworkSession(); 3260 CreateNetworkSession();
3347 CreateInsecureSpdySession(); 3261 CreateInsecureSpdySession();
3348 3262
3349 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( 3263 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously(
3350 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 3264 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
3351 ASSERT_TRUE(spdy_stream); 3265 ASSERT_TRUE(spdy_stream);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
3383 TEST_P(SpdySessionTest, UpdateStreamsSendWindowSize) { 3297 TEST_P(SpdySessionTest, UpdateStreamsSendWindowSize) {
3384 // Set SETTINGS_INITIAL_WINDOW_SIZE to a small number so that WINDOW_UPDATE 3298 // Set SETTINGS_INITIAL_WINDOW_SIZE to a small number so that WINDOW_UPDATE
3385 // gets sent. 3299 // gets sent.
3386 SettingsMap new_settings; 3300 SettingsMap new_settings;
3387 int32_t window_size = 1; 3301 int32_t window_size = 1;
3388 new_settings[SETTINGS_INITIAL_WINDOW_SIZE] = 3302 new_settings[SETTINGS_INITIAL_WINDOW_SIZE] =
3389 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, window_size); 3303 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, window_size);
3390 3304
3391 // Set up the socket so we read a SETTINGS frame that sets 3305 // Set up the socket so we read a SETTINGS frame that sets
3392 // INITIAL_WINDOW_SIZE. 3306 // INITIAL_WINDOW_SIZE.
3393 std::unique_ptr<SpdySerializedFrame> settings_frame( 3307 SpdySerializedFrame settings_frame(
3394 spdy_util_.ConstructSpdySettings(new_settings)); 3308 spdy_util_.ConstructSpdySettings(new_settings));
3395 MockRead reads[] = { 3309 MockRead reads[] = {
3396 CreateMockRead(*settings_frame, 0), 3310 CreateMockRead(settings_frame, 0), MockRead(ASYNC, ERR_IO_PENDING, 1),
3397 MockRead(ASYNC, ERR_IO_PENDING, 1),
3398 MockRead(ASYNC, 0, 2) // EOF 3311 MockRead(ASYNC, 0, 2) // EOF
3399 }; 3312 };
3400 3313
3401 std::unique_ptr<SpdySerializedFrame> settings_ack( 3314 SpdySerializedFrame settings_ack(spdy_util_.ConstructSpdySettingsAck());
3402 spdy_util_.ConstructSpdySettingsAck());
3403 MockWrite writes[] = { 3315 MockWrite writes[] = {
3404 CreateMockWrite(*settings_ack, 3), 3316 CreateMockWrite(settings_ack, 3),
3405 }; 3317 };
3406 3318
3407 session_deps_.host_resolver->set_synchronous_mode(true); 3319 session_deps_.host_resolver->set_synchronous_mode(true);
3408 3320
3409 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 3321 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
3410 session_deps_.socket_factory->AddSocketDataProvider(&data); 3322 session_deps_.socket_factory->AddSocketDataProvider(&data);
3411 3323
3412 CreateNetworkSession(); 3324 CreateNetworkSession();
3413 CreateInsecureSpdySession(); 3325 CreateInsecureSpdySession();
3414 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( 3326 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
(...skipping 30 matching lines...) Expand all
3445 // sending a WINDOW_UPDATE frame for a large enough delta. 3357 // sending a WINDOW_UPDATE frame for a large enough delta.
3446 TEST_P(SpdySessionTest, AdjustRecvWindowSize) { 3358 TEST_P(SpdySessionTest, AdjustRecvWindowSize) {
3447 session_deps_.host_resolver->set_synchronous_mode(true); 3359 session_deps_.host_resolver->set_synchronous_mode(true);
3448 3360
3449 const int32_t initial_window_size = kDefaultInitialWindowSize; 3361 const int32_t initial_window_size = kDefaultInitialWindowSize;
3450 const int32_t delta_window_size = 100; 3362 const int32_t delta_window_size = 100;
3451 3363
3452 MockRead reads[] = { 3364 MockRead reads[] = {
3453 MockRead(ASYNC, ERR_IO_PENDING, 1), MockRead(ASYNC, 0, 2) // EOF 3365 MockRead(ASYNC, ERR_IO_PENDING, 1), MockRead(ASYNC, 0, 2) // EOF
3454 }; 3366 };
3455 std::unique_ptr<SpdySerializedFrame> window_update( 3367 SpdySerializedFrame window_update(spdy_util_.ConstructSpdyWindowUpdate(
3456 spdy_util_.ConstructSpdyWindowUpdate( 3368 kSessionFlowControlStreamId, initial_window_size + delta_window_size));
3457 kSessionFlowControlStreamId,
3458 initial_window_size + delta_window_size));
3459 MockWrite writes[] = { 3369 MockWrite writes[] = {
3460 CreateMockWrite(*window_update, 0), 3370 CreateMockWrite(window_update, 0),
3461 }; 3371 };
3462 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 3372 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
3463 session_deps_.socket_factory->AddSocketDataProvider(&data); 3373 session_deps_.socket_factory->AddSocketDataProvider(&data);
3464 3374
3465 CreateNetworkSession(); 3375 CreateNetworkSession();
3466 CreateInsecureSpdySession(); 3376 CreateInsecureSpdySession();
3467 3377
3468 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_); 3378 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_);
3469 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_); 3379 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_);
3470 3380
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
3522 session_->DecreaseSendWindowSize(delta_window_size); 3432 session_->DecreaseSendWindowSize(delta_window_size);
3523 EXPECT_EQ(initial_window_size, session_->session_send_window_size_); 3433 EXPECT_EQ(initial_window_size, session_->session_send_window_size_);
3524 } 3434 }
3525 3435
3526 // Incoming data for an inactive stream should not cause the session 3436 // Incoming data for an inactive stream should not cause the session
3527 // receive window size to decrease, but it should cause the unacked 3437 // receive window size to decrease, but it should cause the unacked
3528 // bytes to increase. 3438 // bytes to increase.
3529 TEST_P(SpdySessionTest, SessionFlowControlInactiveStream) { 3439 TEST_P(SpdySessionTest, SessionFlowControlInactiveStream) {
3530 session_deps_.host_resolver->set_synchronous_mode(true); 3440 session_deps_.host_resolver->set_synchronous_mode(true);
3531 3441
3532 std::unique_ptr<SpdySerializedFrame> resp( 3442 SpdySerializedFrame resp(spdy_util_.ConstructSpdyDataFrame(1, false));
3533 spdy_util_.ConstructSpdyBodyFrame(1, false));
3534 MockRead reads[] = { 3443 MockRead reads[] = {
3535 CreateMockRead(*resp, 0), 3444 CreateMockRead(resp, 0), MockRead(ASYNC, ERR_IO_PENDING, 1),
3536 MockRead(ASYNC, ERR_IO_PENDING, 1),
3537 MockRead(ASYNC, 0, 2) // EOF 3445 MockRead(ASYNC, 0, 2) // EOF
3538 }; 3446 };
3539 SequencedSocketData data(reads, arraysize(reads), nullptr, 0); 3447 SequencedSocketData data(reads, arraysize(reads), nullptr, 0);
3540 session_deps_.socket_factory->AddSocketDataProvider(&data); 3448 session_deps_.socket_factory->AddSocketDataProvider(&data);
3541 3449
3542 CreateNetworkSession(); 3450 CreateNetworkSession();
3543 CreateInsecureSpdySession(); 3451 CreateInsecureSpdySession();
3544 3452
3545 EXPECT_EQ(kDefaultInitialWindowSize, session_->session_recv_window_size_); 3453 EXPECT_EQ(kDefaultInitialWindowSize, session_->session_recv_window_size_);
3546 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_); 3454 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_);
3547 3455
3548 base::RunLoop().RunUntilIdle(); 3456 base::RunLoop().RunUntilIdle();
3549 3457
3550 EXPECT_EQ(kDefaultInitialWindowSize, session_->session_recv_window_size_); 3458 EXPECT_EQ(kDefaultInitialWindowSize, session_->session_recv_window_size_);
3551 EXPECT_EQ(kUploadDataSize, session_->session_unacked_recv_window_bytes_); 3459 EXPECT_EQ(kUploadDataSize, session_->session_unacked_recv_window_bytes_);
3552 3460
3553 EXPECT_TRUE(session_); 3461 EXPECT_TRUE(session_);
3554 data.Resume(); 3462 data.Resume();
3555 base::RunLoop().RunUntilIdle(); 3463 base::RunLoop().RunUntilIdle();
3556 EXPECT_FALSE(session_); 3464 EXPECT_FALSE(session_);
3557 } 3465 }
3558 3466
3559 // The frame header is not included in flow control, but frame payload 3467 // The frame header is not included in flow control, but frame payload
3560 // (including optional pad length and padding) is. 3468 // (including optional pad length and padding) is.
3561 TEST_P(SpdySessionTest, SessionFlowControlPadding) { 3469 TEST_P(SpdySessionTest, SessionFlowControlPadding) {
3562 session_deps_.host_resolver->set_synchronous_mode(true); 3470 session_deps_.host_resolver->set_synchronous_mode(true);
3563 3471
3564 const int padding_length = 42; 3472 const int padding_length = 42;
3565 std::unique_ptr<SpdySerializedFrame> resp(spdy_util_.ConstructSpdyBodyFrame( 3473 SpdySerializedFrame resp(spdy_util_.ConstructSpdyDataFrame(
3566 1, kUploadData, kUploadDataSize, false, padding_length)); 3474 1, kUploadData, kUploadDataSize, false, padding_length));
3567 MockRead reads[] = { 3475 MockRead reads[] = {
3568 CreateMockRead(*resp, 0), 3476 CreateMockRead(resp, 0), MockRead(ASYNC, ERR_IO_PENDING, 1),
3569 MockRead(ASYNC, ERR_IO_PENDING, 1),
3570 MockRead(ASYNC, 0, 2) // EOF 3477 MockRead(ASYNC, 0, 2) // EOF
3571 }; 3478 };
3572 SequencedSocketData data(reads, arraysize(reads), nullptr, 0); 3479 SequencedSocketData data(reads, arraysize(reads), nullptr, 0);
3573 session_deps_.socket_factory->AddSocketDataProvider(&data); 3480 session_deps_.socket_factory->AddSocketDataProvider(&data);
3574 3481
3575 CreateNetworkSession(); 3482 CreateNetworkSession();
3576 CreateInsecureSpdySession(); 3483 CreateInsecureSpdySession();
3577 3484
3578 EXPECT_EQ(kDefaultInitialWindowSize, session_->session_recv_window_size_); 3485 EXPECT_EQ(kDefaultInitialWindowSize, session_->session_recv_window_size_);
3579 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_); 3486 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_);
3580 3487
3581 base::RunLoop().RunUntilIdle(); 3488 base::RunLoop().RunUntilIdle();
3582 3489
3583 EXPECT_EQ(kDefaultInitialWindowSize, session_->session_recv_window_size_); 3490 EXPECT_EQ(kDefaultInitialWindowSize, session_->session_recv_window_size_);
3584 EXPECT_EQ(kUploadDataSize + padding_length, 3491 EXPECT_EQ(kUploadDataSize + padding_length,
3585 session_->session_unacked_recv_window_bytes_); 3492 session_->session_unacked_recv_window_bytes_);
3586 3493
3587 data.Resume(); 3494 data.Resume();
3588 base::RunLoop().RunUntilIdle(); 3495 base::RunLoop().RunUntilIdle();
3589 EXPECT_FALSE(session_); 3496 EXPECT_FALSE(session_);
3590 } 3497 }
3591 3498
3592 // Peer sends more data than stream level receiving flow control window. 3499 // Peer sends more data than stream level receiving flow control window.
3593 TEST_P(SpdySessionTest, StreamFlowControlTooMuchData) { 3500 TEST_P(SpdySessionTest, StreamFlowControlTooMuchData) {
3594 const int32_t stream_max_recv_window_size = 1024; 3501 const int32_t stream_max_recv_window_size = 1024;
3595 const int32_t data_frame_size = 2 * stream_max_recv_window_size; 3502 const int32_t data_frame_size = 2 * stream_max_recv_window_size;
3596 3503
3597 std::unique_ptr<SpdySerializedFrame> req( 3504 SpdySerializedFrame req(
3598 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 3505 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
3599 std::unique_ptr<SpdySerializedFrame> rst( 3506 SpdySerializedFrame rst(
3600 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_FLOW_CONTROL_ERROR)); 3507 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_FLOW_CONTROL_ERROR));
3601 MockWrite writes[] = { 3508 MockWrite writes[] = {
3602 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4), 3509 CreateMockWrite(req, 0), CreateMockWrite(rst, 4),
3603 }; 3510 };
3604 3511
3605 std::unique_ptr<SpdySerializedFrame> resp( 3512 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
3606 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
3607 const std::string payload(data_frame_size, 'a'); 3513 const std::string payload(data_frame_size, 'a');
3608 std::unique_ptr<SpdySerializedFrame> data_frame( 3514 SpdySerializedFrame data_frame(spdy_util_.ConstructSpdyDataFrame(
3609 spdy_util_.ConstructSpdyBodyFrame(1, payload.data(), data_frame_size, 3515 1, payload.data(), data_frame_size, false));
3610 false));
3611 MockRead reads[] = { 3516 MockRead reads[] = {
3612 CreateMockRead(*resp, 1), 3517 CreateMockRead(resp, 1), MockRead(ASYNC, ERR_IO_PENDING, 2),
3613 MockRead(ASYNC, ERR_IO_PENDING, 2), 3518 CreateMockRead(data_frame, 3), MockRead(ASYNC, ERR_IO_PENDING, 5),
3614 CreateMockRead(*data_frame, 3),
3615 MockRead(ASYNC, ERR_IO_PENDING, 5),
3616 MockRead(ASYNC, 0, 6), 3519 MockRead(ASYNC, 0, 6),
3617 }; 3520 };
3618 3521
3619 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 3522 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
3620 session_deps_.socket_factory->AddSocketDataProvider(&data); 3523 session_deps_.socket_factory->AddSocketDataProvider(&data);
3621 CreateNetworkSession(); 3524 CreateNetworkSession();
3622 3525
3623 SpdySessionPoolPeer pool_peer(spdy_session_pool_); 3526 SpdySessionPoolPeer pool_peer(spdy_session_pool_);
3624 pool_peer.SetStreamInitialRecvWindowSize(stream_max_recv_window_size); 3527 pool_peer.SetStreamInitialRecvWindowSize(stream_max_recv_window_size);
3625 CreateInsecureSpdySession(); 3528 CreateInsecureSpdySession();
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
3663 ASSERT_GT(session_max_recv_window_size / 2, first_data_frame_size); 3566 ASSERT_GT(session_max_recv_window_size / 2, first_data_frame_size);
3664 // Second data frame would be fine had there been a WINDOW_UPDATE. 3567 // Second data frame would be fine had there been a WINDOW_UPDATE.
3665 ASSERT_GT(session_max_recv_window_size, second_data_frame_size); 3568 ASSERT_GT(session_max_recv_window_size, second_data_frame_size);
3666 // But in fact, the two data frames together overflow the receiving window at 3569 // But in fact, the two data frames together overflow the receiving window at
3667 // session level. 3570 // session level.
3668 ASSERT_LT(session_max_recv_window_size, 3571 ASSERT_LT(session_max_recv_window_size,
3669 first_data_frame_size + second_data_frame_size); 3572 first_data_frame_size + second_data_frame_size);
3670 3573
3671 session_deps_.host_resolver->set_synchronous_mode(true); 3574 session_deps_.host_resolver->set_synchronous_mode(true);
3672 3575
3673 std::unique_ptr<SpdySerializedFrame> goaway(spdy_util_.ConstructSpdyGoAway( 3576 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway(
3674 0, GOAWAY_FLOW_CONTROL_ERROR, 3577 0, GOAWAY_FLOW_CONTROL_ERROR,
3675 "delta_window_size is 400 in DecreaseRecvWindowSize, which is larger " 3578 "delta_window_size is 400 in DecreaseRecvWindowSize, which is larger "
3676 "than the receive window size of 500")); 3579 "than the receive window size of 500"));
3677 MockWrite writes[] = { 3580 MockWrite writes[] = {
3678 CreateMockWrite(*goaway, 4), 3581 CreateMockWrite(goaway, 4),
3679 }; 3582 };
3680 3583
3681 const std::string first_data_frame(first_data_frame_size, 'a'); 3584 const std::string first_data_frame(first_data_frame_size, 'a');
3682 std::unique_ptr<SpdySerializedFrame> first(spdy_util_.ConstructSpdyBodyFrame( 3585 SpdySerializedFrame first(spdy_util_.ConstructSpdyDataFrame(
3683 1, first_data_frame.data(), first_data_frame_size, false)); 3586 1, first_data_frame.data(), first_data_frame_size, false));
3684 const std::string second_data_frame(second_data_frame_size, 'b'); 3587 const std::string second_data_frame(second_data_frame_size, 'b');
3685 std::unique_ptr<SpdySerializedFrame> second(spdy_util_.ConstructSpdyBodyFrame( 3588 SpdySerializedFrame second(spdy_util_.ConstructSpdyDataFrame(
3686 1, second_data_frame.data(), second_data_frame_size, false)); 3589 1, second_data_frame.data(), second_data_frame_size, false));
3687 MockRead reads[] = { 3590 MockRead reads[] = {
3688 CreateMockRead(*first, 0), 3591 CreateMockRead(first, 0), MockRead(ASYNC, ERR_IO_PENDING, 1),
3689 MockRead(ASYNC, ERR_IO_PENDING, 1), 3592 CreateMockRead(second, 2), MockRead(ASYNC, 0, 3),
3690 CreateMockRead(*second, 2),
3691 MockRead(ASYNC, 0, 3),
3692 }; 3593 };
3693 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 3594 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
3694 session_deps_.socket_factory->AddSocketDataProvider(&data); 3595 session_deps_.socket_factory->AddSocketDataProvider(&data);
3695 3596
3696 CreateNetworkSession(); 3597 CreateNetworkSession();
3697 CreateInsecureSpdySession(); 3598 CreateInsecureSpdySession();
3698 // Setting session level receiving window size to smaller than initial is not 3599 // Setting session level receiving window size to smaller than initial is not
3699 // possible via SpdySessionPoolPeer. 3600 // possible via SpdySessionPoolPeer.
3700 session_->session_recv_window_size_ = session_max_recv_window_size; 3601 session_->session_recv_window_size_ = session_max_recv_window_size;
3701 3602
(...skipping 20 matching lines...) Expand all
3722 const int32_t second_data_frame_size = 400; 3623 const int32_t second_data_frame_size = 400;
3723 3624
3724 // First data frame should not trigger a WINDOW_UPDATE. 3625 // First data frame should not trigger a WINDOW_UPDATE.
3725 ASSERT_GT(stream_max_recv_window_size / 2, first_data_frame_size); 3626 ASSERT_GT(stream_max_recv_window_size / 2, first_data_frame_size);
3726 // Second data frame would be fine had there been a WINDOW_UPDATE. 3627 // Second data frame would be fine had there been a WINDOW_UPDATE.
3727 ASSERT_GT(stream_max_recv_window_size, second_data_frame_size); 3628 ASSERT_GT(stream_max_recv_window_size, second_data_frame_size);
3728 // But in fact, they should overflow the receiving window at stream level. 3629 // But in fact, they should overflow the receiving window at stream level.
3729 ASSERT_LT(stream_max_recv_window_size, 3630 ASSERT_LT(stream_max_recv_window_size,
3730 first_data_frame_size + second_data_frame_size); 3631 first_data_frame_size + second_data_frame_size);
3731 3632
3732 std::unique_ptr<SpdySerializedFrame> req( 3633 SpdySerializedFrame req(
3733 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 3634 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
3734 std::unique_ptr<SpdySerializedFrame> rst( 3635 SpdySerializedFrame rst(
3735 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_FLOW_CONTROL_ERROR)); 3636 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_FLOW_CONTROL_ERROR));
3736 MockWrite writes[] = { 3637 MockWrite writes[] = {
3737 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 6), 3638 CreateMockWrite(req, 0), CreateMockWrite(rst, 6),
3738 }; 3639 };
3739 3640
3740 std::unique_ptr<SpdySerializedFrame> resp( 3641 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
3741 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
3742 const std::string first_data_frame(first_data_frame_size, 'a'); 3642 const std::string first_data_frame(first_data_frame_size, 'a');
3743 std::unique_ptr<SpdySerializedFrame> first(spdy_util_.ConstructSpdyBodyFrame( 3643 SpdySerializedFrame first(spdy_util_.ConstructSpdyDataFrame(
3744 1, first_data_frame.data(), first_data_frame_size, false)); 3644 1, first_data_frame.data(), first_data_frame_size, false));
3745 const std::string second_data_frame(second_data_frame_size, 'b'); 3645 const std::string second_data_frame(second_data_frame_size, 'b');
3746 std::unique_ptr<SpdySerializedFrame> second(spdy_util_.ConstructSpdyBodyFrame( 3646 SpdySerializedFrame second(spdy_util_.ConstructSpdyDataFrame(
3747 1, second_data_frame.data(), second_data_frame_size, false)); 3647 1, second_data_frame.data(), second_data_frame_size, false));
3748 MockRead reads[] = { 3648 MockRead reads[] = {
3749 CreateMockRead(*resp, 1), 3649 CreateMockRead(resp, 1), MockRead(ASYNC, ERR_IO_PENDING, 2),
3750 MockRead(ASYNC, ERR_IO_PENDING, 2), 3650 CreateMockRead(first, 3), MockRead(ASYNC, ERR_IO_PENDING, 4),
3751 CreateMockRead(*first, 3), 3651 CreateMockRead(second, 5), MockRead(ASYNC, ERR_IO_PENDING, 7),
3752 MockRead(ASYNC, ERR_IO_PENDING, 4),
3753 CreateMockRead(*second, 5),
3754 MockRead(ASYNC, ERR_IO_PENDING, 7),
3755 MockRead(ASYNC, 0, 8), 3652 MockRead(ASYNC, 0, 8),
3756 }; 3653 };
3757 3654
3758 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 3655 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
3759 session_deps_.socket_factory->AddSocketDataProvider(&data); 3656 session_deps_.socket_factory->AddSocketDataProvider(&data);
3760 3657
3761 CreateNetworkSession(); 3658 CreateNetworkSession();
3762 SpdySessionPoolPeer pool_peer(spdy_session_pool_); 3659 SpdySessionPoolPeer pool_peer(spdy_session_pool_);
3763 pool_peer.SetStreamInitialRecvWindowSize(stream_max_recv_window_size); 3660 pool_peer.SetStreamInitialRecvWindowSize(stream_max_recv_window_size);
3764 3661
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
3816 void OnDataReceived(std::unique_ptr<SpdyBuffer> buffer) override {} 3713 void OnDataReceived(std::unique_ptr<SpdyBuffer> buffer) override {}
3817 }; 3714 };
3818 3715
3819 // Send data back and forth but use a delegate that drops its received 3716 // Send data back and forth but use a delegate that drops its received
3820 // data. The receive window should still increase to its original 3717 // data. The receive window should still increase to its original
3821 // value, i.e. we shouldn't "leak" receive window bytes. 3718 // value, i.e. we shouldn't "leak" receive window bytes.
3822 TEST_P(SpdySessionTest, SessionFlowControlNoReceiveLeaks) { 3719 TEST_P(SpdySessionTest, SessionFlowControlNoReceiveLeaks) {
3823 const int32_t kMsgDataSize = 100; 3720 const int32_t kMsgDataSize = 100;
3824 const std::string msg_data(kMsgDataSize, 'a'); 3721 const std::string msg_data(kMsgDataSize, 'a');
3825 3722
3826 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( 3723 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost(
3827 kDefaultUrl, 1, kMsgDataSize, MEDIUM, nullptr, 0)); 3724 kDefaultUrl, 1, kMsgDataSize, MEDIUM, nullptr, 0));
3828 std::unique_ptr<SpdySerializedFrame> msg(spdy_util_.ConstructSpdyBodyFrame( 3725 SpdySerializedFrame msg(spdy_util_.ConstructSpdyDataFrame(
3829 1, msg_data.data(), kMsgDataSize, false)); 3726 1, msg_data.data(), kMsgDataSize, false));
3830 MockWrite writes[] = { 3727 MockWrite writes[] = {
3831 CreateMockWrite(*req, 0), 3728 CreateMockWrite(req, 0), CreateMockWrite(msg, 2),
3832 CreateMockWrite(*msg, 2),
3833 }; 3729 };
3834 3730
3835 std::unique_ptr<SpdySerializedFrame> resp( 3731 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
3836 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 3732 SpdySerializedFrame echo(spdy_util_.ConstructSpdyDataFrame(
3837 std::unique_ptr<SpdySerializedFrame> echo(spdy_util_.ConstructSpdyBodyFrame(
3838 1, msg_data.data(), kMsgDataSize, false)); 3733 1, msg_data.data(), kMsgDataSize, false));
3839 std::unique_ptr<SpdySerializedFrame> window_update( 3734 SpdySerializedFrame window_update(spdy_util_.ConstructSpdyWindowUpdate(
3840 spdy_util_.ConstructSpdyWindowUpdate(kSessionFlowControlStreamId, 3735 kSessionFlowControlStreamId, kMsgDataSize));
3841 kMsgDataSize));
3842 MockRead reads[] = { 3736 MockRead reads[] = {
3843 CreateMockRead(*resp, 1), 3737 CreateMockRead(resp, 1), CreateMockRead(echo, 3),
3844 CreateMockRead(*echo, 3), 3738 MockRead(ASYNC, ERR_IO_PENDING, 4), MockRead(ASYNC, 0, 5) // EOF
3845 MockRead(ASYNC, ERR_IO_PENDING, 4),
3846 MockRead(ASYNC, 0, 5) // EOF
3847 }; 3739 };
3848 3740
3849 // Create SpdySession and SpdyStream and send the request. 3741 // Create SpdySession and SpdyStream and send the request.
3850 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 3742 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
3851 session_deps_.host_resolver->set_synchronous_mode(true); 3743 session_deps_.host_resolver->set_synchronous_mode(true);
3852 session_deps_.socket_factory->AddSocketDataProvider(&data); 3744 session_deps_.socket_factory->AddSocketDataProvider(&data);
3853 3745
3854 CreateNetworkSession(); 3746 CreateNetworkSession();
3855 CreateInsecureSpdySession(); 3747 CreateInsecureSpdySession();
3856 3748
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
3890 EXPECT_FALSE(session_); 3782 EXPECT_FALSE(session_);
3891 } 3783 }
3892 3784
3893 // Send data back and forth but close the stream before its data frame 3785 // Send data back and forth but close the stream before its data frame
3894 // can be written to the socket. The send window should then increase 3786 // can be written to the socket. The send window should then increase
3895 // to its original value, i.e. we shouldn't "leak" send window bytes. 3787 // to its original value, i.e. we shouldn't "leak" send window bytes.
3896 TEST_P(SpdySessionTest, SessionFlowControlNoSendLeaks) { 3788 TEST_P(SpdySessionTest, SessionFlowControlNoSendLeaks) {
3897 const int32_t kMsgDataSize = 100; 3789 const int32_t kMsgDataSize = 100;
3898 const std::string msg_data(kMsgDataSize, 'a'); 3790 const std::string msg_data(kMsgDataSize, 'a');
3899 3791
3900 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( 3792 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost(
3901 kDefaultUrl, 1, kMsgDataSize, MEDIUM, nullptr, 0)); 3793 kDefaultUrl, 1, kMsgDataSize, MEDIUM, nullptr, 0));
3902 MockWrite writes[] = { 3794 MockWrite writes[] = {
3903 CreateMockWrite(*req, 0), 3795 CreateMockWrite(req, 0),
3904 }; 3796 };
3905 3797
3906 std::unique_ptr<SpdySerializedFrame> resp( 3798 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
3907 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
3908 MockRead reads[] = { 3799 MockRead reads[] = {
3909 MockRead(ASYNC, ERR_IO_PENDING, 1), 3800 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(resp, 2),
3910 CreateMockRead(*resp, 2),
3911 MockRead(ASYNC, 0, 3) // EOF 3801 MockRead(ASYNC, 0, 3) // EOF
3912 }; 3802 };
3913 3803
3914 // Create SpdySession and SpdyStream and send the request. 3804 // Create SpdySession and SpdyStream and send the request.
3915 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 3805 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
3916 session_deps_.host_resolver->set_synchronous_mode(true); 3806 session_deps_.host_resolver->set_synchronous_mode(true);
3917 session_deps_.socket_factory->AddSocketDataProvider(&data); 3807 session_deps_.socket_factory->AddSocketDataProvider(&data);
3918 3808
3919 CreateNetworkSession(); 3809 CreateNetworkSession();
3920 CreateInsecureSpdySession(); 3810 CreateInsecureSpdySession();
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
3962 EXPECT_TRUE(data.AllWriteDataConsumed()); 3852 EXPECT_TRUE(data.AllWriteDataConsumed());
3963 EXPECT_TRUE(data.AllReadDataConsumed()); 3853 EXPECT_TRUE(data.AllReadDataConsumed());
3964 } 3854 }
3965 3855
3966 // Send data back and forth; the send and receive windows should 3856 // Send data back and forth; the send and receive windows should
3967 // change appropriately. 3857 // change appropriately.
3968 TEST_P(SpdySessionTest, SessionFlowControlEndToEnd) { 3858 TEST_P(SpdySessionTest, SessionFlowControlEndToEnd) {
3969 const int32_t kMsgDataSize = 100; 3859 const int32_t kMsgDataSize = 100;
3970 const std::string msg_data(kMsgDataSize, 'a'); 3860 const std::string msg_data(kMsgDataSize, 'a');
3971 3861
3972 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( 3862 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost(
3973 kDefaultUrl, 1, kMsgDataSize, MEDIUM, nullptr, 0)); 3863 kDefaultUrl, 1, kMsgDataSize, MEDIUM, nullptr, 0));
3974 std::unique_ptr<SpdySerializedFrame> msg(spdy_util_.ConstructSpdyBodyFrame( 3864 SpdySerializedFrame msg(spdy_util_.ConstructSpdyDataFrame(
3975 1, msg_data.data(), kMsgDataSize, false)); 3865 1, msg_data.data(), kMsgDataSize, false));
3976 MockWrite writes[] = { 3866 MockWrite writes[] = {
3977 CreateMockWrite(*req, 0), 3867 CreateMockWrite(req, 0), CreateMockWrite(msg, 2),
3978 CreateMockWrite(*msg, 2),
3979 }; 3868 };
3980 3869
3981 std::unique_ptr<SpdySerializedFrame> resp( 3870 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
3982 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 3871 SpdySerializedFrame echo(spdy_util_.ConstructSpdyDataFrame(
3983 std::unique_ptr<SpdySerializedFrame> echo(spdy_util_.ConstructSpdyBodyFrame(
3984 1, msg_data.data(), kMsgDataSize, false)); 3872 1, msg_data.data(), kMsgDataSize, false));
3985 std::unique_ptr<SpdySerializedFrame> window_update( 3873 SpdySerializedFrame window_update(spdy_util_.ConstructSpdyWindowUpdate(
3986 spdy_util_.ConstructSpdyWindowUpdate(kSessionFlowControlStreamId, 3874 kSessionFlowControlStreamId, kMsgDataSize));
3987 kMsgDataSize));
3988 MockRead reads[] = { 3875 MockRead reads[] = {
3989 CreateMockRead(*resp, 1), 3876 CreateMockRead(resp, 1),
3990 MockRead(ASYNC, ERR_IO_PENDING, 3), 3877 MockRead(ASYNC, ERR_IO_PENDING, 3),
3991 CreateMockRead(*echo, 4), 3878 CreateMockRead(echo, 4),
3992 MockRead(ASYNC, ERR_IO_PENDING, 5), 3879 MockRead(ASYNC, ERR_IO_PENDING, 5),
3993 CreateMockRead(*window_update, 6), 3880 CreateMockRead(window_update, 6),
3994 MockRead(ASYNC, ERR_IO_PENDING, 7), 3881 MockRead(ASYNC, ERR_IO_PENDING, 7),
3995 MockRead(ASYNC, 0, 8) // EOF 3882 MockRead(ASYNC, 0, 8) // EOF
3996 }; 3883 };
3997 3884
3998 // Create SpdySession and SpdyStream and send the request. 3885 // Create SpdySession and SpdyStream and send the request.
3999 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 3886 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
4000 session_deps_.host_resolver->set_synchronous_mode(true); 3887 session_deps_.host_resolver->set_synchronous_mode(true);
4001 session_deps_.socket_factory->AddSocketDataProvider(&data); 3888 session_deps_.socket_factory->AddSocketDataProvider(&data);
4002 3889
4003 CreateNetworkSession(); 3890 CreateNetworkSession();
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
4071 EXPECT_FALSE(session_); 3958 EXPECT_FALSE(session_);
4072 } 3959 }
4073 3960
4074 // Given a stall function and an unstall function, runs a test to make 3961 // Given a stall function and an unstall function, runs a test to make
4075 // sure that a stream resumes after unstall. 3962 // sure that a stream resumes after unstall.
4076 void SpdySessionTest::RunResumeAfterUnstallTest( 3963 void SpdySessionTest::RunResumeAfterUnstallTest(
4077 const base::Callback<void(SpdyStream*)>& stall_function, 3964 const base::Callback<void(SpdyStream*)>& stall_function,
4078 const base::Callback<void(SpdyStream*, int32_t)>& unstall_function) { 3965 const base::Callback<void(SpdyStream*, int32_t)>& unstall_function) {
4079 session_deps_.host_resolver->set_synchronous_mode(true); 3966 session_deps_.host_resolver->set_synchronous_mode(true);
4080 3967
4081 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( 3968 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost(
4082 kDefaultUrl, 1, kBodyDataSize, LOWEST, nullptr, 0)); 3969 kDefaultUrl, 1, kBodyDataSize, LOWEST, nullptr, 0));
4083 std::unique_ptr<SpdySerializedFrame> body( 3970 SpdySerializedFrame body(
4084 spdy_util_.ConstructSpdyBodyFrame(1, kBodyData, kBodyDataSize, true)); 3971 spdy_util_.ConstructSpdyDataFrame(1, kBodyData, kBodyDataSize, true));
4085 MockWrite writes[] = { 3972 MockWrite writes[] = {
4086 CreateMockWrite(*req, 0), 3973 CreateMockWrite(req, 0), CreateMockWrite(body, 1),
4087 CreateMockWrite(*body, 1),
4088 }; 3974 };
4089 3975
4090 std::unique_ptr<SpdySerializedFrame> resp( 3976 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
4091 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 3977 SpdySerializedFrame echo(
4092 std::unique_ptr<SpdySerializedFrame> echo( 3978 spdy_util_.ConstructSpdyDataFrame(1, kBodyData, kBodyDataSize, false));
4093 spdy_util_.ConstructSpdyBodyFrame(1, kBodyData, kBodyDataSize, false));
4094 MockRead reads[] = { 3979 MockRead reads[] = {
4095 CreateMockRead(*resp, 2), MockRead(ASYNC, 0, 3) // EOF 3980 CreateMockRead(resp, 2), MockRead(ASYNC, 0, 3) // EOF
4096 }; 3981 };
4097 3982
4098 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 3983 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
4099 session_deps_.socket_factory->AddSocketDataProvider(&data); 3984 session_deps_.socket_factory->AddSocketDataProvider(&data);
4100 3985
4101 CreateNetworkSession(); 3986 CreateNetworkSession();
4102 CreateInsecureSpdySession(); 3987 CreateInsecureSpdySession();
4103 3988
4104 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously( 3989 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously(
4105 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, LOWEST, BoundNetLog()); 3990 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, LOWEST, BoundNetLog());
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
4189 base::Bind(&SpdySessionTest::UnstallStreamSession, 4074 base::Bind(&SpdySessionTest::UnstallStreamSession,
4190 base::Unretained(this))); 4075 base::Unretained(this)));
4191 } 4076 }
4192 4077
4193 // Cause a stall by reducing the flow control send window to 0. The 4078 // Cause a stall by reducing the flow control send window to 0. The
4194 // streams should resume in priority order when that window is then 4079 // streams should resume in priority order when that window is then
4195 // increased. 4080 // increased.
4196 TEST_P(SpdySessionTest, ResumeByPriorityAfterSendWindowSizeIncrease) { 4081 TEST_P(SpdySessionTest, ResumeByPriorityAfterSendWindowSizeIncrease) {
4197 session_deps_.host_resolver->set_synchronous_mode(true); 4082 session_deps_.host_resolver->set_synchronous_mode(true);
4198 4083
4199 std::unique_ptr<SpdySerializedFrame> req1(spdy_util_.ConstructSpdyPost( 4084 SpdySerializedFrame req1(spdy_util_.ConstructSpdyPost(
4200 kDefaultUrl, 1, kBodyDataSize, LOWEST, nullptr, 0)); 4085 kDefaultUrl, 1, kBodyDataSize, LOWEST, nullptr, 0));
4201 std::unique_ptr<SpdySerializedFrame> req2(spdy_util_.ConstructSpdyPost( 4086 SpdySerializedFrame req2(spdy_util_.ConstructSpdyPost(
4202 kDefaultUrl, 3, kBodyDataSize, MEDIUM, nullptr, 0)); 4087 kDefaultUrl, 3, kBodyDataSize, MEDIUM, nullptr, 0));
4203 std::unique_ptr<SpdySerializedFrame> body1( 4088 SpdySerializedFrame body1(
4204 spdy_util_.ConstructSpdyBodyFrame(1, kBodyData, kBodyDataSize, true)); 4089 spdy_util_.ConstructSpdyDataFrame(1, kBodyData, kBodyDataSize, true));
4205 std::unique_ptr<SpdySerializedFrame> body2( 4090 SpdySerializedFrame body2(
4206 spdy_util_.ConstructSpdyBodyFrame(3, kBodyData, kBodyDataSize, true)); 4091 spdy_util_.ConstructSpdyDataFrame(3, kBodyData, kBodyDataSize, true));
4207 MockWrite writes[] = { 4092 MockWrite writes[] = {
4208 CreateMockWrite(*req1, 0), 4093 CreateMockWrite(req1, 0), CreateMockWrite(req2, 1),
4209 CreateMockWrite(*req2, 1), 4094 CreateMockWrite(body2, 2), CreateMockWrite(body1, 3),
4210 CreateMockWrite(*body2, 2),
4211 CreateMockWrite(*body1, 3),
4212 }; 4095 };
4213 4096
4214 std::unique_ptr<SpdySerializedFrame> resp1( 4097 SpdySerializedFrame resp1(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
4215 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 4098 SpdySerializedFrame resp2(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 3));
4216 std::unique_ptr<SpdySerializedFrame> resp2(
4217 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 3));
4218 MockRead reads[] = { 4099 MockRead reads[] = {
4219 CreateMockRead(*resp1, 4), 4100 CreateMockRead(resp1, 4), CreateMockRead(resp2, 5),
4220 CreateMockRead(*resp2, 5),
4221 MockRead(ASYNC, 0, 6) // EOF 4101 MockRead(ASYNC, 0, 6) // EOF
4222 }; 4102 };
4223 4103
4224 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 4104 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
4225 session_deps_.socket_factory->AddSocketDataProvider(&data); 4105 session_deps_.socket_factory->AddSocketDataProvider(&data);
4226 4106
4227 CreateNetworkSession(); 4107 CreateNetworkSession();
4228 CreateInsecureSpdySession(); 4108 CreateInsecureSpdySession();
4229 4109
4230 base::WeakPtr<SpdyStream> stream1 = CreateStreamSynchronously( 4110 base::WeakPtr<SpdyStream> stream1 = CreateStreamSynchronously(
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
4330 4210
4331 private: 4211 private:
4332 base::WeakPtr<SpdyStream> stream_to_close_; 4212 base::WeakPtr<SpdyStream> stream_to_close_;
4333 }; 4213 };
4334 4214
4335 // Cause a stall by reducing the flow control send window to 4215 // Cause a stall by reducing the flow control send window to
4336 // 0. Unstalling the session should properly handle deleted streams. 4216 // 0. Unstalling the session should properly handle deleted streams.
4337 TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedStreams) { 4217 TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedStreams) {
4338 session_deps_.host_resolver->set_synchronous_mode(true); 4218 session_deps_.host_resolver->set_synchronous_mode(true);
4339 4219
4340 std::unique_ptr<SpdySerializedFrame> req1(spdy_util_.ConstructSpdyPost( 4220 SpdySerializedFrame req1(spdy_util_.ConstructSpdyPost(
4341 kDefaultUrl, 1, kBodyDataSize, LOWEST, nullptr, 0)); 4221 kDefaultUrl, 1, kBodyDataSize, LOWEST, nullptr, 0));
4342 std::unique_ptr<SpdySerializedFrame> req2(spdy_util_.ConstructSpdyPost( 4222 SpdySerializedFrame req2(spdy_util_.ConstructSpdyPost(
4343 kDefaultUrl, 3, kBodyDataSize, LOWEST, nullptr, 0)); 4223 kDefaultUrl, 3, kBodyDataSize, LOWEST, nullptr, 0));
4344 std::unique_ptr<SpdySerializedFrame> req3(spdy_util_.ConstructSpdyPost( 4224 SpdySerializedFrame req3(spdy_util_.ConstructSpdyPost(
4345 kDefaultUrl, 5, kBodyDataSize, LOWEST, nullptr, 0)); 4225 kDefaultUrl, 5, kBodyDataSize, LOWEST, nullptr, 0));
4346 std::unique_ptr<SpdySerializedFrame> body2( 4226 SpdySerializedFrame body2(
4347 spdy_util_.ConstructSpdyBodyFrame(3, kBodyData, kBodyDataSize, true)); 4227 spdy_util_.ConstructSpdyDataFrame(3, kBodyData, kBodyDataSize, true));
4348 MockWrite writes[] = { 4228 MockWrite writes[] = {
4349 CreateMockWrite(*req1, 0), 4229 CreateMockWrite(req1, 0), CreateMockWrite(req2, 1),
4350 CreateMockWrite(*req2, 1), 4230 CreateMockWrite(req3, 2), CreateMockWrite(body2, 3),
4351 CreateMockWrite(*req3, 2),
4352 CreateMockWrite(*body2, 3),
4353 }; 4231 };
4354 4232
4355 std::unique_ptr<SpdySerializedFrame> resp2( 4233 SpdySerializedFrame resp2(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 3));
4356 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 3));
4357 MockRead reads[] = { 4234 MockRead reads[] = {
4358 CreateMockRead(*resp2, 4), 4235 CreateMockRead(resp2, 4), MockRead(ASYNC, ERR_IO_PENDING, 5),
4359 MockRead(ASYNC, ERR_IO_PENDING, 5),
4360 MockRead(ASYNC, 0, 6) // EOF 4236 MockRead(ASYNC, 0, 6) // EOF
4361 }; 4237 };
4362 4238
4363 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 4239 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
4364 session_deps_.socket_factory->AddSocketDataProvider(&data); 4240 session_deps_.socket_factory->AddSocketDataProvider(&data);
4365 4241
4366 CreateNetworkSession(); 4242 CreateNetworkSession();
4367 CreateInsecureSpdySession(); 4243 CreateInsecureSpdySession();
4368 4244
4369 base::WeakPtr<SpdyStream> stream1 = CreateStreamSynchronously( 4245 base::WeakPtr<SpdyStream> stream1 = CreateStreamSynchronously(
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
4477 4353
4478 EXPECT_TRUE(data.AllWriteDataConsumed()); 4354 EXPECT_TRUE(data.AllWriteDataConsumed());
4479 } 4355 }
4480 4356
4481 // Cause a stall by reducing the flow control send window to 4357 // Cause a stall by reducing the flow control send window to
4482 // 0. Unstalling the session should properly handle the session itself 4358 // 0. Unstalling the session should properly handle the session itself
4483 // being closed. 4359 // being closed.
4484 TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedSession) { 4360 TEST_P(SpdySessionTest, SendWindowSizeIncreaseWithDeletedSession) {
4485 session_deps_.host_resolver->set_synchronous_mode(true); 4361 session_deps_.host_resolver->set_synchronous_mode(true);
4486 4362
4487 std::unique_ptr<SpdySerializedFrame> req1(spdy_util_.ConstructSpdyPost( 4363 SpdySerializedFrame req1(spdy_util_.ConstructSpdyPost(
4488 kDefaultUrl, 1, kBodyDataSize, LOWEST, nullptr, 0)); 4364 kDefaultUrl, 1, kBodyDataSize, LOWEST, nullptr, 0));
4489 std::unique_ptr<SpdySerializedFrame> req2(spdy_util_.ConstructSpdyPost( 4365 SpdySerializedFrame req2(spdy_util_.ConstructSpdyPost(
4490 kDefaultUrl, 3, kBodyDataSize, LOWEST, nullptr, 0)); 4366 kDefaultUrl, 3, kBodyDataSize, LOWEST, nullptr, 0));
4491 std::unique_ptr<SpdySerializedFrame> body1( 4367 SpdySerializedFrame body1(
4492 spdy_util_.ConstructSpdyBodyFrame(1, kBodyData, kBodyDataSize, false)); 4368 spdy_util_.ConstructSpdyDataFrame(1, kBodyData, kBodyDataSize, false));
4493 MockWrite writes[] = { 4369 MockWrite writes[] = {
4494 CreateMockWrite(*req1, 0), 4370 CreateMockWrite(req1, 0), CreateMockWrite(req2, 1),
4495 CreateMockWrite(*req2, 1),
4496 }; 4371 };
4497 4372
4498 MockRead reads[] = { 4373 MockRead reads[] = {
4499 MockRead(ASYNC, ERR_IO_PENDING, 2), MockRead(ASYNC, 0, 3) // EOF 4374 MockRead(ASYNC, ERR_IO_PENDING, 2), MockRead(ASYNC, 0, 3) // EOF
4500 }; 4375 };
4501 4376
4502 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 4377 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
4503 session_deps_.socket_factory->AddSocketDataProvider(&data); 4378 session_deps_.socket_factory->AddSocketDataProvider(&data);
4504 4379
4505 CreateNetworkSession(); 4380 CreateNetworkSession();
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
4570 EXPECT_TRUE(delegate1.send_headers_completed()); 4445 EXPECT_TRUE(delegate1.send_headers_completed());
4571 EXPECT_EQ(std::string(), delegate1.TakeReceivedData()); 4446 EXPECT_EQ(std::string(), delegate1.TakeReceivedData());
4572 4447
4573 EXPECT_TRUE(delegate2.send_headers_completed()); 4448 EXPECT_TRUE(delegate2.send_headers_completed());
4574 EXPECT_EQ(std::string(), delegate2.TakeReceivedData()); 4449 EXPECT_EQ(std::string(), delegate2.TakeReceivedData());
4575 4450
4576 EXPECT_TRUE(data.AllWriteDataConsumed()); 4451 EXPECT_TRUE(data.AllWriteDataConsumed());
4577 } 4452 }
4578 4453
4579 TEST_P(SpdySessionTest, GoAwayOnSessionFlowControlError) { 4454 TEST_P(SpdySessionTest, GoAwayOnSessionFlowControlError) {
4580 std::unique_ptr<SpdySerializedFrame> req( 4455 SpdySerializedFrame req(
4581 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 4456 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
4582 std::unique_ptr<SpdySerializedFrame> goaway(spdy_util_.ConstructSpdyGoAway( 4457 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway(
4583 0, GOAWAY_FLOW_CONTROL_ERROR, 4458 0, GOAWAY_FLOW_CONTROL_ERROR,
4584 "delta_window_size is 6 in DecreaseRecvWindowSize, which is larger than " 4459 "delta_window_size is 6 in DecreaseRecvWindowSize, which is larger than "
4585 "the receive window size of 1")); 4460 "the receive window size of 1"));
4586 MockWrite writes[] = { 4461 MockWrite writes[] = {
4587 CreateMockWrite(*req, 0), CreateMockWrite(*goaway, 4), 4462 CreateMockWrite(req, 0), CreateMockWrite(goaway, 4),
4588 }; 4463 };
4589 4464
4590 std::unique_ptr<SpdySerializedFrame> resp( 4465 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
4591 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 4466 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true));
4592 std::unique_ptr<SpdySerializedFrame> body(
4593 spdy_util_.ConstructSpdyBodyFrame(1, true));
4594 MockRead reads[] = { 4467 MockRead reads[] = {
4595 MockRead(ASYNC, ERR_IO_PENDING, 1), 4468 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(resp, 2),
4596 CreateMockRead(*resp, 2), 4469 CreateMockRead(body, 3),
4597 CreateMockRead(*body, 3),
4598 }; 4470 };
4599 4471
4600 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 4472 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
4601 session_deps_.socket_factory->AddSocketDataProvider(&data); 4473 session_deps_.socket_factory->AddSocketDataProvider(&data);
4602 4474
4603 CreateNetworkSession(); 4475 CreateNetworkSession();
4604 CreateInsecureSpdySession(); 4476 CreateInsecureSpdySession();
4605 4477
4606 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( 4478 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously(
4607 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, LOWEST, BoundNetLog()); 4479 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, LOWEST, BoundNetLog());
(...skipping 19 matching lines...) Expand all
4627 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_SPDY_FLOW_CONTROL_ERROR)); 4499 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_SPDY_FLOW_CONTROL_ERROR));
4628 EXPECT_FALSE(session_); 4500 EXPECT_FALSE(session_);
4629 } 4501 }
4630 4502
4631 // Regression. Sorta. Push streams and client streams were sharing a single 4503 // Regression. Sorta. Push streams and client streams were sharing a single
4632 // limit for a long time. 4504 // limit for a long time.
4633 TEST_P(SpdySessionTest, PushedStreamShouldNotCountToClientConcurrencyLimit) { 4505 TEST_P(SpdySessionTest, PushedStreamShouldNotCountToClientConcurrencyLimit) {
4634 SettingsMap new_settings; 4506 SettingsMap new_settings;
4635 new_settings[SETTINGS_MAX_CONCURRENT_STREAMS] = 4507 new_settings[SETTINGS_MAX_CONCURRENT_STREAMS] =
4636 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 2); 4508 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 2);
4637 std::unique_ptr<SpdySerializedFrame> settings_frame( 4509 SpdySerializedFrame settings_frame(
4638 spdy_util_.ConstructSpdySettings(new_settings)); 4510 spdy_util_.ConstructSpdySettings(new_settings));
4639 std::unique_ptr<SpdySerializedFrame> pushed(spdy_util_.ConstructSpdyPush( 4511 SpdySerializedFrame pushed(spdy_util_.ConstructSpdyPush(
4640 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); 4512 nullptr, 0, 2, 1, "https://www.example.org/a.dat"));
4641 MockRead reads[] = { 4513 MockRead reads[] = {
4642 CreateMockRead(*settings_frame, 0), 4514 CreateMockRead(settings_frame, 0),
4643 MockRead(ASYNC, ERR_IO_PENDING, 3), 4515 MockRead(ASYNC, ERR_IO_PENDING, 3),
4644 CreateMockRead(*pushed, 4), 4516 CreateMockRead(pushed, 4),
4645 MockRead(ASYNC, ERR_IO_PENDING, 5), 4517 MockRead(ASYNC, ERR_IO_PENDING, 5),
4646 MockRead(ASYNC, 0, 6), 4518 MockRead(ASYNC, 0, 6),
4647 }; 4519 };
4648 4520
4649 std::unique_ptr<SpdySerializedFrame> settings_ack( 4521 SpdySerializedFrame settings_ack(spdy_util_.ConstructSpdySettingsAck());
4650 spdy_util_.ConstructSpdySettingsAck()); 4522 SpdySerializedFrame req(
4651 std::unique_ptr<SpdySerializedFrame> req(
4652 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 4523 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
4653 MockWrite writes[] = { 4524 MockWrite writes[] = {
4654 CreateMockWrite(*settings_ack, 1), CreateMockWrite(*req, 2), 4525 CreateMockWrite(settings_ack, 1), CreateMockWrite(req, 2),
4655 }; 4526 };
4656 4527
4657 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 4528 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
4658 session_deps_.socket_factory->AddSocketDataProvider(&data); 4529 session_deps_.socket_factory->AddSocketDataProvider(&data);
4659 4530
4660 CreateNetworkSession(); 4531 CreateNetworkSession();
4661 CreateInsecureSpdySession(); 4532 CreateInsecureSpdySession();
4662 4533
4663 // Read the settings frame. 4534 // Read the settings frame.
4664 base::RunLoop().RunUntilIdle(); 4535 base::RunLoop().RunUntilIdle();
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
4708 EXPECT_EQ(1u, session_->num_pushed_streams()); 4579 EXPECT_EQ(1u, session_->num_pushed_streams());
4709 EXPECT_EQ(1u, session_->num_active_pushed_streams()); 4580 EXPECT_EQ(1u, session_->num_active_pushed_streams());
4710 4581
4711 // Read EOF. 4582 // Read EOF.
4712 data.Resume(); 4583 data.Resume();
4713 base::RunLoop().RunUntilIdle(); 4584 base::RunLoop().RunUntilIdle();
4714 EXPECT_FALSE(session_); 4585 EXPECT_FALSE(session_);
4715 } 4586 }
4716 4587
4717 TEST_P(SpdySessionTest, RejectPushedStreamExceedingConcurrencyLimit) { 4588 TEST_P(SpdySessionTest, RejectPushedStreamExceedingConcurrencyLimit) {
4718 std::unique_ptr<SpdySerializedFrame> push_a(spdy_util_.ConstructSpdyPush( 4589 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush(
4719 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); 4590 nullptr, 0, 2, 1, "https://www.example.org/a.dat"));
4720 std::unique_ptr<SpdySerializedFrame> push_b(spdy_util_.ConstructSpdyPush( 4591 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush(
4721 nullptr, 0, 4, 1, "https://www.example.org/b.dat")); 4592 nullptr, 0, 4, 1, "https://www.example.org/b.dat"));
4722 MockRead reads[] = { 4593 MockRead reads[] = {
4723 MockRead(ASYNC, ERR_IO_PENDING, 1), 4594 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(push_a, 2),
4724 CreateMockRead(*push_a, 2), 4595 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(push_b, 4),
4725 MockRead(ASYNC, ERR_IO_PENDING, 3), 4596 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7),
4726 CreateMockRead(*push_b, 4),
4727 MockRead(ASYNC, ERR_IO_PENDING, 6),
4728 MockRead(ASYNC, 0, 7),
4729 }; 4597 };
4730 4598
4731 std::unique_ptr<SpdySerializedFrame> req( 4599 SpdySerializedFrame req(
4732 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 4600 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
4733 std::unique_ptr<SpdySerializedFrame> rst( 4601 SpdySerializedFrame rst(
4734 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM)); 4602 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM));
4735 MockWrite writes[] = { 4603 MockWrite writes[] = {
4736 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5), 4604 CreateMockWrite(req, 0), CreateMockWrite(rst, 5),
4737 }; 4605 };
4738 4606
4739 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 4607 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
4740 session_deps_.socket_factory->AddSocketDataProvider(&data); 4608 session_deps_.socket_factory->AddSocketDataProvider(&data);
4741 4609
4742 CreateNetworkSession(); 4610 CreateNetworkSession();
4743 CreateInsecureSpdySession(); 4611 CreateInsecureSpdySession();
4744 session_->set_max_concurrent_pushed_streams(1); 4612 session_->set_max_concurrent_pushed_streams(1);
4745 4613
4746 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( 4614 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
4794 // Tests that HTTP SPDY push streams that advertise an origin different from the 4662 // Tests that HTTP SPDY push streams that advertise an origin different from the
4795 // associated stream are accepted from a trusted SPDY proxy. 4663 // associated stream are accepted from a trusted SPDY proxy.
4796 TEST_P(SpdySessionTest, TrustedSpdyProxy) { 4664 TEST_P(SpdySessionTest, TrustedSpdyProxy) {
4797 // Origin of kDefaultUrl should be different from the origin of 4665 // Origin of kDefaultUrl should be different from the origin of
4798 // kHttpURLFromAnotherOrigin and kHttpsURLFromAnotherOrigin. 4666 // kHttpURLFromAnotherOrigin and kHttpsURLFromAnotherOrigin.
4799 ASSERT_NE(GURL(kDefaultUrl).host(), GURL(kHttpURLFromAnotherOrigin).host()); 4667 ASSERT_NE(GURL(kDefaultUrl).host(), GURL(kHttpURLFromAnotherOrigin).host());
4800 ASSERT_NE(GURL(kDefaultUrl).host(), GURL(kHttpsURLFromAnotherOrigin).host()); 4668 ASSERT_NE(GURL(kDefaultUrl).host(), GURL(kHttpsURLFromAnotherOrigin).host());
4801 4669
4802 // cross_origin_push contains HTTP resource for an origin different from the 4670 // cross_origin_push contains HTTP resource for an origin different from the
4803 // origin of kDefaultUrl, and should be accepted. 4671 // origin of kDefaultUrl, and should be accepted.
4804 std::unique_ptr<SpdySerializedFrame> cross_origin_push( 4672 SpdySerializedFrame cross_origin_push(spdy_util_.ConstructSpdyPush(
4805 spdy_util_.ConstructSpdyPush(nullptr, 0, 2, 1, 4673 nullptr, 0, 2, 1, kHttpURLFromAnotherOrigin));
4806 kHttpURLFromAnotherOrigin));
4807 // cross_origin_https_push contains HTTPS resource, and should be refused. 4674 // cross_origin_https_push contains HTTPS resource, and should be refused.
4808 std::unique_ptr<SpdySerializedFrame> cross_origin_https_push( 4675 SpdySerializedFrame cross_origin_https_push(spdy_util_.ConstructSpdyPush(
4809 spdy_util_.ConstructSpdyPush(nullptr, 0, 4, 1, 4676 nullptr, 0, 4, 1, kHttpsURLFromAnotherOrigin));
4810 kHttpsURLFromAnotherOrigin));
4811 MockRead reads[] = { 4677 MockRead reads[] = {
4812 MockRead(ASYNC, ERR_IO_PENDING, 1), 4678 MockRead(ASYNC, ERR_IO_PENDING, 1),
4813 CreateMockRead(*cross_origin_push, 2), 4679 CreateMockRead(cross_origin_push, 2),
4814 MockRead(ASYNC, ERR_IO_PENDING, 3), 4680 MockRead(ASYNC, ERR_IO_PENDING, 3),
4815 CreateMockRead(*cross_origin_https_push, 4), 4681 CreateMockRead(cross_origin_https_push, 4),
4816 MockRead(ASYNC, ERR_IO_PENDING, 6), 4682 MockRead(ASYNC, ERR_IO_PENDING, 6),
4817 MockRead(ASYNC, 0, 7), 4683 MockRead(ASYNC, 0, 7),
4818 }; 4684 };
4819 4685
4820 std::unique_ptr<SpdySerializedFrame> req( 4686 SpdySerializedFrame req(
4821 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 4687 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
4822 std::unique_ptr<SpdySerializedFrame> rst( 4688 SpdySerializedFrame rst(
4823 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM)); 4689 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM));
4824 MockWrite writes[] = { 4690 MockWrite writes[] = {
4825 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5), 4691 CreateMockWrite(req, 0), CreateMockWrite(rst, 5),
4826 }; 4692 };
4827 4693
4828 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 4694 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
4829 session_deps_.socket_factory->AddSocketDataProvider(&data); 4695 session_deps_.socket_factory->AddSocketDataProvider(&data);
4830 4696
4831 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); 4697 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate());
4832 proxy_delegate->set_trusted_spdy_proxy( 4698 proxy_delegate->set_trusted_spdy_proxy(
4833 net::ProxyServer(net::ProxyServer::SCHEME_HTTPS, 4699 net::ProxyServer(net::ProxyServer::SCHEME_HTTPS,
4834 HostPortPair(GURL(kDefaultUrl).host(), 443))); 4700 HostPortPair(GURL(kDefaultUrl).host(), 443)));
4835 session_deps_.proxy_delegate.reset(proxy_delegate.release()); 4701 session_deps_.proxy_delegate.reset(proxy_delegate.release());
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
4900 4766
4901 // Tests that if the SPDY trusted proxy is not set, then push streams that 4767 // Tests that if the SPDY trusted proxy is not set, then push streams that
4902 // advertise an origin different from the associated stream are refused. 4768 // advertise an origin different from the associated stream are refused.
4903 TEST_P(SpdySessionTest, TrustedSpdyProxyNotSet) { 4769 TEST_P(SpdySessionTest, TrustedSpdyProxyNotSet) {
4904 // Origin of kDefaultUrl should be different from the origin of 4770 // Origin of kDefaultUrl should be different from the origin of
4905 // kHttpURLFromAnotherOrigin. 4771 // kHttpURLFromAnotherOrigin.
4906 ASSERT_NE(GURL(kDefaultUrl).host(), GURL(kHttpURLFromAnotherOrigin).host()); 4772 ASSERT_NE(GURL(kDefaultUrl).host(), GURL(kHttpURLFromAnotherOrigin).host());
4907 4773
4908 // cross_origin_push contains resource for an origin different from the 4774 // cross_origin_push contains resource for an origin different from the
4909 // origin of kDefaultUrl, and should be refused. 4775 // origin of kDefaultUrl, and should be refused.
4910 std::unique_ptr<SpdySerializedFrame> cross_origin_push( 4776 SpdySerializedFrame cross_origin_push(spdy_util_.ConstructSpdyPush(
4911 spdy_util_.ConstructSpdyPush(nullptr, 0, 2, 1, 4777 nullptr, 0, 2, 1, kHttpURLFromAnotherOrigin));
4912 kHttpURLFromAnotherOrigin));
4913 MockRead reads[] = { 4778 MockRead reads[] = {
4914 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(*cross_origin_push, 2), 4779 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(cross_origin_push, 2),
4915 MockRead(ASYNC, 0, 4), 4780 MockRead(ASYNC, 0, 4),
4916 }; 4781 };
4917 4782
4918 std::unique_ptr<SpdySerializedFrame> req( 4783 SpdySerializedFrame req(
4919 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 4784 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
4920 std::unique_ptr<SpdySerializedFrame> rst( 4785 SpdySerializedFrame rst(
4921 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); 4786 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM));
4922 MockWrite writes[] = { 4787 MockWrite writes[] = {
4923 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 3), 4788 CreateMockWrite(req, 0), CreateMockWrite(rst, 3),
4924 }; 4789 };
4925 4790
4926 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 4791 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
4927 session_deps_.socket_factory->AddSocketDataProvider(&data); 4792 session_deps_.socket_factory->AddSocketDataProvider(&data);
4928 4793
4929 // Load a cert that is valid for: 4794 // Load a cert that is valid for:
4930 // www.example.org 4795 // www.example.org
4931 // mail.example.org 4796 // mail.example.org
4932 // mail.example.com 4797 // mail.example.com
4933 base::FilePath certs_dir = GetTestCertsDirectory(); 4798 base::FilePath certs_dir = GetTestCertsDirectory();
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
4968 EXPECT_EQ(0u, session_->num_pushed_streams()); 4833 EXPECT_EQ(0u, session_->num_pushed_streams());
4969 EXPECT_EQ(0u, session_->num_active_pushed_streams()); 4834 EXPECT_EQ(0u, session_->num_active_pushed_streams());
4970 4835
4971 // Read EOF. 4836 // Read EOF.
4972 data.Resume(); 4837 data.Resume();
4973 base::RunLoop().RunUntilIdle(); 4838 base::RunLoop().RunUntilIdle();
4974 EXPECT_FALSE(session_); 4839 EXPECT_FALSE(session_);
4975 } 4840 }
4976 4841
4977 TEST_P(SpdySessionTest, IgnoreReservedRemoteStreamsCount) { 4842 TEST_P(SpdySessionTest, IgnoreReservedRemoteStreamsCount) {
4978 std::unique_ptr<SpdySerializedFrame> push_a(spdy_util_.ConstructSpdyPush( 4843 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush(
4979 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); 4844 nullptr, 0, 2, 1, "https://www.example.org/a.dat"));
4980 SpdyHeaderBlock push_headers; 4845 SpdyHeaderBlock push_headers;
4981 spdy_util_.AddUrlToHeaderBlock("https://www.example.org/b.dat", 4846 spdy_util_.AddUrlToHeaderBlock("https://www.example.org/b.dat",
4982 &push_headers); 4847 &push_headers);
4983 std::unique_ptr<SpdySerializedFrame> push_b( 4848 SpdySerializedFrame push_b(
4984 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 4, 1)); 4849 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 4, 1));
4985 std::unique_ptr<SpdySerializedFrame> headers_b( 4850 SpdySerializedFrame headers_b(
4986 spdy_util_.ConstructSpdyPushHeaders(4, nullptr, 0)); 4851 spdy_util_.ConstructSpdyPushHeaders(4, nullptr, 0));
4987 MockRead reads[] = { 4852 MockRead reads[] = {
4988 MockRead(ASYNC, ERR_IO_PENDING, 1), 4853 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(push_a, 2),
4989 CreateMockRead(*push_a, 2), 4854 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(push_b, 4),
4990 MockRead(ASYNC, ERR_IO_PENDING, 3), 4855 MockRead(ASYNC, ERR_IO_PENDING, 5), CreateMockRead(headers_b, 6),
4991 CreateMockRead(*push_b, 4), 4856 MockRead(ASYNC, ERR_IO_PENDING, 8), MockRead(ASYNC, 0, 9),
4992 MockRead(ASYNC, ERR_IO_PENDING, 5),
4993 CreateMockRead(*headers_b, 6),
4994 MockRead(ASYNC, ERR_IO_PENDING, 8),
4995 MockRead(ASYNC, 0, 9),
4996 }; 4857 };
4997 4858
4998 std::unique_ptr<SpdySerializedFrame> req( 4859 SpdySerializedFrame req(
4999 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 4860 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
5000 std::unique_ptr<SpdySerializedFrame> rst( 4861 SpdySerializedFrame rst(
5001 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM)); 4862 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM));
5002 MockWrite writes[] = { 4863 MockWrite writes[] = {
5003 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 7), 4864 CreateMockWrite(req, 0), CreateMockWrite(rst, 7),
5004 }; 4865 };
5005 4866
5006 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 4867 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
5007 session_deps_.socket_factory->AddSocketDataProvider(&data); 4868 session_deps_.socket_factory->AddSocketDataProvider(&data);
5008 4869
5009 CreateNetworkSession(); 4870 CreateNetworkSession();
5010 CreateInsecureSpdySession(); 4871 CreateInsecureSpdySession();
5011 session_->set_max_concurrent_pushed_streams(1); 4872 session_->set_max_concurrent_pushed_streams(1);
5012 4873
5013 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( 4874 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
5064 // Read EOF. 4925 // Read EOF.
5065 data.Resume(); 4926 data.Resume();
5066 base::RunLoop().RunUntilIdle(); 4927 base::RunLoop().RunUntilIdle();
5067 EXPECT_FALSE(session_); 4928 EXPECT_FALSE(session_);
5068 } 4929 }
5069 4930
5070 TEST_P(SpdySessionTest, CancelReservedStreamOnHeadersReceived) { 4931 TEST_P(SpdySessionTest, CancelReservedStreamOnHeadersReceived) {
5071 const char kPushedUrl[] = "https://www.example.org/a.dat"; 4932 const char kPushedUrl[] = "https://www.example.org/a.dat";
5072 SpdyHeaderBlock push_headers; 4933 SpdyHeaderBlock push_headers;
5073 spdy_util_.AddUrlToHeaderBlock(kPushedUrl, &push_headers); 4934 spdy_util_.AddUrlToHeaderBlock(kPushedUrl, &push_headers);
5074 std::unique_ptr<SpdySerializedFrame> push_promise( 4935 SpdySerializedFrame push_promise(
5075 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 2, 1)); 4936 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 2, 1));
5076 std::unique_ptr<SpdySerializedFrame> headers_frame( 4937 SpdySerializedFrame headers_frame(
5077 spdy_util_.ConstructSpdyPushHeaders(2, nullptr, 0)); 4938 spdy_util_.ConstructSpdyPushHeaders(2, nullptr, 0));
5078 MockRead reads[] = { 4939 MockRead reads[] = {
5079 MockRead(ASYNC, ERR_IO_PENDING, 1), 4940 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(push_promise, 2),
5080 CreateMockRead(*push_promise, 2), 4941 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(headers_frame, 4),
5081 MockRead(ASYNC, ERR_IO_PENDING, 3), 4942 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7),
5082 CreateMockRead(*headers_frame, 4),
5083 MockRead(ASYNC, ERR_IO_PENDING, 6),
5084 MockRead(ASYNC, 0, 7),
5085 }; 4943 };
5086 4944
5087 std::unique_ptr<SpdySerializedFrame> req( 4945 SpdySerializedFrame req(
5088 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 4946 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
5089 std::unique_ptr<SpdySerializedFrame> rst( 4947 SpdySerializedFrame rst(
5090 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_CANCEL)); 4948 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_CANCEL));
5091 MockWrite writes[] = { 4949 MockWrite writes[] = {
5092 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5), 4950 CreateMockWrite(req, 0), CreateMockWrite(rst, 5),
5093 }; 4951 };
5094 4952
5095 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 4953 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
5096 session_deps_.socket_factory->AddSocketDataProvider(&data); 4954 session_deps_.socket_factory->AddSocketDataProvider(&data);
5097 4955
5098 CreateNetworkSession(); 4956 CreateNetworkSession();
5099 CreateInsecureSpdySession(); 4957 CreateInsecureSpdySession();
5100 4958
5101 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( 4959 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
5102 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, LOWEST, BoundNetLog()); 4960 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, LOWEST, BoundNetLog());
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
5328 spdy_session_pool_->http_server_properties()->GetAlternativeServices( 5186 spdy_session_pool_->http_server_properties()->GetAlternativeServices(
5329 session_origin); 5187 session_origin);
5330 ASSERT_TRUE(altsvc_vector.empty()); 5188 ASSERT_TRUE(altsvc_vector.empty());
5331 } 5189 }
5332 5190
5333 TEST_P(AltSvcFrameTest, ProcessAltSvcFrameOnActiveStream) { 5191 TEST_P(AltSvcFrameTest, ProcessAltSvcFrameOnActiveStream) {
5334 SpdyAltSvcIR altsvc_ir(1); 5192 SpdyAltSvcIR altsvc_ir(1);
5335 altsvc_ir.add_altsvc(alternative_service_); 5193 altsvc_ir.add_altsvc(alternative_service_);
5336 5194
5337 SpdySerializedFrame altsvc_frame(spdy_util_.SerializeFrame(altsvc_ir)); 5195 SpdySerializedFrame altsvc_frame(spdy_util_.SerializeFrame(altsvc_ir));
5338 std::unique_ptr<SpdySerializedFrame> rst( 5196 SpdySerializedFrame rst(
5339 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_REFUSED_STREAM)); 5197 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_REFUSED_STREAM));
5340 MockRead reads[] = { 5198 MockRead reads[] = {
5341 CreateMockRead(altsvc_frame, 1), CreateMockRead(*rst, 2), 5199 CreateMockRead(altsvc_frame, 1), CreateMockRead(rst, 2),
5342 MockRead(ASYNC, 0, 3) // EOF 5200 MockRead(ASYNC, 0, 3) // EOF
5343 }; 5201 };
5344 5202
5345 const char request_origin[] = "https://mail.example.org"; 5203 const char request_origin[] = "https://mail.example.org";
5346 std::unique_ptr<SpdySerializedFrame> req( 5204 SpdySerializedFrame req(
5347 spdy_util_.ConstructSpdyGet(request_origin, 1, MEDIUM)); 5205 spdy_util_.ConstructSpdyGet(request_origin, 1, MEDIUM));
5348 MockWrite writes[] = { 5206 MockWrite writes[] = {
5349 CreateMockWrite(*req, 0), 5207 CreateMockWrite(req, 0),
5350 }; 5208 };
5351 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 5209 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
5352 session_deps_.socket_factory->AddSocketDataProvider(&data); 5210 session_deps_.socket_factory->AddSocketDataProvider(&data);
5353 5211
5354 AddSSLSocketData(); 5212 AddSSLSocketData();
5355 5213
5356 CreateNetworkSession(); 5214 CreateNetworkSession();
5357 CreateSecureSpdySession(); 5215 CreateSecureSpdySession();
5358 5216
5359 base::WeakPtr<SpdyStream> spdy_stream1 = 5217 base::WeakPtr<SpdyStream> spdy_stream1 =
(...skipping 24 matching lines...) Expand all
5384 EXPECT_EQ(QUIC, altsvc_vector[0].protocol); 5242 EXPECT_EQ(QUIC, altsvc_vector[0].protocol);
5385 EXPECT_EQ("alternative.example.org", altsvc_vector[0].host); 5243 EXPECT_EQ("alternative.example.org", altsvc_vector[0].host);
5386 EXPECT_EQ(443u, altsvc_vector[0].port); 5244 EXPECT_EQ(443u, altsvc_vector[0].port);
5387 } 5245 }
5388 5246
5389 TEST_P(AltSvcFrameTest, DoNotProcessAltSvcFrameOnStreamWithInsecureOrigin) { 5247 TEST_P(AltSvcFrameTest, DoNotProcessAltSvcFrameOnStreamWithInsecureOrigin) {
5390 SpdyAltSvcIR altsvc_ir(1); 5248 SpdyAltSvcIR altsvc_ir(1);
5391 altsvc_ir.add_altsvc(alternative_service_); 5249 altsvc_ir.add_altsvc(alternative_service_);
5392 5250
5393 SpdySerializedFrame altsvc_frame(spdy_util_.SerializeFrame(altsvc_ir)); 5251 SpdySerializedFrame altsvc_frame(spdy_util_.SerializeFrame(altsvc_ir));
5394 std::unique_ptr<SpdySerializedFrame> rst( 5252 SpdySerializedFrame rst(
5395 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_REFUSED_STREAM)); 5253 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_REFUSED_STREAM));
5396 MockRead reads[] = { 5254 MockRead reads[] = {
5397 CreateMockRead(altsvc_frame, 1), CreateMockRead(*rst, 2), 5255 CreateMockRead(altsvc_frame, 1), CreateMockRead(rst, 2),
5398 MockRead(ASYNC, 0, 3) // EOF 5256 MockRead(ASYNC, 0, 3) // EOF
5399 }; 5257 };
5400 5258
5401 const char request_origin[] = "http://mail.example.org"; 5259 const char request_origin[] = "http://mail.example.org";
5402 std::unique_ptr<SpdySerializedFrame> req( 5260 SpdySerializedFrame req(
5403 spdy_util_.ConstructSpdyGet(request_origin, 1, MEDIUM)); 5261 spdy_util_.ConstructSpdyGet(request_origin, 1, MEDIUM));
5404 MockWrite writes[] = { 5262 MockWrite writes[] = {
5405 CreateMockWrite(*req, 0), 5263 CreateMockWrite(req, 0),
5406 }; 5264 };
5407 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 5265 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
5408 session_deps_.socket_factory->AddSocketDataProvider(&data); 5266 session_deps_.socket_factory->AddSocketDataProvider(&data);
5409 5267
5410 AddSSLSocketData(); 5268 AddSSLSocketData();
5411 5269
5412 CreateNetworkSession(); 5270 CreateNetworkSession();
5413 CreateSecureSpdySession(); 5271 CreateSecureSpdySession();
5414 5272
5415 base::WeakPtr<SpdyStream> spdy_stream1 = 5273 base::WeakPtr<SpdyStream> spdy_stream1 =
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
5687 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), 5545 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(),
5688 "spdy_pooling.pem"); 5546 "spdy_pooling.pem");
5689 ssl_info.is_issued_by_known_root = true; 5547 ssl_info.is_issued_by_known_root = true;
5690 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin)); 5548 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin));
5691 5549
5692 EXPECT_TRUE(SpdySession::CanPool( 5550 EXPECT_TRUE(SpdySession::CanPool(
5693 &tss, ssl_info, "www.example.org", "mail.example.org")); 5551 &tss, ssl_info, "www.example.org", "mail.example.org"));
5694 } 5552 }
5695 5553
5696 } // namespace net 5554 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_session_pool_unittest.cc ('k') | net/spdy/spdy_stream_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698