| Index: net/spdy/spdy_network_transaction_unittest.cc
|
| diff --git a/net/spdy/spdy_network_transaction_unittest.cc b/net/spdy/spdy_network_transaction_unittest.cc
|
| index 56cf0ca9ce5dc7e9c6c6258cdd773b2361e5b22e..0ca6ac06a706726988a4de29072bdeaa44cba606 100644
|
| --- a/net/spdy/spdy_network_transaction_unittest.cc
|
| +++ b/net/spdy/spdy_network_transaction_unittest.cc
|
| @@ -2105,6 +2105,115 @@ TEST_F(SpdyNetworkTransactionTest, DeleteSessionOnReadCallback) {
|
| helper.VerifyDataConsumed();
|
| }
|
|
|
| +TEST_F(SpdyNetworkTransactionTest, TestRawHeaderSizeSuccessfullRequest) {
|
| + SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl));
|
| + headers["user-agent"] = "";
|
| + headers["accept-encoding"] = "gzip, deflate";
|
| +
|
| + SpdySerializedFrame req(
|
| + spdy_util_.ConstructSpdyHeaders(1, std::move(headers), LOWEST, true));
|
| + MockWrite writes[] = {
|
| + CreateMockWrite(req, 0),
|
| + };
|
| +
|
| + SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1));
|
| +
|
| + SpdySerializedFrame response_body_frame(
|
| + spdy_util_.ConstructSpdyDataFrame(1, "should not include", 18, true));
|
| +
|
| + MockRead reads[] = {
|
| + CreateMockRead(resp, 1), CreateMockRead(response_body_frame, 2),
|
| + MockRead(ASYNC, 0, 0, 3) // EOF
|
| + };
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| +
|
| + TestDelegate d;
|
| + SpdyURLRequestContext spdy_url_request_context;
|
| + TestNetworkDelegate network_delegate_;
|
| + spdy_url_request_context.set_network_delegate(&network_delegate_);
|
| + SSLSocketDataProvider ssl_data(ASYNC, OK);
|
| + ssl_data.next_proto = kProtoHTTP2;
|
| +
|
| + std::unique_ptr<URLRequest> r(spdy_url_request_context.CreateRequest(
|
| + GURL(kDefaultUrl), DEFAULT_PRIORITY, &d));
|
| + spdy_url_request_context.socket_factory().AddSSLSocketDataProvider(&ssl_data);
|
| + spdy_url_request_context.socket_factory().AddSocketDataProvider(&data);
|
| +
|
| + r->Start();
|
| + base::RunLoop().Run();
|
| +
|
| + EXPECT_EQ(33, r->GetTotalSentBytes());
|
| + EXPECT_EQ(33, network_delegate_.total_network_bytes_sent());
|
| + EXPECT_EQ(47, r->GetTotalReceivedBytes());
|
| + EXPECT_EQ(20, r->raw_header_size());
|
| + EXPECT_TRUE(data.AllReadDataConsumed());
|
| + EXPECT_TRUE(data.AllWriteDataConsumed());
|
| +}
|
| +
|
| +TEST_F(SpdyNetworkTransactionTest,
|
| + TestRawHeaderSizeSuccessfullPushHeadersFirst) {
|
| + SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl));
|
| + headers["user-agent"] = "";
|
| + headers["accept-encoding"] = "gzip, deflate";
|
| +
|
| + SpdySerializedFrame req(
|
| + spdy_util_.ConstructSpdyHeaders(1, std::move(headers), LOWEST, true));
|
| + MockWrite writes[] = {
|
| + CreateMockWrite(req, 0),
|
| + };
|
| +
|
| + SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1));
|
| + SpdySerializedFrame response_body_frame(
|
| + spdy_util_.ConstructSpdyDataFrame(1, "should not include", 18, true));
|
| +
|
| + SpdyHeaderBlock push_headers;
|
| + spdy_util_.AddUrlToHeaderBlock(std::string(kDefaultUrl) + "b.dat",
|
| + &push_headers);
|
| +
|
| + SpdySerializedFrame push_init_frame(
|
| + spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 2, 1));
|
| +
|
| + SpdySerializedFrame push_headers_frame(
|
| + spdy_util_.ConstructSpdyPushHeaders(2, nullptr, 0));
|
| +
|
| + SpdySerializedFrame push_body_frame(spdy_util_.ConstructSpdyDataFrame(
|
| + 2, "should not include either", 25, false));
|
| + MockRead reads[] = {
|
| + CreateMockRead(push_init_frame, 1),
|
| + CreateMockRead(push_headers_frame, 2),
|
| + CreateMockRead(push_body_frame, 3),
|
| + CreateMockRead(resp, 4),
|
| + CreateMockRead(response_body_frame, 5),
|
| + MockRead(ASYNC, 0, 6) // EOF
|
| + };
|
| +
|
| + SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
|
| +
|
| + TestDelegate d;
|
| + SpdyURLRequestContext spdy_url_request_context;
|
| + TestNetworkDelegate network_delegate_;
|
| + spdy_url_request_context.set_network_delegate(&network_delegate_);
|
| + SSLSocketDataProvider ssl_data(ASYNC, OK);
|
| + ssl_data.next_proto = kProtoHTTP2;
|
| +
|
| + std::unique_ptr<URLRequest> r(spdy_url_request_context.CreateRequest(
|
| + GURL(kDefaultUrl), DEFAULT_PRIORITY, &d));
|
| + spdy_url_request_context.socket_factory().AddSSLSocketDataProvider(&ssl_data);
|
| + spdy_url_request_context.socket_factory().AddSocketDataProvider(&data);
|
| +
|
| + r->Start();
|
| + base::RunLoop().Run();
|
| +
|
| + EXPECT_EQ(33, r->GetTotalSentBytes());
|
| + EXPECT_EQ(33, network_delegate_.total_network_bytes_sent());
|
| + EXPECT_EQ(87, r->GetTotalReceivedBytes());
|
| + // raw_header_size() will contain the size of the push promise frame
|
| + // initialization.
|
| + EXPECT_EQ(60, r->raw_header_size());
|
| + EXPECT_TRUE(data.AllReadDataConsumed());
|
| + EXPECT_TRUE(data.AllWriteDataConsumed());
|
| +}
|
| +
|
| // Send a spdy request to www.example.org that gets redirected to www.foo.com.
|
| TEST_F(SpdyNetworkTransactionTest, DISABLED_RedirectGetRequest) {
|
| SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl));
|
|
|