Chromium Code Reviews| 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() { |