DownloadsSearchFunction implements chrome.experimental.downloads.search() using DownloadQuery.
BUG=12133
Review URL: http://codereview.chromium.org/8917019
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@119085 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/content/browser/download/download_manager_impl.cc b/content/browser/download/download_manager_impl.cc
index d391e56..cc8d55c8 100644
--- a/content/browser/download/download_manager_impl.cc
+++ b/content/browser/download/download_manager_impl.cc
@@ -32,6 +32,7 @@
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/content_browser_client.h"
#include "content/public/browser/download_manager_delegate.h"
+#include "content/public/browser/download_query.h"
#include "content/public/browser/notification_service.h"
#include "content/public/browser/notification_types.h"
#include "content/public/browser/render_process_host.h"
@@ -84,6 +85,30 @@
*context);
}
+class MapValueIteratorAdapter {
+ public:
+ explicit MapValueIteratorAdapter(
+ base::hash_map<int64, DownloadItem*>::const_iterator iter)
+ : iter_(iter) {
+ }
+ ~MapValueIteratorAdapter() {}
+
+ DownloadItem* operator*() { return iter_->second; }
+
+ MapValueIteratorAdapter& operator++() {
+ ++iter_;
+ return *this;
+ }
+
+ bool operator!=(const MapValueIteratorAdapter& that) const {
+ return iter_ != that.iter_;
+ }
+
+ private:
+ base::hash_map<int64, DownloadItem*>::const_iterator iter_;
+ // Allow copy and assign.
+};
+
} // namespace
namespace content {
@@ -229,6 +254,12 @@
}
}
+void DownloadManagerImpl::SearchByQuery(const content::DownloadQuery& query,
+ DownloadVector* results) {
+ query.Search(MapValueIteratorAdapter(history_downloads_.begin()),
+ MapValueIteratorAdapter(history_downloads_.end()), results);
+}
+
void DownloadManagerImpl::SearchDownloads(const string16& query,
DownloadVector* result) {
string16 query_lower(base::i18n::ToLower(query));