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

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

Issue 10392111: Use ByteStream in downloads system to decouple source and sink. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Sync'd to LKGR. Created 8 years, 6 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_manager_impl_unittest.cc
diff --git a/content/browser/download/download_manager_impl_unittest.cc b/content/browser/download/download_manager_impl_unittest.cc
index cc38b290c5051ff2c1b78f98958cedab8be4869e..1be540f99e2aa8087d7f7d17320a5ce4cf02870f 100644
--- a/content/browser/download/download_manager_impl_unittest.cc
+++ b/content/browser/download/download_manager_impl_unittest.cc
@@ -16,7 +16,6 @@
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
#include "build/build_config.h"
-#include "content/browser/download/download_buffer.h"
#include "content/browser/download/download_create_info.h"
#include "content/browser/download/download_file_impl.h"
#include "content/browser/download/download_file_manager.h"
@@ -66,6 +65,10 @@ using ::testing::NiceMock;
using ::testing::ReturnRef;
using ::testing::Return;
+namespace content {
+class ByteStreamReader;
+}
+
namespace {
FilePath GetTempDownloadPath(const FilePath& suggested_path) {
@@ -79,6 +82,7 @@ class MockDownloadFileFactory
virtual DownloadFile* CreateFile(
DownloadCreateInfo* info,
+ scoped_ptr<content::ByteStreamReader> stream,
const DownloadRequestHandle& request_handle,
DownloadManager* download_manager,
bool calculate_hash,
@@ -87,6 +91,7 @@ class MockDownloadFileFactory
DownloadFile* MockDownloadFileFactory::CreateFile(
DownloadCreateInfo* info,
+ scoped_ptr<content::ByteStreamReader> stream,
const DownloadRequestHandle& request_handle,
DownloadManager* download_manager,
bool calculate_hash,
@@ -261,8 +266,7 @@ class DownloadManagerTest : public testing::Test {
download_manager_(new DownloadManagerImpl(
download_manager_delegate_.get(), NULL)),
ui_thread_(BrowserThread::UI, &message_loop_),
- file_thread_(BrowserThread::FILE, &message_loop_),
- download_buffer_(new content::DownloadBuffer) {
+ file_thread_(BrowserThread::FILE, &message_loop_) {
download_manager_->Init(browser_context.get());
download_manager_delegate_->set_download_manager(download_manager_);
}
@@ -313,23 +317,6 @@ class DownloadManagerTest : public testing::Test {
download_manager_->OnTargetPathAvailable(download);
}
- void UpdateData(int32 id, const char* data, size_t length) {
- // We are passing ownership of this buffer to the download file manager.
- net::IOBuffer* io_buffer = new net::IOBuffer(length);
- // We need |AddRef()| because we do a |Release()| in |UpdateDownload()|.
- io_buffer->AddRef();
- memcpy(io_buffer->data(), data, length);
-
- download_buffer_->AddData(io_buffer, length);
-
- BrowserThread::PostTask(
- BrowserThread::FILE, FROM_HERE,
- base::Bind(&DownloadFileManager::UpdateDownload, file_manager_.get(),
- DownloadId(kValidIdDomain, id), download_buffer_));
-
- message_loop_.RunAllPending();
- }
-
void OnDownloadInterrupted(int32 download_id, int64 size,
const std::string& hash_state,
content::DownloadInterruptReason reason) {
@@ -356,7 +343,6 @@ class DownloadManagerTest : public testing::Test {
MessageLoopForUI message_loop_;
content::TestBrowserThread ui_thread_;
content::TestBrowserThread file_thread_;
- scoped_refptr<content::DownloadBuffer> download_buffer_;
ScopedTempDir scoped_download_dir_;
DownloadFileManager* file_manager() {
@@ -378,6 +364,7 @@ const size_t DownloadManagerTest::kTestDataLen =
class DownloadFileWithErrors : public DownloadFileImpl {
public:
DownloadFileWithErrors(DownloadCreateInfo* info,
+ scoped_ptr<content::ByteStreamReader> stream,
DownloadManager* manager,
bool calculate_hash);
virtual ~DownloadFileWithErrors() {}
@@ -406,10 +393,13 @@ class DownloadFileWithErrors : public DownloadFileImpl {
net::Error forced_error_;
};
-DownloadFileWithErrors::DownloadFileWithErrors(DownloadCreateInfo* info,
- DownloadManager* manager,
- bool calculate_hash)
+DownloadFileWithErrors::DownloadFileWithErrors(
+ DownloadCreateInfo* info,
+ scoped_ptr<content::ByteStreamReader> stream,
+ DownloadManager* manager,
+ bool calculate_hash)
: DownloadFileImpl(info,
+ stream.Pass(),
new DownloadRequestHandle(),
manager,
calculate_hash,
@@ -575,8 +565,16 @@ TEST_F(DownloadManagerTest, MAYBE_StartDownload) {
info->mime_type = kStartDownloadCases[i].mime_type;
download_manager_->CreateDownloadItem(info.get(), DownloadRequestHandle());
+ scoped_ptr<content::ByteStreamWriter> stream_writer;
+ scoped_ptr<content::ByteStreamReader> stream_reader;
+ content::CreateByteStream(message_loop_.message_loop_proxy(),
+ message_loop_.message_loop_proxy(),
+ kTestDataLen, &stream_writer, &stream_reader);
+
DownloadFile* download_file(
- new DownloadFileImpl(info.get(), new DownloadRequestHandle(),
+ new DownloadFileImpl(info.get(),
+ stream_reader.Pass(),
+ new DownloadRequestHandle(),
download_manager_, false,
scoped_ptr<PowerSaveBlocker>(NULL).Pass(),
net::BoundNetLog()));
@@ -882,6 +880,13 @@ TEST_F(DownloadManagerTest, DownloadFilenameTest) {
}
}
+void WriteCopyToStream(const char *source,
+ size_t len, content::ByteStreamWriter* stream) {
+ scoped_refptr<net::IOBuffer> copy(new net::IOBuffer(len));
+ memcpy(copy.get()->data(), source, len);
+ stream->Write(copy, len);
+}
+
TEST_F(DownloadManagerTest, DownloadInterruptTest) {
using ::testing::_;
using ::testing::CreateFunctor;
@@ -900,16 +905,12 @@ TEST_F(DownloadManagerTest, DownloadInterruptTest) {
const FilePath cr_path(GetTempDownloadPath(new_path));
MockDownloadFile* download_file(new NiceMock<MockDownloadFile>());
- ON_CALL(*download_file, AppendDataToFile(_, _))
- .WillByDefault(Return(net::OK));
// |download_file| is owned by DownloadFileManager.
AddMockDownloadToFileManager(info->download_id.local(), download_file);
EXPECT_CALL(*download_file, Rename(cr_path))
.WillOnce(Return(net::OK));
- EXPECT_CALL(*download_file, AppendDataToFile(kTestData, kTestDataLen))
- .WillOnce(Return(net::OK));
EXPECT_CALL(*download_file, Cancel());
download_manager_->CreateDownloadItem(info.get(), DownloadRequestHandle());
@@ -919,7 +920,6 @@ TEST_F(DownloadManagerTest, DownloadInterruptTest) {
EXPECT_EQ(DownloadItem::IN_PROGRESS, download->GetState());
scoped_ptr<ItemObserver> observer(new ItemObserver(download));
- download_file->AppendDataToFile(kTestData, kTestDataLen);
ContinueDownloadWithPath(download, new_path);
message_loop_.RunAllPending();
EXPECT_TRUE(GetActiveDownloadItem(0) != NULL);
@@ -968,6 +968,12 @@ TEST_F(DownloadManagerTest, MAYBE_DownloadFileErrorTest) {
path,
base::PLATFORM_FILE_OPEN_ALWAYS | base::PLATFORM_FILE_WRITE));
+ // Make sure the DFM exists; we'll need it later.
+ // TODO(rdsmith): This is ugly and should be rewritten, but a large
+ // rewrite of this test is in progress in a different CL, so doing it
+ // the hacky way for now.
+ (void) file_manager();
+
// Normally, the download system takes ownership of info, and is
// responsible for deleting it. In these unit tests, however, we
// don't call the function that deletes it, so we do so ourselves.
@@ -979,14 +985,17 @@ TEST_F(DownloadManagerTest, MAYBE_DownloadFileErrorTest) {
info->total_bytes = static_cast<int64>(kTestDataLen * 3);
info->save_info.file_path = path;
info->save_info.file_stream.reset(stream);
+ scoped_ptr<content::ByteStreamWriter> stream_input;
+ scoped_ptr<content::ByteStreamReader> stream_output;
+ content::CreateByteStream(message_loop_.message_loop_proxy(),
+ message_loop_.message_loop_proxy(),
+ kTestDataLen, &stream_input, &stream_output);
// Create a download file that we can insert errors into.
- DownloadFileWithErrors* download_file(new DownloadFileWithErrors(
- info.get(), download_manager_, false));
+ scoped_ptr<DownloadFileWithErrors> download_file(new DownloadFileWithErrors(
+ info.get(), stream_output.Pass(), download_manager_, false));
download_file->Initialize();
- AddDownloadToFileManager(local_id, download_file);
- // |download_file| is owned by DownloadFileManager.
download_manager_->CreateDownloadItem(info.get(), DownloadRequestHandle());
DownloadItem* download = GetActiveDownloadItem(0);
@@ -996,7 +1005,7 @@ TEST_F(DownloadManagerTest, MAYBE_DownloadFileErrorTest) {
scoped_ptr<ItemObserver> observer(new ItemObserver(download));
// Add some data before finalizing the file name.
- UpdateData(local_id, kTestData, kTestDataLen);
+ WriteCopyToStream(kTestData, kTestDataLen, stream_input.get());
// Finalize the file name.
ContinueDownloadWithPath(download, path);
@@ -1004,11 +1013,12 @@ TEST_F(DownloadManagerTest, MAYBE_DownloadFileErrorTest) {
EXPECT_TRUE(GetActiveDownloadItem(0) != NULL);
// Add more data.
- UpdateData(local_id, kTestData, kTestDataLen);
+ WriteCopyToStream(kTestData, kTestDataLen, stream_input.get());
// Add more data, but an error occurs.
download_file->set_forced_error(net::ERR_FAILED);
- UpdateData(local_id, kTestData, kTestDataLen);
+ WriteCopyToStream(kTestData, kTestDataLen, stream_input.get());
+ message_loop_.RunAllPending();
// Check the state. The download should have been interrupted.
EXPECT_TRUE(GetActiveDownloadItem(0) == NULL);
@@ -1045,15 +1055,11 @@ TEST_F(DownloadManagerTest, DownloadCancelTest) {
const FilePath cr_path(GetTempDownloadPath(new_path));
MockDownloadFile* download_file(new NiceMock<MockDownloadFile>());
- ON_CALL(*download_file, AppendDataToFile(_, _))
- .WillByDefault(Return(net::OK));
AddMockDownloadToFileManager(info->download_id.local(), download_file);
// |download_file| is owned by DownloadFileManager.
EXPECT_CALL(*download_file, Rename(cr_path))
.WillOnce(Return(net::OK));
- EXPECT_CALL(*download_file, AppendDataToFile(kTestData, kTestDataLen))
- .WillOnce(Return(net::OK));
EXPECT_CALL(*download_file, Cancel());
download_manager_->CreateDownloadItem(info.get(), DownloadRequestHandle());
@@ -1068,8 +1074,6 @@ TEST_F(DownloadManagerTest, DownloadCancelTest) {
message_loop_.RunAllPending();
EXPECT_TRUE(GetActiveDownloadItem(0) != NULL);
- download_file->AppendDataToFile(kTestData, kTestDataLen);
-
download->Cancel(false);
message_loop_.RunAllPending();
@@ -1124,6 +1128,11 @@ TEST_F(DownloadManagerTest, MAYBE_DownloadOverwriteTest) {
info->download_id = DownloadId(kValidIdDomain, 0);
info->prompt_user_for_save_location = true;
info->url_chain.push_back(GURL());
+ scoped_ptr<content::ByteStreamWriter> stream_input;
+ scoped_ptr<content::ByteStreamReader> stream_output;
+ content::CreateByteStream(message_loop_.message_loop_proxy(),
+ message_loop_.message_loop_proxy(),
+ kTestDataLen, &stream_input, &stream_output);
download_manager_->CreateDownloadItem(info.get(), DownloadRequestHandle());
@@ -1138,7 +1147,8 @@ TEST_F(DownloadManagerTest, MAYBE_DownloadOverwriteTest) {
// name has been chosen, so we need to initialize the download file
// properly.
DownloadFile* download_file(
- new DownloadFileImpl(info.get(), new DownloadRequestHandle(),
+ new DownloadFileImpl(info.get(), stream_output.Pass(),
+ new DownloadRequestHandle(),
download_manager_, false,
scoped_ptr<PowerSaveBlocker>(NULL).Pass(),
net::BoundNetLog()));
@@ -1152,7 +1162,7 @@ TEST_F(DownloadManagerTest, MAYBE_DownloadOverwriteTest) {
message_loop_.RunAllPending();
EXPECT_TRUE(GetActiveDownloadItem(0) != NULL);
- download_file->AppendDataToFile(kTestData, kTestDataLen);
+ WriteCopyToStream(kTestData, kTestDataLen, stream_input.get());
// Finish the download.
OnResponseCompleted(0, kTestDataLen, "");
@@ -1198,6 +1208,11 @@ TEST_F(DownloadManagerTest, MAYBE_DownloadRemoveTest) {
info->download_id = DownloadId(kValidIdDomain, 0);
info->prompt_user_for_save_location = true;
info->url_chain.push_back(GURL());
+ scoped_ptr<content::ByteStreamWriter> stream_input;
+ scoped_ptr<content::ByteStreamReader> stream_output;
+ content::CreateByteStream(message_loop_.message_loop_proxy(),
+ message_loop_.message_loop_proxy(),
+ kTestDataLen, &stream_input, &stream_output);
download_manager_->CreateDownloadItem(info.get(), DownloadRequestHandle());
@@ -1212,7 +1227,8 @@ TEST_F(DownloadManagerTest, MAYBE_DownloadRemoveTest) {
// name has been chosen, so we need to initialize the download file
// properly.
DownloadFile* download_file(
- new DownloadFileImpl(info.get(), new DownloadRequestHandle(),
+ new DownloadFileImpl(info.get(), stream_output.Pass(),
+ new DownloadRequestHandle(),
download_manager_, false,
scoped_ptr<PowerSaveBlocker>(NULL).Pass(),
net::BoundNetLog()));
@@ -1226,7 +1242,7 @@ TEST_F(DownloadManagerTest, MAYBE_DownloadRemoveTest) {
message_loop_.RunAllPending();
EXPECT_TRUE(GetActiveDownloadItem(0) != NULL);
- download_file->AppendDataToFile(kTestData, kTestDataLen);
+ WriteCopyToStream(kTestData, kTestDataLen, stream_input.get());
// Finish the download.
OnResponseCompleted(0, kTestDataLen, "");
« no previous file with comments | « content/browser/download/download_item_impl_unittest.cc ('k') | content/browser/download/download_net_log_parameters.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698