| 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 <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 69 // implemented. | 69 // implemented. |
| 70 EXPECT_TRUE(request_headers_sent); | 70 EXPECT_TRUE(request_headers_sent); |
| 71 if (callback_.is_null()) | 71 if (callback_.is_null()) |
| 72 return; | 72 return; |
| 73 callback_.Run(OK); | 73 callback_.Run(OK); |
| 74 } | 74 } |
| 75 | 75 |
| 76 void OnHeadersReceived(const SpdyHeaderBlock& response_headers) override { | 76 void OnHeadersReceived(const SpdyHeaderBlock& response_headers) override { |
| 77 CHECK(!not_expect_callback_); | 77 CHECK(!not_expect_callback_); |
| 78 | 78 |
| 79 response_headers_ = response_headers; | 79 response_headers_ = response_headers.Clone(); |
| 80 if (!do_not_start_read_) | 80 if (!do_not_start_read_) |
| 81 StartOrContinueReading(); | 81 StartOrContinueReading(); |
| 82 } | 82 } |
| 83 | 83 |
| 84 void OnDataRead(int bytes_read) override { | 84 void OnDataRead(int bytes_read) override { |
| 85 CHECK(!not_expect_callback_); | 85 CHECK(!not_expect_callback_); |
| 86 | 86 |
| 87 ++on_data_read_count_; | 87 ++on_data_read_count_; |
| 88 CHECK_GE(bytes_read, OK); | 88 CHECK_GE(bytes_read, OK); |
| 89 data_received_.append(read_buf_->data(), bytes_read); | 89 data_received_.append(read_buf_->data(), bytes_read); |
| 90 if (!do_not_start_read_) | 90 if (!do_not_start_read_) |
| 91 StartOrContinueReading(); | 91 StartOrContinueReading(); |
| 92 } | 92 } |
| 93 | 93 |
| 94 void OnDataSent() override { | 94 void OnDataSent() override { |
| 95 CHECK(!not_expect_callback_); | 95 CHECK(!not_expect_callback_); |
| 96 | 96 |
| 97 ++on_data_sent_count_; | 97 ++on_data_sent_count_; |
| 98 } | 98 } |
| 99 | 99 |
| 100 void OnTrailersReceived(const SpdyHeaderBlock& trailers) override { | 100 void OnTrailersReceived(const SpdyHeaderBlock& trailers) override { |
| 101 CHECK(!not_expect_callback_); | 101 CHECK(!not_expect_callback_); |
| 102 | 102 |
| 103 trailers_ = trailers; | 103 trailers_ = trailers.Clone(); |
| 104 if (run_until_completion_) | 104 if (run_until_completion_) |
| 105 loop_->Quit(); | 105 loop_->Quit(); |
| 106 } | 106 } |
| 107 | 107 |
| 108 void OnFailed(int error) override { | 108 void OnFailed(int error) override { |
| 109 CHECK(!not_expect_callback_); | 109 CHECK(!not_expect_callback_); |
| 110 CHECK_EQ(OK, error_); | 110 CHECK_EQ(OK, error_); |
| 111 CHECK_NE(OK, error); | 111 CHECK_NE(OK, error); |
| 112 | 112 |
| 113 error_ = error; | 113 error_ = error; |
| (...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 483 | 483 |
| 484 // Deliver the rest. Note that user has not called a second ReadData. | 484 // Deliver the rest. Note that user has not called a second ReadData. |
| 485 sequenced_data_->Resume(); | 485 sequenced_data_->Resume(); |
| 486 base::RunLoop().RunUntilIdle(); | 486 base::RunLoop().RunUntilIdle(); |
| 487 // ReadData now. Read should complete synchronously. | 487 // ReadData now. Read should complete synchronously. |
| 488 rv = delegate->ReadData(); | 488 rv = delegate->ReadData(); |
| 489 EXPECT_EQ(kUploadDataSize * 2, rv); | 489 EXPECT_EQ(kUploadDataSize * 2, rv); |
| 490 rv = delegate->ReadData(); | 490 rv = delegate->ReadData(); |
| 491 EXPECT_EQ(OK, rv); // EOF. | 491 EXPECT_EQ(OK, rv); // EOF. |
| 492 | 492 |
| 493 const SpdyHeaderBlock response_headers = delegate->response_headers(); | 493 const SpdyHeaderBlock& response_headers = delegate->response_headers(); |
| 494 EXPECT_EQ("200", response_headers.find(":status")->second); | 494 EXPECT_EQ("200", response_headers.find(":status")->second); |
| 495 EXPECT_EQ("header-value", response_headers.find("header-name")->second); | 495 EXPECT_EQ("header-value", response_headers.find("header-name")->second); |
| 496 EXPECT_EQ(1, delegate->on_data_read_count()); | 496 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 497 EXPECT_EQ(0, delegate->on_data_sent_count()); | 497 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 498 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); | 498 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); |
| 499 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), | 499 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), |
| 500 delegate->GetTotalSentBytes()); | 500 delegate->GetTotalSentBytes()); |
| 501 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), | 501 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), |
| 502 delegate->GetTotalReceivedBytes()); | 502 delegate->GetTotalReceivedBytes()); |
| 503 } | 503 } |
| (...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 974 | 974 |
| 975 // Deliver last DATA frame and EOF. There will be an additional | 975 // Deliver last DATA frame and EOF. There will be an additional |
| 976 // Delegate::OnReadComplete callback. | 976 // Delegate::OnReadComplete callback. |
| 977 sequenced_data_->Resume(); | 977 sequenced_data_->Resume(); |
| 978 base::RunLoop().RunUntilIdle(); | 978 base::RunLoop().RunUntilIdle(); |
| 979 | 979 |
| 980 EXPECT_EQ(2, delegate->on_data_read_count()); | 980 EXPECT_EQ(2, delegate->on_data_read_count()); |
| 981 EXPECT_EQ(kUploadDataSize * 3, | 981 EXPECT_EQ(kUploadDataSize * 3, |
| 982 static_cast<int>(delegate->data_received().size())); | 982 static_cast<int>(delegate->data_received().size())); |
| 983 | 983 |
| 984 const SpdyHeaderBlock response_headers = delegate->response_headers(); | 984 const SpdyHeaderBlock& response_headers = delegate->response_headers(); |
| 985 EXPECT_EQ("200", response_headers.find(":status")->second); | 985 EXPECT_EQ("200", response_headers.find(":status")->second); |
| 986 EXPECT_EQ("header-value", response_headers.find("header-name")->second); | 986 EXPECT_EQ("header-value", response_headers.find("header-name")->second); |
| 987 EXPECT_EQ(0, delegate->on_data_sent_count()); | 987 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 988 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); | 988 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); |
| 989 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), | 989 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), |
| 990 delegate->GetTotalSentBytes()); | 990 delegate->GetTotalSentBytes()); |
| 991 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), | 991 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), |
| 992 delegate->GetTotalReceivedBytes()); | 992 delegate->GetTotalReceivedBytes()); |
| 993 } | 993 } |
| 994 | 994 |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1056 | 1056 |
| 1057 // Deliver trailers. Remaining read should be completed, since OnClose is | 1057 // Deliver trailers. Remaining read should be completed, since OnClose is |
| 1058 // called right after OnTrailersReceived. The three DATA frames should be | 1058 // called right after OnTrailersReceived. The three DATA frames should be |
| 1059 // delivered in a single OnReadCompleted callback. | 1059 // delivered in a single OnReadCompleted callback. |
| 1060 sequenced_data_->Resume(); | 1060 sequenced_data_->Resume(); |
| 1061 base::RunLoop().RunUntilIdle(); | 1061 base::RunLoop().RunUntilIdle(); |
| 1062 | 1062 |
| 1063 EXPECT_EQ(1, delegate->on_data_read_count()); | 1063 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 1064 EXPECT_EQ(kUploadDataSize * 3, | 1064 EXPECT_EQ(kUploadDataSize * 3, |
| 1065 static_cast<int>(delegate->data_received().size())); | 1065 static_cast<int>(delegate->data_received().size())); |
| 1066 const SpdyHeaderBlock response_headers = delegate->response_headers(); | 1066 const SpdyHeaderBlock& response_headers = delegate->response_headers(); |
| 1067 EXPECT_EQ("200", response_headers.find(":status")->second); | 1067 EXPECT_EQ("200", response_headers.find(":status")->second); |
| 1068 EXPECT_EQ("header-value", response_headers.find("header-name")->second); | 1068 EXPECT_EQ("header-value", response_headers.find("header-name")->second); |
| 1069 EXPECT_EQ("bar", delegate->trailers().find("foo")->second); | 1069 EXPECT_EQ("bar", delegate->trailers().find("foo")->second); |
| 1070 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1070 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 1071 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); | 1071 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); |
| 1072 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), | 1072 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), |
| 1073 delegate->GetTotalSentBytes()); | 1073 delegate->GetTotalSentBytes()); |
| 1074 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), | 1074 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), |
| 1075 delegate->GetTotalReceivedBytes()); | 1075 delegate->GetTotalReceivedBytes()); |
| 1076 } | 1076 } |
| (...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1317 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1317 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1318 std::unique_ptr<CancelOrDeleteStreamDelegate> delegate( | 1318 std::unique_ptr<CancelOrDeleteStreamDelegate> delegate( |
| 1319 new CancelOrDeleteStreamDelegate( | 1319 new CancelOrDeleteStreamDelegate( |
| 1320 read_buffer.get(), kReadBufferSize, | 1320 read_buffer.get(), kReadBufferSize, |
| 1321 CancelOrDeleteStreamDelegate::Phase::ON_HEADERS_RECEIVED, | 1321 CancelOrDeleteStreamDelegate::Phase::ON_HEADERS_RECEIVED, |
| 1322 GetParam())); | 1322 GetParam())); |
| 1323 delegate->SetRunUntilCompletion(true); | 1323 delegate->SetRunUntilCompletion(true); |
| 1324 delegate->Start(std::move(request_info), http_session_.get()); | 1324 delegate->Start(std::move(request_info), http_session_.get()); |
| 1325 // Makes sure delegate does not get called. | 1325 // Makes sure delegate does not get called. |
| 1326 base::RunLoop().RunUntilIdle(); | 1326 base::RunLoop().RunUntilIdle(); |
| 1327 const SpdyHeaderBlock response_headers = delegate->response_headers(); | 1327 const SpdyHeaderBlock& response_headers = delegate->response_headers(); |
| 1328 EXPECT_EQ("200", response_headers.find(":status")->second); | 1328 EXPECT_EQ("200", response_headers.find(":status")->second); |
| 1329 EXPECT_EQ("header-value", response_headers.find("header-name")->second); | 1329 EXPECT_EQ("header-value", response_headers.find("header-name")->second); |
| 1330 EXPECT_EQ(0u, delegate->data_received().size()); | 1330 EXPECT_EQ(0u, delegate->data_received().size()); |
| 1331 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1331 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 1332 EXPECT_EQ(0, delegate->on_data_read_count()); | 1332 EXPECT_EQ(0, delegate->on_data_read_count()); |
| 1333 | 1333 |
| 1334 // If stream is destroyed, do not call into stream. | 1334 // If stream is destroyed, do not call into stream. |
| 1335 if (!GetParam()) | 1335 if (!GetParam()) |
| 1336 return; | 1336 return; |
| 1337 EXPECT_EQ(0, delegate->GetTotalSentBytes()); | 1337 EXPECT_EQ(0, delegate->GetTotalSentBytes()); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1376 | 1376 |
| 1377 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1377 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1378 std::unique_ptr<CancelOrDeleteStreamDelegate> delegate( | 1378 std::unique_ptr<CancelOrDeleteStreamDelegate> delegate( |
| 1379 new CancelOrDeleteStreamDelegate( | 1379 new CancelOrDeleteStreamDelegate( |
| 1380 read_buffer.get(), kReadBufferSize, | 1380 read_buffer.get(), kReadBufferSize, |
| 1381 CancelOrDeleteStreamDelegate::Phase::ON_DATA_READ, GetParam())); | 1381 CancelOrDeleteStreamDelegate::Phase::ON_DATA_READ, GetParam())); |
| 1382 delegate->SetRunUntilCompletion(true); | 1382 delegate->SetRunUntilCompletion(true); |
| 1383 delegate->Start(std::move(request_info), http_session_.get()); | 1383 delegate->Start(std::move(request_info), http_session_.get()); |
| 1384 // Makes sure delegate does not get called. | 1384 // Makes sure delegate does not get called. |
| 1385 base::RunLoop().RunUntilIdle(); | 1385 base::RunLoop().RunUntilIdle(); |
| 1386 const SpdyHeaderBlock response_headers = delegate->response_headers(); | 1386 const SpdyHeaderBlock& response_headers = delegate->response_headers(); |
| 1387 EXPECT_EQ("200", response_headers.find(":status")->second); | 1387 EXPECT_EQ("200", response_headers.find(":status")->second); |
| 1388 EXPECT_EQ("header-value", response_headers.find("header-name")->second); | 1388 EXPECT_EQ("header-value", response_headers.find("header-name")->second); |
| 1389 EXPECT_EQ(kUploadDataSize * 1, | 1389 EXPECT_EQ(kUploadDataSize * 1, |
| 1390 static_cast<int>(delegate->data_received().size())); | 1390 static_cast<int>(delegate->data_received().size())); |
| 1391 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1391 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 1392 | 1392 |
| 1393 // If stream is destroyed, do not call into stream. | 1393 // If stream is destroyed, do not call into stream. |
| 1394 if (!GetParam()) | 1394 if (!GetParam()) |
| 1395 return; | 1395 return; |
| 1396 EXPECT_EQ(0, delegate->GetTotalSentBytes()); | 1396 EXPECT_EQ(0, delegate->GetTotalSentBytes()); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1441 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1441 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1442 std::unique_ptr<CancelOrDeleteStreamDelegate> delegate( | 1442 std::unique_ptr<CancelOrDeleteStreamDelegate> delegate( |
| 1443 new CancelOrDeleteStreamDelegate( | 1443 new CancelOrDeleteStreamDelegate( |
| 1444 read_buffer.get(), kReadBufferSize, | 1444 read_buffer.get(), kReadBufferSize, |
| 1445 CancelOrDeleteStreamDelegate::Phase::ON_TRAILERS_RECEIVED, | 1445 CancelOrDeleteStreamDelegate::Phase::ON_TRAILERS_RECEIVED, |
| 1446 GetParam())); | 1446 GetParam())); |
| 1447 delegate->SetRunUntilCompletion(true); | 1447 delegate->SetRunUntilCompletion(true); |
| 1448 delegate->Start(std::move(request_info), http_session_.get()); | 1448 delegate->Start(std::move(request_info), http_session_.get()); |
| 1449 // Makes sure delegate does not get called. | 1449 // Makes sure delegate does not get called. |
| 1450 base::RunLoop().RunUntilIdle(); | 1450 base::RunLoop().RunUntilIdle(); |
| 1451 const SpdyHeaderBlock response_headers = delegate->response_headers(); | 1451 const SpdyHeaderBlock& response_headers = delegate->response_headers(); |
| 1452 EXPECT_EQ("200", response_headers.find(":status")->second); | 1452 EXPECT_EQ("200", response_headers.find(":status")->second); |
| 1453 EXPECT_EQ("header-value", response_headers.find("header-name")->second); | 1453 EXPECT_EQ("header-value", response_headers.find("header-name")->second); |
| 1454 EXPECT_EQ("bar", delegate->trailers().find("foo")->second); | 1454 EXPECT_EQ("bar", delegate->trailers().find("foo")->second); |
| 1455 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1455 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 1456 // OnDataRead may or may not have been fired before the stream is | 1456 // OnDataRead may or may not have been fired before the stream is |
| 1457 // canceled/deleted. | 1457 // canceled/deleted. |
| 1458 | 1458 |
| 1459 // If stream is destroyed, do not call into stream. | 1459 // If stream is destroyed, do not call into stream. |
| 1460 if (!GetParam()) | 1460 if (!GetParam()) |
| 1461 return; | 1461 return; |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1558 request_info->priority = LOWEST; | 1558 request_info->priority = LOWEST; |
| 1559 request_info->end_stream_on_headers = true; | 1559 request_info->end_stream_on_headers = true; |
| 1560 | 1560 |
| 1561 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1561 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1562 MockTimer* timer = new MockTimer(); | 1562 MockTimer* timer = new MockTimer(); |
| 1563 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( | 1563 std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase( |
| 1564 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); | 1564 read_buffer.get(), kReadBufferSize, base::WrapUnique(timer))); |
| 1565 delegate->SetRunUntilCompletion(true); | 1565 delegate->SetRunUntilCompletion(true); |
| 1566 delegate->Start(std::move(request_info), http_session_.get()); | 1566 delegate->Start(std::move(request_info), http_session_.get()); |
| 1567 | 1567 |
| 1568 const SpdyHeaderBlock response_headers = delegate->response_headers(); | 1568 const SpdyHeaderBlock& response_headers = delegate->response_headers(); |
| 1569 EXPECT_EQ("200", response_headers.find(":status")->second); | 1569 EXPECT_EQ("200", response_headers.find(":status")->second); |
| 1570 EXPECT_EQ(alt_svc_header_value, response_headers.find("alt-svc")->second); | 1570 EXPECT_EQ(alt_svc_header_value, response_headers.find("alt-svc")->second); |
| 1571 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1571 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 1572 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); | 1572 EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); |
| 1573 EXPECT_EQ(kUploadData, delegate->data_received()); | 1573 EXPECT_EQ(kUploadData, delegate->data_received()); |
| 1574 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), | 1574 EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), |
| 1575 delegate->GetTotalSentBytes()); | 1575 delegate->GetTotalSentBytes()); |
| 1576 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), | 1576 EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), |
| 1577 delegate->GetTotalReceivedBytes()); | 1577 delegate->GetTotalReceivedBytes()); |
| 1578 | 1578 |
| 1579 AlternativeServiceVector alternative_service_vector = | 1579 AlternativeServiceVector alternative_service_vector = |
| 1580 http_session_->http_server_properties()->GetAlternativeServices(server); | 1580 http_session_->http_server_properties()->GetAlternativeServices(server); |
| 1581 ASSERT_EQ(1u, alternative_service_vector.size()); | 1581 ASSERT_EQ(1u, alternative_service_vector.size()); |
| 1582 EXPECT_EQ(AlternateProtocolFromNextProto(kProtoQUIC1SPDY3), | 1582 EXPECT_EQ(AlternateProtocolFromNextProto(kProtoQUIC1SPDY3), |
| 1583 alternative_service_vector[0].protocol); | 1583 alternative_service_vector[0].protocol); |
| 1584 EXPECT_EQ("www.example.org", alternative_service_vector[0].host); | 1584 EXPECT_EQ("www.example.org", alternative_service_vector[0].host); |
| 1585 EXPECT_EQ(443, alternative_service_vector[0].port); | 1585 EXPECT_EQ(443, alternative_service_vector[0].port); |
| 1586 } | 1586 } |
| 1587 | 1587 |
| 1588 } // namespace net | 1588 } // namespace net |
| OLD | NEW |