| 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 | 
|---|