Chromium Code Reviews| Index: chrome/browser/download/download_test_observer.h |
| diff --git a/chrome/browser/download/download_test_observer.h b/chrome/browser/download/download_test_observer.h |
| index 3404f425e3c9d6fc57beb11ee7ca6e49536a251b..3095f40b6e1662d8f571ae852a1292568482bdb9 100644 |
| --- a/chrome/browser/download/download_test_observer.h |
| +++ b/chrome/browser/download/download_test_observer.h |
| @@ -13,20 +13,20 @@ |
| #include "content/public/browser/download_item.h" |
| #include "content/public/browser/download_manager.h" |
| -// Construction of this class defines a system state, based on some number |
| -// of downloads being seen in a particular state + other events that |
| -// may occur in the download system. That state will be recorded if it |
| -// occurs at any point after construction. When that state occurs, the class |
| -// is considered finished. Callers may either probe for the finished state, or |
| -// wait on it. |
| +// Detects changes to the downloads after construction. |
| +// Finishes when one of the following happens: |
| +// - A specified number of downloads change to a terminal state (defined |
| +// as anything but IN_PROGRESS). |
| +// - Specific events, such as a select file dialog. |
| +// Callers may either probe for the finished state, or wait on it. |
| // |
| // TODO(rdsmith): Detect manager going down, remove pointer to |
| // DownloadManager, transition to finished. (For right now we |
| // just use a scoped_refptr<> to keep it around, but that may cause |
| // timeouts on waiting if a DownloadManager::Shutdown() occurs which |
| // cancels our in-progress downloads.) |
| -class DownloadTestObserver : public content::DownloadManager::Observer, |
| - public content::DownloadItem::Observer { |
| +class DownloadTestObserverTerminal : public content::DownloadManager::Observer, |
| + public content::DownloadItem::Observer { |
| public: |
| // Action an observer should take if a dangerous download is encountered. |
| enum DangerousDownloadAction { |
| @@ -36,26 +36,23 @@ class DownloadTestObserver : public content::DownloadManager::Observer, |
| }; |
| // Create an object that will be considered finished when |wait_count| |
| - // download items have entered state |download_finished_state|. |
| + // download items have entered a terminal state (either CANCELLED or |
| + // another state that you can't normally transition out of). |
| // If |finish_on_select_file| is true, the object will also be |
| // considered finished if the DownloadManager raises a |
| // SelectFileDialogDisplayed() notification. |
| - |
| - // TODO(rdsmith): Consider rewriting the interface to take a list of events |
| - // to treat as completion events. |
| - DownloadTestObserver( |
| + DownloadTestObserverTerminal( |
| content::DownloadManager* download_manager, |
| size_t wait_count, |
| - content::DownloadItem::DownloadState download_finished_state, |
| bool finish_on_select_file, |
| DangerousDownloadAction dangerous_download_action); |
| - virtual ~DownloadTestObserver(); |
| + virtual ~DownloadTestObserverTerminal(); |
| // State accessors. |
| bool select_file_dialog_seen() const { return select_file_dialog_seen_; } |
| - // Wait for whatever state was specified in the constructor. |
| + // Wait for the requested number of downloads to enter a terminal state. |
| void WaitForFinished(); |
| // Return true if everything's happened that we're configured for. |
| @@ -73,6 +70,10 @@ class DownloadTestObserver : public content::DownloadManager::Observer, |
| size_t NumDangerousDownloadsSeen() const; |
| + protected: |
| + // Called to see if a download item is in a final state. |
| + virtual bool IsDownloadInFinalState(content::DownloadItem* download); |
| + |
| private: |
| typedef std::set<content::DownloadItem*> DownloadSet; |
| @@ -114,11 +115,8 @@ class DownloadTestObserver : public content::DownloadManager::Observer, |
| // all downloads completing. |
| bool waiting_; |
| - // The state on which to consider the DownloadItem finished. |
| - content::DownloadItem::DownloadState download_finished_state_; |
| - |
| - // True if we should transition the DownloadTestObserver to finished if |
| - // the select file dialog comes up. |
| + // True if we should transition the DownloadTestObserverTerminal to |
| + // finished if the select file dialog comes up. |
| bool finish_on_select_file_; |
| // True if we've seen the select file dialog. |
| @@ -130,7 +128,29 @@ class DownloadTestObserver : public content::DownloadManager::Observer, |
| // Holds the download ids which were dangerous. |
| std::set<int32> dangerous_downloads_seen_; |
| - DISALLOW_COPY_AND_ASSIGN(DownloadTestObserver); |
| + DISALLOW_COPY_AND_ASSIGN(DownloadTestObserverTerminal); |
| +}; |
| + |
| +// Detects changes to the downloads after construction. |
| +// Finishes when one of the following happens: |
| +// - A specified number of downloads change to the IN_PROGRESS state. |
| +// Callers may either probe for the finished state, or wait on it. |
| +// |
| +class DownloadTestObserverInProgress : public DownloadTestObserverTerminal { |
|
Randy Smith (Not in Mondays)
2012/03/07 21:39:16
This is test code, so I won't insist on a change,
ahendrickson
2012/03/08 17:36:07
Done.
|
| + public: |
| + // Create an object that will be considered finished when |wait_count| |
| + // download items have entered state |IN_PROGRESS|. |
| + |
| + DownloadTestObserverInProgress( |
| + content::DownloadManager* download_manager, |
| + size_t wait_count); |
| + |
| + virtual ~DownloadTestObserverInProgress(); |
| + |
| + private: |
| + virtual bool IsDownloadInFinalState(content::DownloadItem* download) OVERRIDE; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(DownloadTestObserverInProgress); |
| }; |
| // The WaitForFlush() method on this class returns after: |