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..974f6446456b5e4241b696616c05650093929453 100644 |
--- a/content/public/test/download_test_observer.cc |
+++ b/content/public/test/download_test_observer.cc |
@@ -44,6 +44,48 @@ 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_)) |
+ event_seen_ = true; |
+ if (event_seen_) |
+ return true; |
+ |
+ waiting_ = true; |
+ RunMessageLoop(); |
+ waiting_ = false; |
+ return event_seen_; |
+} |
+ |
+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, |