| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/http/bidirectional_stream.h" | 5 #include "net/http/bidirectional_stream.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <string> |
| 8 #include <utility> | 9 #include <utility> |
| 10 #include <vector> |
| 9 | 11 |
| 10 #include "base/macros.h" | 12 #include "base/macros.h" |
| 11 #include "base/memory/ptr_util.h" | 13 #include "base/memory/ptr_util.h" |
| 12 #include "base/run_loop.h" | 14 #include "base/run_loop.h" |
| 13 #include "base/strings/string_number_conversions.h" | 15 #include "base/strings/string_number_conversions.h" |
| 14 #include "base/strings/string_piece.h" | 16 #include "base/strings/string_piece.h" |
| 15 #include "base/time/time.h" | 17 #include "base/time/time.h" |
| 16 #include "base/timer/mock_timer.h" | 18 #include "base/timer/mock_timer.h" |
| 17 #include "net/base/load_timing_info.h" | 19 #include "net/base/load_timing_info.h" |
| 18 #include "net/base/load_timing_info_test_util.h" | 20 #include "net/base/load_timing_info_test_util.h" |
| (...skipping 1186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1205 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), | 1207 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), |
| 1206 delegate->GetTotalReceivedBytes()); | 1208 delegate->GetTotalReceivedBytes()); |
| 1207 } | 1209 } |
| 1208 | 1210 |
| 1209 TEST_F(BidirectionalStreamTest, DeleteStreamAfterSendData) { | 1211 TEST_F(BidirectionalStreamTest, DeleteStreamAfterSendData) { |
| 1210 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( | 1212 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( |
| 1211 kDefaultUrl, 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); | 1213 kDefaultUrl, 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); |
| 1212 SpdySerializedFrame data_frame(spdy_util_.ConstructSpdyDataFrame( | 1214 SpdySerializedFrame data_frame(spdy_util_.ConstructSpdyDataFrame( |
| 1213 1, kBodyData, kBodyDataSize, /*fin=*/false)); | 1215 1, kBodyData, kBodyDataSize, /*fin=*/false)); |
| 1214 SpdySerializedFrame rst( | 1216 SpdySerializedFrame rst( |
| 1215 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 1217 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_CANCEL)); |
| 1216 | 1218 |
| 1217 MockWrite writes[] = { | 1219 MockWrite writes[] = { |
| 1218 CreateMockWrite(req, 0), CreateMockWrite(data_frame, 3), | 1220 CreateMockWrite(req, 0), CreateMockWrite(data_frame, 3), |
| 1219 CreateMockWrite(rst, 5), | 1221 CreateMockWrite(rst, 5), |
| 1220 }; | 1222 }; |
| 1221 | 1223 |
| 1222 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 1224 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 1223 MockRead reads[] = { | 1225 MockRead reads[] = { |
| 1224 CreateMockRead(resp, 1), | 1226 CreateMockRead(resp, 1), |
| 1225 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. | 1227 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1265 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes) - 1), | 1267 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes) - 1), |
| 1266 delegate->GetTotalSentBytes()); | 1268 delegate->GetTotalSentBytes()); |
| 1267 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), | 1269 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), |
| 1268 delegate->GetTotalReceivedBytes()); | 1270 delegate->GetTotalReceivedBytes()); |
| 1269 } | 1271 } |
| 1270 | 1272 |
| 1271 TEST_F(BidirectionalStreamTest, DeleteStreamDuringReadData) { | 1273 TEST_F(BidirectionalStreamTest, DeleteStreamDuringReadData) { |
| 1272 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( | 1274 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( |
| 1273 kDefaultUrl, 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); | 1275 kDefaultUrl, 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); |
| 1274 SpdySerializedFrame rst( | 1276 SpdySerializedFrame rst( |
| 1275 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 1277 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_CANCEL)); |
| 1276 | 1278 |
| 1277 MockWrite writes[] = { | 1279 MockWrite writes[] = { |
| 1278 CreateMockWrite(req, 0), CreateMockWrite(rst, 4), | 1280 CreateMockWrite(req, 0), CreateMockWrite(rst, 4), |
| 1279 }; | 1281 }; |
| 1280 | 1282 |
| 1281 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 1283 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 1282 SpdySerializedFrame response_body_frame( | 1284 SpdySerializedFrame response_body_frame( |
| 1283 spdy_util_.ConstructSpdyDataFrame(1, false)); | 1285 spdy_util_.ConstructSpdyDataFrame(1, false)); |
| 1284 | 1286 |
| 1285 MockRead reads[] = { | 1287 MockRead reads[] = { |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1326 EXPECT_EQ(CountReadBytes(reads, arraysize(reads) - 2), | 1328 EXPECT_EQ(CountReadBytes(reads, arraysize(reads) - 2), |
| 1327 delegate->GetTotalReceivedBytes()); | 1329 delegate->GetTotalReceivedBytes()); |
| 1328 } | 1330 } |
| 1329 | 1331 |
| 1330 // Receiving a header with uppercase ASCII will result in a protocol error, | 1332 // Receiving a header with uppercase ASCII will result in a protocol error, |
| 1331 // which should be propagated via Delegate::OnFailed. | 1333 // which should be propagated via Delegate::OnFailed. |
| 1332 TEST_F(BidirectionalStreamTest, PropagateProtocolError) { | 1334 TEST_F(BidirectionalStreamTest, PropagateProtocolError) { |
| 1333 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( | 1335 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( |
| 1334 kDefaultUrl, 1, kBodyDataSize * 3, LOW, nullptr, 0)); | 1336 kDefaultUrl, 1, kBodyDataSize * 3, LOW, nullptr, 0)); |
| 1335 SpdySerializedFrame rst( | 1337 SpdySerializedFrame rst( |
| 1336 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); | 1338 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_PROTOCOL_ERROR)); |
| 1337 | 1339 |
| 1338 MockWrite writes[] = { | 1340 MockWrite writes[] = { |
| 1339 CreateMockWrite(req, 0), CreateMockWrite(rst, 2), | 1341 CreateMockWrite(req, 0), CreateMockWrite(rst, 2), |
| 1340 }; | 1342 }; |
| 1341 | 1343 |
| 1342 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"}; | 1344 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"}; |
| 1343 SpdySerializedFrame resp( | 1345 SpdySerializedFrame resp( |
| 1344 spdy_util_.ConstructSpdyGetReply(kExtraHeaders, 1, 1)); | 1346 spdy_util_.ConstructSpdyGetReply(kExtraHeaders, 1, 1)); |
| 1345 | 1347 |
| 1346 MockRead reads[] = { | 1348 MockRead reads[] = { |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1393 entry = entries[index]; | 1395 entry = entries[index]; |
| 1394 int net_error = OK; | 1396 int net_error = OK; |
| 1395 EXPECT_TRUE(entry.params->GetInteger("net_error", &net_error)); | 1397 EXPECT_TRUE(entry.params->GetInteger("net_error", &net_error)); |
| 1396 EXPECT_THAT(net_error, IsError(ERR_SPDY_PROTOCOL_ERROR)); | 1398 EXPECT_THAT(net_error, IsError(ERR_SPDY_PROTOCOL_ERROR)); |
| 1397 } | 1399 } |
| 1398 | 1400 |
| 1399 TEST_F(BidirectionalStreamTest, DeleteStreamDuringOnHeadersReceived) { | 1401 TEST_F(BidirectionalStreamTest, DeleteStreamDuringOnHeadersReceived) { |
| 1400 SpdySerializedFrame req(spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST)); | 1402 SpdySerializedFrame req(spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST)); |
| 1401 | 1403 |
| 1402 SpdySerializedFrame rst( | 1404 SpdySerializedFrame rst( |
| 1403 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 1405 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_CANCEL)); |
| 1404 MockWrite writes[] = { | 1406 MockWrite writes[] = { |
| 1405 CreateMockWrite(req, 0), CreateMockWrite(rst, 2), | 1407 CreateMockWrite(req, 0), CreateMockWrite(rst, 2), |
| 1406 }; | 1408 }; |
| 1407 | 1409 |
| 1408 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; | 1410 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; |
| 1409 SpdySerializedFrame resp( | 1411 SpdySerializedFrame resp( |
| 1410 spdy_util_.ConstructSpdyGetReply(kExtraResponseHeaders, 1, 1)); | 1412 spdy_util_.ConstructSpdyGetReply(kExtraResponseHeaders, 1, 1)); |
| 1411 | 1413 |
| 1412 MockRead reads[] = { | 1414 MockRead reads[] = { |
| 1413 CreateMockRead(resp, 1), MockRead(ASYNC, 0, 3), | 1415 CreateMockRead(resp, 1), MockRead(ASYNC, 0, 3), |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1442 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes) - 1), | 1444 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes) - 1), |
| 1443 delegate->GetTotalSentBytes()); | 1445 delegate->GetTotalSentBytes()); |
| 1444 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), | 1446 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), |
| 1445 delegate->GetTotalReceivedBytes()); | 1447 delegate->GetTotalReceivedBytes()); |
| 1446 } | 1448 } |
| 1447 | 1449 |
| 1448 TEST_F(BidirectionalStreamTest, DeleteStreamDuringOnDataRead) { | 1450 TEST_F(BidirectionalStreamTest, DeleteStreamDuringOnDataRead) { |
| 1449 SpdySerializedFrame req(spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST)); | 1451 SpdySerializedFrame req(spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST)); |
| 1450 | 1452 |
| 1451 SpdySerializedFrame rst( | 1453 SpdySerializedFrame rst( |
| 1452 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 1454 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_CANCEL)); |
| 1453 MockWrite writes[] = { | 1455 MockWrite writes[] = { |
| 1454 CreateMockWrite(req, 0), CreateMockWrite(rst, 3), | 1456 CreateMockWrite(req, 0), CreateMockWrite(rst, 3), |
| 1455 }; | 1457 }; |
| 1456 | 1458 |
| 1457 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; | 1459 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; |
| 1458 SpdySerializedFrame resp( | 1460 SpdySerializedFrame resp( |
| 1459 spdy_util_.ConstructSpdyGetReply(kExtraResponseHeaders, 1, 1)); | 1461 spdy_util_.ConstructSpdyGetReply(kExtraResponseHeaders, 1, 1)); |
| 1460 | 1462 |
| 1461 SpdySerializedFrame response_body_frame( | 1463 SpdySerializedFrame response_body_frame( |
| 1462 spdy_util_.ConstructSpdyDataFrame(1, false)); | 1464 spdy_util_.ConstructSpdyDataFrame(1, false)); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1495 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes) - 1), | 1497 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes) - 1), |
| 1496 delegate->GetTotalSentBytes()); | 1498 delegate->GetTotalSentBytes()); |
| 1497 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), | 1499 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), |
| 1498 delegate->GetTotalReceivedBytes()); | 1500 delegate->GetTotalReceivedBytes()); |
| 1499 } | 1501 } |
| 1500 | 1502 |
| 1501 TEST_F(BidirectionalStreamTest, DeleteStreamDuringOnTrailersReceived) { | 1503 TEST_F(BidirectionalStreamTest, DeleteStreamDuringOnTrailersReceived) { |
| 1502 SpdySerializedFrame req(spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST)); | 1504 SpdySerializedFrame req(spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST)); |
| 1503 | 1505 |
| 1504 SpdySerializedFrame rst( | 1506 SpdySerializedFrame rst( |
| 1505 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 1507 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_CANCEL)); |
| 1506 MockWrite writes[] = { | 1508 MockWrite writes[] = { |
| 1507 CreateMockWrite(req, 0), CreateMockWrite(rst, 4), | 1509 CreateMockWrite(req, 0), CreateMockWrite(rst, 4), |
| 1508 }; | 1510 }; |
| 1509 | 1511 |
| 1510 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; | 1512 const char* const kExtraResponseHeaders[] = {"header-name", "header-value"}; |
| 1511 SpdySerializedFrame resp( | 1513 SpdySerializedFrame resp( |
| 1512 spdy_util_.ConstructSpdyGetReply(kExtraResponseHeaders, 1, 1)); | 1514 spdy_util_.ConstructSpdyGetReply(kExtraResponseHeaders, 1, 1)); |
| 1513 | 1515 |
| 1514 SpdySerializedFrame response_body_frame( | 1516 SpdySerializedFrame response_body_frame( |
| 1515 spdy_util_.ConstructSpdyDataFrame(1, false)); | 1517 spdy_util_.ConstructSpdyDataFrame(1, false)); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1553 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes) - 1), | 1555 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes) - 1), |
| 1554 delegate->GetTotalSentBytes()); | 1556 delegate->GetTotalSentBytes()); |
| 1555 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), | 1557 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), |
| 1556 delegate->GetTotalReceivedBytes()); | 1558 delegate->GetTotalReceivedBytes()); |
| 1557 } | 1559 } |
| 1558 | 1560 |
| 1559 TEST_F(BidirectionalStreamTest, DeleteStreamDuringOnFailed) { | 1561 TEST_F(BidirectionalStreamTest, DeleteStreamDuringOnFailed) { |
| 1560 SpdySerializedFrame req(spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST)); | 1562 SpdySerializedFrame req(spdy_util_.ConstructSpdyGet(kDefaultUrl, 1, LOWEST)); |
| 1561 | 1563 |
| 1562 SpdySerializedFrame rst( | 1564 SpdySerializedFrame rst( |
| 1563 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); | 1565 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_PROTOCOL_ERROR)); |
| 1564 | 1566 |
| 1565 MockWrite writes[] = { | 1567 MockWrite writes[] = { |
| 1566 CreateMockWrite(req, 0), CreateMockWrite(rst, 2), | 1568 CreateMockWrite(req, 0), CreateMockWrite(rst, 2), |
| 1567 }; | 1569 }; |
| 1568 | 1570 |
| 1569 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"}; | 1571 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"}; |
| 1570 SpdySerializedFrame resp( | 1572 SpdySerializedFrame resp( |
| 1571 spdy_util_.ConstructSpdyGetReply(kExtraHeaders, 1, 1)); | 1573 spdy_util_.ConstructSpdyGetReply(kExtraHeaders, 1, 1)); |
| 1572 | 1574 |
| 1573 MockRead reads[] = { | 1575 MockRead reads[] = { |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1655 AlternativeServiceVector alternative_service_vector = | 1657 AlternativeServiceVector alternative_service_vector = |
| 1656 http_session_->http_server_properties()->GetAlternativeServices( | 1658 http_session_->http_server_properties()->GetAlternativeServices( |
| 1657 url::SchemeHostPort(default_url_)); | 1659 url::SchemeHostPort(default_url_)); |
| 1658 ASSERT_EQ(1u, alternative_service_vector.size()); | 1660 ASSERT_EQ(1u, alternative_service_vector.size()); |
| 1659 EXPECT_EQ(kProtoQUIC, alternative_service_vector[0].protocol); | 1661 EXPECT_EQ(kProtoQUIC, alternative_service_vector[0].protocol); |
| 1660 EXPECT_EQ("www.example.org", alternative_service_vector[0].host); | 1662 EXPECT_EQ("www.example.org", alternative_service_vector[0].host); |
| 1661 EXPECT_EQ(443, alternative_service_vector[0].port); | 1663 EXPECT_EQ(443, alternative_service_vector[0].port); |
| 1662 } | 1664 } |
| 1663 | 1665 |
| 1664 } // namespace net | 1666 } // namespace net |
| OLD | NEW |