| 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/quic/chromium/quic_chromium_client_session.h" | 5 #include "net/quic/chromium/quic_chromium_client_session.h" |
| 6 | 6 |
| 7 #include "base/base64.h" | 7 #include "base/base64.h" |
| 8 #include "base/files/file_path.h" | 8 #include "base/files/file_path.h" |
| 9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
| 10 #include "base/rand_util.h" | 10 #include "base/rand_util.h" |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 std::unique_ptr<MockRead> default_read_; | 161 std::unique_ptr<MockRead> default_read_; |
| 162 std::unique_ptr<SequencedSocketData> socket_data_; | 162 std::unique_ptr<SequencedSocketData> socket_data_; |
| 163 MockClock clock_; | 163 MockClock clock_; |
| 164 MockRandom random_; | 164 MockRandom random_; |
| 165 QuicChromiumConnectionHelper helper_; | 165 QuicChromiumConnectionHelper helper_; |
| 166 MockAlarmFactory alarm_factory_; | 166 MockAlarmFactory alarm_factory_; |
| 167 TransportSecurityState transport_security_state_; | 167 TransportSecurityState transport_security_state_; |
| 168 MockCryptoClientStreamFactory crypto_client_stream_factory_; | 168 MockCryptoClientStreamFactory crypto_client_stream_factory_; |
| 169 QuicClientPushPromiseIndex push_promise_index_; | 169 QuicClientPushPromiseIndex push_promise_index_; |
| 170 std::unique_ptr<QuicChromiumClientSession> session_; | 170 std::unique_ptr<QuicChromiumClientSession> session_; |
| 171 TestServerPushDelegate test_push_delegate_; |
| 171 QuicConnectionVisitorInterface* visitor_; | 172 QuicConnectionVisitorInterface* visitor_; |
| 172 TestCompletionCallback callback_; | 173 TestCompletionCallback callback_; |
| 173 QuicTestPacketMaker client_maker_; | 174 QuicTestPacketMaker client_maker_; |
| 174 QuicTestPacketMaker server_maker_; | 175 QuicTestPacketMaker server_maker_; |
| 175 ProofVerifyDetailsChromium verify_details_; | 176 ProofVerifyDetailsChromium verify_details_; |
| 176 }; | 177 }; |
| 177 | 178 |
| 178 INSTANTIATE_TEST_CASE_P(Tests, | 179 INSTANTIATE_TEST_CASE_P(Tests, |
| 179 QuicChromiumClientSessionTest, | 180 QuicChromiumClientSessionTest, |
| 180 ::testing::ValuesIn(AllSupportedVersions())); | 181 ::testing::ValuesIn(AllSupportedVersions())); |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 317 TEST_P(QuicChromiumClientSessionTest, CancelPushWhenPendingValidation) { | 318 TEST_P(QuicChromiumClientSessionTest, CancelPushWhenPendingValidation) { |
| 318 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 319 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
| 319 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( | 320 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( |
| 320 1, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT)); | 321 1, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT)); |
| 321 | 322 |
| 322 MockWrite writes[] = { | 323 MockWrite writes[] = { |
| 323 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1)}; | 324 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1)}; |
| 324 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, | 325 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, |
| 325 arraysize(writes))); | 326 arraysize(writes))); |
| 326 Initialize(); | 327 Initialize(); |
| 328 session_->set_push_delegate(&test_push_delegate_); |
| 327 | 329 |
| 328 ProofVerifyDetailsChromium details; | 330 ProofVerifyDetailsChromium details; |
| 329 details.cert_verify_result.verified_cert = | 331 details.cert_verify_result.verified_cert = |
| 330 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); | 332 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
| 331 ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); | 333 ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); |
| 332 | 334 |
| 333 CompleteCryptoHandshake(); | 335 CompleteCryptoHandshake(); |
| 334 session_->OnProofVerifyDetailsAvailable(details); | 336 session_->OnProofVerifyDetailsAvailable(details); |
| 335 | 337 |
| 336 QuicChromiumClientStream* stream = | 338 QuicChromiumClientStream* stream = |
| (...skipping 14 matching lines...) Expand all Loading... |
| 351 session_->GetPromisedById(kServerDataStreamId1); | 353 session_->GetPromisedById(kServerDataStreamId1); |
| 352 EXPECT_TRUE(promised); | 354 EXPECT_TRUE(promised); |
| 353 | 355 |
| 354 // Initiate rendezvous. | 356 // Initiate rendezvous. |
| 355 SpdyHeaderBlock client_request = promise_headers.Clone(); | 357 SpdyHeaderBlock client_request = promise_headers.Clone(); |
| 356 PushPromiseDelegate delegate(/*match=*/true); | 358 PushPromiseDelegate delegate(/*match=*/true); |
| 357 promised->HandleClientRequest(client_request, &delegate); | 359 promised->HandleClientRequest(client_request, &delegate); |
| 358 | 360 |
| 359 // Cancel the push before receiving the response to the pushed request. | 361 // Cancel the push before receiving the response to the pushed request. |
| 360 GURL pushed_url("https://www.example.org/pushed.jpg"); | 362 GURL pushed_url("https://www.example.org/pushed.jpg"); |
| 361 session_->CancelPush(pushed_url); | 363 test_push_delegate_.CancelPush(pushed_url); |
| 362 EXPECT_TRUE(session_->GetPromisedByUrl(pushed_url.spec())); | 364 EXPECT_TRUE(session_->GetPromisedByUrl(pushed_url.spec())); |
| 363 | 365 |
| 364 // Reset the stream now before tear down. | 366 // Reset the stream now before tear down. |
| 365 session_->CloseStream(kClientDataStreamId1); | 367 session_->CloseStream(kClientDataStreamId1); |
| 366 } | 368 } |
| 367 | 369 |
| 368 TEST_P(QuicChromiumClientSessionTest, CancelPushBeforeReceivingResponse) { | 370 TEST_P(QuicChromiumClientSessionTest, CancelPushBeforeReceivingResponse) { |
| 369 base::HistogramTester histogram_tester; | 371 base::HistogramTester histogram_tester; |
| 370 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 372 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
| 371 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( | 373 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( |
| 372 1, true, kServerDataStreamId1, QUIC_STREAM_CANCELLED)); | 374 1, true, kServerDataStreamId1, QUIC_STREAM_CANCELLED)); |
| 373 MockWrite writes[] = { | 375 MockWrite writes[] = { |
| 374 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1)}; | 376 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1)}; |
| 375 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, | 377 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, |
| 376 arraysize(writes))); | 378 arraysize(writes))); |
| 377 Initialize(); | 379 Initialize(); |
| 380 session_->set_push_delegate(&test_push_delegate_); |
| 378 | 381 |
| 379 ProofVerifyDetailsChromium details; | 382 ProofVerifyDetailsChromium details; |
| 380 details.cert_verify_result.verified_cert = | 383 details.cert_verify_result.verified_cert = |
| 381 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); | 384 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
| 382 ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); | 385 ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); |
| 383 | 386 |
| 384 CompleteCryptoHandshake(); | 387 CompleteCryptoHandshake(); |
| 385 session_->OnProofVerifyDetailsAvailable(details); | 388 session_->OnProofVerifyDetailsAvailable(details); |
| 386 | 389 |
| 387 QuicChromiumClientStream* stream = | 390 QuicChromiumClientStream* stream = |
| 388 session_->CreateOutgoingDynamicStream(kDefaultPriority); | 391 session_->CreateOutgoingDynamicStream(kDefaultPriority); |
| 389 EXPECT_TRUE(stream); | 392 EXPECT_TRUE(stream); |
| 390 | 393 |
| 391 SpdyHeaderBlock promise_headers; | 394 SpdyHeaderBlock promise_headers; |
| 392 promise_headers[":method"] = "GET"; | 395 promise_headers[":method"] = "GET"; |
| 393 promise_headers[":authority"] = "www.example.org"; | 396 promise_headers[":authority"] = "www.example.org"; |
| 394 promise_headers[":scheme"] = "https"; | 397 promise_headers[":scheme"] = "https"; |
| 395 promise_headers[":path"] = "/pushed.jpg"; | 398 promise_headers[":path"] = "/pushed.jpg"; |
| 396 | 399 |
| 397 // Receive a PUSH PROMISE from the server. | 400 // Receive a PUSH PROMISE from the server. |
| 398 EXPECT_TRUE(session_->HandlePromised(stream->id(), kServerDataStreamId1, | 401 EXPECT_TRUE(session_->HandlePromised(stream->id(), kServerDataStreamId1, |
| 399 promise_headers)); | 402 promise_headers)); |
| 400 | 403 |
| 401 QuicClientPromisedInfo* promised = | 404 QuicClientPromisedInfo* promised = |
| 402 session_->GetPromisedById(kServerDataStreamId1); | 405 session_->GetPromisedById(kServerDataStreamId1); |
| 403 EXPECT_TRUE(promised); | 406 EXPECT_TRUE(promised); |
| 404 // Cancel the push before receiving the response to the pushed request. | 407 // Cancel the push before receiving the response to the pushed request. |
| 405 GURL pushed_url("https://www.example.org/pushed.jpg"); | 408 GURL pushed_url("https://www.example.org/pushed.jpg"); |
| 406 session_->CancelPush(pushed_url); | 409 test_push_delegate_.CancelPush(pushed_url); |
| 407 | 410 |
| 408 EXPECT_FALSE(session_->GetPromisedByUrl(pushed_url.spec())); | 411 EXPECT_FALSE(session_->GetPromisedByUrl(pushed_url.spec())); |
| 409 EXPECT_EQ(0u, | 412 EXPECT_EQ(0u, |
| 410 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get())); | 413 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get())); |
| 411 EXPECT_EQ(0u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount( | 414 EXPECT_EQ(0u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount( |
| 412 session_.get())); | 415 session_.get())); |
| 413 } | 416 } |
| 414 | 417 |
| 415 TEST_P(QuicChromiumClientSessionTest, CancelPushAfterReceivingResponse) { | 418 TEST_P(QuicChromiumClientSessionTest, CancelPushAfterReceivingResponse) { |
| 416 base::HistogramTester histogram_tester; | 419 base::HistogramTester histogram_tester; |
| 417 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 420 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
| 418 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( | 421 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( |
| 419 1, true, kServerDataStreamId1, QUIC_STREAM_CANCELLED)); | 422 1, true, kServerDataStreamId1, QUIC_STREAM_CANCELLED)); |
| 420 MockWrite writes[] = { | 423 MockWrite writes[] = { |
| 421 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1)}; | 424 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1)}; |
| 422 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, | 425 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, |
| 423 arraysize(writes))); | 426 arraysize(writes))); |
| 424 Initialize(); | 427 Initialize(); |
| 428 session_->set_push_delegate(&test_push_delegate_); |
| 425 | 429 |
| 426 ProofVerifyDetailsChromium details; | 430 ProofVerifyDetailsChromium details; |
| 427 details.cert_verify_result.verified_cert = | 431 details.cert_verify_result.verified_cert = |
| 428 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); | 432 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
| 429 ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); | 433 ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); |
| 430 | 434 |
| 431 CompleteCryptoHandshake(); | 435 CompleteCryptoHandshake(); |
| 432 session_->OnProofVerifyDetailsAvailable(details); | 436 session_->OnProofVerifyDetailsAvailable(details); |
| 433 | 437 |
| 434 QuicChromiumClientStream* stream = | 438 QuicChromiumClientStream* stream = |
| (...skipping 13 matching lines...) Expand all Loading... |
| 448 session_->OnInitialHeadersComplete(kServerDataStreamId1, SpdyHeaderBlock()); | 452 session_->OnInitialHeadersComplete(kServerDataStreamId1, SpdyHeaderBlock()); |
| 449 // Read data on the pushed stream. | 453 // Read data on the pushed stream. |
| 450 QuicStreamFrame data(kServerDataStreamId1, false, 0, StringPiece("SP")); | 454 QuicStreamFrame data(kServerDataStreamId1, false, 0, StringPiece("SP")); |
| 451 session_->OnStreamFrame(data); | 455 session_->OnStreamFrame(data); |
| 452 | 456 |
| 453 QuicClientPromisedInfo* promised = | 457 QuicClientPromisedInfo* promised = |
| 454 session_->GetPromisedById(kServerDataStreamId1); | 458 session_->GetPromisedById(kServerDataStreamId1); |
| 455 EXPECT_TRUE(promised); | 459 EXPECT_TRUE(promised); |
| 456 // Cancel the push after receiving data on the push stream. | 460 // Cancel the push after receiving data on the push stream. |
| 457 GURL pushed_url("https://www.example.org/pushed.jpg"); | 461 GURL pushed_url("https://www.example.org/pushed.jpg"); |
| 458 session_->CancelPush(pushed_url); | 462 test_push_delegate_.CancelPush(pushed_url); |
| 459 | 463 |
| 460 EXPECT_FALSE(session_->GetPromisedByUrl(pushed_url.spec())); | 464 EXPECT_FALSE(session_->GetPromisedByUrl(pushed_url.spec())); |
| 461 EXPECT_EQ(2u, | 465 EXPECT_EQ(2u, |
| 462 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get())); | 466 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get())); |
| 463 EXPECT_EQ(2u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount( | 467 EXPECT_EQ(2u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount( |
| 464 session_.get())); | 468 session_.get())); |
| 465 } | 469 } |
| 466 | 470 |
| 467 TEST_P(QuicChromiumClientSessionTest, Priority) { | 471 TEST_P(QuicChromiumClientSessionTest, Priority) { |
| 468 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 472 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
| (...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 807 | 811 |
| 808 EXPECT_TRUE(socket_data_->AllReadDataConsumed()); | 812 EXPECT_TRUE(socket_data_->AllReadDataConsumed()); |
| 809 EXPECT_TRUE(socket_data_->AllWriteDataConsumed()); | 813 EXPECT_TRUE(socket_data_->AllWriteDataConsumed()); |
| 810 EXPECT_TRUE(new_socket_data.AllReadDataConsumed()); | 814 EXPECT_TRUE(new_socket_data.AllReadDataConsumed()); |
| 811 EXPECT_TRUE(new_socket_data.AllWriteDataConsumed()); | 815 EXPECT_TRUE(new_socket_data.AllWriteDataConsumed()); |
| 812 } | 816 } |
| 813 | 817 |
| 814 } // namespace | 818 } // namespace |
| 815 } // namespace test | 819 } // namespace test |
| 816 } // namespace net | 820 } // namespace net |
| OLD | NEW |