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 |