Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(156)

Unified Diff: chrome/browser/ui/webui/downloads_dom_handler.cc

Issue 10905215: Kill DownloadManager::SearchDownloads, DownloadItem::MatchesQuery (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/webui/downloads_dom_handler.h ('k') | content/browser/download/download_item_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..f1ecd110aa35e536e988e6ed027402fbe655566e 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) {
@@ -327,6 +317,20 @@ void DownloadsDOMHandler::OnDownloadCreated(
void DownloadsDOMHandler::OnDownloadUpdated(
content::DownloadItem* download_item) {
if (IsDownloadDisplayable(*download_item)) {
+ if (!search_text_.empty()) {
+ // Don't CallDownloadUpdated() if download_item doesn't match
+ // search_text_. TODO(benjhayden): Consider splitting MatchesQuery() out
James Hawkins 2012/09/13 16:08:29 nit: Put the TODO on its own line.
benjhayden 2012/09/13 16:24:22 Done.
+ // into a util function.
+ content::DownloadManager::DownloadVector all_items, filtered_items;
+ all_items.push_back(download_item);
+ DownloadQuery query;
+ scoped_ptr<base::Value> query_text(base::Value::CreateStringValue(
+ search_text_));
+ query.AddFilter(DownloadQuery::FILTER_QUERY, *query_text.get());
+ query.Search(all_items.begin(), all_items.end(), &filtered_items);
+ if (filtered_items.empty())
+ return;
+ }
base::ListValue results_value;
results_value.Append(CreateDownloadItemValue(download_item, IsItemIncognito(
download_item->GetId(),
@@ -415,10 +419,8 @@ void DownloadsDOMHandler::HandlePause(const base::ListValue* args) {
void DownloadsDOMHandler::HandleRemove(const base::ListValue* args) {
CountDownloadsDOMEvents(DOWNLOADS_DOM_EVENT_REMOVE);
content::DownloadItem* file = GetDownloadByValue(args);
- if (file) {
- DCHECK(file->IsPersisted());
+ if (file)
file->Remove();
- }
}
void DownloadsDOMHandler::HandleCancel(const base::ListValue* args) {
@@ -462,29 +464,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_));
+ query.AddFilter(DownloadQuery::FILTER_QUERY, *query_text.get());
+ }
+ 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(
« no previous file with comments | « chrome/browser/ui/webui/downloads_dom_handler.h ('k') | content/browser/download/download_item_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698