Index: chrome/browser/download/download_manager.h |
diff --git a/chrome/browser/download/download_manager.h b/chrome/browser/download/download_manager.h |
index 828c83c3bdda7d7f630618b3143257e02834de4e..aa8719692cfced55c99269da8821a3957435ae42 100644 |
--- a/chrome/browser/download/download_manager.h |
+++ b/chrome/browser/download/download_manager.h |
@@ -53,12 +53,17 @@ class DownloadHistory; |
class DownloadPrefs; |
class DownloadStatusUpdater; |
class GURL; |
+class ListValue; |
class Profile; |
class ResourceDispatcherHost; |
class TabContents; |
struct DownloadCreateInfo; |
struct DownloadHistoryInfo; |
struct DownloadSaveInfo; |
+namespace download_util { |
+// Try to avoid including download_query.h because it defines some macros. |
+class DownloadQuery; |
+} // namespace download_util |
// Browser's download manager: manages all downloads and destination view. |
class DownloadManager |
@@ -67,6 +72,8 @@ class DownloadManager |
public DownloadStatusUpdaterDelegate, |
public SelectFileDialog::Listener { |
public: |
+ typedef std::vector<DownloadItem*> ItemVector; |
+ |
explicit DownloadManager(DownloadStatusUpdater* status_updater); |
// Shutdown the download manager. Must be called before destruction. |
@@ -95,22 +102,28 @@ class DownloadManager |
// Return all temporary downloads that reside in the specified directory. |
void GetTemporaryDownloads(const FilePath& dir_path, |
- std::vector<DownloadItem*>* result); |
+ ItemVector* result); |
// Return all non-temporary downloads in the specified directory that are |
// are in progress or have completed. |
void GetAllDownloads(const FilePath& dir_path, |
- std::vector<DownloadItem*>* result); |
+ ItemVector* result); |
// Return all non-temporary downloads in the specified directory that are |
// in-progress (including dangerous downloads waiting for user confirmation). |
void GetCurrentDownloads(const FilePath& dir_path, |
- std::vector<DownloadItem*>* result); |
+ ItemVector* result); |
+ |
+ bool Search(const download_util::DownloadQuery& query, |
+ ItemVector* results = NULL, |
+ bool merge_parent_manager = true, |
+ std::string* error_msg = NULL, |
+ ListValue* json_results = NULL) const; |
// Returns all non-temporary downloads matching |query|. Empty query matches |
// everything. |
void SearchDownloads(const string16& query, |
- std::vector<DownloadItem*>* result); |
+ ItemVector* result); |
// Returns true if initialized properly. |
bool Init(Profile* profile); |
@@ -125,7 +138,7 @@ class DownloadManager |
// Called from a view when a user clicks a UI button or link. |
void DownloadCancelled(int32 download_id); |
- void RemoveDownload(int64 download_handle); |
+ void RemoveDownload(int64 id); |
// Determine if the download is ready for completion, i.e. has had |
// all data saved, and completed the filename determination and |
@@ -192,14 +205,14 @@ class DownloadManager |
// Methods called on completion of a query sent to the history system. |
void OnQueryDownloadEntriesComplete( |
std::vector<DownloadHistoryInfo>* entries); |
- void OnCreateDownloadEntryComplete(int32 download_id, int64 db_handle); |
+ void OnCreateDownloadEntryComplete(int32 download_id); |
// Display a new download in the appropriate browser UI. |
void ShowDownloadInBrowser(DownloadItem* download); |
// The number of in progress (including paused) downloads. |
int in_progress_count() const { |
- return static_cast<int>(in_progress_.size()); |
+ return GetInProgressDownloadCount(); |
} |
Profile* profile() { return profile_; } |
@@ -217,7 +230,7 @@ class DownloadManager |
// Overridden from DownloadStatusUpdaterDelegate: |
virtual bool IsDownloadProgressKnown(); |
- virtual int64 GetInProgressDownloadCount(); |
+ virtual int64 GetInProgressDownloadCount() const; |
virtual int64 GetReceivedDownloadBytes(); |
virtual int64 GetTotalDownloadBytes(); |
@@ -298,13 +311,16 @@ class DownloadManager |
virtual ~DownloadManager(); |
+ void MergeItems(bool merge_parent_manager, |
+ ItemVector* items) const; |
+ |
// Called on the FILE thread to check the existence of a downloaded file. |
- void CheckForFileRemovalOnFileThread(int64 db_handle, const FilePath& path); |
+ void CheckForFileRemovalOnFileThread(int64 id, const FilePath& path); |
// Called on the UI thread if the FILE thread detects the removal of |
// the downloaded file. The UI thread updates the state of the file |
// and then notifies this update to the file's observer. |
- void OnFileRemovalDetected(int64 db_handle); |
+ void OnFileRemovalDetected(int64 id); |
// Called on the download thread to check whether the suggested file path |
// exists. We don't check if the file exists on the UI thread to avoid UI |
@@ -351,55 +367,18 @@ class DownloadManager |
void AssertContainersConsistent() const; |
// Add a DownloadItem to history_downloads_. |
- void AddDownloadItemToHistory(DownloadItem* item, int64 db_handle); |
- |
- // |downloads_| is the owning set for all downloads known to the |
- // DownloadManager. This includes downloads started by the user in |
- // this session, downloads initialized from the history system, and |
- // "save page as" downloads. All other DownloadItem containers in |
- // the DownloadManager are maps; they do not own the DownloadItems. |
- // Note that this is the only place (with any functional implications; |
- // see save_page_as_downloads_ below) that "save page as" downloads are |
- // kept, as the DownloadManager's only job is to hold onto those |
- // until destruction. |
- // |
- // |history_downloads_| is map of all downloads in this profile. The key |
- // is the handle returned by the history system, which is unique |
- // across sessions. |
- // |
- // |active_downloads_| is a map of all downloads that are currently being |
- // processed. The key is the ID assigned by the ResourceDispatcherHost, |
- // which is unique for the current session. |
- // |
- // |in_progress_| is a map of all downloads that are in progress and that have |
- // not yet received a valid history handle. The key is the ID assigned by the |
- // ResourceDispatcherHost, which is unique for the current session. |
- // |
- // |save_page_as_downloads_| (if defined) is a collection of all the |
- // downloads the "save page as" system has given to us to hold onto |
- // until we are destroyed. It is only used for debugging. |
- // |
- // When a download is created through a user action, the corresponding |
- // DownloadItem* is placed in |active_downloads_| and remains there until the |
- // download is in a terminal state (COMPLETE or CANCELLED). It is also |
- // placed in |in_progress_| and remains there until it has received a |
- // valid handle from the history system. Once it has a valid handle, the |
- // DownloadItem* is placed in the |history_downloads_| map. When the |
- // download reaches a terminal state, it is removed from |in_progress_|. |
- // Downloads from past sessions read from a persisted state from the |
- // history system are placed directly into |history_downloads_| since |
- // they have valid handles in the history system. |
+ void AddDownloadItemToHistory(DownloadItem* item); |
+ |
typedef std::set<DownloadItem*> DownloadSet; |
typedef base::hash_map<int64, DownloadItem*> DownloadMap; |
- DownloadSet downloads_; |
- DownloadMap history_downloads_; |
- DownloadMap in_progress_; |
- DownloadMap active_downloads_; |
#if !defined(NDEBUG) |
DownloadSet save_page_as_downloads_; |
#endif |
+ // Map from id to DownloadItem. Owns the DownloadItem. |
+ DownloadMap downloads_; |
+ |
// True if the download manager has been initialized and requires a shutdown. |
bool shutdown_needed_; |