Index: chrome/browser/renderer_host/download_throttling_resource_handler.cc |
=================================================================== |
--- chrome/browser/renderer_host/download_throttling_resource_handler.cc (revision 96872) |
+++ chrome/browser/renderer_host/download_throttling_resource_handler.cc (working copy) |
@@ -1,210 +0,0 @@ |
-// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
-// 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 "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( |
- ResourceDispatcherHost* host, |
- net::URLRequest* request, |
- const GURL& url, |
- int render_process_host_id, |
- int render_view_id, |
- int request_id, |
- bool in_complete) |
- : host_(host), |
- request_(request), |
- url_(url), |
- render_process_host_id_(render_process_host_id), |
- render_view_id_(render_view_id), |
- request_id_(request_id), |
- tmp_buffer_length_(0), |
- ignore_on_read_complete_(in_complete), |
- request_closed_(false) { |
- download_util::RecordDownloadCount( |
- download_util::INITIATED_BY_NAVIGATION_COUNT); |
- |
- // Pause the request. |
- host_->PauseRequest(render_process_host_id_, request_id_, true); |
- |
- // Add a reference to ourselves to keep this object alive until we |
- // receive a callback from DownloadRequestLimiter. The reference is |
- // released in ContinueDownload() and CancelDownload(). |
- AddRef(); |
- |
- host_->download_request_limiter()->CanDownloadOnIOThread( |
- render_process_host_id_, render_view_id, request_id, this); |
- BrowserThread::PostTask( |
- BrowserThread::UI, FROM_HERE, |
- NewRunnableFunction(&download_util::NotifyDownloadInitiated, |
- render_process_host_id_, render_view_id_)); |
-} |
- |
-DownloadThrottlingResourceHandler::~DownloadThrottlingResourceHandler() { |
-} |
- |
-bool DownloadThrottlingResourceHandler::OnUploadProgress(int request_id, |
- uint64 position, |
- uint64 size) { |
- DCHECK(!request_closed_); |
- if (download_handler_.get()) |
- return download_handler_->OnUploadProgress(request_id, position, size); |
- return true; |
-} |
- |
-bool DownloadThrottlingResourceHandler::OnRequestRedirected( |
- int request_id, |
- const GURL& url, |
- ResourceResponse* response, |
- bool* defer) { |
- DCHECK(!request_closed_); |
- if (download_handler_.get()) { |
- return download_handler_->OnRequestRedirected( |
- request_id, url, response, defer); |
- } |
- url_ = url; |
- return true; |
-} |
- |
-bool DownloadThrottlingResourceHandler::OnResponseStarted( |
- int request_id, |
- ResourceResponse* response) { |
- DCHECK(!request_closed_); |
- if (download_handler_.get()) |
- return download_handler_->OnResponseStarted(request_id, response); |
- response_ = response; |
- return true; |
-} |
- |
-bool DownloadThrottlingResourceHandler::OnWillStart(int request_id, |
- const GURL& url, |
- bool* defer) { |
- DCHECK(!request_closed_); |
- if (download_handler_.get()) |
- return download_handler_->OnWillStart(request_id, url, defer); |
- return true; |
-} |
- |
-bool DownloadThrottlingResourceHandler::OnWillRead(int request_id, |
- net::IOBuffer** buf, |
- int* buf_size, |
- int min_size) { |
- DCHECK(!request_closed_); |
- if (download_handler_.get()) |
- return download_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. |
- DCHECK(!tmp_buffer_.get()); |
- // If the caller passed a negative |min_size| then chose an appropriate |
- // default. The BufferedResourceHandler requires this to be at least 2 times |
- // the size required for mime detection. |
- if (min_size < 0) |
- min_size = 2 * net::kMaxBytesToSniff; |
- tmp_buffer_ = new net::IOBuffer(min_size); |
- *buf = tmp_buffer_.get(); |
- *buf_size = min_size; |
- return true; |
-} |
- |
-bool DownloadThrottlingResourceHandler::OnReadCompleted(int request_id, |
- int* bytes_read) { |
- DCHECK(!request_closed_); |
- if (ignore_on_read_complete_) { |
- // See comments above definition for details on this. |
- ignore_on_read_complete_ = false; |
- return true; |
- } |
- if (!*bytes_read) |
- return true; |
- |
- if (tmp_buffer_.get()) { |
- DCHECK(!tmp_buffer_length_); |
- tmp_buffer_length_ = *bytes_read; |
- if (download_handler_.get()) |
- CopyTmpBufferToDownloadHandler(); |
- return true; |
- } |
- if (download_handler_.get()) |
- return download_handler_->OnReadCompleted(request_id, bytes_read); |
- return true; |
-} |
- |
-bool DownloadThrottlingResourceHandler::OnResponseCompleted( |
- int request_id, |
- 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); |
- |
- // For a download, if ResourceDispatcher::Read() fails, |
- // ResourceDispatcher::OnresponseStarted() will call |
- // OnResponseCompleted(), and we will end up here with an error |
- // status. |
- if (!status.is_success()) |
- return false; |
- NOTREACHED(); |
- return true; |
-} |
- |
-void DownloadThrottlingResourceHandler::OnRequestClosed() { |
- DCHECK(!request_closed_); |
- if (download_handler_.get()) |
- download_handler_->OnRequestClosed(); |
- request_closed_ = true; |
-} |
- |
-void DownloadThrottlingResourceHandler::CancelDownload() { |
- if (!request_closed_) |
- host_->CancelRequest(render_process_host_id_, request_id_, false); |
- Release(); // Release the additional reference from constructor. |
-} |
- |
-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()); |
- if (response_.get()) |
- download_handler_->OnResponseStarted(request_id_, response_.get()); |
- |
- if (tmp_buffer_length_) |
- CopyTmpBufferToDownloadHandler(); |
- |
- // And let the request continue. |
- host_->PauseRequest(render_process_host_id_, request_id_, false); |
- } |
- Release(); // Release the addtional reference from constructor. |
-} |
- |
-void DownloadThrottlingResourceHandler::CopyTmpBufferToDownloadHandler() { |
- // Copy over the tmp buffer. |
- net::IOBuffer* buffer; |
- int buf_size; |
- if (download_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_); |
- } |
- tmp_buffer_length_ = 0; |
- tmp_buffer_ = NULL; |
-} |