Index: chrome/browser/automation/automation_provider_observers.h |
diff --git a/chrome/browser/automation/automation_provider_observers.h b/chrome/browser/automation/automation_provider_observers.h |
index d4d54a695126ee7edb850eb8ba28824b4760974a..258293182ba0e0f8e3fe3b77ade2941693ea1432 100644 |
--- a/chrome/browser/automation/automation_provider_observers.h |
+++ b/chrome/browser/automation/automation_provider_observers.h |
@@ -15,6 +15,7 @@ |
#include "base/compiler_specific.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/memory/weak_ptr.h" |
+#include "base/values.h" |
#include "base/synchronization/waitable_event.h" |
#include "chrome/browser/automation/automation_provider_json.h" |
#include "chrome/browser/automation/automation_tab_helper.h" |
@@ -1035,31 +1036,6 @@ class AutomationProviderBookmarkModelObserver : public BookmarkModelObserver { |
DISALLOW_COPY_AND_ASSIGN(AutomationProviderBookmarkModelObserver); |
}; |
-// Allows the automation provider to wait for all downloads to finish. |
-// If any download is interrupted, it will cancel all the other downloads at |
-// the next |OnDownloadUpdated|, and send an error when all are done. |
-class AutomationProviderDownloadItemObserver : public DownloadItem::Observer { |
- public: |
- AutomationProviderDownloadItemObserver( |
- AutomationProvider* provider, |
- IPC::Message* reply_message, |
- int downloads); |
- virtual ~AutomationProviderDownloadItemObserver(); |
- |
- virtual void OnDownloadUpdated(DownloadItem* download); |
- virtual void OnDownloadOpened(DownloadItem* download); |
- |
- private: |
- void RemoveAndCleanupOnLastEntry(DownloadItem* download); |
- |
- base::WeakPtr<AutomationProvider> provider_; |
- scoped_ptr<IPC::Message> reply_message_; |
- int downloads_; |
- bool interrupted_; |
- |
- DISALLOW_COPY_AND_ASSIGN(AutomationProviderDownloadItemObserver); |
-}; |
- |
// Allows the automation provider to wait until the download has been updated |
// or opened. |
class AutomationProviderDownloadUpdatedObserver |
@@ -1103,6 +1079,37 @@ class AutomationProviderDownloadModelChangedObserver |
DISALLOW_COPY_AND_ASSIGN(AutomationProviderDownloadModelChangedObserver); |
}; |
+// Observes when all pending downloads have completed. |
+class AllDownloadsCompleteObserver |
+ : public DownloadManager::Observer, |
+ public DownloadItem::Observer { |
+ public: |
+ AllDownloadsCompleteObserver( |
+ AutomationProvider* provider, |
+ IPC::Message* reply_message, |
+ DownloadManager* download_manager, |
+ ListValue* pre_download_ids); |
+ virtual ~AllDownloadsCompleteObserver(); |
+ |
+ // DownloadManager::Observer. |
+ virtual void ModelChanged(); |
+ |
+ // DownloadItem::Observer. |
+ virtual void OnDownloadUpdated(DownloadItem* download); |
+ virtual void OnDownloadOpened(DownloadItem* download) {} |
+ |
+ private: |
+ void ReplyIfNecessary(); |
+ |
+ base::WeakPtr<AutomationProvider> provider_; |
+ scoped_ptr<IPC::Message> reply_message_; |
+ DownloadManager* download_manager_; |
+ std::set<int> pre_download_ids_; |
+ std::set<DownloadItem*> pending_downloads_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(AllDownloadsCompleteObserver); |
+}; |
+ |
// Allows automation provider to wait until TemplateURLService has loaded |
// before looking up/returning search engine info. |
class AutomationProviderSearchEngineObserver |