Index: content/browser/download/download_resource_handler.cc |
diff --git a/content/browser/download/download_resource_handler.cc b/content/browser/download/download_resource_handler.cc |
index 30bcd5e8027da76ddbec1acfeac84aa82cd88c41..c27827d1fe0a2af6eb62a0150181c076081b91d4 100644 |
--- a/content/browser/download/download_resource_handler.cc |
+++ b/content/browser/download/download_resource_handler.cc |
@@ -139,24 +139,34 @@ std::unique_ptr<ResourceHandler> DownloadResourceHandler::Create( |
return handler; |
} |
-bool DownloadResourceHandler::OnRequestRedirected( |
+void DownloadResourceHandler::OnRequestRedirected( |
const net::RedirectInfo& redirect_info, |
ResourceResponse* response, |
- bool* defer) { |
- return core_.OnRequestRedirected(); |
+ std::unique_ptr<ResourceController> controller) { |
+ if (core_.OnRequestRedirected()) { |
+ controller->Resume(); |
+ } else { |
+ controller->Cancel(); |
+ } |
} |
// Send the download creation information to the download thread. |
-bool DownloadResourceHandler::OnResponseStarted( |
+void DownloadResourceHandler::OnResponseStarted( |
ResourceResponse* response, |
- bool* defer) { |
+ std::unique_ptr<ResourceController> controller) { |
// The MIME type in ResourceResponse is the product of |
// MimeTypeResourceHandler. |
- return core_.OnResponseStarted(response->head.mime_type); |
+ if (core_.OnResponseStarted(response->head.mime_type)) { |
+ controller->Resume(); |
+ } else { |
+ controller->Cancel(); |
+ } |
} |
-bool DownloadResourceHandler::OnWillStart(const GURL& url, bool* defer) { |
- return true; |
+void DownloadResourceHandler::OnWillStart( |
+ const GURL& url, |
+ std::unique_ptr<ResourceController> controller) { |
+ controller->Resume(); |
} |
// Create a new buffer, which will be handed to the download thread for file |
@@ -168,14 +178,29 @@ bool DownloadResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf, |
} |
// Pass the buffer to the download file writer. |
-bool DownloadResourceHandler::OnReadCompleted(int bytes_read, bool* defer) { |
- return core_.OnReadCompleted(bytes_read, defer); |
+void DownloadResourceHandler::OnReadCompleted( |
+ int bytes_read, |
+ std::unique_ptr<ResourceController> controller) { |
+ DCHECK(!has_controller()); |
+ |
+ bool defer = false; |
+ if (!core_.OnReadCompleted(bytes_read, &defer)) { |
+ controller->Cancel(); |
+ return; |
+ } |
+ |
+ if (!defer) { |
Charlie Harrison
2017/01/25 20:22:59
optional: invert conditions so the positive one is
mmenke
2017/01/25 22:07:58
Done.
|
+ controller->Resume(); |
+ } else { |
+ HoldController(std::move(controller)); |
+ } |
} |
void DownloadResourceHandler::OnResponseCompleted( |
const net::URLRequestStatus& status, |
- bool* defer) { |
+ std::unique_ptr<ResourceController> controller) { |
core_.OnResponseCompleted(status); |
+ controller->Resume(); |
} |
void DownloadResourceHandler::OnDataDownloaded(int bytes_downloaded) { |
@@ -226,7 +251,7 @@ void DownloadResourceHandler::OnStart( |
void DownloadResourceHandler::OnReadyToRead() { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
- controller()->Resume(); |
+ Resume(); |
} |
void DownloadResourceHandler::CancelRequest() { |