diff options
author | ahendrickson@chromium.org <ahendrickson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-08 21:04:35 +0000 |
---|---|---|
committer | ahendrickson@chromium.org <ahendrickson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-08 21:04:35 +0000 |
commit | 159ffc1ba1d4846e7b7c459f5c098c581436ef82 (patch) | |
tree | 82eef793016f56b5a18bdd7052fa1b56795fe395 | |
parent | c4f3213f503fe2114a16029c967f55fcaeb4a6bb (diff) | |
download | chromium_src-159ffc1ba1d4846e7b7c459f5c098c581436ef82.zip chromium_src-159ffc1ba1d4846e7b7c459f5c098c581436ef82.tar.gz chromium_src-159ffc1ba1d4846e7b7c459f5c098c581436ef82.tar.bz2 |
Added a download file factory to the download file manager, for testing.
BUG=None
TEST=None
Review URL: http://codereview.chromium.org/8770024
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@113658 0039d316-1c4b-4281-b951-d872f2087c98
4 files changed, 68 insertions, 9 deletions
diff --git a/chrome/browser/download/download_manager_unittest.cc b/chrome/browser/download/download_manager_unittest.cc index b99007e..4bd969d 100644 --- a/chrome/browser/download/download_manager_unittest.cc +++ b/chrome/browser/download/download_manager_unittest.cc @@ -55,6 +55,28 @@ #define MAYBE_DownloadRemoveTest DownloadRemoveTest #endif +namespace { + +class MockDownloadFileFactory + : public DownloadFileManager::DownloadFileFactory { + public: + MockDownloadFileFactory() {} + + virtual DownloadFile* CreateFile(DownloadCreateInfo* info, + const DownloadRequestHandle& request_handle, + DownloadManager* download_manager) OVERRIDE; +}; + +DownloadFile* MockDownloadFileFactory::CreateFile( + DownloadCreateInfo* info, + const DownloadRequestHandle& request_handle, + DownloadManager* download_manager) { + NOTREACHED(); + return NULL; +} + +} // namespace + using content::BrowserThread; DownloadId::Domain kValidIdDomain = "valid DownloadId::Domain"; @@ -149,7 +171,8 @@ class DownloadManagerTest : public testing::Test { DownloadFileManager* file_manager() { if (!file_manager_) { - file_manager_ = new DownloadFileManager(NULL); + file_manager_ = new DownloadFileManager(NULL, + new MockDownloadFileFactory); download_manager_->SetFileManager(file_manager_); } return file_manager_; diff --git a/content/browser/download/download_file_manager.cc b/content/browser/download/download_file_manager.cc index 0a5f5e9..e9794b7 100644 --- a/content/browser/download/download_file_manager.cc +++ b/content/browser/download/download_file_manager.cc @@ -34,10 +34,32 @@ namespace { // cause it to become unresponsive (in milliseconds). const int kUpdatePeriodMs = 500; +class DownloadFileFactoryImpl + : public DownloadFileManager::DownloadFileFactory { + public: + DownloadFileFactoryImpl() {} + + virtual DownloadFile* CreateFile(DownloadCreateInfo* info, + const DownloadRequestHandle& request_handle, + DownloadManager* download_manager) OVERRIDE; +}; + +DownloadFile* DownloadFileFactoryImpl::CreateFile( + DownloadCreateInfo* info, + const DownloadRequestHandle& request_handle, + DownloadManager* download_manager) { + return new DownloadFileImpl(info, + new DownloadRequestHandle(request_handle), + download_manager); +} + } // namespace -DownloadFileManager::DownloadFileManager(ResourceDispatcherHost* rdh) - : resource_dispatcher_host_(rdh) { +DownloadFileManager::DownloadFileManager(ResourceDispatcherHost* rdh, + DownloadFileFactory* factory) + : resource_dispatcher_host_(rdh), download_file_factory_(factory) { + if (download_file_factory_ == NULL) + download_file_factory_.reset(new DownloadFileFactoryImpl); } DownloadFileManager::~DownloadFileManager() { @@ -67,10 +89,8 @@ void DownloadFileManager::CreateDownloadFile( // Life of |info| ends here. No more references to it after this method. scoped_ptr<DownloadCreateInfo> infop(info); - scoped_ptr<DownloadFile> download_file( - new DownloadFileImpl(info, - new DownloadRequestHandle(request_handle), - download_manager)); + scoped_ptr<DownloadFile> download_file(download_file_factory_->CreateFile( + info, request_handle, download_manager)); if (net::OK != download_file->Initialize(get_hash)) { request_handle.CancelRequest(); return; diff --git a/content/browser/download/download_file_manager.h b/content/browser/download/download_file_manager.h index da86124..3dc8046 100644 --- a/content/browser/download/download_file_manager.h +++ b/content/browser/download/download_file_manager.h @@ -47,6 +47,7 @@ #include "base/gtest_prod_util.h" #include "base/hash_tables.h" #include "base/memory/ref_counted.h" +#include "base/memory/scoped_ptr.h" #include "base/timer.h" #include "content/browser/download/download_id.h" #include "content/browser/download/interrupt_reasons.h" @@ -69,7 +70,21 @@ class DownloadBuffer; class CONTENT_EXPORT DownloadFileManager : public base::RefCountedThreadSafe<DownloadFileManager> { public: - explicit DownloadFileManager(ResourceDispatcherHost* rdh); + class DownloadFileFactory { + public: + virtual ~DownloadFileFactory() {} + + virtual DownloadFile* CreateFile( + DownloadCreateInfo* info, + const DownloadRequestHandle& request_handle, + DownloadManager* download_manager) = 0; + }; + + // Takes ownership of the factory. + // Passing in a NULL for |factory| will cause a default + // |DownloadFileFactory| to be used. + DownloadFileManager(ResourceDispatcherHost* rdh, + DownloadFileFactory* factory); // Called on shutdown on the UI thread. void Shutdown(); @@ -165,6 +180,7 @@ class CONTENT_EXPORT DownloadFileManager base::RepeatingTimer<DownloadFileManager> update_timer_; ResourceDispatcherHost* resource_dispatcher_host_; + scoped_ptr<DownloadFileFactory> download_file_factory_; DISALLOW_COPY_AND_ASSIGN(DownloadFileManager); }; diff --git a/content/browser/renderer_host/resource_dispatcher_host.cc b/content/browser/renderer_host/resource_dispatcher_host.cc index ba8d686..542b606 100644 --- a/content/browser/renderer_host/resource_dispatcher_host.cc +++ b/content/browser/renderer_host/resource_dispatcher_host.cc @@ -292,7 +292,7 @@ void OnSwapOutACKHelper(int render_process_id, int render_view_id) { ResourceDispatcherHost::ResourceDispatcherHost( const ResourceQueue::DelegateSet& resource_queue_delegates) : ALLOW_THIS_IN_INITIALIZER_LIST( - download_file_manager_(new DownloadFileManager(this))), + download_file_manager_(new DownloadFileManager(this, NULL))), ALLOW_THIS_IN_INITIALIZER_LIST( save_file_manager_(new SaveFileManager(this))), request_id_(-1), |