Chromium Code Reviews| Index: content/public/test/download_test_observer.cc |
| diff --git a/content/public/test/download_test_observer.cc b/content/public/test/download_test_observer.cc |
| index 85caf410ade5d3706840c7ca8ac9ebf8c7d99b43..877d39fc0ddb2627075c4e2abfb17bdcc9a74c3e 100644 |
| --- a/content/public/test/download_test_observer.cc |
| +++ b/content/public/test/download_test_observer.cc |
| @@ -44,6 +44,43 @@ void DenyDangerousDownload(scoped_refptr<DownloadManager> download_manager, |
| } // namespace |
| +DownloadUpdatedObserver::DownloadUpdatedObserver( |
| + DownloadItem* item, DownloadUpdatedObserver::EventFilter filter) |
| + : item_(item), filter_(filter), waiting_(false), event_seen_(false) { |
| + item->AddObserver(this); |
| +} |
| + |
| +DownloadUpdatedObserver::~DownloadUpdatedObserver() { |
| + if (item_) |
| + item_->RemoveObserver(this); |
| +} |
| + |
| +bool DownloadUpdatedObserver::WaitForEvent() { |
| + if (item_ && filter_.Run(item_)) |
| + return true; |
| + |
| + waiting_ = true; |
| + RunMessageLoop(); |
| + waiting_ = false; |
| + return event_seen_; |
|
benjhayden
2012/09/10 17:37:29
Nice!
What if WaitForEvent() is called on the sam
Randy Smith (Not in Mondays)
2012/09/10 18:32:34
I think of this type of class as tracking whether
|
| +} |
| + |
| +void DownloadUpdatedObserver::OnDownloadUpdated(DownloadItem* item) { |
| + DCHECK_EQ(item_, item); |
| + if (filter_.Run(item_)) |
| + event_seen_ = true; |
| + if (waiting_ && event_seen_) |
| + MessageLoopForUI::current()->Quit(); |
| +} |
| + |
| +void DownloadUpdatedObserver::OnDownloadDestroyed(DownloadItem* item) { |
| + DCHECK_EQ(item_, item); |
| + item_->RemoveObserver(this); |
| + item_ = NULL; |
| + if (waiting_) |
| + MessageLoopForUI::current()->Quit(); |
| +} |
| + |
| DownloadTestObserver::DownloadTestObserver( |
| DownloadManager* download_manager, |
| size_t wait_count, |