| Index: chrome/browser/download/download_throttling_resource_handler.cc
|
| ===================================================================
|
| --- chrome/browser/download/download_throttling_resource_handler.cc (revision 96872)
|
| +++ chrome/browser/download/download_throttling_resource_handler.cc (working copy)
|
| @@ -2,18 +2,19 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "chrome/browser/renderer_host/download_throttling_resource_handler.h"
|
| +#include "chrome/browser/download/download_throttling_resource_handler.h"
|
|
|
| #include "base/logging.h"
|
| #include "chrome/browser/download/download_util.h"
|
| -#include "content/browser/download/download_resource_handler.h"
|
| #include "content/browser/renderer_host/resource_dispatcher_host.h"
|
| #include "content/common/resource_response.h"
|
| #include "net/base/io_buffer.h"
|
| #include "net/base/mime_sniffer.h"
|
|
|
| DownloadThrottlingResourceHandler::DownloadThrottlingResourceHandler(
|
| + ResourceHandler* next_handler,
|
| ResourceDispatcherHost* host,
|
| + DownloadRequestLimiter* limiter,
|
| net::URLRequest* request,
|
| const GURL& url,
|
| int render_process_host_id,
|
| @@ -26,6 +27,8 @@
|
| render_process_host_id_(render_process_host_id),
|
| render_view_id_(render_view_id),
|
| request_id_(request_id),
|
| + next_handler_(next_handler),
|
| + request_allowed_(false),
|
| tmp_buffer_length_(0),
|
| ignore_on_read_complete_(in_complete),
|
| request_closed_(false) {
|
| @@ -40,7 +43,7 @@
|
| // released in ContinueDownload() and CancelDownload().
|
| AddRef();
|
|
|
| - host_->download_request_limiter()->CanDownloadOnIOThread(
|
| + limiter->CanDownloadOnIOThread(
|
| render_process_host_id_, render_view_id, request_id, this);
|
| BrowserThread::PostTask(
|
| BrowserThread::UI, FROM_HERE,
|
| @@ -55,8 +58,8 @@
|
| uint64 position,
|
| uint64 size) {
|
| DCHECK(!request_closed_);
|
| - if (download_handler_.get())
|
| - return download_handler_->OnUploadProgress(request_id, position, size);
|
| + if (request_allowed_)
|
| + return next_handler_->OnUploadProgress(request_id, position, size);
|
| return true;
|
| }
|
|
|
| @@ -66,9 +69,8 @@
|
| ResourceResponse* response,
|
| bool* defer) {
|
| DCHECK(!request_closed_);
|
| - if (download_handler_.get()) {
|
| - return download_handler_->OnRequestRedirected(
|
| - request_id, url, response, defer);
|
| + if (request_allowed_) {
|
| + return next_handler_->OnRequestRedirected(request_id, url, response, defer);
|
| }
|
| url_ = url;
|
| return true;
|
| @@ -78,8 +80,8 @@
|
| int request_id,
|
| ResourceResponse* response) {
|
| DCHECK(!request_closed_);
|
| - if (download_handler_.get())
|
| - return download_handler_->OnResponseStarted(request_id, response);
|
| + if (request_allowed_)
|
| + return next_handler_->OnResponseStarted(request_id, response);
|
| response_ = response;
|
| return true;
|
| }
|
| @@ -88,8 +90,8 @@
|
| const GURL& url,
|
| bool* defer) {
|
| DCHECK(!request_closed_);
|
| - if (download_handler_.get())
|
| - return download_handler_->OnWillStart(request_id, url, defer);
|
| + if (request_allowed_)
|
| + return next_handler_->OnWillStart(request_id, url, defer);
|
| return true;
|
| }
|
|
|
| @@ -98,8 +100,8 @@
|
| int* buf_size,
|
| int min_size) {
|
| DCHECK(!request_closed_);
|
| - if (download_handler_.get())
|
| - return download_handler_->OnWillRead(request_id, buf, buf_size, min_size);
|
| + if (request_allowed_)
|
| + return next_handler_->OnWillRead(request_id, buf, buf_size, min_size);
|
|
|
| // We should only have this invoked once, as such we only deal with one
|
| // tmp buffer.
|
| @@ -129,12 +131,12 @@
|
| if (tmp_buffer_.get()) {
|
| DCHECK(!tmp_buffer_length_);
|
| tmp_buffer_length_ = *bytes_read;
|
| - if (download_handler_.get())
|
| + if (request_allowed_)
|
| CopyTmpBufferToDownloadHandler();
|
| return true;
|
| }
|
| - if (download_handler_.get())
|
| - return download_handler_->OnReadCompleted(request_id, bytes_read);
|
| + if (request_allowed_)
|
| + return next_handler_->OnReadCompleted(request_id, bytes_read);
|
| return true;
|
| }
|
|
|
| @@ -143,9 +145,9 @@
|
| const net::URLRequestStatus& status,
|
| const std::string& security_info) {
|
| DCHECK(!request_closed_);
|
| - if (download_handler_.get())
|
| - return download_handler_->OnResponseCompleted(request_id, status,
|
| - security_info);
|
| + if (request_allowed_)
|
| + return next_handler_->OnResponseCompleted(request_id, status,
|
| + security_info);
|
|
|
| // For a download, if ResourceDispatcher::Read() fails,
|
| // ResourceDispatcher::OnresponseStarted() will call
|
| @@ -159,8 +161,8 @@
|
|
|
| void DownloadThrottlingResourceHandler::OnRequestClosed() {
|
| DCHECK(!request_closed_);
|
| - if (download_handler_.get())
|
| - download_handler_->OnRequestClosed();
|
| + if (request_allowed_)
|
| + next_handler_->OnRequestClosed();
|
| request_closed_ = true;
|
| }
|
|
|
| @@ -171,20 +173,10 @@
|
| }
|
|
|
| void DownloadThrottlingResourceHandler::ContinueDownload() {
|
| - DCHECK(!download_handler_.get());
|
| if (!request_closed_) {
|
| - download_handler_ =
|
| - new DownloadResourceHandler(host_,
|
| - render_process_host_id_,
|
| - render_view_id_,
|
| - request_id_,
|
| - url_,
|
| - host_->download_file_manager(),
|
| - request_,
|
| - false,
|
| - DownloadSaveInfo());
|
| + request_allowed_ = true;
|
| if (response_.get())
|
| - download_handler_->OnResponseStarted(request_id_, response_.get());
|
| + next_handler_->OnResponseStarted(request_id_, response_.get());
|
|
|
| if (tmp_buffer_length_)
|
| CopyTmpBufferToDownloadHandler();
|
| @@ -199,11 +191,11 @@
|
| // Copy over the tmp buffer.
|
| net::IOBuffer* buffer;
|
| int buf_size;
|
| - if (download_handler_->OnWillRead(request_id_, &buffer, &buf_size,
|
| - tmp_buffer_length_)) {
|
| + if (next_handler_->OnWillRead(request_id_, &buffer, &buf_size,
|
| + tmp_buffer_length_)) {
|
| CHECK(buf_size >= tmp_buffer_length_);
|
| memcpy(buffer->data(), tmp_buffer_->data(), tmp_buffer_length_);
|
| - download_handler_->OnReadCompleted(request_id_, &tmp_buffer_length_);
|
| + next_handler_->OnReadCompleted(request_id_, &tmp_buffer_length_);
|
| }
|
| tmp_buffer_length_ = 0;
|
| tmp_buffer_ = NULL;
|
|
|