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

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

Issue 2668603003: Make ResourceHandler::OnWillRead able to complete asynchronously. (Closed)
Patch Set: Response to comments 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
« no previous file with comments | « content/browser/loader/test_resource_handler.h ('k') | content/test/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/loader/test_resource_handler.cc
diff --git a/content/browser/loader/test_resource_handler.cc b/content/browser/loader/test_resource_handler.cc
index 1f8c97038413306e09933e2646073cef2f241367..4bcf6e296a2bc85ab0c954498753fabdbb5d6ed0 100644
--- a/content/browser/loader/test_resource_handler.cc
+++ b/content/browser/loader/test_resource_handler.cc
@@ -141,8 +141,10 @@ void TestResourceHandler::OnWillStart(
controller->Resume();
}
-bool TestResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf,
- int* buf_size) {
+void TestResourceHandler::OnWillRead(
+ scoped_refptr<net::IOBuffer>* buf,
+ int* buf_size,
+ std::unique_ptr<ResourceController> controller) {
EXPECT_FALSE(canceled_);
EXPECT_FALSE(expect_on_data_downloaded_);
EXPECT_EQ(0, on_response_completed_called_);
@@ -157,13 +159,22 @@ bool TestResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf,
if (!on_will_read_result_) {
canceled_ = true;
- } else {
- *buf = buffer_;
- *buf_size = buffer_size_;
- memset(buffer_->data(), '\0', buffer_size_);
+ controller->Cancel();
+ return;
+ }
+
+ if (defer_on_will_read_) {
+ parent_read_buffer_ = buf;
+ parent_read_buffer_size_ = buf_size;
+ defer_on_will_read_ = false;
+ HoldController(std::move(controller));
+ deferred_run_loop_->Quit();
+ return;
}
- return on_will_read_result_;
+ *buf = buffer_;
+ *buf_size = buffer_size_;
+ controller->Resume();
}
void TestResourceHandler::OnReadCompleted(
@@ -174,12 +185,12 @@ void TestResourceHandler::OnReadCompleted(
EXPECT_EQ(1, on_will_start_called_);
EXPECT_EQ(1, on_response_started_called_);
EXPECT_EQ(0, on_response_completed_called_);
- EXPECT_EQ(0, on_read_eof_);
+ EXPECT_EQ(0, on_read_eof_called_);
ScopedCallDepthTracker call_depth_tracker(&call_depth_);
++on_read_completed_called_;
if (bytes_read == 0)
- ++on_read_eof_;
+ ++on_read_eof_called_;
EXPECT_LE(static_cast<size_t>(bytes_read), buffer_size_);
if (body_ptr_)
@@ -207,9 +218,13 @@ void TestResourceHandler::OnResponseCompleted(
std::unique_ptr<ResourceController> controller) {
ScopedCallDepthTracker call_depth_tracker(&call_depth_);
+ // These may be non-NULL if there was an out-of-band cancel.
+ parent_read_buffer_ = nullptr;
+ parent_read_buffer_size_ = nullptr;
+
EXPECT_EQ(0, on_response_completed_called_);
if (status.is_success() && !expect_on_data_downloaded_ && expect_eof_read_)
- EXPECT_EQ(1, on_read_eof_);
+ EXPECT_EQ(1, on_read_eof_called_);
++on_response_completed_called_;
@@ -242,12 +257,26 @@ void TestResourceHandler::OnDataDownloaded(int bytes_downloaded) {
void TestResourceHandler::Resume() {
ScopedCallDepthTracker call_depth_tracker(&call_depth_);
+
+ if (parent_read_buffer_) {
+ *parent_read_buffer_ = buffer_;
+ *parent_read_buffer_size_ = buffer_size_;
+ parent_read_buffer_ = nullptr;
+ parent_read_buffer_size_ = nullptr;
+ memset(buffer_->data(), '\0', buffer_size_);
+ }
+
ResourceHandler::Resume();
}
void TestResourceHandler::CancelWithError(net::Error net_error) {
ScopedCallDepthTracker call_depth_tracker(&call_depth_);
canceled_ = true;
+
+ // Don't want to populate these after a cancel.
+ parent_read_buffer_ = nullptr;
+ parent_read_buffer_size_ = nullptr;
+
ResourceHandler::CancelWithError(net_error);
}
« no previous file with comments | « content/browser/loader/test_resource_handler.h ('k') | content/test/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698