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