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

Unified Diff: net/spdy/chromium/spdy_network_transaction_unittest.cc

Issue 2943113002: Reset pushed stream unless using GET or HEAD method. (Closed)
Patch Set: Created 3 years, 6 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 | « no previous file | net/spdy/chromium/spdy_session.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/spdy/chromium/spdy_network_transaction_unittest.cc
diff --git a/net/spdy/chromium/spdy_network_transaction_unittest.cc b/net/spdy/chromium/spdy_network_transaction_unittest.cc
index 2575ea51a37a17a365ecc58cb897bbbf16875124..65797647ff07a2edf931a9cf329640f5070ec739 100644
--- a/net/spdy/chromium/spdy_network_transaction_unittest.cc
+++ b/net/spdy/chromium/spdy_network_transaction_unittest.cc
@@ -2239,6 +2239,7 @@ TEST_F(SpdyNetworkTransactionTest,
spdy_util_.ConstructSpdyDataFrame(1, "should not include", 18, true));
SpdyHeaderBlock push_headers;
+ push_headers[":method"] = "GET";
spdy_util_.AddUrlToHeaderBlock(SpdyString(kDefaultUrl) + "b.dat",
&push_headers);
@@ -3147,6 +3148,63 @@ TEST_F(SpdyNetworkTransactionTest, ServerPushOnClosedPushedStream) {
EXPECT_TRUE(data.AllWriteDataConsumed());
}
+// Regression test for https://crbug.com/727653.
+TEST_F(SpdyNetworkTransactionTest, RejectServerPushWithNoMethod) {
+ SpdySerializedFrame req(
+ spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
+ SpdySerializedFrame rst(
+ spdy_util_.ConstructSpdyRstStream(2, ERROR_CODE_REFUSED_STREAM));
+ MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 3)};
+
+ SpdySerializedFrame reply(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1));
+
+ SpdyHeaderBlock push_promise_header_block;
+ spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat").c_str(),
+ &push_promise_header_block);
+ SpdyPushPromiseIR push_promise(1, 2, std::move(push_promise_header_block));
+ SpdySerializedFrame push_promise_frame(
+ spdy_util_.SerializeFrame(push_promise));
+
+ SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true));
+ MockRead reads[] = {
+ CreateMockRead(reply, 1), CreateMockRead(push_promise_frame, 2),
+ CreateMockRead(body, 4), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5)};
+
+ SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
+ NetLogWithSource(), nullptr);
+ helper.RunToCompletion(&data);
+}
+
+// Regression test for https://crbug.com/727653.
+TEST_F(SpdyNetworkTransactionTest, RejectServerPushWithInvalidMethod) {
+ SpdySerializedFrame req(
+ spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
+ SpdySerializedFrame rst(
+ spdy_util_.ConstructSpdyRstStream(2, ERROR_CODE_REFUSED_STREAM));
+ MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 3)};
+
+ SpdySerializedFrame reply(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1));
+
+ SpdyHeaderBlock push_promise_header_block;
+ push_promise_header_block[":method"] = "POST";
+ spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat").c_str(),
+ &push_promise_header_block);
+ SpdyPushPromiseIR push_promise(1, 2, std::move(push_promise_header_block));
+ SpdySerializedFrame push_promise_frame(
+ spdy_util_.SerializeFrame(push_promise));
+
+ SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true));
+ MockRead reads[] = {
+ CreateMockRead(reply, 1), CreateMockRead(push_promise_frame, 2),
+ CreateMockRead(body, 4), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5)};
+
+ SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
+ NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
+ NetLogWithSource(), nullptr);
+ helper.RunToCompletion(&data);
+}
+
// Verify that various response headers parse correctly through the HTTP layer.
TEST_F(SpdyNetworkTransactionTest, ResponseHeaders) {
struct ResponseHeadersTests {
@@ -4689,6 +4747,7 @@ TEST_F(SpdyNetworkTransactionTest, ServerPushWithHeaders) {
spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1));
SpdyHeaderBlock initial_headers;
+ initial_headers[":method"] = "GET";
spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"),
&initial_headers);
SpdySerializedFrame stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame(
@@ -4747,6 +4806,7 @@ TEST_F(SpdyNetworkTransactionTest, ServerPushClaimBeforeHeaders) {
SpdySerializedFrame stream1_reply(
spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1));
SpdyHeaderBlock initial_headers;
+ initial_headers[":method"] = "GET";
spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"),
&initial_headers);
SpdySerializedFrame stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame(
« no previous file with comments | « no previous file | net/spdy/chromium/spdy_session.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698