summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorahendrickson@chromium.org <ahendrickson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-08 21:04:35 +0000
committerahendrickson@chromium.org <ahendrickson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-08 21:04:35 +0000
commit159ffc1ba1d4846e7b7c459f5c098c581436ef82 (patch)
tree82eef793016f56b5a18bdd7052fa1b56795fe395
parentc4f3213f503fe2114a16029c967f55fcaeb4a6bb (diff)
downloadchromium_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
-rw-r--r--chrome/browser/download/download_manager_unittest.cc25
-rw-r--r--content/browser/download/download_file_manager.cc32
-rw-r--r--content/browser/download/download_file_manager.h18
-rw-r--r--content/browser/renderer_host/resource_dispatcher_host.cc2
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),