[WebURLLoaderImpl] Reset response body synchronously on cancel
WebURLLoaderImpl is not destructed when the request is cancelled, so
it's better to destruct the response body handle in
WebURLLoaderImpl::Context::Cancel manually.
Bug: 894819, 927184, 929793
Change-Id: I12a5c916ff64ecbdeb8013cff88c95bd111c31ab
Reviewed-on: https://chromium-review.googlesource.com/c/1480308
Commit-Queue: Kinuko Yasuda <kinuko@chromium.org>
Reviewed-by: Kinuko Yasuda <kinuko@chromium.org>
Auto-Submit: Yutaka Hirano <yhirano@chromium.org>
Cr-Commit-Position: refs/heads/master@{#634112}
diff --git a/content/renderer/loader/web_url_loader_impl.cc b/content/renderer/loader/web_url_loader_impl.cc
index 08b0d6e..35b3caf1 100644
--- a/content/renderer/loader/web_url_loader_impl.cc
+++ b/content/renderer/loader/web_url_loader_impl.cc
@@ -565,6 +565,9 @@
if (body_stream_writer_)
body_stream_writer_->Fail();
+ body_handle_.reset();
+ body_watcher_.Cancel();
+
// Do not make any further calls to the client.
client_ = nullptr;
loader_ = nullptr;
@@ -1044,6 +1047,10 @@
}
void WebURLLoaderImpl::Context::OnBodyHasBeenRead(uint32_t read_bytes) {
+ if (!body_handle_) {
+ // The request is cancelled.
+ return;
+ }
MojoResult rv = body_handle_->EndReadData(read_bytes);
DCHECK_EQ(MOJO_RESULT_OK, rv);
if (defers_loading_ == NOT_DEFERRING)