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 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 session_->GetPromisedById(kServerDataStreamId1); | 304 session_->GetPromisedById(kServerDataStreamId1); |
305 EXPECT_TRUE(promised); | 305 EXPECT_TRUE(promised); |
306 // Fire alarm to time out the push stream. | 306 // Fire alarm to time out the push stream. |
307 alarm_factory_.FireAlarm(QuicClientPromisedInfoPeer::GetAlarm(promised)); | 307 alarm_factory_.FireAlarm(QuicClientPromisedInfoPeer::GetAlarm(promised)); |
308 EXPECT_EQ(2u, | 308 EXPECT_EQ(2u, |
309 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get())); | 309 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get())); |
310 EXPECT_EQ(2u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount( | 310 EXPECT_EQ(2u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount( |
311 session_.get())); | 311 session_.get())); |
312 } | 312 } |
313 | 313 |
| 314 TEST_P(QuicChromiumClientSessionTest, CancelPushBeforeReceivingResponse) { |
| 315 base::HistogramTester histogram_tester; |
| 316 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
| 317 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( |
| 318 1, true, kServerDataStreamId1, QUIC_STREAM_CANCELLED)); |
| 319 MockWrite writes[] = { |
| 320 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1)}; |
| 321 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, |
| 322 arraysize(writes))); |
| 323 Initialize(); |
| 324 |
| 325 ProofVerifyDetailsChromium details; |
| 326 details.cert_verify_result.verified_cert = |
| 327 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
| 328 ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); |
| 329 |
| 330 CompleteCryptoHandshake(); |
| 331 session_->OnProofVerifyDetailsAvailable(details); |
| 332 |
| 333 QuicChromiumClientStream* stream = |
| 334 session_->CreateOutgoingDynamicStream(kDefaultPriority); |
| 335 EXPECT_TRUE(stream); |
| 336 |
| 337 SpdyHeaderBlock promise_headers; |
| 338 promise_headers[":method"] = "GET"; |
| 339 promise_headers[":authority"] = "www.example.org"; |
| 340 promise_headers[":scheme"] = "https"; |
| 341 promise_headers[":path"] = "/pushed.jpg"; |
| 342 |
| 343 // Receive a PUSH PROMISE from the server. |
| 344 session_->HandlePromised(stream->id(), kServerDataStreamId1, promise_headers); |
| 345 |
| 346 QuicClientPromisedInfo* promised = |
| 347 session_->GetPromisedById(kServerDataStreamId1); |
| 348 EXPECT_TRUE(promised); |
| 349 // Cancel the push before receiving the response to the pushed request. |
| 350 GURL pushed_url("https://www.example.org/pushed.jpg"); |
| 351 session_->CancelPush(pushed_url); |
| 352 |
| 353 EXPECT_FALSE(session_->GetPromisedByUrl(pushed_url.spec())); |
| 354 EXPECT_EQ(0u, |
| 355 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get())); |
| 356 EXPECT_EQ(0u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount( |
| 357 session_.get())); |
| 358 } |
| 359 |
| 360 TEST_P(QuicChromiumClientSessionTest, CancelPushAfterReceivingResponse) { |
| 361 base::HistogramTester histogram_tester; |
| 362 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
| 363 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( |
| 364 1, true, kServerDataStreamId1, QUIC_STREAM_CANCELLED)); |
| 365 MockWrite writes[] = { |
| 366 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1)}; |
| 367 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, |
| 368 arraysize(writes))); |
| 369 Initialize(); |
| 370 |
| 371 ProofVerifyDetailsChromium details; |
| 372 details.cert_verify_result.verified_cert = |
| 373 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
| 374 ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); |
| 375 |
| 376 CompleteCryptoHandshake(); |
| 377 session_->OnProofVerifyDetailsAvailable(details); |
| 378 |
| 379 QuicChromiumClientStream* stream = |
| 380 session_->CreateOutgoingDynamicStream(kDefaultPriority); |
| 381 EXPECT_TRUE(stream); |
| 382 |
| 383 SpdyHeaderBlock promise_headers; |
| 384 promise_headers[":method"] = "GET"; |
| 385 promise_headers[":authority"] = "www.example.org"; |
| 386 promise_headers[":scheme"] = "https"; |
| 387 promise_headers[":path"] = "/pushed.jpg"; |
| 388 |
| 389 session_->GetOrCreateStream(kServerDataStreamId1); |
| 390 // Receive a PUSH PROMISE from the server. |
| 391 session_->HandlePromised(stream->id(), kServerDataStreamId1, promise_headers); |
| 392 session_->OnInitialHeadersComplete(kServerDataStreamId1, SpdyHeaderBlock()); |
| 393 // Read data on the pushed stream. |
| 394 QuicStreamFrame data(kServerDataStreamId1, false, 0, StringPiece("SP")); |
| 395 session_->OnStreamFrame(data); |
| 396 |
| 397 QuicClientPromisedInfo* promised = |
| 398 session_->GetPromisedById(kServerDataStreamId1); |
| 399 EXPECT_TRUE(promised); |
| 400 // Cancel the push after receiving data on the push stream. |
| 401 GURL pushed_url("https://www.example.org/pushed.jpg"); |
| 402 session_->CancelPush(pushed_url); |
| 403 |
| 404 EXPECT_FALSE(session_->GetPromisedByUrl(pushed_url.spec())); |
| 405 EXPECT_EQ(2u, |
| 406 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get())); |
| 407 EXPECT_EQ(2u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount( |
| 408 session_.get())); |
| 409 } |
| 410 |
314 TEST_P(QuicChromiumClientSessionTest, Priority) { | 411 TEST_P(QuicChromiumClientSessionTest, Priority) { |
315 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 412 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
316 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( | 413 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( |
317 1, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT)); | 414 1, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT)); |
318 MockWrite writes[] = { | 415 MockWrite writes[] = { |
319 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1)}; | 416 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1)}; |
320 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, | 417 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, |
321 arraysize(writes))); | 418 arraysize(writes))); |
322 | 419 |
323 Initialize(); | 420 Initialize(); |
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
654 | 751 |
655 EXPECT_TRUE(socket_data_->AllReadDataConsumed()); | 752 EXPECT_TRUE(socket_data_->AllReadDataConsumed()); |
656 EXPECT_TRUE(socket_data_->AllWriteDataConsumed()); | 753 EXPECT_TRUE(socket_data_->AllWriteDataConsumed()); |
657 EXPECT_TRUE(new_socket_data.AllReadDataConsumed()); | 754 EXPECT_TRUE(new_socket_data.AllReadDataConsumed()); |
658 EXPECT_TRUE(new_socket_data.AllWriteDataConsumed()); | 755 EXPECT_TRUE(new_socket_data.AllWriteDataConsumed()); |
659 } | 756 } |
660 | 757 |
661 } // namespace | 758 } // namespace |
662 } // namespace test | 759 } // namespace test |
663 } // namespace net | 760 } // namespace net |
OLD | NEW |