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

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

Issue 10799005: Replace the DownloadFileManager with direct ownership (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed Windows compile error. Created 8 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: content/browser/download/download_file_manager.cc
diff --git a/content/browser/download/download_file_manager.cc b/content/browser/download/download_file_manager.cc
deleted file mode 100644
index 7bebd92ef3970f5544759752c5048d4642fe2bef..0000000000000000000000000000000000000000
--- a/content/browser/download/download_file_manager.cc
+++ /dev/null
@@ -1,227 +0,0 @@
-// Copyright (c) 2012 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 "content/browser/download/download_file_manager.h"
-
-#include <set>
-#include <string>
-
-#include "base/bind.h"
-#include "base/file_util.h"
-#include "base/logging.h"
-#include "base/stl_util.h"
-#include "base/utf_string_conversions.h"
-#include "content/browser/download/base_file.h"
-#include "content/browser/download/download_create_info.h"
-#include "content/browser/download/download_file_impl.h"
-#include "content/browser/download/download_interrupt_reasons_impl.h"
-#include "content/browser/download/download_request_handle.h"
-#include "content/browser/download/download_stats.h"
-#include "content/browser/power_save_blocker.h"
-#include "content/browser/web_contents/web_contents_impl.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/download_manager.h"
-#include "content/public/browser/download_manager_delegate.h"
-#include "googleurl/src/gurl.h"
-#include "net/base/io_buffer.h"
-
-using content::BrowserThread;
-using content::DownloadFile;
-using content::DownloadId;
-using content::DownloadManager;
-
-namespace {
-
-class DownloadFileFactoryImpl
- : public DownloadFileManager::DownloadFileFactory {
- public:
- DownloadFileFactoryImpl() {}
-
- virtual content::DownloadFile* CreateFile(
- DownloadCreateInfo* info,
- scoped_ptr<content::ByteStreamReader> stream,
- DownloadManager* download_manager,
- bool calculate_hash,
- const net::BoundNetLog& bound_net_log) OVERRIDE;
-};
-
-DownloadFile* DownloadFileFactoryImpl::CreateFile(
- DownloadCreateInfo* info,
- scoped_ptr<content::ByteStreamReader> stream,
- DownloadManager* download_manager,
- bool calculate_hash,
- const net::BoundNetLog& bound_net_log) {
- return new DownloadFileImpl(
- info, stream.Pass(), new DownloadRequestHandle(info->request_handle),
- download_manager, calculate_hash,
- scoped_ptr<content::PowerSaveBlocker>(
- new content::PowerSaveBlocker(
- content::PowerSaveBlocker::kPowerSaveBlockPreventAppSuspension,
- "Download in progress")).Pass(),
- bound_net_log);
-}
-
-} // namespace
-
-DownloadFileManager::DownloadFileManager(DownloadFileFactory* factory)
- : download_file_factory_(factory) {
- if (download_file_factory_ == NULL)
- download_file_factory_.reset(new DownloadFileFactoryImpl);
-}
-
-DownloadFileManager::~DownloadFileManager() {
- DCHECK(downloads_.empty());
-}
-
-void DownloadFileManager::Shutdown() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- BrowserThread::PostTask(
- BrowserThread::FILE, FROM_HERE,
- base::Bind(&DownloadFileManager::OnShutdown, this));
-}
-
-void DownloadFileManager::OnShutdown() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- STLDeleteValues(&downloads_);
-}
-
-void DownloadFileManager::CreateDownloadFile(
- scoped_ptr<DownloadCreateInfo> info,
- scoped_ptr<content::ByteStreamReader> stream,
- scoped_refptr<DownloadManager> download_manager, bool get_hash,
- const net::BoundNetLog& bound_net_log,
- const CreateDownloadFileCallback& callback) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- DCHECK(info.get());
- VLOG(20) << __FUNCTION__ << "()" << " info = " << info->DebugString();
-
- scoped_ptr<DownloadFile> download_file(download_file_factory_->CreateFile(
- info.get(), stream.Pass(), download_manager, get_hash, bound_net_log));
-
- content::DownloadInterruptReason interrupt_reason(
- download_file->Initialize());
- if (interrupt_reason == content::DOWNLOAD_INTERRUPT_REASON_NONE) {
- DCHECK(GetDownloadFile(info->download_id) == NULL);
- downloads_[info->download_id] = download_file.release();
- }
-
- BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
- base::Bind(callback, interrupt_reason));
-}
-
-DownloadFile* DownloadFileManager::GetDownloadFile(
- DownloadId global_id) {
- DownloadFileMap::iterator it = downloads_.find(global_id);
- return it == downloads_.end() ? NULL : it->second;
-}
-
-// This method will be sent via a user action, or shutdown on the UI thread, and
-// run on the download thread. Since this message has been sent from the UI
-// thread, the download may have already completed and won't exist in our map.
-void DownloadFileManager::CancelDownload(DownloadId global_id) {
- VLOG(20) << __FUNCTION__ << "()" << " id = " << global_id;
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- DownloadFileMap::iterator it = downloads_.find(global_id);
- if (it == downloads_.end())
- return;
-
- DownloadFile* download_file = it->second;
- VLOG(20) << __FUNCTION__ << "()"
- << " download_file = " << download_file->DebugString();
- download_file->Cancel();
-
- EraseDownload(global_id);
-}
-
-void DownloadFileManager::CompleteDownload(
- DownloadId global_id, const base::Closure& callback) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
-
- if (!ContainsKey(downloads_, global_id))
- return;
-
- DownloadFile* download_file = downloads_[global_id];
-
- VLOG(20) << " " << __FUNCTION__ << "()"
- << " id = " << global_id
- << " download_file = " << download_file->DebugString();
-
- // Done here on Windows so that anti-virus scanners invoked by
- // the attachment service actually see the data; see
- // http://crbug.com/127999.
- // Done here for mac because we only want to do this once; see
- // http://crbug.com/13120 for details.
- // Other platforms don't currently do source annotation.
- download_file->AnnotateWithSourceInformation();
-
- download_file->Detach();
-
- EraseDownload(global_id);
-
- // Notify our caller we've let it go.
- BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, callback);
-}
-
-void DownloadFileManager::OnDownloadManagerShutdown(DownloadManager* manager) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- DCHECK(manager);
-
- std::set<DownloadFile*> to_remove;
-
- for (DownloadFileMap::iterator i = downloads_.begin();
- i != downloads_.end(); ++i) {
- DownloadFile* download_file = i->second;
- if (download_file->GetDownloadManager() == manager) {
- download_file->CancelDownloadRequest();
- to_remove.insert(download_file);
- }
- }
-
- for (std::set<DownloadFile*>::iterator i = to_remove.begin();
- i != to_remove.end(); ++i) {
- downloads_.erase((*i)->GlobalId());
- delete *i;
- }
-}
-
-// Actions from the UI thread and run on the download thread
-
-void DownloadFileManager::RenameDownloadFile(
- DownloadId global_id,
- const FilePath& full_path,
- bool overwrite_existing_file,
- const RenameCompletionCallback& callback) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- DownloadFile* download_file = GetDownloadFile(global_id);
- if (!download_file) {
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(callback, content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED,
- FilePath()));
- return;
- }
-
- download_file->Rename(full_path, overwrite_existing_file, callback);
-}
-
-int DownloadFileManager::NumberOfActiveDownloads() const {
- return downloads_.size();
-}
-
-void DownloadFileManager::EraseDownload(DownloadId global_id) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
-
- if (!ContainsKey(downloads_, global_id))
- return;
-
- DownloadFile* download_file = downloads_[global_id];
-
- VLOG(20) << " " << __FUNCTION__ << "()"
- << " id = " << global_id
- << " download_file = " << download_file->DebugString();
-
- downloads_.erase(global_id);
-
- delete download_file;
-}

Powered by Google App Engine
This is Rietveld 408576698