Index: content/browser/loader/mock_resource_loader.cc |
diff --git a/content/browser/loader/mock_resource_loader.cc b/content/browser/loader/mock_resource_loader.cc |
index 56ed554c144f57e90ba1ffa37797d22cb68a844e..391782b6b8fb4d0a079ef462f1aa58de45988a3d 100644 |
--- a/content/browser/loader/mock_resource_loader.cc |
+++ b/content/browser/loader/mock_resource_loader.cc |
@@ -98,25 +98,19 @@ MockResourceLoader::Status MockResourceLoader::OnWillRead() { |
EXPECT_EQ(Status::IDLE, status_); |
status_ = Status::CALLING_HANDLER; |
- bool result = |
- resource_handler_->OnWillRead(&io_buffer_, &io_buffer_size_); |
- |
- // The second case isn't really allowed, but a number of classes do it |
- // anyways. |
- EXPECT_TRUE(status_ == Status::CALLING_HANDLER || |
- (result == false && status_ == Status::CANCELED)); |
- if (!result) { |
- // In the case of double-cancels, keep the old error code. |
- if (status_ != Status::CANCELED) |
- error_code_ = net::ERR_ABORTED; |
- EXPECT_EQ(0, io_buffer_size_); |
+ waiting_on_buffer_ = true; |
+ resource_handler_->OnWillRead( |
+ &io_buffer_, &io_buffer_size_, |
+ base::MakeUnique<TestResourceController>(weak_factory_.GetWeakPtr())); |
+ if (status_ == Status::CALLING_HANDLER) { |
+ // Shouldn't update |io_buffer_| or |io_buffer_size_| yet if Resume() |
+ // hasn't yet been called. |
EXPECT_FALSE(io_buffer_); |
- status_ = Status::CANCELED; |
- } else { |
- EXPECT_LT(0, io_buffer_size_); |
- EXPECT_TRUE(io_buffer_); |
- status_ = Status::IDLE; |
+ EXPECT_EQ(0, io_buffer_size_); |
+ |
+ status_ = Status::CALLBACK_PENDING; |
} |
+ |
return status_; |
}; |
@@ -196,6 +190,9 @@ void MockResourceLoader::OutOfBandCancel(int error_code, bool tell_renderer) { |
status_ = Status::CANCELED; |
canceled_out_of_band_ = true; |
+ // If OnWillRead was deferred, no longer waiting on a buffer. |
+ waiting_on_buffer_ = false; |
+ |
// To mimic real behavior, keep old error, in the case of double-cancel. |
if (error_code_ == net::OK) |
error_code_ = error_code; |
@@ -211,6 +208,13 @@ void MockResourceLoader::OnCancel(int error_code) { |
if (canceled_out_of_band_ && status_ == Status::CANCELED) |
return; |
+ // Shouldn't update |io_buffer_| or |io_buffer_size_| on cancel. |
+ if (waiting_on_buffer_) { |
+ EXPECT_FALSE(io_buffer_); |
+ EXPECT_EQ(0, io_buffer_size_); |
+ waiting_on_buffer_ = false; |
+ } |
+ |
EXPECT_LT(error_code, 0); |
EXPECT_TRUE(status_ == Status::CALLBACK_PENDING || |
status_ == Status::CALLING_HANDLER); |
@@ -222,6 +226,14 @@ void MockResourceLoader::OnCancel(int error_code) { |
} |
void MockResourceLoader::OnResume() { |
+ if (waiting_on_buffer_) { |
+ EXPECT_TRUE(io_buffer_); |
+ EXPECT_LT(0, io_buffer_size_); |
+ |
+ waiting_on_buffer_ = false; |
+ } |
+ |
+ // Shouldn't update |io_buffer_| or |io_buffer_size_| on cancel. |
EXPECT_TRUE(status_ == Status::CALLBACK_PENDING || |
status_ == Status::CALLING_HANDLER); |