Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(203)

Side by Side Diff: net/socket/socket_test_util.cc

Issue 1494813002: Fix HttpStreamParser::CanReuseConnection(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More fixes Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« net/socket/socket_test_util.h ('K') | « net/socket/socket_test_util.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/socket/socket_test_util.h" 5 #include "net/socket/socket_test_util.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 } 136 }
137 137
138 MockConnect::MockConnect(IoMode io_mode, int r, IPEndPoint addr) : 138 MockConnect::MockConnect(IoMode io_mode, int r, IPEndPoint addr) :
139 mode(io_mode), 139 mode(io_mode),
140 result(r), 140 result(r),
141 peer_addr(addr) { 141 peer_addr(addr) {
142 } 142 }
143 143
144 MockConnect::~MockConnect() {} 144 MockConnect::~MockConnect() {}
145 145
146 bool SocketDataProvider::IsIdle() const {
147 return true;
148 }
149
150 SocketDataProvider::SocketDataProvider() : socket_(nullptr) {}
151
152 SocketDataProvider::~SocketDataProvider() {
153 if (socket_)
154 socket_->OnDataProviderDestroyed();
155 }
156
146 StaticSocketDataHelper::StaticSocketDataHelper(MockRead* reads, 157 StaticSocketDataHelper::StaticSocketDataHelper(MockRead* reads,
147 size_t reads_count, 158 size_t reads_count,
148 MockWrite* writes, 159 MockWrite* writes,
149 size_t writes_count) 160 size_t writes_count)
150 : reads_(reads), 161 : reads_(reads),
151 read_index_(0), 162 read_index_(0),
152 read_count_(reads_count), 163 read_count_(reads_count),
153 writes_(writes), 164 writes_(writes),
154 write_index_(0), 165 write_index_(0),
155 write_count_(writes_count) { 166 write_count_(writes_count) {
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 } 292 }
282 293
283 SequencedSocketData::SequencedSocketData(MockRead* reads, 294 SequencedSocketData::SequencedSocketData(MockRead* reads,
284 size_t reads_count, 295 size_t reads_count,
285 MockWrite* writes, 296 MockWrite* writes,
286 size_t writes_count) 297 size_t writes_count)
287 : helper_(reads, reads_count, writes, writes_count), 298 : helper_(reads, reads_count, writes, writes_count),
288 sequence_number_(0), 299 sequence_number_(0),
289 read_state_(IDLE), 300 read_state_(IDLE),
290 write_state_(IDLE), 301 write_state_(IDLE),
302 busy_before_sync_reads_(false),
291 weak_factory_(this) { 303 weak_factory_(this) {
292 // Check that reads and writes have a contiguous set of sequence numbers 304 // Check that reads and writes have a contiguous set of sequence numbers
293 // starting from 0 and working their way up, with no repeats and skipping 305 // starting from 0 and working their way up, with no repeats and skipping
294 // no values. 306 // no values.
295 size_t next_read = 0; 307 size_t next_read = 0;
296 size_t next_write = 0; 308 size_t next_write = 0;
297 int next_sequence_number = 0; 309 int next_sequence_number = 0;
298 while (next_read < reads_count || next_write < writes_count) { 310 while (next_read < reads_count || next_write < writes_count) {
299 if (next_read < reads_count && 311 if (next_read < reads_count &&
300 reads[next_read].sequence_number == next_sequence_number) { 312 reads[next_read].sequence_number == next_sequence_number) {
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 } 432 }
421 433
422 bool SequencedSocketData::AllReadDataConsumed() const { 434 bool SequencedSocketData::AllReadDataConsumed() const {
423 return helper_.AllReadDataConsumed(); 435 return helper_.AllReadDataConsumed();
424 } 436 }
425 437
426 bool SequencedSocketData::AllWriteDataConsumed() const { 438 bool SequencedSocketData::AllWriteDataConsumed() const {
427 return helper_.AllWriteDataConsumed(); 439 return helper_.AllWriteDataConsumed();
428 } 440 }
429 441
442 bool SequencedSocketData::IsIdle() const {
443 // If |busy_before_sync_reads_| is not set, always considered idle. If
444 // no reads left, or the next operation is a write, also consider it idle.
445 if (!busy_before_sync_reads_ || helper_.AllReadDataConsumed() ||
446 helper_.PeekRead().sequence_number != sequence_number_) {
447 return true;
448 }
449
450 // If the next operation is synchronous read, treat the socket as not idle.
451 if (helper_.PeekRead().mode == SYNCHRONOUS)
452 return false;
453 return true;
454 }
455
430 bool SequencedSocketData::IsReadPaused() { 456 bool SequencedSocketData::IsReadPaused() {
431 return read_state_ == PAUSED; 457 return read_state_ == PAUSED;
432 } 458 }
433 459
434 void SequencedSocketData::CompleteRead() { 460 void SequencedSocketData::CompleteRead() {
435 if (read_state_ != PAUSED) { 461 if (read_state_ != PAUSED) {
436 ADD_FAILURE() << "Unable to CompleteRead when not paused."; 462 ADD_FAILURE() << "Unable to CompleteRead when not paused.";
437 return; 463 return;
438 } 464 }
439 read_state_ = COMPLETING; 465 read_state_ = COMPLETING;
(...skipping 493 matching lines...) Expand 10 before | Expand all | Expand 10 after
933 need_read_data_(true), 959 need_read_data_(true),
934 peer_closed_connection_(false), 960 peer_closed_connection_(false),
935 pending_read_buf_(NULL), 961 pending_read_buf_(NULL),
936 pending_read_buf_len_(0), 962 pending_read_buf_len_(0),
937 was_used_to_convey_data_(false) { 963 was_used_to_convey_data_(false) {
938 DCHECK(data_); 964 DCHECK(data_);
939 peer_addr_ = data->connect_data().peer_addr; 965 peer_addr_ = data->connect_data().peer_addr;
940 data_->Reset(); 966 data_->Reset();
941 } 967 }
942 968
943 MockTCPClientSocket::~MockTCPClientSocket() {} 969 MockTCPClientSocket::~MockTCPClientSocket() {
970 if (data_)
971 data_->set_socket(nullptr);
972 }
944 973
945 int MockTCPClientSocket::Read(IOBuffer* buf, int buf_len, 974 int MockTCPClientSocket::Read(IOBuffer* buf, int buf_len,
946 const CompletionCallback& callback) { 975 const CompletionCallback& callback) {
947 if (!connected_) 976 if (!connected_ || !data_)
948 return ERR_UNEXPECTED; 977 return ERR_UNEXPECTED;
949 978
950 // If the buffer is already in use, a read is already in progress! 979 // If the buffer is already in use, a read is already in progress!
951 DCHECK(pending_read_buf_.get() == NULL); 980 DCHECK(pending_read_buf_.get() == NULL);
952 981
953 // Store our async IO data. 982 // Store our async IO data.
954 pending_read_buf_ = buf; 983 pending_read_buf_ = buf;
955 pending_read_buf_len_ = buf_len; 984 pending_read_buf_len_ = buf_len;
956 pending_read_callback_ = callback; 985 pending_read_callback_ = callback;
957 986
(...skipping 21 matching lines...) Expand all
979 } 1008 }
980 1009
981 return CompleteRead(); 1010 return CompleteRead();
982 } 1011 }
983 1012
984 int MockTCPClientSocket::Write(IOBuffer* buf, int buf_len, 1013 int MockTCPClientSocket::Write(IOBuffer* buf, int buf_len,
985 const CompletionCallback& callback) { 1014 const CompletionCallback& callback) {
986 DCHECK(buf); 1015 DCHECK(buf);
987 DCHECK_GT(buf_len, 0); 1016 DCHECK_GT(buf_len, 0);
988 1017
989 if (!connected_) 1018 if (!connected_ || !data_)
990 return ERR_UNEXPECTED; 1019 return ERR_UNEXPECTED;
991 1020
992 std::string data(buf->data(), buf_len); 1021 std::string data(buf->data(), buf_len);
993 MockWriteResult write_result = data_->OnWrite(data); 1022 MockWriteResult write_result = data_->OnWrite(data);
994 1023
995 was_used_to_convey_data_ = true; 1024 was_used_to_convey_data_ = true;
996 1025
997 // ERR_IO_PENDING is a signal that the socket data will call back 1026 // ERR_IO_PENDING is a signal that the socket data will call back
998 // asynchronously later. 1027 // asynchronously later.
999 if (write_result.result == ERR_IO_PENDING) { 1028 if (write_result.result == ERR_IO_PENDING) {
(...skipping 17 matching lines...) Expand all
1017 connection_attempts_.clear(); 1046 connection_attempts_.clear();
1018 } 1047 }
1019 1048
1020 void MockTCPClientSocket::AddConnectionAttempts( 1049 void MockTCPClientSocket::AddConnectionAttempts(
1021 const ConnectionAttempts& attempts) { 1050 const ConnectionAttempts& attempts) {
1022 connection_attempts_.insert(connection_attempts_.begin(), attempts.begin(), 1051 connection_attempts_.insert(connection_attempts_.begin(), attempts.begin(),
1023 attempts.end()); 1052 attempts.end());
1024 } 1053 }
1025 1054
1026 int MockTCPClientSocket::Connect(const CompletionCallback& callback) { 1055 int MockTCPClientSocket::Connect(const CompletionCallback& callback) {
1056 if (!data_)
1057 return ERR_UNEXPECTED;
1058
1027 if (connected_) 1059 if (connected_)
1028 return OK; 1060 return OK;
1029 connected_ = true; 1061 connected_ = true;
1030 peer_closed_connection_ = false; 1062 peer_closed_connection_ = false;
1031 1063
1032 int result = data_->connect_data().result; 1064 int result = data_->connect_data().result;
1033 IoMode mode = data_->connect_data().mode; 1065 IoMode mode = data_->connect_data().mode;
1034 1066
1035 if (result != OK && result != ERR_IO_PENDING) { 1067 if (result != OK && result != ERR_IO_PENDING) {
1036 IPEndPoint address; 1068 IPEndPoint address;
(...skipping 11 matching lines...) Expand all
1048 return ERR_IO_PENDING; 1080 return ERR_IO_PENDING;
1049 } 1081 }
1050 1082
1051 void MockTCPClientSocket::Disconnect() { 1083 void MockTCPClientSocket::Disconnect() {
1052 MockClientSocket::Disconnect(); 1084 MockClientSocket::Disconnect();
1053 pending_connect_callback_.Reset(); 1085 pending_connect_callback_.Reset();
1054 pending_read_callback_.Reset(); 1086 pending_read_callback_.Reset();
1055 } 1087 }
1056 1088
1057 bool MockTCPClientSocket::IsConnected() const { 1089 bool MockTCPClientSocket::IsConnected() const {
1090 if (!data_)
1091 return false;
1058 return connected_ && !peer_closed_connection_; 1092 return connected_ && !peer_closed_connection_;
1059 } 1093 }
1060 1094
1061 bool MockTCPClientSocket::IsConnectedAndIdle() const { 1095 bool MockTCPClientSocket::IsConnectedAndIdle() const {
1062 return IsConnected(); 1096 if (!data_)
1097 return false;
1098 return IsConnected() && data_->IsIdle();
1063 } 1099 }
1064 1100
1065 int MockTCPClientSocket::GetPeerAddress(IPEndPoint* address) const { 1101 int MockTCPClientSocket::GetPeerAddress(IPEndPoint* address) const {
1066 if (addresses_.empty()) 1102 if (addresses_.empty())
1067 return MockClientSocket::GetPeerAddress(address); 1103 return MockClientSocket::GetPeerAddress(address);
1068 1104
1069 *address = addresses_[0]; 1105 *address = addresses_[0];
1070 return OK; 1106 return OK;
1071 } 1107 }
1072 1108
1073 bool MockTCPClientSocket::WasEverUsed() const { 1109 bool MockTCPClientSocket::WasEverUsed() const {
1074 return was_used_to_convey_data_; 1110 return was_used_to_convey_data_;
1075 } 1111 }
1076 1112
1077 bool MockTCPClientSocket::UsingTCPFastOpen() const { 1113 bool MockTCPClientSocket::UsingTCPFastOpen() const {
1078 return false; 1114 return false;
1079 } 1115 }
1080 1116
1081 bool MockTCPClientSocket::WasNpnNegotiated() const { 1117 bool MockTCPClientSocket::WasNpnNegotiated() const {
1082 return false; 1118 return false;
1083 } 1119 }
1084 1120
1085 bool MockTCPClientSocket::GetSSLInfo(SSLInfo* ssl_info) { 1121 bool MockTCPClientSocket::GetSSLInfo(SSLInfo* ssl_info) {
1086 return false; 1122 return false;
1087 } 1123 }
1088 1124
1089 void MockTCPClientSocket::OnReadComplete(const MockRead& data) { 1125 void MockTCPClientSocket::OnReadComplete(const MockRead& data) {
1126 // If |data_| has been destroyed, safest to just do nothing.
1127 if (!data_)
1128 return;
1129
1090 // There must be a read pending. 1130 // There must be a read pending.
1091 DCHECK(pending_read_buf_.get()); 1131 DCHECK(pending_read_buf_.get());
1092 // You can't complete a read with another ERR_IO_PENDING status code. 1132 // You can't complete a read with another ERR_IO_PENDING status code.
1093 DCHECK_NE(ERR_IO_PENDING, data.result); 1133 DCHECK_NE(ERR_IO_PENDING, data.result);
1094 // Since we've been waiting for data, need_read_data_ should be true. 1134 // Since we've been waiting for data, need_read_data_ should be true.
1095 DCHECK(need_read_data_); 1135 DCHECK(need_read_data_);
1096 1136
1097 read_data_ = data; 1137 read_data_ = data;
1098 need_read_data_ = false; 1138 need_read_data_ = false;
1099 1139
1100 // The caller is simulating that this IO completes right now. Don't 1140 // The caller is simulating that this IO completes right now. Don't
1101 // let CompleteRead() schedule a callback. 1141 // let CompleteRead() schedule a callback.
1102 read_data_.mode = SYNCHRONOUS; 1142 read_data_.mode = SYNCHRONOUS;
1103 1143
1104 CompletionCallback callback = pending_read_callback_; 1144 CompletionCallback callback = pending_read_callback_;
1105 int rv = CompleteRead(); 1145 int rv = CompleteRead();
1106 RunCallback(callback, rv); 1146 RunCallback(callback, rv);
1107 } 1147 }
1108 1148
1109 void MockTCPClientSocket::OnWriteComplete(int rv) { 1149 void MockTCPClientSocket::OnWriteComplete(int rv) {
1150 // If |data_| has been destroyed, safest to just do nothing.
1151 if (!data_)
1152 return;
1153
1110 // There must be a read pending. 1154 // There must be a read pending.
1111 DCHECK(!pending_write_callback_.is_null()); 1155 DCHECK(!pending_write_callback_.is_null());
1112 CompletionCallback callback = pending_write_callback_; 1156 CompletionCallback callback = pending_write_callback_;
1113 RunCallback(callback, rv); 1157 RunCallback(callback, rv);
1114 } 1158 }
1115 1159
1116 void MockTCPClientSocket::OnConnectComplete(const MockConnect& data) { 1160 void MockTCPClientSocket::OnConnectComplete(const MockConnect& data) {
1161 // If |data_| has been destroyed, safest to just do nothing.
1162 if (!data_)
1163 return;
1164
1117 CompletionCallback callback = pending_connect_callback_; 1165 CompletionCallback callback = pending_connect_callback_;
1118 RunCallback(callback, data.result); 1166 RunCallback(callback, data.result);
1119 } 1167 }
1120 1168
1169 void MockTCPClientSocket::OnDataProviderDestroyed() {
1170 data_ = nullptr;
1171 }
1172
1121 int MockTCPClientSocket::CompleteRead() { 1173 int MockTCPClientSocket::CompleteRead() {
1122 DCHECK(pending_read_buf_.get()); 1174 DCHECK(pending_read_buf_.get());
1123 DCHECK(pending_read_buf_len_ > 0); 1175 DCHECK(pending_read_buf_len_ > 0);
1124 1176
1125 was_used_to_convey_data_ = true; 1177 was_used_to_convey_data_ = true;
1126 1178
1127 // Save the pending async IO data and reset our |pending_| state. 1179 // Save the pending async IO data and reset our |pending_| state.
1128 scoped_refptr<IOBuffer> buf = pending_read_buf_; 1180 scoped_refptr<IOBuffer> buf = pending_read_buf_;
1129 int buf_len = pending_read_buf_len_; 1181 int buf_len = pending_read_buf_len_;
1130 CompletionCallback callback = pending_read_callback_; 1182 CompletionCallback callback = pending_read_callback_;
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
1496 void MockSSLClientSocket::Disconnect() { 1548 void MockSSLClientSocket::Disconnect() {
1497 MockClientSocket::Disconnect(); 1549 MockClientSocket::Disconnect();
1498 if (transport_->socket() != NULL) 1550 if (transport_->socket() != NULL)
1499 transport_->socket()->Disconnect(); 1551 transport_->socket()->Disconnect();
1500 } 1552 }
1501 1553
1502 bool MockSSLClientSocket::IsConnected() const { 1554 bool MockSSLClientSocket::IsConnected() const {
1503 return transport_->socket()->IsConnected(); 1555 return transport_->socket()->IsConnected();
1504 } 1556 }
1505 1557
1558 bool MockSSLClientSocket::IsConnectedAndIdle() const {
1559 return transport_->socket()->IsConnectedAndIdle();
1560 }
1561
1506 bool MockSSLClientSocket::WasEverUsed() const { 1562 bool MockSSLClientSocket::WasEverUsed() const {
1507 return transport_->socket()->WasEverUsed(); 1563 return transport_->socket()->WasEverUsed();
1508 } 1564 }
1509 1565
1510 bool MockSSLClientSocket::UsingTCPFastOpen() const { 1566 bool MockSSLClientSocket::UsingTCPFastOpen() const {
1511 return transport_->socket()->UsingTCPFastOpen(); 1567 return transport_->socket()->UsingTCPFastOpen();
1512 } 1568 }
1513 1569
1514 int MockSSLClientSocket::GetPeerAddress(IPEndPoint* address) const { 1570 int MockSSLClientSocket::GetPeerAddress(IPEndPoint* address) const {
1515 return transport_->socket()->GetPeerAddress(address); 1571 return transport_->socket()->GetPeerAddress(address);
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1568 source_port_(123), 1624 source_port_(123),
1569 pending_read_buf_(NULL), 1625 pending_read_buf_(NULL),
1570 pending_read_buf_len_(0), 1626 pending_read_buf_len_(0),
1571 net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_NONE)), 1627 net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_NONE)),
1572 weak_factory_(this) { 1628 weak_factory_(this) {
1573 DCHECK(data_); 1629 DCHECK(data_);
1574 data_->Reset(); 1630 data_->Reset();
1575 peer_addr_ = data->connect_data().peer_addr; 1631 peer_addr_ = data->connect_data().peer_addr;
1576 } 1632 }
1577 1633
1578 MockUDPClientSocket::~MockUDPClientSocket() {} 1634 MockUDPClientSocket::~MockUDPClientSocket() {
1635 if (data_)
1636 data_->set_socket(nullptr);
1637 }
1579 1638
1580 int MockUDPClientSocket::Read(IOBuffer* buf, 1639 int MockUDPClientSocket::Read(IOBuffer* buf,
1581 int buf_len, 1640 int buf_len,
1582 const CompletionCallback& callback) { 1641 const CompletionCallback& callback) {
1583 if (!connected_) 1642 if (!connected_ || !data_)
1584 return ERR_UNEXPECTED; 1643 return ERR_UNEXPECTED;
1585 1644
1586 // If the buffer is already in use, a read is already in progress! 1645 // If the buffer is already in use, a read is already in progress!
1587 DCHECK(pending_read_buf_.get() == NULL); 1646 DCHECK(pending_read_buf_.get() == NULL);
1588 1647
1589 // Store our async IO data. 1648 // Store our async IO data.
1590 pending_read_buf_ = buf; 1649 pending_read_buf_ = buf;
1591 pending_read_buf_len_ = buf_len; 1650 pending_read_buf_len_ = buf_len;
1592 pending_read_callback_ = callback; 1651 pending_read_callback_ = callback;
1593 1652
(...skipping 10 matching lines...) Expand all
1604 } 1663 }
1605 1664
1606 return CompleteRead(); 1665 return CompleteRead();
1607 } 1666 }
1608 1667
1609 int MockUDPClientSocket::Write(IOBuffer* buf, int buf_len, 1668 int MockUDPClientSocket::Write(IOBuffer* buf, int buf_len,
1610 const CompletionCallback& callback) { 1669 const CompletionCallback& callback) {
1611 DCHECK(buf); 1670 DCHECK(buf);
1612 DCHECK_GT(buf_len, 0); 1671 DCHECK_GT(buf_len, 0);
1613 1672
1614 if (!connected_) 1673 if (!connected_ || !data_)
1615 return ERR_UNEXPECTED; 1674 return ERR_UNEXPECTED;
1616 1675
1617 std::string data(buf->data(), buf_len); 1676 std::string data(buf->data(), buf_len);
1618 MockWriteResult write_result = data_->OnWrite(data); 1677 MockWriteResult write_result = data_->OnWrite(data);
1619 1678
1620 // ERR_IO_PENDING is a signal that the socket data will call back 1679 // ERR_IO_PENDING is a signal that the socket data will call back
1621 // asynchronously. 1680 // asynchronously.
1622 if (write_result.result == ERR_IO_PENDING) { 1681 if (write_result.result == ERR_IO_PENDING) {
1623 pending_write_callback_ = callback; 1682 pending_write_callback_ = callback;
1624 return ERR_IO_PENDING; 1683 return ERR_IO_PENDING;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1658 const BoundNetLog& MockUDPClientSocket::NetLog() const { 1717 const BoundNetLog& MockUDPClientSocket::NetLog() const {
1659 return net_log_; 1718 return net_log_;
1660 } 1719 }
1661 1720
1662 int MockUDPClientSocket::BindToNetwork( 1721 int MockUDPClientSocket::BindToNetwork(
1663 NetworkChangeNotifier::NetworkHandle network) { 1722 NetworkChangeNotifier::NetworkHandle network) {
1664 return ERR_NOT_IMPLEMENTED; 1723 return ERR_NOT_IMPLEMENTED;
1665 } 1724 }
1666 1725
1667 int MockUDPClientSocket::Connect(const IPEndPoint& address) { 1726 int MockUDPClientSocket::Connect(const IPEndPoint& address) {
1727 if (!data_)
1728 return ERR_UNEXPECTED;
1668 connected_ = true; 1729 connected_ = true;
1669 peer_addr_ = address; 1730 peer_addr_ = address;
1670 return data_->connect_data().result; 1731 return data_->connect_data().result;
1671 } 1732 }
1672 1733
1673 void MockUDPClientSocket::OnReadComplete(const MockRead& data) { 1734 void MockUDPClientSocket::OnReadComplete(const MockRead& data) {
1735 if (!data_)
1736 return;
1737
1674 // There must be a read pending. 1738 // There must be a read pending.
1675 DCHECK(pending_read_buf_.get()); 1739 DCHECK(pending_read_buf_.get());
1676 // You can't complete a read with another ERR_IO_PENDING status code. 1740 // You can't complete a read with another ERR_IO_PENDING status code.
1677 DCHECK_NE(ERR_IO_PENDING, data.result); 1741 DCHECK_NE(ERR_IO_PENDING, data.result);
1678 // Since we've been waiting for data, need_read_data_ should be true. 1742 // Since we've been waiting for data, need_read_data_ should be true.
1679 DCHECK(need_read_data_); 1743 DCHECK(need_read_data_);
1680 1744
1681 read_data_ = data; 1745 read_data_ = data;
1682 need_read_data_ = false; 1746 need_read_data_ = false;
1683 1747
1684 // The caller is simulating that this IO completes right now. Don't 1748 // The caller is simulating that this IO completes right now. Don't
1685 // let CompleteRead() schedule a callback. 1749 // let CompleteRead() schedule a callback.
1686 read_data_.mode = SYNCHRONOUS; 1750 read_data_.mode = SYNCHRONOUS;
1687 1751
1688 CompletionCallback callback = pending_read_callback_; 1752 CompletionCallback callback = pending_read_callback_;
1689 int rv = CompleteRead(); 1753 int rv = CompleteRead();
1690 RunCallback(callback, rv); 1754 RunCallback(callback, rv);
1691 } 1755 }
1692 1756
1693 void MockUDPClientSocket::OnWriteComplete(int rv) { 1757 void MockUDPClientSocket::OnWriteComplete(int rv) {
1758 if (!data_)
1759 return;
1760
1694 // There must be a read pending. 1761 // There must be a read pending.
1695 DCHECK(!pending_write_callback_.is_null()); 1762 DCHECK(!pending_write_callback_.is_null());
1696 CompletionCallback callback = pending_write_callback_; 1763 CompletionCallback callback = pending_write_callback_;
1697 RunCallback(callback, rv); 1764 RunCallback(callback, rv);
1698 } 1765 }
1699 1766
1700 void MockUDPClientSocket::OnConnectComplete(const MockConnect& data) { 1767 void MockUDPClientSocket::OnConnectComplete(const MockConnect& data) {
1701 NOTIMPLEMENTED(); 1768 NOTIMPLEMENTED();
1702 } 1769 }
1703 1770
1771 void MockUDPClientSocket::OnDataProviderDestroyed() {
1772 data_ = nullptr;
1773 }
1774
1704 int MockUDPClientSocket::CompleteRead() { 1775 int MockUDPClientSocket::CompleteRead() {
1705 DCHECK(pending_read_buf_.get()); 1776 DCHECK(pending_read_buf_.get());
1706 DCHECK(pending_read_buf_len_ > 0); 1777 DCHECK(pending_read_buf_len_ > 0);
1707 1778
1708 // Save the pending async IO data and reset our |pending_| state. 1779 // Save the pending async IO data and reset our |pending_| state.
1709 scoped_refptr<IOBuffer> buf = pending_read_buf_; 1780 scoped_refptr<IOBuffer> buf = pending_read_buf_;
1710 int buf_len = pending_read_buf_len_; 1781 int buf_len = pending_read_buf_len_;
1711 CompletionCallback callback = pending_read_callback_; 1782 CompletionCallback callback = pending_read_callback_;
1712 pending_read_buf_ = NULL; 1783 pending_read_buf_ = NULL;
1713 pending_read_buf_len_ = 0; 1784 pending_read_buf_len_ = 0;
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
2066 } 2137 }
2067 2138
2068 int64_t CountWriteBytes(const MockWrite writes[], size_t writes_size) { 2139 int64_t CountWriteBytes(const MockWrite writes[], size_t writes_size) {
2069 int64_t total = 0; 2140 int64_t total = 0;
2070 for (const MockWrite* write = writes; write != writes + writes_size; ++write) 2141 for (const MockWrite* write = writes; write != writes + writes_size; ++write)
2071 total += write->data_len; 2142 total += write->data_len;
2072 return total; 2143 return total;
2073 } 2144 }
2074 2145
2075 } // namespace net 2146 } // namespace net
OLDNEW
« net/socket/socket_test_util.h ('K') | « net/socket/socket_test_util.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698