Index: chrome/browser/download/download_resource_throttle.cc |
=================================================================== |
--- chrome/browser/download/download_resource_throttle.cc (revision 123743) |
+++ chrome/browser/download/download_resource_throttle.cc (working copy) |
@@ -13,7 +13,8 @@ |
int render_process_id, |
int render_view_id, |
int request_id) |
- : request_allowed_(false), |
+ : querying_limiter_(true), |
+ request_allowed_(false), |
request_deferred_(false) { |
limiter->CanDownloadOnIOThread( |
render_process_id, |
@@ -27,30 +28,46 @@ |
} |
void DownloadResourceThrottle::WillStartRequest(bool* defer) { |
- *defer = request_deferred_ = !request_allowed_; |
+ WillDownload(defer); |
} |
void DownloadResourceThrottle::WillRedirectRequest(const GURL& new_url, |
bool* defer) { |
- *defer = request_deferred_ = !request_allowed_; |
+ WillDownload(defer); |
} |
void DownloadResourceThrottle::WillProcessResponse(bool* defer) { |
- *defer = request_deferred_ = !request_allowed_; |
+ WillDownload(defer); |
} |
+void DownloadResourceThrottle::WillDownload(bool* defer) { |
+ DCHECK(!request_deferred_); |
+ |
+ // Defer the download until we have the DownloadRequestLimiter result. |
+ if (querying_limiter_) { |
+ request_deferred_ = true; |
+ *defer = true; |
+ return; |
+ } |
+ |
+ if (!request_allowed_) |
+ controller()->Cancel(); |
+} |
+ |
void DownloadResourceThrottle::ContinueDownload(bool allow) { |
+ querying_limiter_ = false; |
request_allowed_ = allow; |
+ |
if (allow) { |
- // Presumes all downloads initiated by navigation using this throttle and |
+ // Presumes all downloads initiated by navigation use this throttle and |
// nothing else does. |
- download_util::RecordDownloadSource( |
- download_util::INITIATED_BY_NAVIGATION); |
+ download_util::RecordDownloadSource(download_util::INITIATED_BY_NAVIGATION); |
} else { |
download_util::RecordDownloadCount(download_util::BLOCKED_BY_THROTTLING); |
} |
if (request_deferred_) { |
+ request_deferred_ = false; |
if (allow) { |
controller()->Resume(); |
} else { |