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

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

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/browser/download/download_browsertest.cc ('k') | content/public/test/test_file_error_injector.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/public/test/test_file_error_injector.h
diff --git a/content/public/test/test_file_error_injector.h b/content/public/test/test_file_error_injector.h
index f3ab979b68e9905f4d65ee195ac4e872d2d5208e..b3382bccc462f5b8ce94203d21737cb5813cbdb1 100644
--- a/content/public/test/test_file_error_injector.h
+++ b/content/public/test/test_file_error_injector.h
@@ -7,8 +7,6 @@
#include <stddef.h>
-#include <map>
-#include <set>
#include <string>
#include "base/macros.h"
@@ -21,36 +19,34 @@
namespace content {
class DownloadId;
-class DownloadFileWithErrorsFactory;
+class DownloadFileWithErrorFactory;
class DownloadManager;
class DownloadManagerImpl;
-// Test helper for injecting errors into download file operations.
-// All errors for a download must be injected before it starts.
-// This class needs to be |RefCountedThreadSafe| because the implementation
-// is referenced by other classes that live past the time when the user is
-// nominally done with it. These classes are internal to content/.
+// Test helper for injecting errors into download file operations. All errors
+// for a download must be injected before it starts. This class needs to be
+// |RefCountedThreadSafe| because the implementation is referenced by other
+// classes that live past the time when the user is nominally done with it.
//
-// NOTE: No more than one download with the same URL can be in progress at
-// the same time. You can have multiple simultaneous downloads as long as the
-// URLs are different, as the URLs are used as keys to get information about
-// the download.
+// Once created, an error injected via InjectError() will cause any
+// DownloadFiles created to fail with that error. Call ClearError() to stop
+// injecting errors.
//
// Example:
//
-// FileErrorInfo a = { url1, ... };
-// FileErrorInfo b = { url2, ... };
+// FileErrorInfo a = { ... };
//
// scoped_refptr<TestFileErrorInjector> injector =
// TestFileErrorInjector::Create(download_manager);
//
-// injector->AddError(a);
-// injector->AddError(b);
-// injector->InjectErrors();
+// injector->InjectError(a);
//
-// download_manager->DownloadUrl(url1, ...);
-// download_manager->DownloadUrl(url2, ...);
-// ... wait for downloads to finish or get an injected error ...
+// download_manager->DownloadUrl(url1, ...); // Will be interrupted due to |a|.
+// download_manager->DownloadUrl(url2, ...); // Will be interrupted due to |a|.
+//
+// injector->ClearError();
+//
+// download_manager->DownloadUrl(url3, ...); // Won't be interrupted due to |a|.
class TestFileErrorInjector
: public base::RefCountedThreadSafe<TestFileErrorInjector> {
public:
@@ -63,14 +59,11 @@ class TestFileErrorInjector
// Structure that encapsulates the information needed to inject a file error.
struct FileErrorInfo {
- std::string url; // Full URL of the download. Identifies the download.
FileOperationCode code; // Operation to affect.
int operation_instance; // 0-based count of operation calls, for each code.
DownloadInterruptReason error; // Error to inject.
};
- typedef std::map<std::string, FileErrorInfo> ErrorMap;
-
// Creates an instance. May only be called once.
// Lives until all callbacks (in the implementation) are complete and the
// creator goes out of scope.
@@ -78,70 +71,57 @@ class TestFileErrorInjector
static scoped_refptr<TestFileErrorInjector> Create(
DownloadManager* download_manager);
- // Adds an error.
- // Must be called before |InjectErrors()| for a particular download file.
- // It is an error to call |AddError()| more than once for the same file
- // (URL), unless you call |ClearErrors()| in between them.
- bool AddError(const FileErrorInfo& error_info);
-
- // Clears all errors.
- // Only affects files created after the next call to InjectErrors().
- void ClearErrors();
-
// Injects the errors such that new download files will be affected.
// The download system must already be initialized before calling this.
// Multiple calls are allowed, but only useful if the errors have changed.
// Replaces the injected error list.
- bool InjectErrors();
+ bool InjectError(const FileErrorInfo& error_to_inject);
+
+ // Clears all errors.
+ // Only affects files created after the next call to InjectErrors().
+ void ClearError();
// Tells how many files are currently open.
size_t CurrentFileCount() const;
// Tells how many files have ever been open (since construction or the
- // last call to |ClearFoundFiles()|).
+ // last call to |ClearTotalFileCount()|).
size_t TotalFileCount() const;
- // Returns whether or not a file matching |url| has been created.
- bool HadFile(const GURL& url) const;
-
- // Resets the found file list.
- void ClearFoundFiles();
+ // Resets the total file count. Doesn't affect what's returned by
+ // CurrentFileCount().
+ void ClearTotalFileCount();
static std::string DebugString(FileOperationCode code);
private:
friend class base::RefCountedThreadSafe<TestFileErrorInjector>;
- typedef std::set<GURL> FileSet;
-
explicit TestFileErrorInjector(DownloadManager* download_manager);
virtual ~TestFileErrorInjector();
// Callbacks from the download file, to record lifetimes.
// These may be called on any thread.
- void RecordDownloadFileConstruction(const GURL& url);
- void RecordDownloadFileDestruction(const GURL& url);
+ void RecordDownloadFileConstruction();
+ void RecordDownloadFileDestruction();
// These run on the UI thread.
- void DownloadFileCreated(GURL url);
- void DestroyingDownloadFile(GURL url);
+ void DownloadFileCreated();
+ void DestroyingDownloadFile();
// All the data is used on the UI thread.
- // Our injected error list, mapped by URL. One per file.
- ErrorMap injected_errors_;
-
// Keep track of active DownloadFiles.
- FileSet files_;
+ size_t active_file_count_ = 0;
// Keep track of found DownloadFiles.
- FileSet found_files_;
+ size_t total_file_count_ = 0;
- // The factory we created. May outlive this class.
- DownloadFileWithErrorsFactory* created_factory_;
+ // The factory we created. May outlive this class.
+ DownloadFileWithErrorFactory* created_factory_ = nullptr;
// The download manager we set the factory on.
- DownloadManagerImpl* download_manager_;
+ DownloadManagerImpl* download_manager_ = nullptr;
DISALLOW_COPY_AND_ASSIGN(TestFileErrorInjector);
};
« no previous file with comments | « content/browser/download/download_browsertest.cc ('k') | content/public/test/test_file_error_injector.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698