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

Unified Diff: content/browser/loader/mock_resource_loader.cc

Issue 2668603003: Make ResourceHandler::OnWillRead able to complete asynchronously. (Closed)
Patch Set: Fix merge (x2) Created 3 years, 9 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
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);

Powered by Google App Engine
This is Rietveld 408576698