| OLD | NEW | 
|     1 // Copyright 2016 The Chromium Authors. All rights reserved. |     1 // Copyright 2016 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/bidirectional_stream_quic_impl.h" |     5 #include "net/quic/chromium/bidirectional_stream_quic_impl.h" | 
|     6  |     6  | 
|     7 #include <utility> |     7 #include <utility> | 
|     8  |     8  | 
|     9 #include "base/callback_helpers.h" |     9 #include "base/callback_helpers.h" | 
|    10 #include "base/memory/ptr_util.h" |    10 #include "base/memory/ptr_util.h" | 
| (...skipping 1230 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1241       static_cast<int64_t>(spdy_request_headers_frame_length + strlen(kBody1) + |  1241       static_cast<int64_t>(spdy_request_headers_frame_length + strlen(kBody1) + | 
|  1242                            strlen(kBody2) + strlen(kBody3) + strlen(kBody4) + |  1242                            strlen(kBody2) + strlen(kBody3) + strlen(kBody4) + | 
|  1243                            strlen(kBody5)), |  1243                            strlen(kBody5)), | 
|  1244       delegate->GetTotalSentBytes()); |  1244       delegate->GetTotalSentBytes()); | 
|  1245   EXPECT_EQ( |  1245   EXPECT_EQ( | 
|  1246       static_cast<int64_t>(spdy_response_headers_frame_length + |  1246       static_cast<int64_t>(spdy_response_headers_frame_length + | 
|  1247                            strlen(kResponseBody) + spdy_trailers_frame_length), |  1247                            strlen(kResponseBody) + spdy_trailers_frame_length), | 
|  1248       delegate->GetTotalReceivedBytes()); |  1248       delegate->GetTotalReceivedBytes()); | 
|  1249 } |  1249 } | 
|  1250  |  1250  | 
 |  1251 // Tests that when request headers are delayed and SendData triggers the | 
 |  1252 // headers to be sent, if that write fails the stream does not crash. | 
 |  1253 TEST_P(BidirectionalStreamQuicImplTest, | 
 |  1254        SendDataWriteErrorCoalesceDataBufferAndHeaderFrame) { | 
 |  1255   QuicStreamOffset header_stream_offset = 0; | 
 |  1256   AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); | 
 |  1257   AddWriteError(SYNCHRONOUS, ERR_CONNECTION_REFUSED); | 
 |  1258  | 
 |  1259   Initialize(); | 
 |  1260  | 
 |  1261   BidirectionalStreamRequestInfo request; | 
 |  1262   request.method = "POST"; | 
 |  1263   request.url = GURL("http://www.google.com/"); | 
 |  1264   request.end_stream_on_headers = false; | 
 |  1265   request.priority = DEFAULT_PRIORITY; | 
 |  1266   request.extra_headers.SetHeader("cookie", std::string(2048, 'A')); | 
 |  1267  | 
 |  1268   scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 
 |  1269   std::unique_ptr<DeleteStreamDelegate> delegate(new DeleteStreamDelegate( | 
 |  1270       read_buffer.get(), kReadBufferSize, DeleteStreamDelegate::ON_FAILED)); | 
 |  1271   delegate->DoNotSendRequestHeadersAutomatically(); | 
 |  1272   delegate->Start(&request, net_log().bound(), session()->CreateHandle()); | 
 |  1273   ConfirmHandshake(); | 
 |  1274   delegate->WaitUntilNextCallback(kOnStreamReady); | 
 |  1275  | 
 |  1276   // Attempt to send the headers and data. | 
 |  1277   const char kBody1[] = "here are some data"; | 
 |  1278   scoped_refptr<StringIOBuffer> buf1(new StringIOBuffer(kBody1)); | 
 |  1279   delegate->SendData(buf1, buf1->size(), !kFin); | 
 |  1280  | 
 |  1281   delegate->WaitUntilNextCallback(kOnFailed); | 
 |  1282 } | 
 |  1283  | 
 |  1284 // Tests that when request headers are delayed and SendvData triggers the | 
 |  1285 // headers to be sent, if that write fails the stream does not crash. | 
 |  1286 TEST_P(BidirectionalStreamQuicImplTest, | 
 |  1287        SendvDataWriteErrorCoalesceDataBufferAndHeaderFrame) { | 
 |  1288   QuicStreamOffset header_stream_offset = 0; | 
 |  1289   AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); | 
 |  1290   AddWriteError(SYNCHRONOUS, ERR_CONNECTION_REFUSED); | 
 |  1291  | 
 |  1292   Initialize(); | 
 |  1293  | 
 |  1294   BidirectionalStreamRequestInfo request; | 
 |  1295   request.method = "POST"; | 
 |  1296   request.url = GURL("http://www.google.com/"); | 
 |  1297   request.end_stream_on_headers = false; | 
 |  1298   request.priority = DEFAULT_PRIORITY; | 
 |  1299   request.extra_headers.SetHeader("cookie", std::string(2048, 'A')); | 
 |  1300  | 
 |  1301   scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 
 |  1302   std::unique_ptr<DeleteStreamDelegate> delegate(new DeleteStreamDelegate( | 
 |  1303       read_buffer.get(), kReadBufferSize, DeleteStreamDelegate::ON_FAILED)); | 
 |  1304   delegate->DoNotSendRequestHeadersAutomatically(); | 
 |  1305   delegate->Start(&request, net_log().bound(), session()->CreateHandle()); | 
 |  1306   ConfirmHandshake(); | 
 |  1307   delegate->WaitUntilNextCallback(kOnStreamReady); | 
 |  1308  | 
 |  1309   // Attempt to send the headers and data. | 
 |  1310   const char kBody1[] = "here are some data"; | 
 |  1311   const char kBody2[] = "data keep coming"; | 
 |  1312   scoped_refptr<StringIOBuffer> buf1(new StringIOBuffer(kBody1)); | 
 |  1313   scoped_refptr<StringIOBuffer> buf2(new StringIOBuffer(kBody2)); | 
 |  1314   std::vector<int> lengths = {buf1->size(), buf2->size()}; | 
 |  1315   delegate->SendvData({buf1, buf2}, lengths, !kFin); | 
 |  1316  | 
 |  1317   delegate->WaitUntilNextCallback(kOnFailed); | 
 |  1318 } | 
 |  1319  | 
|  1251 TEST_P(BidirectionalStreamQuicImplTest, PostRequest) { |  1320 TEST_P(BidirectionalStreamQuicImplTest, PostRequest) { | 
|  1252   SetRequest("POST", "/", DEFAULT_PRIORITY); |  1321   SetRequest("POST", "/", DEFAULT_PRIORITY); | 
|  1253   size_t spdy_request_headers_frame_length; |  1322   size_t spdy_request_headers_frame_length; | 
|  1254   QuicStreamOffset header_stream_offset = 0; |  1323   QuicStreamOffset header_stream_offset = 0; | 
|  1255   AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); |  1324   AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); | 
|  1256   AddWrite(ConstructRequestHeadersPacketInner( |  1325   AddWrite(ConstructRequestHeadersPacketInner( | 
|  1257       2, GetNthClientInitiatedStreamId(0), !kFin, DEFAULT_PRIORITY, |  1326       2, GetNthClientInitiatedStreamId(0), !kFin, DEFAULT_PRIORITY, | 
|  1258       &spdy_request_headers_frame_length, &header_stream_offset)); |  1327       &spdy_request_headers_frame_length, &header_stream_offset)); | 
|  1259   AddWrite(ConstructDataPacket(3, kIncludeVersion, kFin, 0, kUploadData, |  1328   AddWrite(ConstructDataPacket(3, kIncludeVersion, kFin, 0, kUploadData, | 
|  1260                                &client_maker_)); |  1329                                &client_maker_)); | 
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1513   scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |  1582   scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 
|  1514   std::unique_ptr<TestDelegateBase> delegate( |  1583   std::unique_ptr<TestDelegateBase> delegate( | 
|  1515       new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |  1584       new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 
|  1516   delegate->Start(&request, net_log().bound(), session()->CreateHandle()); |  1585   delegate->Start(&request, net_log().bound(), session()->CreateHandle()); | 
|  1517   delegate->WaitUntilNextCallback(kOnStreamReady); |  1586   delegate->WaitUntilNextCallback(kOnStreamReady); | 
|  1518   ConfirmHandshake(); |  1587   ConfirmHandshake(); | 
|  1519  |  1588  | 
|  1520   // Server sends a Rst. |  1589   // Server sends a Rst. | 
|  1521   ProcessPacket(ConstructServerRstStreamPacket(1)); |  1590   ProcessPacket(ConstructServerRstStreamPacket(1)); | 
|  1522  |  1591  | 
|  1523   EXPECT_TRUE(delegate->on_failed_called()); |  1592   delegate->WaitUntilNextCallback(kOnFailed); | 
|  1524  |  1593  | 
|  1525   TestCompletionCallback cb; |  1594   TestCompletionCallback cb; | 
|  1526   EXPECT_THAT(delegate->ReadData(cb.callback()), |  1595   EXPECT_THAT(delegate->ReadData(cb.callback()), | 
|  1527               IsError(ERR_QUIC_PROTOCOL_ERROR)); |  1596               IsError(ERR_QUIC_PROTOCOL_ERROR)); | 
|  1528  |  1597  | 
|  1529   base::RunLoop().RunUntilIdle(); |  1598   base::RunLoop().RunUntilIdle(); | 
|  1530  |  1599  | 
|  1531   EXPECT_THAT(delegate->error(), IsError(ERR_QUIC_PROTOCOL_ERROR)); |  1600   EXPECT_THAT(delegate->error(), IsError(ERR_QUIC_PROTOCOL_ERROR)); | 
|  1532   EXPECT_EQ(0, delegate->on_data_read_count()); |  1601   EXPECT_EQ(0, delegate->on_data_read_count()); | 
|  1533   EXPECT_EQ(0, delegate->on_data_sent_count()); |  1602   EXPECT_EQ(0, delegate->on_data_sent_count()); | 
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1577   delegate->WaitUntilNextCallback(kOnHeadersReceived); |  1646   delegate->WaitUntilNextCallback(kOnHeadersReceived); | 
|  1578   EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |  1647   EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 
|  1579  |  1648  | 
|  1580   TestCompletionCallback cb; |  1649   TestCompletionCallback cb; | 
|  1581   int rv = delegate->ReadData(cb.callback()); |  1650   int rv = delegate->ReadData(cb.callback()); | 
|  1582   EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |  1651   EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 
|  1583  |  1652  | 
|  1584   // Server sends a Rst. |  1653   // Server sends a Rst. | 
|  1585   ProcessPacket(ConstructServerRstStreamPacket(3)); |  1654   ProcessPacket(ConstructServerRstStreamPacket(3)); | 
|  1586  |  1655  | 
|  1587   EXPECT_TRUE(delegate->on_failed_called()); |  1656   delegate->WaitUntilNextCallback(kOnFailed); | 
|  1588  |  1657  | 
|  1589   EXPECT_THAT(delegate->ReadData(cb.callback()), |  1658   EXPECT_THAT(delegate->ReadData(cb.callback()), | 
|  1590               IsError(ERR_QUIC_PROTOCOL_ERROR)); |  1659               IsError(ERR_QUIC_PROTOCOL_ERROR)); | 
|  1591   EXPECT_THAT(delegate->error(), IsError(ERR_QUIC_PROTOCOL_ERROR)); |  1660   EXPECT_THAT(delegate->error(), IsError(ERR_QUIC_PROTOCOL_ERROR)); | 
|  1592   EXPECT_EQ(0, delegate->on_data_read_count()); |  1661   EXPECT_EQ(0, delegate->on_data_read_count()); | 
|  1593   EXPECT_EQ(0, delegate->on_data_sent_count()); |  1662   EXPECT_EQ(0, delegate->on_data_sent_count()); | 
|  1594   EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), |  1663   EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), | 
|  1595             delegate->GetTotalSentBytes()); |  1664             delegate->GetTotalSentBytes()); | 
|  1596   EXPECT_EQ(static_cast<int64_t>(spdy_response_headers_frame_length), |  1665   EXPECT_EQ(static_cast<int64_t>(spdy_response_headers_frame_length), | 
|  1597             delegate->GetTotalReceivedBytes()); |  1666             delegate->GetTotalReceivedBytes()); | 
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1631   ProcessPacket(ConstructResponseHeadersPacket( |  1700   ProcessPacket(ConstructResponseHeadersPacket( | 
|  1632       2, !kFin, std::move(response_headers), |  1701       2, !kFin, std::move(response_headers), | 
|  1633       &spdy_response_headers_frame_length, &offset)); |  1702       &spdy_response_headers_frame_length, &offset)); | 
|  1634  |  1703  | 
|  1635   delegate->WaitUntilNextCallback(kOnHeadersReceived); |  1704   delegate->WaitUntilNextCallback(kOnHeadersReceived); | 
|  1636   TestCompletionCallback cb; |  1705   TestCompletionCallback cb; | 
|  1637   int rv = delegate->ReadData(cb.callback()); |  1706   int rv = delegate->ReadData(cb.callback()); | 
|  1638   EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |  1707   EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 
|  1639   session()->connection()->CloseConnection( |  1708   session()->connection()->CloseConnection( | 
|  1640       QUIC_NO_ERROR, "test", ConnectionCloseBehavior::SILENT_CLOSE); |  1709       QUIC_NO_ERROR, "test", ConnectionCloseBehavior::SILENT_CLOSE); | 
|  1641   EXPECT_TRUE(delegate->on_failed_called()); |  1710   delegate->WaitUntilNextCallback(kOnFailed); | 
|  1642  |  1711  | 
|  1643   // Try to send data after OnFailed(), should not get called back. |  1712   // Try to send data after OnFailed(), should not get called back. | 
|  1644   scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(kUploadData)); |  1713   scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(kUploadData)); | 
|  1645   delegate->SendData(buf, buf->size(), false); |  1714   delegate->SendData(buf, buf->size(), false); | 
|  1646   base::RunLoop().RunUntilIdle(); |  1715   base::RunLoop().RunUntilIdle(); | 
|  1647  |  1716  | 
|  1648   EXPECT_THAT(delegate->ReadData(cb.callback()), IsError(ERR_UNEXPECTED)); |  1717   EXPECT_THAT(delegate->ReadData(cb.callback()), IsError(ERR_UNEXPECTED)); | 
|  1649   EXPECT_THAT(delegate->error(), IsError(ERR_UNEXPECTED)); |  1718   EXPECT_THAT(delegate->error(), IsError(ERR_UNEXPECTED)); | 
|  1650   EXPECT_EQ(0, delegate->on_data_read_count()); |  1719   EXPECT_EQ(0, delegate->on_data_read_count()); | 
|  1651   EXPECT_EQ(0, delegate->on_data_sent_count()); |  1720   EXPECT_EQ(0, delegate->on_data_sent_count()); | 
| (...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2043  |  2112  | 
|  2044   base::RunLoop().RunUntilIdle(); |  2113   base::RunLoop().RunUntilIdle(); | 
|  2045  |  2114  | 
|  2046   EXPECT_EQ(1, delegate->on_data_read_count()); |  2115   EXPECT_EQ(1, delegate->on_data_read_count()); | 
|  2047   EXPECT_EQ(0, delegate->on_data_sent_count()); |  2116   EXPECT_EQ(0, delegate->on_data_sent_count()); | 
|  2048 } |  2117 } | 
|  2049  |  2118  | 
|  2050 }  // namespace test |  2119 }  // namespace test | 
|  2051  |  2120  | 
|  2052 }  // namespace net |  2121 }  // namespace net | 
| OLD | NEW |