Chromium Code Reviews| 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_http_stream.h" | 5 #include "net/quic/chromium/quic_http_stream.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 100 | 100 |
| 101 // Subclass of QuicHttpStream that closes itself when the first piece of data | 101 // Subclass of QuicHttpStream that closes itself when the first piece of data |
| 102 // is received. | 102 // is received. |
| 103 class AutoClosingStream : public QuicHttpStream { | 103 class AutoClosingStream : public QuicHttpStream { |
| 104 public: | 104 public: |
| 105 explicit AutoClosingStream( | 105 explicit AutoClosingStream( |
| 106 std::unique_ptr<QuicChromiumClientSession::Handle> session, | 106 std::unique_ptr<QuicChromiumClientSession::Handle> session, |
| 107 HttpServerProperties* http_server_properties) | 107 HttpServerProperties* http_server_properties) |
| 108 : QuicHttpStream(std::move(session), http_server_properties) {} | 108 : QuicHttpStream(std::move(session), http_server_properties) {} |
| 109 | 109 |
| 110 void OnInitialHeadersAvailable(const SpdyHeaderBlock& headers, | |
| 111 size_t frame_len) override { | |
| 112 Close(false); | |
| 113 } | |
| 114 | |
| 115 void OnTrailingHeadersAvailable(const SpdyHeaderBlock& headers, | 110 void OnTrailingHeadersAvailable(const SpdyHeaderBlock& headers, |
| 116 size_t frame_len) override { | 111 size_t frame_len) override { |
| 117 Close(false); | 112 Close(false); |
| 118 } | 113 } |
| 119 | 114 |
| 120 void OnDataAvailable() override { Close(false); } | 115 void OnDataAvailable() override { Close(false); } |
| 121 }; | 116 }; |
| 122 | 117 |
| 123 // UploadDataStream that always returns errors on data read. | 118 // UploadDataStream that always returns errors on data read. |
| 124 class ReadErrorUploadDataStream : public UploadDataStream { | 119 class ReadErrorUploadDataStream : public UploadDataStream { |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 178 | 173 |
| 179 class QuicHttpStreamPeer { | 174 class QuicHttpStreamPeer { |
| 180 public: | 175 public: |
| 181 static QuicChromiumClientStream::Handle* GetQuicChromiumClientStream( | 176 static QuicChromiumClientStream::Handle* GetQuicChromiumClientStream( |
| 182 QuicHttpStream* stream) { | 177 QuicHttpStream* stream) { |
| 183 return stream->stream_.get(); | 178 return stream->stream_.get(); |
| 184 } | 179 } |
| 185 }; | 180 }; |
| 186 | 181 |
| 187 class QuicHttpStreamTest : public ::testing::TestWithParam<QuicVersion> { | 182 class QuicHttpStreamTest : public ::testing::TestWithParam<QuicVersion> { |
| 183 public: | |
| 184 void CloseStream(QuicHttpStream* stream, int /*rv*/) { stream->Close(false); } | |
| 185 | |
| 188 protected: | 186 protected: |
| 189 static const bool kFin = true; | 187 static const bool kFin = true; |
| 190 static const bool kIncludeVersion = true; | 188 static const bool kIncludeVersion = true; |
| 191 static const bool kIncludeCongestionFeedback = true; | 189 static const bool kIncludeCongestionFeedback = true; |
| 192 | 190 |
| 193 // Holds a packet to be written to the wire, and the IO mode that should | 191 // Holds a packet to be written to the wire, and the IO mode that should |
| 194 // be used by the mock socket when performing the write. | 192 // be used by the mock socket when performing the write. |
| 195 struct PacketToWrite { | 193 struct PacketToWrite { |
| 196 PacketToWrite(IoMode mode, QuicReceivedPacket* packet) | 194 PacketToWrite(IoMode mode, QuicReceivedPacket* packet) |
| 197 : mode(mode), packet(packet) {} | 195 : mode(mode), packet(packet) {} |
| (...skipping 954 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1152 | 1150 |
| 1153 // Ack both packets in the request. | 1151 // Ack both packets in the request. |
| 1154 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 1152 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
| 1155 | 1153 |
| 1156 // Send the response headers (but not the body). | 1154 // Send the response headers (but not the body). |
| 1157 SetResponse("200 OK", string()); | 1155 SetResponse("200 OK", string()); |
| 1158 size_t spdy_response_headers_frame_length; | 1156 size_t spdy_response_headers_frame_length; |
| 1159 ProcessPacket(ConstructResponseHeadersPacket( | 1157 ProcessPacket(ConstructResponseHeadersPacket( |
| 1160 2, !kFin, &spdy_response_headers_frame_length)); | 1158 2, !kFin, &spdy_response_headers_frame_length)); |
| 1161 | 1159 |
| 1162 // The headers have arrived, but they are delivered asynchronously. | 1160 // The headers have already arrived. |
| 1163 EXPECT_THAT(stream_->ReadResponseHeaders(callback_.callback()), | 1161 EXPECT_THAT(stream_->ReadResponseHeaders(callback_.callback()), IsOk()); |
| 1164 IsError(ERR_IO_PENDING)); | |
| 1165 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | |
| 1166 ASSERT_TRUE(response_.headers.get()); | 1162 ASSERT_TRUE(response_.headers.get()); |
| 1167 EXPECT_EQ(200, response_.headers->response_code()); | 1163 EXPECT_EQ(200, response_.headers->response_code()); |
| 1168 EXPECT_TRUE(response_.headers->HasHeaderValue("Content-Type", "text/plain")); | 1164 EXPECT_TRUE(response_.headers->HasHeaderValue("Content-Type", "text/plain")); |
| 1169 | 1165 |
| 1170 // Send the response body. | 1166 // Send the response body. |
| 1171 const char kResponseBody[] = "Hello world!"; | 1167 const char kResponseBody[] = "Hello world!"; |
| 1172 ProcessPacket(ConstructServerDataPacket(3, false, kFin, 0, kResponseBody)); | 1168 ProcessPacket(ConstructServerDataPacket(3, false, kFin, 0, kResponseBody)); |
| 1173 // Since the body has already arrived, this should return immediately. | 1169 // Since the body has already arrived, this should return immediately. |
| 1174 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), | 1170 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), |
| 1175 stream_->ReadResponseBody(read_buffer_.get(), read_buffer_->size(), | 1171 stream_->ReadResponseBody(read_buffer_.get(), read_buffer_->size(), |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1225 | 1221 |
| 1226 // Ack both packets in the request. | 1222 // Ack both packets in the request. |
| 1227 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 1223 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
| 1228 | 1224 |
| 1229 // Send the response headers (but not the body). | 1225 // Send the response headers (but not the body). |
| 1230 SetResponse("200 OK", string()); | 1226 SetResponse("200 OK", string()); |
| 1231 size_t spdy_response_headers_frame_length; | 1227 size_t spdy_response_headers_frame_length; |
| 1232 ProcessPacket(ConstructResponseHeadersPacket( | 1228 ProcessPacket(ConstructResponseHeadersPacket( |
| 1233 2, !kFin, &spdy_response_headers_frame_length)); | 1229 2, !kFin, &spdy_response_headers_frame_length)); |
| 1234 | 1230 |
| 1235 // The headers have arrived, but they are delivered asynchronously | 1231 // The headers have already arrived. |
| 1236 EXPECT_THAT(stream_->ReadResponseHeaders(callback_.callback()), | 1232 EXPECT_THAT(stream_->ReadResponseHeaders(callback_.callback()), IsOk()); |
| 1237 IsError(ERR_IO_PENDING)); | |
| 1238 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | |
| 1239 ASSERT_TRUE(response_.headers.get()); | 1233 ASSERT_TRUE(response_.headers.get()); |
| 1240 EXPECT_EQ(200, response_.headers->response_code()); | 1234 EXPECT_EQ(200, response_.headers->response_code()); |
| 1241 EXPECT_TRUE(response_.headers->HasHeaderValue("Content-Type", "text/plain")); | 1235 EXPECT_TRUE(response_.headers->HasHeaderValue("Content-Type", "text/plain")); |
| 1242 | 1236 |
| 1243 // Send the response body. | 1237 // Send the response body. |
| 1244 const char kResponseBody[] = "Hello world!"; | 1238 const char kResponseBody[] = "Hello world!"; |
| 1245 ProcessPacket(ConstructServerDataPacket( | 1239 ProcessPacket(ConstructServerDataPacket( |
| 1246 3, false, kFin, response_data_.length(), kResponseBody)); | 1240 3, false, kFin, response_data_.length(), kResponseBody)); |
| 1247 | 1241 |
| 1248 // Since the body has already arrived, this should return immediately. | 1242 // Since the body has already arrived, this should return immediately. |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1298 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | 1292 EXPECT_THAT(callback_.WaitForResult(), IsOk()); |
| 1299 | 1293 |
| 1300 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 1294 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
| 1301 | 1295 |
| 1302 // Send the response headers (but not the body). | 1296 // Send the response headers (but not the body). |
| 1303 SetResponse("200 OK", string()); | 1297 SetResponse("200 OK", string()); |
| 1304 size_t spdy_response_headers_frame_length; | 1298 size_t spdy_response_headers_frame_length; |
| 1305 ProcessPacket(ConstructResponseHeadersPacket( | 1299 ProcessPacket(ConstructResponseHeadersPacket( |
| 1306 2, !kFin, &spdy_response_headers_frame_length)); | 1300 2, !kFin, &spdy_response_headers_frame_length)); |
| 1307 | 1301 |
| 1308 // The headers have arrived, but they are delivered asynchronously | 1302 // The headers have already arrived. |
| 1309 EXPECT_THAT(stream_->ReadResponseHeaders(callback_.callback()), | 1303 EXPECT_THAT(stream_->ReadResponseHeaders(callback_.callback()), IsOk()); |
| 1310 IsError(ERR_IO_PENDING)); | |
| 1311 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | |
| 1312 ASSERT_TRUE(response_.headers.get()); | 1304 ASSERT_TRUE(response_.headers.get()); |
| 1313 EXPECT_EQ(200, response_.headers->response_code()); | 1305 EXPECT_EQ(200, response_.headers->response_code()); |
| 1314 EXPECT_TRUE(response_.headers->HasHeaderValue("Content-Type", "text/plain")); | 1306 EXPECT_TRUE(response_.headers->HasHeaderValue("Content-Type", "text/plain")); |
| 1315 | 1307 |
| 1316 // Send the response body. | 1308 // Send the response body. |
| 1317 const char kResponseBody[] = "Hello world!"; | 1309 const char kResponseBody[] = "Hello world!"; |
| 1318 ProcessPacket(ConstructServerDataPacket( | 1310 ProcessPacket(ConstructServerDataPacket( |
| 1319 3, false, kFin, response_data_.length(), kResponseBody)); | 1311 3, false, kFin, response_data_.length(), kResponseBody)); |
| 1320 | 1312 |
| 1321 // The body has arrived, but it is delivered asynchronously | 1313 // The body has arrived, but it is delivered asynchronously |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1366 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | 1358 EXPECT_THAT(callback_.WaitForResult(), IsOk()); |
| 1367 | 1359 |
| 1368 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 1360 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
| 1369 | 1361 |
| 1370 // Send the response headers (but not the body). | 1362 // Send the response headers (but not the body). |
| 1371 SetResponse("200 OK", string()); | 1363 SetResponse("200 OK", string()); |
| 1372 size_t spdy_response_headers_frame_length; | 1364 size_t spdy_response_headers_frame_length; |
| 1373 ProcessPacket(ConstructResponseHeadersPacket( | 1365 ProcessPacket(ConstructResponseHeadersPacket( |
| 1374 2, !kFin, &spdy_response_headers_frame_length)); | 1366 2, !kFin, &spdy_response_headers_frame_length)); |
| 1375 | 1367 |
| 1376 // The headers have arrived, but they are delivered asynchronously | 1368 // The headers have already arrived. |
| 1377 EXPECT_THAT(stream_->ReadResponseHeaders(callback_.callback()), | 1369 EXPECT_THAT(stream_->ReadResponseHeaders(callback_.callback()), IsOk()); |
| 1378 IsError(ERR_IO_PENDING)); | |
| 1379 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | |
| 1380 ASSERT_TRUE(response_.headers.get()); | 1370 ASSERT_TRUE(response_.headers.get()); |
| 1381 EXPECT_EQ(200, response_.headers->response_code()); | 1371 EXPECT_EQ(200, response_.headers->response_code()); |
| 1382 EXPECT_TRUE(response_.headers->HasHeaderValue("Content-Type", "text/plain")); | 1372 EXPECT_TRUE(response_.headers->HasHeaderValue("Content-Type", "text/plain")); |
| 1383 | 1373 |
| 1384 // Send the response body. | 1374 // Send the response body. |
| 1385 const char kResponseBody[] = "Hello world!"; | 1375 const char kResponseBody[] = "Hello world!"; |
| 1386 ProcessPacket(ConstructServerDataPacket( | 1376 ProcessPacket(ConstructServerDataPacket( |
| 1387 3, false, kFin, response_data_.length(), kResponseBody)); | 1377 3, false, kFin, response_data_.length(), kResponseBody)); |
| 1388 | 1378 |
| 1389 // The body has arrived, but it is delivered asynchronously | 1379 // The body has arrived, but it is delivered asynchronously |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 1420 request_.url = GURL("https://www.example.org/"); | 1410 request_.url = GURL("https://www.example.org/"); |
| 1421 | 1411 |
| 1422 EXPECT_EQ(OK, | 1412 EXPECT_EQ(OK, |
| 1423 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 1413 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
| 1424 net_log_.bound(), callback_.callback())); | 1414 net_log_.bound(), callback_.callback())); |
| 1425 EXPECT_EQ(OK, | 1415 EXPECT_EQ(OK, |
| 1426 stream_->SendRequest(headers_, &response_, callback_.callback())); | 1416 stream_->SendRequest(headers_, &response_, callback_.callback())); |
| 1427 | 1417 |
| 1428 // Ack the request. | 1418 // Ack the request. |
| 1429 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 1419 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
| 1430 EXPECT_THAT(stream_->ReadResponseHeaders(callback_.callback()), | 1420 EXPECT_THAT(stream_->ReadResponseHeaders( |
| 1421 base::Bind(&QuicHttpStreamTest::CloseStream, | |
| 1422 base::Unretained(this), stream_.get())), | |
| 1431 IsError(ERR_IO_PENDING)); | 1423 IsError(ERR_IO_PENDING)); |
| 1432 | 1424 |
| 1433 // Send the response with a body. | 1425 // Send the response with a body. |
| 1434 SetResponse("404 OK", "hello world!"); | 1426 SetResponse("404 OK", "hello world!"); |
| 1435 // In the course of processing this packet, the QuicHttpStream close itself. | 1427 // In the course of processing this packet, the QuicHttpStream close itself. |
|
xunjieli
2017/05/10 18:58:08
This test is no longer testing what it claims to d
Ryan Hamilton
2017/05/10 19:33:46
The test says that the QuicHttpStream will be clos
xunjieli
2017/05/10 19:46:58
Acknowledged. The comment that confused me is line
Ryan Hamilton
2017/05/10 19:57:55
Ah good point. Yeah, that's confusing. Done.
| |
| 1436 ProcessPacket(ConstructResponseHeadersPacket(2, kFin, nullptr)); | 1428 ProcessPacket(ConstructResponseHeadersPacket(2, kFin, nullptr)); |
| 1437 | 1429 |
| 1438 base::RunLoop().RunUntilIdle(); | 1430 base::RunLoop().RunUntilIdle(); |
| 1439 | 1431 |
| 1440 EXPECT_TRUE(AtEof()); | 1432 EXPECT_TRUE(AtEof()); |
| 1441 | 1433 |
| 1442 // QuicHttpStream::GetTotalSent/ReceivedBytes currently only includes the | 1434 // QuicHttpStream::GetTotalSent/ReceivedBytes currently only includes the |
| 1443 // headers and payload. | 1435 // headers and payload. |
| 1444 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), | 1436 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), |
| 1445 stream_->GetTotalSentBytes()); | 1437 stream_->GetTotalSentBytes()); |
| 1446 // Zero since the stream is closed before processing the headers. | 1438 // Zero since the stream is closed before processing the headers. |
| 1447 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); | 1439 EXPECT_EQ(31, stream_->GetTotalReceivedBytes()); |
| 1448 } | 1440 } |
| 1449 | 1441 |
| 1450 TEST_P(QuicHttpStreamTest, Priority) { | 1442 TEST_P(QuicHttpStreamTest, Priority) { |
| 1451 SetRequest("GET", "/", MEDIUM); | 1443 SetRequest("GET", "/", MEDIUM); |
| 1452 size_t spdy_request_headers_frame_length; | 1444 size_t spdy_request_headers_frame_length; |
| 1453 QuicStreamOffset header_stream_offset = 0; | 1445 QuicStreamOffset header_stream_offset = 0; |
| 1454 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 1446 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
| 1455 AddWrite(InnerConstructRequestHeadersPacket( | 1447 AddWrite(InnerConstructRequestHeadersPacket( |
| 1456 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, kFin, MEDIUM, | 1448 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, kFin, MEDIUM, |
| 1457 &spdy_request_headers_frame_length, &header_stream_offset)); | 1449 &spdy_request_headers_frame_length, &header_stream_offset)); |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 1473 | 1465 |
| 1474 EXPECT_EQ(OK, | 1466 EXPECT_EQ(OK, |
| 1475 stream_->SendRequest(headers_, &response_, callback_.callback())); | 1467 stream_->SendRequest(headers_, &response_, callback_.callback())); |
| 1476 | 1468 |
| 1477 // Check that priority has now dropped back to MEDIUM. | 1469 // Check that priority has now dropped back to MEDIUM. |
| 1478 DCHECK_EQ(MEDIUM, | 1470 DCHECK_EQ(MEDIUM, |
| 1479 ConvertQuicPriorityToRequestPriority(reliable_stream->priority())); | 1471 ConvertQuicPriorityToRequestPriority(reliable_stream->priority())); |
| 1480 | 1472 |
| 1481 // Ack the request. | 1473 // Ack the request. |
| 1482 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 1474 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
| 1483 EXPECT_THAT(stream_->ReadResponseHeaders(callback_.callback()), | 1475 EXPECT_THAT(stream_->ReadResponseHeaders( |
| 1476 base::Bind(&QuicHttpStreamTest::CloseStream, | |
|
xunjieli
2017/05/10 18:58:08
This test doesn't need the CloseStream/"Close earl
Ryan Hamilton
2017/05/10 19:33:46
Actually the test does rely on the stream closing
| |
| 1477 base::Unretained(this), stream_.get())), | |
| 1484 IsError(ERR_IO_PENDING)); | 1478 IsError(ERR_IO_PENDING)); |
| 1485 | 1479 |
| 1486 // Send the response with a body. | 1480 // Send the response with a body. |
| 1487 SetResponse("404 OK", "hello world!"); | 1481 SetResponse("404 OK", "hello world!"); |
| 1488 // In the course of processing this packet, the QuicHttpStream close itself. | 1482 // In the course of processing this packet, the QuicHttpStream close itself. |
| 1489 ProcessPacket(ConstructResponseHeadersPacket(2, kFin, nullptr)); | 1483 ProcessPacket(ConstructResponseHeadersPacket(2, kFin, nullptr)); |
| 1490 | 1484 |
| 1491 base::RunLoop().RunUntilIdle(); | 1485 base::RunLoop().RunUntilIdle(); |
| 1492 | 1486 |
| 1493 EXPECT_TRUE(AtEof()); | 1487 EXPECT_TRUE(AtEof()); |
| 1494 | 1488 |
| 1495 // QuicHttpStream::GetTotalSent/ReceivedBytes currently only includes the | 1489 // QuicHttpStream::GetTotalSent/ReceivedBytes currently only includes the |
| 1496 // headers and payload. | 1490 // headers and payload. |
| 1497 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), | 1491 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), |
| 1498 stream_->GetTotalSentBytes()); | 1492 stream_->GetTotalSentBytes()); |
| 1499 // Zero since the stream is closed before processing the headers. | 1493 // Zero since the stream is closed before processing the headers. |
|
xunjieli
2017/05/10 18:58:08
The comment is no longer accurate. Could you updat
Ryan Hamilton
2017/05/10 19:33:46
Done.
| |
| 1500 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); | 1494 EXPECT_EQ(31, stream_->GetTotalReceivedBytes()); |
|
xunjieli
2017/05/10 18:58:08
Can we get "31" from ConstructResponseHeadersPacke
Ryan Hamilton
2017/05/10 19:33:46
Done.
| |
| 1501 } | 1495 } |
| 1502 | 1496 |
| 1503 // Regression test for http://crbug.com/294870 | 1497 // Regression test for http://crbug.com/294870 |
| 1504 TEST_P(QuicHttpStreamTest, CheckPriorityWithNoDelegate) { | 1498 TEST_P(QuicHttpStreamTest, CheckPriorityWithNoDelegate) { |
| 1505 SetRequest("GET", "/", MEDIUM); | 1499 SetRequest("GET", "/", MEDIUM); |
| 1506 use_closing_stream_ = true; | 1500 use_closing_stream_ = true; |
| 1507 QuicStreamOffset header_stream_offset = 0; | 1501 QuicStreamOffset header_stream_offset = 0; |
| 1508 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 1502 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
| 1509 AddWrite(ConstructClientRstStreamPacket(2)); | 1503 AddWrite(ConstructClientRstStreamPacket(2)); |
| 1510 | 1504 |
| (...skipping 660 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2171 EXPECT_TRUE(AtEof()); | 2165 EXPECT_TRUE(AtEof()); |
| 2172 | 2166 |
| 2173 // QuicHttpStream::GetTotalSent/ReceivedBytes includes only headers. | 2167 // QuicHttpStream::GetTotalSent/ReceivedBytes includes only headers. |
| 2174 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), | 2168 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), |
| 2175 stream_->GetTotalSentBytes()); | 2169 stream_->GetTotalSentBytes()); |
| 2176 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); | 2170 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); |
| 2177 } | 2171 } |
| 2178 | 2172 |
| 2179 } // namespace test | 2173 } // namespace test |
| 2180 } // namespace net | 2174 } // namespace net |
| OLD | NEW |