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

Unified Diff: net/socket/socket_test_util.cc

Issue 1124533002: Add CompleteRead to SequencedSocketData and convert all but 3 tests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 7 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/socket/socket_test_util.h ('k') | net/spdy/spdy_network_transaction_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/socket/socket_test_util.cc
diff --git a/net/socket/socket_test_util.cc b/net/socket/socket_test_util.cc
index 920c5263eba9c9cbfdd8813841bb0d36fb507cdb..807d31b2fddbd6d94b9dec741c9f70e99f16dab4 100644
--- a/net/socket/socket_test_util.cc
+++ b/net/socket/socket_test_util.cc
@@ -524,15 +524,6 @@ MockRead SequencedSocketData::OnRead() {
NET_TRACE(1, " *** ") << "next_read: " << next_read.sequence_number;
CHECK_GE(next_read.sequence_number, sequence_number_);
- // Special case handling for hanging reads.
- if (next_read.mode == ASYNC && next_read.result == ERR_IO_PENDING) {
- NET_TRACE(1, " *** ") << "Hanging read";
- helper_.AdvanceRead();
- ++sequence_number_;
- CHECK(helper_.at_read_eof());
- return MockRead(SYNCHRONOUS, ERR_IO_PENDING);
- }
-
if (next_read.sequence_number <= sequence_number_) {
if (next_read.mode == SYNCHRONOUS) {
NET_TRACE(1, " *** ") << "Returning synchronously";
@@ -543,6 +534,15 @@ MockRead SequencedSocketData::OnRead() {
return next_read;
}
+ // If the result is ERR_IO_PENDING, then advance to the next state
+ // and pause reads.
+ if (next_read.result == ERR_IO_PENDING) {
+ NET_TRACE(1, " *** ") << "Pausing at: " << sequence_number_;
+ ++sequence_number_;
+ helper_.AdvanceRead();
+ read_state_ = PAUSED;
+ return MockRead(SYNCHRONOUS, ERR_IO_PENDING);
+ }
base::MessageLoop::current()->PostTask(
FROM_HERE, base::Bind(&SequencedSocketData::OnReadComplete,
weak_factory_.GetWeakPtr()));
@@ -625,6 +625,19 @@ bool SequencedSocketData::at_write_eof() const {
return helper_.at_read_eof();
}
+bool SequencedSocketData::IsReadPaused() {
+ return read_state_ == PAUSED;
+}
+
+void SequencedSocketData::CompleteRead() {
+ if (read_state_ != PAUSED) {
+ ADD_FAILURE() << "Unable to CompleteRead when not paused.";
+ return;
+ }
+ read_state_ = COMPLETING;
+ OnReadComplete();
+}
+
void SequencedSocketData::MaybePostReadCompleteTask() {
NET_TRACE(1, " ****** ") << " current: " << sequence_number_;
// Only trigger the next read to complete if there is already a read pending
@@ -634,6 +647,16 @@ void SequencedSocketData::MaybePostReadCompleteTask() {
return;
}
+ // If the result is ERR_IO_PENDING, then advance to the next state
+ // and pause reads.
+ if (helper_.PeekRead().result == ERR_IO_PENDING) {
+ NET_TRACE(1, " *** ") << "Pausing read at: " << sequence_number_;
+ ++sequence_number_;
+ helper_.AdvanceRead();
+ read_state_ = PAUSED;
+ return;
+ }
+
NET_TRACE(1, " ****** ") << "Posting task to complete read: "
<< sequence_number_;
base::MessageLoop::current()->PostTask(
@@ -681,7 +704,8 @@ void SequencedSocketData::OnReadComplete() {
// before calling that.
MaybePostWriteCompleteTask();
- NET_TRACE(1, " *** ") << "Completing socket read for: " << sequence_number_;
+ NET_TRACE(1, " *** ") << "Completing socket read for: "
+ << data.sequence_number;
DumpMockReadWrite(data);
socket()->OnReadComplete(data);
NET_TRACE(1, " *** ") << "Done";
@@ -708,7 +732,8 @@ void SequencedSocketData::OnWriteComplete() {
// before calling that.
MaybePostReadCompleteTask();
- NET_TRACE(1, " *** ") << " Completing socket write for: " << sequence_number_;
+ NET_TRACE(1, " *** ") << " Completing socket write for: "
+ << data.sequence_number;
socket()->OnWriteComplete(rv);
NET_TRACE(1, " *** ") << "Done";
}
« no previous file with comments | « net/socket/socket_test_util.h ('k') | net/spdy/spdy_network_transaction_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698