Index: net/socket/socket_test_util.cc |
diff --git a/net/socket/socket_test_util.cc b/net/socket/socket_test_util.cc |
index 93fcf3d7bd053489980ab129072216a3893c9d96..bd3bdedbe136fdd684f563e2449ffbc89d2e519d 100644 |
--- a/net/socket/socket_test_util.cc |
+++ b/net/socket/socket_test_util.cc |
@@ -143,6 +143,10 @@ MockConnect::MockConnect(IoMode io_mode, int r, IPEndPoint addr) : |
MockConnect::~MockConnect() {} |
+bool SocketDataProvider::IsIdle() const { |
+ return true; |
+} |
+ |
StaticSocketDataHelper::StaticSocketDataHelper(MockRead* reads, |
size_t reads_count, |
MockWrite* writes, |
@@ -288,6 +292,7 @@ SequencedSocketData::SequencedSocketData(MockRead* reads, |
sequence_number_(0), |
read_state_(IDLE), |
write_state_(IDLE), |
+ busy_before_sync_reads_(false), |
weak_factory_(this) { |
// Check that reads and writes have a contiguous set of sequence numbers |
// starting from 0 and working their way up, with no repeats and skipping |
@@ -427,6 +432,20 @@ bool SequencedSocketData::AllWriteDataConsumed() const { |
return helper_.AllWriteDataConsumed(); |
} |
+bool SequencedSocketData::IsIdle() const { |
+ // If |busy_before_sync_reads_| is not set, always considered idle. If |
+ // no reads left, or the next operation is a write, also consider it idle. |
+ if (!busy_before_sync_reads_ || helper_.AllReadDataConsumed() || |
+ helper_.PeekRead().sequence_number != sequence_number_) { |
+ return true; |
+ } |
+ |
+ // If the next operation is synchronous read, treat the socket as not idle. |
+ if (helper_.PeekRead().mode == SYNCHRONOUS) |
+ return false; |
+ return true; |
+} |
+ |
bool SequencedSocketData::IsReadPaused() { |
return read_state_ == PAUSED; |
} |
@@ -1059,7 +1078,7 @@ bool MockTCPClientSocket::IsConnected() const { |
} |
bool MockTCPClientSocket::IsConnectedAndIdle() const { |
- return IsConnected(); |
+ return IsConnected() && data_->IsIdle(); |
} |
int MockTCPClientSocket::GetPeerAddress(IPEndPoint* address) const { |
@@ -1503,6 +1522,10 @@ bool MockSSLClientSocket::IsConnected() const { |
return transport_->socket()->IsConnected(); |
} |
+bool MockSSLClientSocket::IsConnectedAndIdle() const { |
+ return transport_->socket()->IsConnectedAndIdle(); |
+} |
+ |
bool MockSSLClientSocket::WasEverUsed() const { |
return transport_->socket()->WasEverUsed(); |
} |