| 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 549 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 560 BoundTestNetLog net_log_; | 560 BoundTestNetLog net_log_; |
| 561 bool use_closing_stream_; | 561 bool use_closing_stream_; |
| 562 MockSendAlgorithm* send_algorithm_; | 562 MockSendAlgorithm* send_algorithm_; |
| 563 scoped_refptr<TestTaskRunner> runner_; | 563 scoped_refptr<TestTaskRunner> runner_; |
| 564 std::unique_ptr<MockWrite[]> mock_writes_; | 564 std::unique_ptr<MockWrite[]> mock_writes_; |
| 565 MockClock clock_; | 565 MockClock clock_; |
| 566 TestQuicConnection* connection_; | 566 TestQuicConnection* connection_; |
| 567 std::unique_ptr<QuicChromiumConnectionHelper> helper_; | 567 std::unique_ptr<QuicChromiumConnectionHelper> helper_; |
| 568 std::unique_ptr<QuicChromiumAlarmFactory> alarm_factory_; | 568 std::unique_ptr<QuicChromiumAlarmFactory> alarm_factory_; |
| 569 testing::StrictMock<MockQuicConnectionVisitor> visitor_; | 569 testing::StrictMock<MockQuicConnectionVisitor> visitor_; |
| 570 std::unique_ptr<UploadDataStream> upload_data_stream_; |
| 570 std::unique_ptr<QuicHttpStream> stream_; | 571 std::unique_ptr<QuicHttpStream> stream_; |
| 571 TransportSecurityState transport_security_state_; | 572 TransportSecurityState transport_security_state_; |
| 572 std::unique_ptr<QuicChromiumClientSession> session_; | 573 std::unique_ptr<QuicChromiumClientSession> session_; |
| 573 QuicCryptoClientConfig crypto_config_; | 574 QuicCryptoClientConfig crypto_config_; |
| 574 TestCompletionCallback callback_; | 575 TestCompletionCallback callback_; |
| 575 HttpRequestInfo request_; | 576 HttpRequestInfo request_; |
| 576 HttpRequestHeaders headers_; | 577 HttpRequestHeaders headers_; |
| 577 HttpResponseInfo response_; | 578 HttpResponseInfo response_; |
| 578 scoped_refptr<IOBufferWithSize> read_buffer_; | 579 scoped_refptr<IOBufferWithSize> read_buffer_; |
| 579 SpdyHeaderBlock request_headers_; | 580 SpdyHeaderBlock request_headers_; |
| (...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1122 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, | 1123 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, |
| 1123 &header_stream_offset)); | 1124 &header_stream_offset)); |
| 1124 AddWrite(ConstructClientDataPacket(3, kIncludeVersion, kFin, 0, kUploadData)); | 1125 AddWrite(ConstructClientDataPacket(3, kIncludeVersion, kFin, 0, kUploadData)); |
| 1125 AddWrite(ConstructClientAckPacket(4, 3, 1, 1)); | 1126 AddWrite(ConstructClientAckPacket(4, 3, 1, 1)); |
| 1126 | 1127 |
| 1127 Initialize(); | 1128 Initialize(); |
| 1128 | 1129 |
| 1129 std::vector<std::unique_ptr<UploadElementReader>> element_readers; | 1130 std::vector<std::unique_ptr<UploadElementReader>> element_readers; |
| 1130 element_readers.push_back(base::MakeUnique<UploadBytesElementReader>( | 1131 element_readers.push_back(base::MakeUnique<UploadBytesElementReader>( |
| 1131 kUploadData, strlen(kUploadData))); | 1132 kUploadData, strlen(kUploadData))); |
| 1132 ElementsUploadDataStream upload_data_stream(std::move(element_readers), 0); | 1133 upload_data_stream_ = |
| 1134 base::MakeUnique<ElementsUploadDataStream>(std::move(element_readers), 0); |
| 1133 request_.method = "POST"; | 1135 request_.method = "POST"; |
| 1134 request_.url = GURL("https://www.example.org/"); | 1136 request_.url = GURL("https://www.example.org/"); |
| 1135 request_.upload_data_stream = &upload_data_stream; | 1137 request_.upload_data_stream = upload_data_stream_.get(); |
| 1136 ASSERT_THAT(request_.upload_data_stream->Init(CompletionCallback(), | 1138 ASSERT_THAT(request_.upload_data_stream->Init(CompletionCallback(), |
| 1137 NetLogWithSource()), | 1139 NetLogWithSource()), |
| 1138 IsOk()); | 1140 IsOk()); |
| 1139 | 1141 |
| 1140 EXPECT_EQ(OK, | 1142 EXPECT_EQ(OK, |
| 1141 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 1143 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
| 1142 net_log_.bound(), callback_.callback())); | 1144 net_log_.bound(), callback_.callback())); |
| 1143 EXPECT_EQ(OK, | 1145 EXPECT_EQ(OK, |
| 1144 stream_->SendRequest(headers_, &response_, callback_.callback())); | 1146 stream_->SendRequest(headers_, &response_, callback_.callback())); |
| 1145 | 1147 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1191 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, | 1193 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, |
| 1192 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, | 1194 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, |
| 1193 &header_stream_offset)); | 1195 &header_stream_offset)); |
| 1194 AddWrite( | 1196 AddWrite( |
| 1195 ConstructClientDataPacket(3, kIncludeVersion, !kFin, 0, kUploadData)); | 1197 ConstructClientDataPacket(3, kIncludeVersion, !kFin, 0, kUploadData)); |
| 1196 AddWrite(ConstructClientDataPacket(4, kIncludeVersion, kFin, chunk_size, | 1198 AddWrite(ConstructClientDataPacket(4, kIncludeVersion, kFin, chunk_size, |
| 1197 kUploadData)); | 1199 kUploadData)); |
| 1198 AddWrite(ConstructClientAckPacket(5, 3, 1, 1)); | 1200 AddWrite(ConstructClientAckPacket(5, 3, 1, 1)); |
| 1199 Initialize(); | 1201 Initialize(); |
| 1200 | 1202 |
| 1201 ChunkedUploadDataStream upload_data_stream(0); | 1203 upload_data_stream_ = base::MakeUnique<ChunkedUploadDataStream>(0); |
| 1202 upload_data_stream.AppendData(kUploadData, chunk_size, false); | 1204 auto* chunked_upload_stream = |
| 1205 static_cast<ChunkedUploadDataStream*>(upload_data_stream_.get()); |
| 1206 chunked_upload_stream->AppendData(kUploadData, chunk_size, false); |
| 1203 | 1207 |
| 1204 request_.method = "POST"; | 1208 request_.method = "POST"; |
| 1205 request_.url = GURL("https://www.example.org/"); | 1209 request_.url = GURL("https://www.example.org/"); |
| 1206 request_.upload_data_stream = &upload_data_stream; | 1210 request_.upload_data_stream = upload_data_stream_.get(); |
| 1207 ASSERT_EQ(OK, request_.upload_data_stream->Init( | 1211 ASSERT_EQ(OK, request_.upload_data_stream->Init( |
| 1208 TestCompletionCallback().callback(), NetLogWithSource())); | 1212 TestCompletionCallback().callback(), NetLogWithSource())); |
| 1209 | 1213 |
| 1210 ASSERT_EQ(OK, | 1214 ASSERT_EQ(OK, |
| 1211 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 1215 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
| 1212 net_log_.bound(), callback_.callback())); | 1216 net_log_.bound(), callback_.callback())); |
| 1213 ASSERT_EQ(ERR_IO_PENDING, | 1217 ASSERT_EQ(ERR_IO_PENDING, |
| 1214 stream_->SendRequest(headers_, &response_, callback_.callback())); | 1218 stream_->SendRequest(headers_, &response_, callback_.callback())); |
| 1215 | 1219 |
| 1216 upload_data_stream.AppendData(kUploadData, chunk_size, true); | 1220 chunked_upload_stream->AppendData(kUploadData, chunk_size, true); |
| 1217 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | 1221 EXPECT_THAT(callback_.WaitForResult(), IsOk()); |
| 1218 | 1222 |
| 1219 // Ack both packets in the request. | 1223 // Ack both packets in the request. |
| 1220 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 1224 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
| 1221 | 1225 |
| 1222 // Send the response headers (but not the body). | 1226 // Send the response headers (but not the body). |
| 1223 SetResponse("200 OK", string()); | 1227 SetResponse("200 OK", string()); |
| 1224 size_t spdy_response_headers_frame_length; | 1228 size_t spdy_response_headers_frame_length; |
| 1225 ProcessPacket(ConstructResponseHeadersPacket( | 1229 ProcessPacket(ConstructResponseHeadersPacket( |
| 1226 2, !kFin, &spdy_response_headers_frame_length)); | 1230 2, !kFin, &spdy_response_headers_frame_length)); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1265 AddWrite(InnerConstructRequestHeadersPacket( | 1269 AddWrite(InnerConstructRequestHeadersPacket( |
| 1266 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, | 1270 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, |
| 1267 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, | 1271 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, |
| 1268 &header_stream_offset)); | 1272 &header_stream_offset)); |
| 1269 AddWrite( | 1273 AddWrite( |
| 1270 ConstructClientDataPacket(3, kIncludeVersion, !kFin, 0, kUploadData)); | 1274 ConstructClientDataPacket(3, kIncludeVersion, !kFin, 0, kUploadData)); |
| 1271 AddWrite(ConstructClientDataPacket(4, kIncludeVersion, kFin, chunk_size, "")); | 1275 AddWrite(ConstructClientDataPacket(4, kIncludeVersion, kFin, chunk_size, "")); |
| 1272 AddWrite(ConstructClientAckPacket(5, 3, 1, 1)); | 1276 AddWrite(ConstructClientAckPacket(5, 3, 1, 1)); |
| 1273 Initialize(); | 1277 Initialize(); |
| 1274 | 1278 |
| 1275 ChunkedUploadDataStream upload_data_stream(0); | 1279 upload_data_stream_ = base::MakeUnique<ChunkedUploadDataStream>(0); |
| 1276 upload_data_stream.AppendData(kUploadData, chunk_size, false); | 1280 auto* chunked_upload_stream = |
| 1281 static_cast<ChunkedUploadDataStream*>(upload_data_stream_.get()); |
| 1282 chunked_upload_stream->AppendData(kUploadData, chunk_size, false); |
| 1277 | 1283 |
| 1278 request_.method = "POST"; | 1284 request_.method = "POST"; |
| 1279 request_.url = GURL("https://www.example.org/"); | 1285 request_.url = GURL("https://www.example.org/"); |
| 1280 request_.upload_data_stream = &upload_data_stream; | 1286 request_.upload_data_stream = upload_data_stream_.get(); |
| 1281 ASSERT_EQ(OK, request_.upload_data_stream->Init( | 1287 ASSERT_EQ(OK, request_.upload_data_stream->Init( |
| 1282 TestCompletionCallback().callback(), NetLogWithSource())); | 1288 TestCompletionCallback().callback(), NetLogWithSource())); |
| 1283 | 1289 |
| 1284 ASSERT_EQ(OK, | 1290 ASSERT_EQ(OK, |
| 1285 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 1291 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
| 1286 net_log_.bound(), callback_.callback())); | 1292 net_log_.bound(), callback_.callback())); |
| 1287 ASSERT_EQ(ERR_IO_PENDING, | 1293 ASSERT_EQ(ERR_IO_PENDING, |
| 1288 stream_->SendRequest(headers_, &response_, callback_.callback())); | 1294 stream_->SendRequest(headers_, &response_, callback_.callback())); |
| 1289 | 1295 |
| 1290 upload_data_stream.AppendData(nullptr, 0, true); | 1296 chunked_upload_stream->AppendData(nullptr, 0, true); |
| 1291 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | 1297 EXPECT_THAT(callback_.WaitForResult(), IsOk()); |
| 1292 | 1298 |
| 1293 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 1299 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
| 1294 | 1300 |
| 1295 // Send the response headers (but not the body). | 1301 // Send the response headers (but not the body). |
| 1296 SetResponse("200 OK", string()); | 1302 SetResponse("200 OK", string()); |
| 1297 size_t spdy_response_headers_frame_length; | 1303 size_t spdy_response_headers_frame_length; |
| 1298 ProcessPacket(ConstructResponseHeadersPacket( | 1304 ProcessPacket(ConstructResponseHeadersPacket( |
| 1299 2, !kFin, &spdy_response_headers_frame_length)); | 1305 2, !kFin, &spdy_response_headers_frame_length)); |
| 1300 | 1306 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1334 QuicStreamOffset header_stream_offset = 0; | 1340 QuicStreamOffset header_stream_offset = 0; |
| 1335 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 1341 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
| 1336 AddWrite(InnerConstructRequestHeadersPacket( | 1342 AddWrite(InnerConstructRequestHeadersPacket( |
| 1337 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, | 1343 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, |
| 1338 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, | 1344 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, |
| 1339 &header_stream_offset)); | 1345 &header_stream_offset)); |
| 1340 AddWrite(ConstructClientDataPacket(3, kIncludeVersion, kFin, 0, "")); | 1346 AddWrite(ConstructClientDataPacket(3, kIncludeVersion, kFin, 0, "")); |
| 1341 AddWrite(ConstructClientAckPacket(4, 3, 1, 1)); | 1347 AddWrite(ConstructClientAckPacket(4, 3, 1, 1)); |
| 1342 Initialize(); | 1348 Initialize(); |
| 1343 | 1349 |
| 1344 ChunkedUploadDataStream upload_data_stream(0); | 1350 upload_data_stream_ = base::MakeUnique<ChunkedUploadDataStream>(0); |
| 1351 auto* chunked_upload_stream = |
| 1352 static_cast<ChunkedUploadDataStream*>(upload_data_stream_.get()); |
| 1345 | 1353 |
| 1346 request_.method = "POST"; | 1354 request_.method = "POST"; |
| 1347 request_.url = GURL("https://www.example.org/"); | 1355 request_.url = GURL("https://www.example.org/"); |
| 1348 request_.upload_data_stream = &upload_data_stream; | 1356 request_.upload_data_stream = upload_data_stream_.get(); |
| 1349 ASSERT_EQ(OK, request_.upload_data_stream->Init( | 1357 ASSERT_EQ(OK, request_.upload_data_stream->Init( |
| 1350 TestCompletionCallback().callback(), NetLogWithSource())); | 1358 TestCompletionCallback().callback(), NetLogWithSource())); |
| 1351 | 1359 |
| 1352 ASSERT_EQ(OK, | 1360 ASSERT_EQ(OK, |
| 1353 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 1361 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
| 1354 net_log_.bound(), callback_.callback())); | 1362 net_log_.bound(), callback_.callback())); |
| 1355 ASSERT_EQ(ERR_IO_PENDING, | 1363 ASSERT_EQ(ERR_IO_PENDING, |
| 1356 stream_->SendRequest(headers_, &response_, callback_.callback())); | 1364 stream_->SendRequest(headers_, &response_, callback_.callback())); |
| 1357 | 1365 |
| 1358 upload_data_stream.AppendData(nullptr, 0, true); | 1366 chunked_upload_stream->AppendData(nullptr, 0, true); |
| 1359 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | 1367 EXPECT_THAT(callback_.WaitForResult(), IsOk()); |
| 1360 | 1368 |
| 1361 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 1369 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
| 1362 | 1370 |
| 1363 // Send the response headers (but not the body). | 1371 // Send the response headers (but not the body). |
| 1364 SetResponse("200 OK", string()); | 1372 SetResponse("200 OK", string()); |
| 1365 size_t spdy_response_headers_frame_length; | 1373 size_t spdy_response_headers_frame_length; |
| 1366 ProcessPacket(ConstructResponseHeadersPacket( | 1374 ProcessPacket(ConstructResponseHeadersPacket( |
| 1367 2, !kFin, &spdy_response_headers_frame_length)); | 1375 2, !kFin, &spdy_response_headers_frame_length)); |
| 1368 | 1376 |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1535 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, | 1543 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, |
| 1536 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, | 1544 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, |
| 1537 &header_stream_offset)); | 1545 &header_stream_offset)); |
| 1538 AddWrite( | 1546 AddWrite( |
| 1539 ConstructClientDataPacket(3, kIncludeVersion, !kFin, 0, kUploadData)); | 1547 ConstructClientDataPacket(3, kIncludeVersion, !kFin, 0, kUploadData)); |
| 1540 // Second data write will result in a synchronous failure which will close | 1548 // Second data write will result in a synchronous failure which will close |
| 1541 // the session. | 1549 // the session. |
| 1542 AddWrite(SYNCHRONOUS, ERR_FAILED); | 1550 AddWrite(SYNCHRONOUS, ERR_FAILED); |
| 1543 Initialize(); | 1551 Initialize(); |
| 1544 | 1552 |
| 1545 ChunkedUploadDataStream upload_data_stream(0); | 1553 upload_data_stream_ = base::MakeUnique<ChunkedUploadDataStream>(0); |
| 1554 auto* chunked_upload_stream = |
| 1555 static_cast<ChunkedUploadDataStream*>(upload_data_stream_.get()); |
| 1546 | 1556 |
| 1547 request_.method = "POST"; | 1557 request_.method = "POST"; |
| 1548 request_.url = GURL("https://www.example.org/"); | 1558 request_.url = GURL("https://www.example.org/"); |
| 1549 request_.upload_data_stream = &upload_data_stream; | 1559 request_.upload_data_stream = upload_data_stream_.get(); |
| 1550 ASSERT_EQ(OK, request_.upload_data_stream->Init( | 1560 ASSERT_EQ(OK, request_.upload_data_stream->Init( |
| 1551 TestCompletionCallback().callback(), NetLogWithSource())); | 1561 TestCompletionCallback().callback(), NetLogWithSource())); |
| 1552 | 1562 |
| 1553 size_t chunk_size = strlen(kUploadData); | 1563 size_t chunk_size = strlen(kUploadData); |
| 1554 upload_data_stream.AppendData(kUploadData, chunk_size, false); | 1564 chunked_upload_stream->AppendData(kUploadData, chunk_size, false); |
| 1555 ASSERT_EQ(OK, | 1565 ASSERT_EQ(OK, |
| 1556 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 1566 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
| 1557 net_log_.bound(), callback_.callback())); | 1567 net_log_.bound(), callback_.callback())); |
| 1558 QuicHttpStream* stream = stream_.get(); | 1568 QuicHttpStream* stream = stream_.get(); |
| 1559 DeleteStreamCallback delete_stream_callback(std::move(stream_)); | 1569 DeleteStreamCallback delete_stream_callback(std::move(stream_)); |
| 1560 // SendRequest() completes asynchronously after the final chunk is added. | 1570 // SendRequest() completes asynchronously after the final chunk is added. |
| 1561 ASSERT_EQ(ERR_IO_PENDING, | 1571 ASSERT_EQ(ERR_IO_PENDING, |
| 1562 stream->SendRequest(headers_, &response_, callback_.callback())); | 1572 stream->SendRequest(headers_, &response_, callback_.callback())); |
| 1563 upload_data_stream.AppendData(kUploadData, chunk_size, true); | 1573 chunked_upload_stream->AppendData(kUploadData, chunk_size, true); |
| 1564 int rv = callback_.WaitForResult(); | 1574 int rv = callback_.WaitForResult(); |
| 1565 EXPECT_EQ(ERR_QUIC_PROTOCOL_ERROR, rv); | 1575 EXPECT_EQ(ERR_QUIC_PROTOCOL_ERROR, rv); |
| 1566 } | 1576 } |
| 1567 | 1577 |
| 1568 TEST_P(QuicHttpStreamTest, SessionClosedBeforeSendHeadersComplete) { | 1578 TEST_P(QuicHttpStreamTest, SessionClosedBeforeSendHeadersComplete) { |
| 1569 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1579 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| 1570 QuicStreamOffset header_stream_offset = 0; | 1580 QuicStreamOffset header_stream_offset = 0; |
| 1571 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 1581 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
| 1572 AddWrite(SYNCHRONOUS, ERR_FAILED); | 1582 AddWrite(SYNCHRONOUS, ERR_FAILED); |
| 1573 Initialize(); | 1583 Initialize(); |
| 1574 | 1584 |
| 1575 ChunkedUploadDataStream upload_data_stream(0); | 1585 upload_data_stream_ = base::MakeUnique<ChunkedUploadDataStream>(0); |
| 1576 | 1586 |
| 1577 request_.method = "POST"; | 1587 request_.method = "POST"; |
| 1578 request_.url = GURL("https://www.example.org/"); | 1588 request_.url = GURL("https://www.example.org/"); |
| 1579 request_.upload_data_stream = &upload_data_stream; | 1589 request_.upload_data_stream = upload_data_stream_.get(); |
| 1580 ASSERT_EQ(OK, request_.upload_data_stream->Init( | 1590 ASSERT_EQ(OK, request_.upload_data_stream->Init( |
| 1581 TestCompletionCallback().callback(), NetLogWithSource())); | 1591 TestCompletionCallback().callback(), NetLogWithSource())); |
| 1582 | 1592 |
| 1583 ASSERT_EQ(OK, | 1593 ASSERT_EQ(OK, |
| 1584 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 1594 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
| 1585 net_log_.bound(), callback_.callback())); | 1595 net_log_.bound(), callback_.callback())); |
| 1586 ASSERT_EQ(ERR_QUIC_PROTOCOL_ERROR, | 1596 ASSERT_EQ(ERR_QUIC_PROTOCOL_ERROR, |
| 1587 stream_->SendRequest(headers_, &response_, callback_.callback())); | 1597 stream_->SendRequest(headers_, &response_, callback_.callback())); |
| 1588 } | 1598 } |
| 1589 | 1599 |
| 1590 TEST_P(QuicHttpStreamTest, SessionClosedBeforeSendBodyComplete) { | 1600 TEST_P(QuicHttpStreamTest, SessionClosedBeforeSendBodyComplete) { |
| 1591 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1601 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| 1592 size_t spdy_request_headers_frame_length; | 1602 size_t spdy_request_headers_frame_length; |
| 1593 QuicStreamOffset header_stream_offset = 0; | 1603 QuicStreamOffset header_stream_offset = 0; |
| 1594 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 1604 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
| 1595 AddWrite(InnerConstructRequestHeadersPacket( | 1605 AddWrite(InnerConstructRequestHeadersPacket( |
| 1596 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, | 1606 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, |
| 1597 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, | 1607 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, |
| 1598 &header_stream_offset)); | 1608 &header_stream_offset)); |
| 1599 AddWrite(SYNCHRONOUS, ERR_FAILED); | 1609 AddWrite(SYNCHRONOUS, ERR_FAILED); |
| 1600 Initialize(); | 1610 Initialize(); |
| 1601 | 1611 |
| 1602 ChunkedUploadDataStream upload_data_stream(0); | 1612 upload_data_stream_ = base::MakeUnique<ChunkedUploadDataStream>(0); |
| 1613 auto* chunked_upload_stream = |
| 1614 static_cast<ChunkedUploadDataStream*>(upload_data_stream_.get()); |
| 1603 size_t chunk_size = strlen(kUploadData); | 1615 size_t chunk_size = strlen(kUploadData); |
| 1604 upload_data_stream.AppendData(kUploadData, chunk_size, false); | 1616 chunked_upload_stream->AppendData(kUploadData, chunk_size, false); |
| 1605 | 1617 |
| 1606 request_.method = "POST"; | 1618 request_.method = "POST"; |
| 1607 request_.url = GURL("https://www.example.org/"); | 1619 request_.url = GURL("https://www.example.org/"); |
| 1608 request_.upload_data_stream = &upload_data_stream; | 1620 request_.upload_data_stream = upload_data_stream_.get(); |
| 1609 ASSERT_EQ(OK, request_.upload_data_stream->Init( | 1621 ASSERT_EQ(OK, request_.upload_data_stream->Init( |
| 1610 TestCompletionCallback().callback(), NetLogWithSource())); | 1622 TestCompletionCallback().callback(), NetLogWithSource())); |
| 1611 | 1623 |
| 1612 ASSERT_EQ(OK, | 1624 ASSERT_EQ(OK, |
| 1613 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 1625 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
| 1614 net_log_.bound(), callback_.callback())); | 1626 net_log_.bound(), callback_.callback())); |
| 1615 ASSERT_EQ(ERR_QUIC_PROTOCOL_ERROR, | 1627 ASSERT_EQ(ERR_QUIC_PROTOCOL_ERROR, |
| 1616 stream_->SendRequest(headers_, &response_, callback_.callback())); | 1628 stream_->SendRequest(headers_, &response_, callback_.callback())); |
| 1617 } | 1629 } |
| 1618 | 1630 |
| (...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2098 QuicStreamOffset header_stream_offset = 0; | 2110 QuicStreamOffset header_stream_offset = 0; |
| 2099 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 2111 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
| 2100 AddWrite(InnerConstructRequestHeadersPacket( | 2112 AddWrite(InnerConstructRequestHeadersPacket( |
| 2101 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, | 2113 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, |
| 2102 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, | 2114 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, |
| 2103 &header_stream_offset)); | 2115 &header_stream_offset)); |
| 2104 AddWrite(ConstructClientRstStreamErrorPacket(3, kIncludeVersion)); | 2116 AddWrite(ConstructClientRstStreamErrorPacket(3, kIncludeVersion)); |
| 2105 | 2117 |
| 2106 Initialize(); | 2118 Initialize(); |
| 2107 | 2119 |
| 2108 ReadErrorUploadDataStream upload_data_stream( | 2120 upload_data_stream_ = base::MakeUnique<ReadErrorUploadDataStream>( |
| 2109 ReadErrorUploadDataStream::FailureMode::SYNC); | 2121 ReadErrorUploadDataStream::FailureMode::SYNC); |
| 2110 request_.method = "POST"; | 2122 request_.method = "POST"; |
| 2111 request_.url = GURL("https://www.example.org/"); | 2123 request_.url = GURL("https://www.example.org/"); |
| 2112 request_.upload_data_stream = &upload_data_stream; | 2124 request_.upload_data_stream = upload_data_stream_.get(); |
| 2113 ASSERT_EQ(OK, request_.upload_data_stream->Init( | 2125 ASSERT_EQ(OK, request_.upload_data_stream->Init( |
| 2114 TestCompletionCallback().callback(), NetLogWithSource())); | 2126 TestCompletionCallback().callback(), NetLogWithSource())); |
| 2115 | 2127 |
| 2116 EXPECT_EQ(OK, | 2128 EXPECT_EQ(OK, |
| 2117 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 2129 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
| 2118 net_log_.bound(), callback_.callback())); | 2130 net_log_.bound(), callback_.callback())); |
| 2119 | 2131 |
| 2120 int result = stream_->SendRequest(headers_, &response_, callback_.callback()); | 2132 int result = stream_->SendRequest(headers_, &response_, callback_.callback()); |
| 2121 EXPECT_THAT(result, IsError(ERR_FAILED)); | 2133 EXPECT_THAT(result, IsError(ERR_FAILED)); |
| 2122 | 2134 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 2134 QuicStreamOffset header_stream_offset = 0; | 2146 QuicStreamOffset header_stream_offset = 0; |
| 2135 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); | 2147 AddWrite(ConstructInitialSettingsPacket(&header_stream_offset)); |
| 2136 AddWrite(InnerConstructRequestHeadersPacket( | 2148 AddWrite(InnerConstructRequestHeadersPacket( |
| 2137 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, | 2149 2, GetNthClientInitiatedStreamId(0), kIncludeVersion, !kFin, |
| 2138 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, | 2150 DEFAULT_PRIORITY, &spdy_request_headers_frame_length, |
| 2139 &header_stream_offset)); | 2151 &header_stream_offset)); |
| 2140 AddWrite(ConstructClientRstStreamErrorPacket(3, !kIncludeVersion)); | 2152 AddWrite(ConstructClientRstStreamErrorPacket(3, !kIncludeVersion)); |
| 2141 | 2153 |
| 2142 Initialize(); | 2154 Initialize(); |
| 2143 | 2155 |
| 2144 ReadErrorUploadDataStream upload_data_stream( | 2156 upload_data_stream_ = base::MakeUnique<ReadErrorUploadDataStream>( |
| 2145 ReadErrorUploadDataStream::FailureMode::ASYNC); | 2157 ReadErrorUploadDataStream::FailureMode::ASYNC); |
| 2146 request_.method = "POST"; | 2158 request_.method = "POST"; |
| 2147 request_.url = GURL("https://www.example.org/"); | 2159 request_.url = GURL("https://www.example.org/"); |
| 2148 request_.upload_data_stream = &upload_data_stream; | 2160 request_.upload_data_stream = upload_data_stream_.get(); |
| 2149 ASSERT_EQ(OK, request_.upload_data_stream->Init( | 2161 ASSERT_EQ(OK, request_.upload_data_stream->Init( |
| 2150 TestCompletionCallback().callback(), NetLogWithSource())); | 2162 TestCompletionCallback().callback(), NetLogWithSource())); |
| 2151 | 2163 |
| 2152 EXPECT_EQ(OK, | 2164 EXPECT_EQ(OK, |
| 2153 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 2165 stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
| 2154 net_log_.bound(), callback_.callback())); | 2166 net_log_.bound(), callback_.callback())); |
| 2155 | 2167 |
| 2156 int result = stream_->SendRequest(headers_, &response_, callback_.callback()); | 2168 int result = stream_->SendRequest(headers_, &response_, callback_.callback()); |
| 2157 | 2169 |
| 2158 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); | 2170 ProcessPacket(ConstructServerAckPacket(1, 0, 0, 0)); |
| 2159 SetResponse("200 OK", string()); | 2171 SetResponse("200 OK", string()); |
| 2160 | 2172 |
| 2161 EXPECT_THAT(result, IsError(ERR_IO_PENDING)); | 2173 EXPECT_THAT(result, IsError(ERR_IO_PENDING)); |
| 2162 EXPECT_THAT(callback_.GetResult(result), IsError(ERR_FAILED)); | 2174 EXPECT_THAT(callback_.GetResult(result), IsError(ERR_FAILED)); |
| 2163 | 2175 |
| 2164 EXPECT_TRUE(AtEof()); | 2176 EXPECT_TRUE(AtEof()); |
| 2165 | 2177 |
| 2166 // QuicHttpStream::GetTotalSent/ReceivedBytes includes only headers. | 2178 // QuicHttpStream::GetTotalSent/ReceivedBytes includes only headers. |
| 2167 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), | 2179 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), |
| 2168 stream_->GetTotalSentBytes()); | 2180 stream_->GetTotalSentBytes()); |
| 2169 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); | 2181 EXPECT_EQ(0, stream_->GetTotalReceivedBytes()); |
| 2170 } | 2182 } |
| 2171 | 2183 |
| 2172 } // namespace test | 2184 } // namespace test |
| 2173 } // namespace net | 2185 } // namespace net |
| OLD | NEW |