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

Unified Diff: content/browser/download/url_downloader.cc

Issue 148133007: [Downloads] Always call DM::StartDownload() for explicit downloads. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix typos Created 4 years, 10 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
« no previous file with comments | « content/browser/download/url_downloader.h ('k') | content/browser/loader/mime_type_resource_handler.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/download/url_downloader.cc
diff --git a/content/browser/download/url_downloader.cc b/content/browser/download/url_downloader.cc
index b178a1d4b2654f52099ef953e1b179b18ed5554a..aea18cc02d4f3f35f68a2cf22862c77c7aaa603b 100644
--- a/content/browser/download/url_downloader.cc
+++ b/content/browser/download/url_downloader.cc
@@ -74,62 +74,32 @@ class UrlDownloader::RequestHandle : public DownloadRequestHandleInterface {
scoped_ptr<UrlDownloader> UrlDownloader::BeginDownload(
base::WeakPtr<DownloadManagerImpl> download_manager,
scoped_ptr<net::URLRequest> request,
- const Referrer& referrer,
- bool prefer_cache,
- scoped_ptr<DownloadSaveInfo> save_info,
- uint32_t download_id,
- const DownloadUrlParameters::OnStartedCallback& started_callback) {
+ const Referrer& referrer) {
if (!referrer.url.is_valid())
request->SetReferrer(std::string());
else
request->SetReferrer(referrer.url.spec());
- int extra_load_flags = net::LOAD_NORMAL;
- if (prefer_cache) {
- // If there is upload data attached, only retrieve from cache because there
- // is no current mechanism to prompt the user for their consent for a
- // re-post. For GETs, try to retrieve data from the cache and skip
- // validating the entry if present.
- if (request->get_upload() != NULL)
- extra_load_flags |= net::LOAD_ONLY_FROM_CACHE;
- else
- extra_load_flags |= net::LOAD_PREFERRING_CACHE;
- } else {
- extra_load_flags |= net::LOAD_DISABLE_CACHE;
- }
- request->SetLoadFlags(request->load_flags() | extra_load_flags);
-
if (request->url().SchemeIs(url::kBlobScheme))
return nullptr;
// From this point forward, the |UrlDownloader| is responsible for
// |started_callback|.
scoped_ptr<UrlDownloader> downloader(
- new UrlDownloader(std::move(request), download_manager,
- std::move(save_info), download_id, started_callback));
+ new UrlDownloader(std::move(request), download_manager));
downloader->Start();
return downloader;
}
-UrlDownloader::UrlDownloader(
- scoped_ptr<net::URLRequest> request,
- base::WeakPtr<DownloadManagerImpl> manager,
- scoped_ptr<DownloadSaveInfo> save_info,
- uint32_t download_id,
- const DownloadUrlParameters::OnStartedCallback& on_started_callback)
+UrlDownloader::UrlDownloader(scoped_ptr<net::URLRequest> request,
+ base::WeakPtr<DownloadManagerImpl> manager)
: request_(std::move(request)),
manager_(manager),
- download_id_(download_id),
- on_started_callback_(on_started_callback),
- handler_(
- request_.get(),
- std::move(save_info),
- base::Bind(&UrlDownloader::ResumeReading, base::Unretained(this))),
+ core_(request_.get(), this),
weak_ptr_factory_(this) {}
UrlDownloader::~UrlDownloader() {
- CallStartedCallbackOnFailure(DOWNLOAD_INTERRUPT_REASON_USER_CANCELED);
}
void UrlDownloader::Start() {
@@ -157,22 +127,7 @@ void UrlDownloader::OnResponseStarted(net::URLRequest* request) {
return;
}
- scoped_ptr<DownloadCreateInfo> create_info;
- scoped_ptr<ByteStreamReader> stream_reader;
-
- handler_.OnResponseStarted(&create_info, &stream_reader);
-
- create_info->download_id = download_id_;
- create_info->request_handle.reset(
- new RequestHandle(weak_ptr_factory_.GetWeakPtr(), manager_,
- base::SequencedTaskRunnerHandle::Get()));
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(&DownloadManagerImpl::StartDownload, manager_,
- base::Passed(&create_info), base::Passed(&stream_reader),
- base::ResetAndReturn(&on_started_callback_)));
-
- if (request_->status().is_success())
+ if (core_.OnResponseStarted(std::string()))
StartReading(false); // Read the first chunk.
else
ResponseCompleted();
@@ -186,7 +141,7 @@ void UrlDownloader::StartReading(bool is_continuation) {
// doesn't use the buffer.
scoped_refptr<net::IOBuffer> buf;
int buf_size;
- if (!handler_.OnWillRead(&buf, &buf_size, -1)) {
+ if (!core_.OnWillRead(&buf, &buf_size, -1)) {
request_->CancelWithError(net::ERR_ABORTED);
base::SequencedTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::Bind(&UrlDownloader::ResponseCompleted,
@@ -229,7 +184,7 @@ void UrlDownloader::OnReadCompleted(net::URLRequest* request, int bytes_read) {
DCHECK(request_->status().is_success());
bool defer = false;
- if (!handler_.OnReadCompleted(bytes_read, &defer)) {
+ if (!core_.OnReadCompleted(bytes_read, &defer)) {
request_->CancelWithError(net::ERR_ABORTED);
return;
} else if (defer) {
@@ -251,38 +206,43 @@ void UrlDownloader::OnReadCompleted(net::URLRequest* request, int bytes_read) {
void UrlDownloader::ResponseCompleted() {
DVLOG(1) << "ResponseCompleted: " << request_->url().spec();
- handler_.OnResponseCompleted(request_->status());
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(&DownloadManagerImpl::RemoveUrlDownloader, manager_, this));
+ core_.OnResponseCompleted(request_->status());
+ Destroy();
}
-void UrlDownloader::ResumeReading() {
- if (request_->status().is_success()) {
- StartReading(false); // Read the next chunk (OK to complete synchronously).
- } else {
- ResponseCompleted();
- }
+void UrlDownloader::OnStart(
+ scoped_ptr<DownloadCreateInfo> create_info,
+ scoped_ptr<ByteStreamReader> stream_reader,
+ const DownloadUrlParameters::OnStartedCallback& callback) {
+ create_info->request_handle.reset(
+ new RequestHandle(weak_ptr_factory_.GetWeakPtr(), manager_,
+ base::SequencedTaskRunnerHandle::Get()));
+ BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
+ base::Bind(&DownloadManagerImpl::StartDownload,
+ manager_, base::Passed(&create_info),
+ base::Passed(&stream_reader), callback));
}
-void UrlDownloader::CallStartedCallbackOnFailure(
- DownloadInterruptReason result) {
- if (on_started_callback_.is_null())
- return;
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(base::ResetAndReturn(&on_started_callback_), nullptr, result));
+void UrlDownloader::OnReadyToRead() {
+ if (request_->status().is_success())
+ StartReading(false); // Read the next chunk (OK to complete synchronously).
+ else
+ ResponseCompleted();
}
void UrlDownloader::PauseRequest() {
- handler_.PauseRequest();
+ core_.PauseRequest();
}
void UrlDownloader::ResumeRequest() {
- handler_.ResumeRequest();
+ core_.ResumeRequest();
}
void UrlDownloader::CancelRequest() {
+ Destroy();
+}
+
+void UrlDownloader::Destroy() {
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
base::Bind(&DownloadManagerImpl::RemoveUrlDownloader, manager_, this));
« no previous file with comments | « content/browser/download/url_downloader.h ('k') | content/browser/loader/mime_type_resource_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698