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

Unified Diff: net/quic/chromium/quic_chromium_client_session_test.cc

Issue 2456713002: Server push cancellation: add methods in session layer to cancel push given the pushed url. Not in … (Closed)
Patch Set: address rch's comments Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/quic/chromium/quic_chromium_client_session.cc ('k') | net/spdy/spdy_session.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/chromium/quic_chromium_client_session_test.cc
diff --git a/net/quic/chromium/quic_chromium_client_session_test.cc b/net/quic/chromium/quic_chromium_client_session_test.cc
index c6fcf6543c98466f110e5c6d50155124e160115d..b9469249f922ff271da969b653ab1d9d7b878d55 100644
--- a/net/quic/chromium/quic_chromium_client_session_test.cc
+++ b/net/quic/chromium/quic_chromium_client_session_test.cc
@@ -311,6 +311,103 @@ TEST_P(QuicChromiumClientSessionTest, PushStreamTimedOutWithResponse) {
session_.get()));
}
+TEST_P(QuicChromiumClientSessionTest, CancelPushBeforeReceivingResponse) {
+ base::HistogramTester histogram_tester;
+ MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
+ std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket(
+ 1, true, kServerDataStreamId1, QUIC_STREAM_CANCELLED));
+ MockWrite writes[] = {
+ MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1)};
+ socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes,
+ arraysize(writes)));
+ Initialize();
+
+ ProofVerifyDetailsChromium details;
+ details.cert_verify_result.verified_cert =
+ ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem");
+ ASSERT_TRUE(details.cert_verify_result.verified_cert.get());
+
+ CompleteCryptoHandshake();
+ session_->OnProofVerifyDetailsAvailable(details);
+
+ QuicChromiumClientStream* stream =
+ session_->CreateOutgoingDynamicStream(kDefaultPriority);
+ EXPECT_TRUE(stream);
+
+ SpdyHeaderBlock promise_headers;
+ promise_headers[":method"] = "GET";
+ promise_headers[":authority"] = "www.example.org";
+ promise_headers[":scheme"] = "https";
+ promise_headers[":path"] = "/pushed.jpg";
+
+ // Receive a PUSH PROMISE from the server.
+ session_->HandlePromised(stream->id(), kServerDataStreamId1, promise_headers);
+
+ QuicClientPromisedInfo* promised =
+ session_->GetPromisedById(kServerDataStreamId1);
+ EXPECT_TRUE(promised);
+ // Cancel the push before receiving the response to the pushed request.
+ GURL pushed_url("https://www.example.org/pushed.jpg");
+ session_->CancelPush(pushed_url);
+
+ EXPECT_FALSE(session_->GetPromisedByUrl(pushed_url.spec()));
+ EXPECT_EQ(0u,
+ QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get()));
+ EXPECT_EQ(0u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount(
+ session_.get()));
+}
+
+TEST_P(QuicChromiumClientSessionTest, CancelPushAfterReceivingResponse) {
+ base::HistogramTester histogram_tester;
+ MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
+ std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket(
+ 1, true, kServerDataStreamId1, QUIC_STREAM_CANCELLED));
+ MockWrite writes[] = {
+ MockWrite(ASYNC, client_rst->data(), client_rst->length(), 1)};
+ socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes,
+ arraysize(writes)));
+ Initialize();
+
+ ProofVerifyDetailsChromium details;
+ details.cert_verify_result.verified_cert =
+ ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem");
+ ASSERT_TRUE(details.cert_verify_result.verified_cert.get());
+
+ CompleteCryptoHandshake();
+ session_->OnProofVerifyDetailsAvailable(details);
+
+ QuicChromiumClientStream* stream =
+ session_->CreateOutgoingDynamicStream(kDefaultPriority);
+ EXPECT_TRUE(stream);
+
+ SpdyHeaderBlock promise_headers;
+ promise_headers[":method"] = "GET";
+ promise_headers[":authority"] = "www.example.org";
+ promise_headers[":scheme"] = "https";
+ promise_headers[":path"] = "/pushed.jpg";
+
+ session_->GetOrCreateStream(kServerDataStreamId1);
+ // Receive a PUSH PROMISE from the server.
+ session_->HandlePromised(stream->id(), kServerDataStreamId1, promise_headers);
+ session_->OnInitialHeadersComplete(kServerDataStreamId1, SpdyHeaderBlock());
+ // Read data on the pushed stream.
+ QuicStreamFrame data(kServerDataStreamId1, false, 0, StringPiece("SP"));
+ session_->OnStreamFrame(data);
+
+ QuicClientPromisedInfo* promised =
+ session_->GetPromisedById(kServerDataStreamId1);
+ EXPECT_TRUE(promised);
+ // Cancel the push after receiving data on the push stream.
+ GURL pushed_url("https://www.example.org/pushed.jpg");
+ session_->CancelPush(pushed_url);
+
+ EXPECT_FALSE(session_->GetPromisedByUrl(pushed_url.spec()));
+ EXPECT_EQ(2u,
+ QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get()));
+ EXPECT_EQ(2u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount(
+ session_.get()));
+}
+
TEST_P(QuicChromiumClientSessionTest, Priority) {
MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket(
« no previous file with comments | « net/quic/chromium/quic_chromium_client_session.cc ('k') | net/spdy/spdy_session.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698