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

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: 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
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..e1ffb2394fbe3bf4354ed5039efdcc2f8cd872eb 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"
@@ -25,9 +26,6 @@ namespace {
// A class that performs file operations and injects errors.
class DownloadFileWithErrors: public DownloadFileImpl {
public:
- typedef base::Callback<void(const GURL& url)> ConstructionCallback;
- typedef base::Callback<void(const GURL& url)> DestructionCallback;
-
DownloadFileWithErrors(const DownloadSaveInfo& save_info,
const base::FilePath& default_download_directory,
const GURL& url,
@@ -38,8 +36,8 @@ 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;
@@ -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(
@@ -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,15 +125,12 @@ 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() {
DCHECK_CURRENTLY_ON(BrowserThread::FILE);
- destruction_callback_.Run(source_url_);
+ destruction_callback_.Run();
}
void DownloadFileWithErrors::Initialize(
@@ -257,9 +248,8 @@ DownloadInterruptReason DownloadFileWithErrors::ShouldReturnError(
// A factory for constructing DownloadFiles that inject errors.
class DownloadFileWithErrorsFactory : public DownloadFileFactory {
public:
- DownloadFileWithErrorsFactory(
- const DownloadFileWithErrors::ConstructionCallback& ctor_callback,
- const DownloadFileWithErrors::DestructionCallback& dtor_callback);
+ DownloadFileWithErrorsFactory(const base::Closure& ctor_callback,
+ const base::Closure& dtor_callback);
~DownloadFileWithErrorsFactory() override;
// DownloadFileFactory interface.
@@ -274,26 +264,22 @@ class DownloadFileWithErrorsFactory : public DownloadFileFactory {
const net::BoundNetLog& bound_net_log,
base::WeakPtr<DownloadDestinationObserver> observer) override;
- bool AddError(
- const TestFileErrorInjector::FileErrorInfo& error_info);
-
- void ClearErrors();
+ bool SetErrorQueue(TestFileErrorInjector::ErrorQueue errors);
private:
// Our injected error list, mapped by URL. One per file.
- TestFileErrorInjector::ErrorMap injected_errors_;
+ TestFileErrorInjector::ErrorQueue injected_errors_;
// 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) {
-}
+ const base::Closure& ctor_callback,
+ const base::Closure& dtor_callback)
+ : construction_callback_(ctor_callback),
+ destruction_callback_(dtor_callback) {}
DownloadFileWithErrorsFactory::~DownloadFileWithErrorsFactory() {
}
@@ -308,40 +294,26 @@ 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;
- }
+ static TestFileErrorInjector::FileErrorInfo kNoOpErrorInfo = {
+ TestFileErrorInjector::FILE_OPERATION_INITIALIZE, -1,
+ DOWNLOAD_INTERRUPT_REASON_NONE};
+ TestFileErrorInjector::FileErrorInfo err_info =
+ injected_errors_.empty() ? kNoOpErrorInfo : injected_errors_.front();
svaldez 2016/03/01 18:01:49 I might be misunderstanding the code, but don't yo
asanka 2016/03/01 18:58:49 Indeed. None of the tests depend on that, which ma
return new DownloadFileWithErrors(
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_);
+ err_info, 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 DownloadFileWithErrorsFactory::SetErrorQueue(
+ TestFileErrorInjector::ErrorQueue errors) {
+ injected_errors_ = std::move(errors);
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.
asanka 2016/03/01 16:11:38 This is .. special. I'm going to move ownership of
download_manager_(static_cast<DownloadManagerImpl*>(download_manager)) {
// Record the value of the pointer, for later validation.
@@ -366,10 +338,9 @@ 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;
+ injected_errors_.push_back(error_info);
return true;
}
@@ -382,66 +353,50 @@ void TestFileErrorInjector::ClearErrors() {
bool TestFileErrorInjector::InjectErrors() {
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_->SetErrorQueue(std::move(injected_errors_));
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();
-}
-
-
-bool TestFileErrorInjector::HadFile(const GURL& url) const {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
-
- return (found_files_.find(url) != found_files_.end());
+ return total_file_count_;
}
-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

Powered by Google App Engine
This is Rietveld 408576698