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

Unified Diff: content/public/test/test_file_error_injector.cc

Issue 1750943002: [Downloads] Stop keying TestFileErrorInjector off of URLs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Simplify TestFileErrorInjector 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/public/test/test_file_error_injector.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/public/test/test_file_error_injector.cc
diff --git a/content/public/test/test_file_error_injector.cc b/content/public/test/test_file_error_injector.cc
index 5d5d88500fcb87a19d755b529f39570a3323437f..d2f6df7a5f614cbad022d8fdd30af2b7519fa693 100644
--- a/content/public/test/test_file_error_injector.cc
+++ b/content/public/test/test_file_error_injector.cc
@@ -7,6 +7,7 @@
#include <utility>
#include <vector>
+#include "base/callback.h"
#include "base/compiler_specific.h"
#include "base/logging.h"
#include "content/browser/download/download_file_factory.h"
@@ -23,12 +24,9 @@ class ByteStreamReader;
namespace {
// A class that performs file operations and injects errors.
-class DownloadFileWithErrors: public DownloadFileImpl {
+class DownloadFileWithError: public DownloadFileImpl {
public:
- typedef base::Callback<void(const GURL& url)> ConstructionCallback;
- typedef base::Callback<void(const GURL& url)> DestructionCallback;
-
- DownloadFileWithErrors(const DownloadSaveInfo& save_info,
+ DownloadFileWithError(const DownloadSaveInfo& save_info,
const base::FilePath& default_download_directory,
const GURL& url,
const GURL& referrer_url,
@@ -38,10 +36,10 @@ class DownloadFileWithErrors: public DownloadFileImpl {
const net::BoundNetLog& bound_net_log,
base::WeakPtr<DownloadDestinationObserver> observer,
const TestFileErrorInjector::FileErrorInfo& error_info,
- const ConstructionCallback& ctor_callback,
- const DestructionCallback& dtor_callback);
+ const base::Closure& ctor_callback,
+ const base::Closure& dtor_callback);
- ~DownloadFileWithErrors() override;
+ ~DownloadFileWithError() override;
void Initialize(const InitializeCallback& callback) override;
@@ -69,9 +67,6 @@ class DownloadFileWithErrors: public DownloadFileImpl {
TestFileErrorInjector::FileOperationCode code,
DownloadInterruptReason* output_error);
- // Source URL for the file being downloaded.
- GURL source_url_;
-
// Our injected error. Only one per file.
TestFileErrorInjector::FileErrorInfo error_info_;
@@ -79,7 +74,7 @@ class DownloadFileWithErrors: public DownloadFileImpl {
std::map<TestFileErrorInjector::FileOperationCode, int> operation_counter_;
// Callback for destruction.
- DestructionCallback destruction_callback_;
+ base::Closure destruction_callback_;
};
static void InitializeErrorCallback(
@@ -100,7 +95,7 @@ static void RenameErrorCallback(
path_result : base::FilePath());
}
-DownloadFileWithErrors::DownloadFileWithErrors(
+DownloadFileWithError::DownloadFileWithError(
const DownloadSaveInfo& save_info,
const base::FilePath& default_download_directory,
const GURL& url,
@@ -111,8 +106,8 @@ DownloadFileWithErrors::DownloadFileWithErrors(
const net::BoundNetLog& bound_net_log,
base::WeakPtr<DownloadDestinationObserver> observer,
const TestFileErrorInjector::FileErrorInfo& error_info,
- const ConstructionCallback& ctor_callback,
- const DestructionCallback& dtor_callback)
+ const base::Closure& ctor_callback,
+ const base::Closure& dtor_callback)
: DownloadFileImpl(save_info,
default_download_directory,
url,
@@ -122,7 +117,6 @@ DownloadFileWithErrors::DownloadFileWithErrors(
std::move(byte_stream),
bound_net_log,
observer),
- source_url_(url),
error_info_(error_info),
destruction_callback_(dtor_callback) {
// DownloadFiles are created on the UI thread and are destroyed on the FILE
@@ -131,18 +125,15 @@ DownloadFileWithErrors::DownloadFileWithErrors(
// one (as happens during download resumption), then the DestructionCallback
// for the old DownloadFile is run before the ConstructionCallback for the
// next DownloadFile.
- BrowserThread::PostTask(
- BrowserThread::FILE,
- FROM_HERE,
- base::Bind(ctor_callback, source_url_));
+ BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, ctor_callback);
}
-DownloadFileWithErrors::~DownloadFileWithErrors() {
+DownloadFileWithError::~DownloadFileWithError() {
DCHECK_CURRENTLY_ON(BrowserThread::FILE);
- destruction_callback_.Run(source_url_);
+ destruction_callback_.Run();
}
-void DownloadFileWithErrors::Initialize(
+void DownloadFileWithError::Initialize(
const InitializeCallback& callback) {
DownloadInterruptReason error_to_return = DOWNLOAD_INTERRUPT_REASON_NONE;
InitializeCallback callback_to_use = callback;
@@ -168,14 +159,14 @@ void DownloadFileWithErrors::Initialize(
DownloadFileImpl::Initialize(callback_to_use);
}
-DownloadInterruptReason DownloadFileWithErrors::AppendDataToFile(
+DownloadInterruptReason DownloadFileWithError::AppendDataToFile(
const char* data, size_t data_len) {
return ShouldReturnError(
TestFileErrorInjector::FILE_OPERATION_WRITE,
DownloadFileImpl::AppendDataToFile(data, data_len));
}
-void DownloadFileWithErrors::RenameAndUniquify(
+void DownloadFileWithError::RenameAndUniquify(
const base::FilePath& full_path,
const RenameCompletionCallback& callback) {
DownloadInterruptReason error_to_return = DOWNLOAD_INTERRUPT_REASON_NONE;
@@ -202,7 +193,7 @@ void DownloadFileWithErrors::RenameAndUniquify(
DownloadFileImpl::RenameAndUniquify(full_path, callback_to_use);
}
-void DownloadFileWithErrors::RenameAndAnnotate(
+void DownloadFileWithError::RenameAndAnnotate(
const base::FilePath& full_path,
const RenameCompletionCallback& callback) {
DownloadInterruptReason error_to_return = DOWNLOAD_INTERRUPT_REASON_NONE;
@@ -229,7 +220,7 @@ void DownloadFileWithErrors::RenameAndAnnotate(
DownloadFileImpl::RenameAndAnnotate(full_path, callback_to_use);
}
-bool DownloadFileWithErrors::OverwriteError(
+bool DownloadFileWithError::OverwriteError(
TestFileErrorInjector::FileOperationCode code,
DownloadInterruptReason* output_error) {
int counter = operation_counter_[code]++;
@@ -244,7 +235,7 @@ bool DownloadFileWithErrors::OverwriteError(
return true;
}
-DownloadInterruptReason DownloadFileWithErrors::ShouldReturnError(
+DownloadInterruptReason DownloadFileWithError::ShouldReturnError(
TestFileErrorInjector::FileOperationCode code,
DownloadInterruptReason original_error) {
DownloadInterruptReason output_error = original_error;
@@ -255,12 +246,11 @@ DownloadInterruptReason DownloadFileWithErrors::ShouldReturnError(
} // namespace
// A factory for constructing DownloadFiles that inject errors.
-class DownloadFileWithErrorsFactory : public DownloadFileFactory {
+class DownloadFileWithErrorFactory : public DownloadFileFactory {
public:
- DownloadFileWithErrorsFactory(
- const DownloadFileWithErrors::ConstructionCallback& ctor_callback,
- const DownloadFileWithErrors::DestructionCallback& dtor_callback);
- ~DownloadFileWithErrorsFactory() override;
+ DownloadFileWithErrorFactory(const base::Closure& ctor_callback,
+ const base::Closure& dtor_callback);
+ ~DownloadFileWithErrorFactory() override;
// DownloadFileFactory interface.
DownloadFile* CreateFile(
@@ -274,31 +264,31 @@ class DownloadFileWithErrorsFactory : public DownloadFileFactory {
const net::BoundNetLog& bound_net_log,
base::WeakPtr<DownloadDestinationObserver> observer) override;
- bool AddError(
- const TestFileErrorInjector::FileErrorInfo& error_info);
-
- void ClearErrors();
+ void ClearError();
+ bool SetError(TestFileErrorInjector::FileErrorInfo error);
private:
- // Our injected error list, mapped by URL. One per file.
- TestFileErrorInjector::ErrorMap injected_errors_;
+ // Our injected error.
+ TestFileErrorInjector::FileErrorInfo injected_error_;
// Callback for creation and destruction.
- DownloadFileWithErrors::ConstructionCallback construction_callback_;
- DownloadFileWithErrors::DestructionCallback destruction_callback_;
+ base::Closure construction_callback_;
+ base::Closure destruction_callback_;
};
-DownloadFileWithErrorsFactory::DownloadFileWithErrorsFactory(
- const DownloadFileWithErrors::ConstructionCallback& ctor_callback,
- const DownloadFileWithErrors::DestructionCallback& dtor_callback)
- : construction_callback_(ctor_callback),
- destruction_callback_(dtor_callback) {
+DownloadFileWithErrorFactory::DownloadFileWithErrorFactory(
+ const base::Closure& ctor_callback,
+ const base::Closure& dtor_callback)
+ : construction_callback_(ctor_callback),
+ destruction_callback_(dtor_callback) {
+ injected_error_.code = TestFileErrorInjector::FILE_OPERATION_INITIALIZE;
+ injected_error_.error = DOWNLOAD_INTERRUPT_REASON_NONE;
+ injected_error_.operation_instance = -1;
}
-DownloadFileWithErrorsFactory::~DownloadFileWithErrorsFactory() {
-}
+DownloadFileWithErrorFactory::~DownloadFileWithErrorFactory() {}
-DownloadFile* DownloadFileWithErrorsFactory::CreateFile(
+DownloadFile* DownloadFileWithErrorFactory::CreateFile(
const DownloadSaveInfo& save_info,
const base::FilePath& default_download_directory,
const GURL& url,
@@ -308,45 +298,25 @@ DownloadFile* DownloadFileWithErrorsFactory::CreateFile(
scoped_ptr<ByteStreamReader> byte_stream,
const net::BoundNetLog& bound_net_log,
base::WeakPtr<DownloadDestinationObserver> observer) {
- if (injected_errors_.find(url.spec()) == injected_errors_.end()) {
- // Have to create entry, because FileErrorInfo is not a POD type.
- TestFileErrorInjector::FileErrorInfo err_info = {
- url.spec(),
- TestFileErrorInjector::FILE_OPERATION_INITIALIZE,
- -1,
- DOWNLOAD_INTERRUPT_REASON_NONE
- };
- injected_errors_[url.spec()] = err_info;
- }
-
- return new DownloadFileWithErrors(
+ return new DownloadFileWithError(
save_info, default_download_directory, url, referrer_url, calculate_hash,
std::move(file), std::move(byte_stream), bound_net_log, observer,
- injected_errors_[url.spec()], construction_callback_,
- destruction_callback_);
+ injected_error_, construction_callback_, destruction_callback_);
}
-bool DownloadFileWithErrorsFactory::AddError(
- const TestFileErrorInjector::FileErrorInfo& error_info) {
- // Creates an empty entry if necessary. Duplicate entries overwrite.
- injected_errors_[error_info.url] = error_info;
-
+bool DownloadFileWithErrorFactory::SetError(
+ TestFileErrorInjector::FileErrorInfo error) {
+ injected_error_ = std::move(error);
return true;
}
-void DownloadFileWithErrorsFactory::ClearErrors() {
- injected_errors_.clear();
-}
-
-TestFileErrorInjector::TestFileErrorInjector(
- DownloadManager* download_manager)
- : created_factory_(NULL),
- // This code is only used for browser_tests, so a
+TestFileErrorInjector::TestFileErrorInjector(DownloadManager* download_manager)
+ : // This code is only used for browser_tests, so a
// DownloadManager is always a DownloadManagerImpl.
download_manager_(static_cast<DownloadManagerImpl*>(download_manager)) {
// Record the value of the pointer, for later validation.
created_factory_ =
- new DownloadFileWithErrorsFactory(
+ new DownloadFileWithErrorFactory(
base::Bind(&TestFileErrorInjector::RecordDownloadFileConstruction,
this),
base::Bind(&TestFileErrorInjector::RecordDownloadFileDestruction,
@@ -363,85 +333,59 @@ TestFileErrorInjector::TestFileErrorInjector(
TestFileErrorInjector::~TestFileErrorInjector() {
}
-bool TestFileErrorInjector::AddError(const FileErrorInfo& error_info) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- DCHECK_LE(0, error_info.operation_instance);
- DCHECK(injected_errors_.find(error_info.url) == injected_errors_.end());
-
- // Creates an empty entry if necessary.
- injected_errors_[error_info.url] = error_info;
-
- return true;
-}
-
-void TestFileErrorInjector::ClearErrors() {
+void TestFileErrorInjector::ClearError() {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
- injected_errors_.clear();
+ // An error with an index of -1, which will never be reached.
+ static const TestFileErrorInjector::FileErrorInfo kNoOpErrorInfo = {
+ TestFileErrorInjector::FILE_OPERATION_INITIALIZE, -1,
+ DOWNLOAD_INTERRUPT_REASON_NONE};
+ InjectError(kNoOpErrorInfo);
}
-bool TestFileErrorInjector::InjectErrors() {
+bool TestFileErrorInjector::InjectError(const FileErrorInfo& error_info) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
-
- ClearFoundFiles();
-
+ ClearTotalFileCount();
DCHECK_EQ(static_cast<DownloadFileFactory*>(created_factory_),
download_manager_->GetDownloadFileFactoryForTesting());
-
- created_factory_->ClearErrors();
-
- for (ErrorMap::const_iterator it = injected_errors_.begin();
- it != injected_errors_.end(); ++it)
- created_factory_->AddError(it->second);
-
+ created_factory_->SetError(error_info);
return true;
}
size_t TestFileErrorInjector::CurrentFileCount() const {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
- return files_.size();
+ return active_file_count_;
}
size_t TestFileErrorInjector::TotalFileCount() const {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
- return found_files_.size();
+ return total_file_count_;
}
-
-bool TestFileErrorInjector::HadFile(const GURL& url) const {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
-
- return (found_files_.find(url) != found_files_.end());
-}
-
-void TestFileErrorInjector::ClearFoundFiles() {
- found_files_.clear();
+void TestFileErrorInjector::ClearTotalFileCount() {
+ total_file_count_ = 0;
}
-void TestFileErrorInjector::DownloadFileCreated(GURL url) {
+void TestFileErrorInjector::DownloadFileCreated() {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
- DCHECK(files_.find(url) == files_.end());
-
- files_.insert(url);
- found_files_.insert(url);
+ ++active_file_count_;
+ ++total_file_count_;
}
-void TestFileErrorInjector::DestroyingDownloadFile(GURL url) {
+void TestFileErrorInjector::DestroyingDownloadFile() {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
- DCHECK(files_.find(url) != files_.end());
-
- files_.erase(url);
+ --active_file_count_;
}
-void TestFileErrorInjector::RecordDownloadFileConstruction(const GURL& url) {
+void TestFileErrorInjector::RecordDownloadFileConstruction() {
BrowserThread::PostTask(
- BrowserThread::UI,
- FROM_HERE,
- base::Bind(&TestFileErrorInjector::DownloadFileCreated, this, url));
+ BrowserThread::UI, FROM_HERE,
+ base::Bind(&TestFileErrorInjector::DownloadFileCreated, this));
}
-void TestFileErrorInjector::RecordDownloadFileDestruction(const GURL& url) {
- BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
- base::Bind(&TestFileErrorInjector::DestroyingDownloadFile, this, url));
+void TestFileErrorInjector::RecordDownloadFileDestruction() {
+ BrowserThread::PostTask(
+ BrowserThread::UI, FROM_HERE,
+ base::Bind(&TestFileErrorInjector::DestroyingDownloadFile, this));
}
// static
« no previous file with comments | « content/public/test/test_file_error_injector.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698