| 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 {
|
|
|