Chromium Code Reviews| 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..a84f5f4ef9d950bd81a46aefd4fb6e2425c3cefa 100644 |
| --- a/content/public/test/test_file_error_injector.h |
| +++ b/content/public/test/test_file_error_injector.h |
| @@ -7,8 +7,7 @@ |
| #include <stddef.h> |
| -#include <map> |
| -#include <set> |
| +#include <deque> |
| #include <string> |
| #include "base/macros.h" |
| @@ -29,12 +28,10 @@ class DownloadManagerImpl; |
| // 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/. |
| +// 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. |
| +// Each error is injected to a single DownloadFile in the order in which the |
| +// error was added to the TestFileErrorInjector. |
| // |
| // Example: |
| // |
| @@ -48,9 +45,8 @@ class DownloadManagerImpl; |
| // injector->AddError(b); |
| // injector->InjectErrors(); |
| // |
| -// 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 |b|. |
| class TestFileErrorInjector |
| : public base::RefCountedThreadSafe<TestFileErrorInjector> { |
| public: |
| @@ -63,13 +59,12 @@ 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; |
| + using ErrorQueue = std::deque<FileErrorInfo>; |
| // Creates an instance. May only be called once. |
| // Lives until all callbacks (in the implementation) are complete and the |
| @@ -80,8 +75,6 @@ class TestFileErrorInjector |
| // 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. |
| @@ -101,47 +94,42 @@ class TestFileErrorInjector |
| // last call to |ClearFoundFiles()|). |
| 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(); |
| + 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_; |
| + // Our injected error queue. One per file. |
| + ErrorQueue injected_errors_; |
|
svaldez
2016/03/01 18:01:49
Possibly assert on empty upon destruction?
asanka
2016/03/01 18:58:49
Now a no-op.
|
| // 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. |
| + DownloadFileWithErrorsFactory* created_factory_ = nullptr; |
| // The download manager we set the factory on. |
| - DownloadManagerImpl* download_manager_; |
| + DownloadManagerImpl* download_manager_ = nullptr; |
| DISALLOW_COPY_AND_ASSIGN(TestFileErrorInjector); |
| }; |