Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(852)

Unified Diff: chrome/browser/renderer_host/download_throttling_resource_handler.cc

Issue 7660007: Factor out dependncy on download throttling from core download code. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
-}

Powered by Google App Engine
This is Rietveld 408576698