Chromium Code Reviews| Index: chrome/browser/ui/webui/downloads_dom_handler.cc |
| diff --git a/chrome/browser/ui/webui/downloads_dom_handler.cc b/chrome/browser/ui/webui/downloads_dom_handler.cc |
| index be92a11a353bae762cca5328e4300147b70a4951..c40d48ba75ce486fcf26675f294e9d6d4d71e5c1 100644 |
| --- a/chrome/browser/ui/webui/downloads_dom_handler.cc |
| +++ b/chrome/browser/ui/webui/downloads_dom_handler.cc |
| @@ -25,6 +25,7 @@ |
| #include "chrome/browser/download/download_history.h" |
| #include "chrome/browser/download/download_item_model.h" |
| #include "chrome/browser/download/download_prefs.h" |
| +#include "chrome/browser/download/download_query.h" |
| #include "chrome/browser/download/download_service.h" |
| #include "chrome/browser/download/download_service_factory.h" |
| #include "chrome/browser/download/download_util.h" |
| @@ -61,17 +62,6 @@ namespace { |
| // stuff the downloads down the pipe slowly. |
| static const size_t kMaxDownloads = 150; |
| -// Sorts DownloadItems into descending order by their start time. |
| -class DownloadItemSorter : public std::binary_function<content::DownloadItem*, |
| - content::DownloadItem*, |
| - bool> { |
| - public: |
| - bool operator()(const content::DownloadItem* lhs, |
| - const content::DownloadItem* rhs) { |
| - return lhs->GetStartTime() > rhs->GetStartTime(); |
| - } |
| -}; |
| - |
| enum DownloadsDOMEvent { |
| DOWNLOADS_DOM_EVENT_GET_DOWNLOADS = 0, |
| DOWNLOADS_DOM_EVENT_OPEN_FILE = 1, |
| @@ -245,7 +235,7 @@ DownloadsDOMHandler::DownloadsDOMHandler(content::DownloadManager* dlm) |
| // Observe all the DownloadItems. |
| content::DownloadManager::DownloadVector downloads; |
| - SearchDownloads(&downloads); |
| + GetAllDownloads(&downloads); |
| for (content::DownloadManager::DownloadVector::const_iterator |
| iter = downloads.begin(); |
| iter != downloads.end(); ++iter) { |
| @@ -462,29 +452,33 @@ void DownloadsDOMHandler::ScheduleSendCurrentDownloads() { |
| void DownloadsDOMHandler::SendCurrentDownloads() { |
| update_scheduled_ = false; |
| - content::DownloadManager::DownloadVector downloads; |
| - SearchDownloads(&downloads); |
| - sort(downloads.begin(), downloads.end(), DownloadItemSorter()); |
| + content::DownloadManager::DownloadVector all_items, filtered_items; |
| + GetAllDownloads(&all_items); |
| + DownloadQuery query; |
| + if (!search_text_.empty()) { |
| + scoped_ptr<base::Value> query_text(base::Value::CreateStringValue( |
| + search_text_)); |
| + DCHECK(query.AddFilter(DownloadQuery::FILTER_QUERY, *query_text.get())); |
|
asanka
2012/09/12 18:43:49
Side-effects in a DCHECK
benjhayden
2012/09/12 19:31:57
Done.
|
| + } |
| + query.AddFilter(base::Bind(&IsDownloadDisplayable)); |
| + query.AddSorter(DownloadQuery::SORT_START_TIME, DownloadQuery::DESCENDING); |
| + query.Limit(kMaxDownloads); |
| + query.Search(all_items.begin(), all_items.end(), &filtered_items); |
| base::ListValue results_value; |
| for (content::DownloadManager::DownloadVector::const_iterator |
| - iter = downloads.begin(); |
| - iter != downloads.end(); ++iter) { |
| - if (IsDownloadDisplayable(**iter)) |
| - results_value.Append(CreateDownloadItemValue(*iter, IsItemIncognito( |
| - (*iter)->GetId(), download_manager_, |
| - original_profile_download_manager_))); |
| - if (results_value.GetSize() == kMaxDownloads) |
| - break; |
| + iter = filtered_items.begin(); iter != filtered_items.end(); ++iter) { |
| + results_value.Append(CreateDownloadItemValue(*iter, IsItemIncognito( |
| + (*iter)->GetId(), download_manager_, |
| + original_profile_download_manager_))); |
| } |
| CallDownloadsList(results_value); |
| } |
| -void DownloadsDOMHandler::SearchDownloads( |
| +void DownloadsDOMHandler::GetAllDownloads( |
| content::DownloadManager::DownloadVector* downloads) { |
| - download_manager_->SearchDownloads(search_text_, downloads); |
| + download_manager_->GetAllDownloads(downloads); |
| if (original_profile_download_manager_) |
| - original_profile_download_manager_->SearchDownloads( |
| - search_text_, downloads); |
| + original_profile_download_manager_->GetAllDownloads(downloads); |
| } |
| void DownloadsDOMHandler::ShowDangerPrompt( |