| Index: content/browser/download/download_query.h
|
| diff --git a/content/browser/download/download_query.h b/content/browser/download/download_query.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..4c71aadfbf869ca7396668aea9a12357e7bd069d
|
| --- /dev/null
|
| +++ b/content/browser/download/download_query.h
|
| @@ -0,0 +1,137 @@
|
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_QUERY_H_
|
| +#define CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_QUERY_H_
|
| +#pragma once
|
| +
|
| +#include <map>
|
| +#include <string>
|
| +#include <vector>
|
| +
|
| +#include "base/callback.h"
|
| +#include "content/browser/download/download_item.h"
|
| +
|
| +namespace download_util {
|
| +
|
| +// Filter and sort a vector of DownloadItem*s. See also the macros at the bottom
|
| +// of this file.
|
| +//
|
| +// DownloadQuery query;
|
| +// CHECK(query.Set("startTime", 0));
|
| +// bool FilterOutOddDownloads(const DownloadItem& item) {
|
| +// return 0 == (item.id() % 2);
|
| +// }
|
| +// CHECK(query.Set("filter", base::Bind(&FilterOutOddDownloads)));
|
| +// OrderTermVector order_by;
|
| +// order_by.push_back(OrderTerm(SORT_FIELD_BYTES_RECEIVED, ASCENDING));
|
| +// order_by.push_back(OrderTerm(SORT_FIELD_URL, DESCENDING));
|
| +// CHECK(query.OrderBy(order_by));
|
| +// query.Limit(20);
|
| +// DownloadVector all_items, results;
|
| +// query.Search(all_items.begin(), all_items.end(), &results);
|
| +class DownloadQuery {
|
| + public:
|
| + enum FilterFieldName {
|
| + FILTER_FIELD_BYTES_RECEIVED,
|
| + FILTER_FIELD_DANGER,
|
| + FILTER_FIELD_DANGER_ACCEPTED,
|
| + FILTER_FIELD_ENDED_AFTER,
|
| + FILTER_FIELD_ENDED_BEFORE,
|
| + FILTER_FIELD_END_TIME,
|
| + FILTER_FIELD_ERROR,
|
| + FILTER_FIELD_FILENAME,
|
| + FILTER_FIELD_FILENAME_REGEX,
|
| + FILTER_FIELD_FILE_SIZE,
|
| + FILTER_FIELD_FILE_SIZE_GREATER,
|
| + FILTER_FIELD_FILE_SIZE_LESS,
|
| + FILTER_FIELD_FILTER,
|
| + FILTER_FIELD_MIME,
|
| + FILTER_FIELD_PAUSED,
|
| + FILTER_FIELD_QUERY,
|
| + FILTER_FIELD_STARTED_AFTER,
|
| + FILTER_FIELD_STARTED_BEFORE,
|
| + FILTER_FIELD_START_TIME,
|
| + FILTER_FIELD_STATE,
|
| + FILTER_FIELD_TOTAL_BYTES,
|
| + FILTER_FIELD_TOTAL_BYTES_GREATER,
|
| + FILTER_FIELD_TOTAL_BYTES_LESS,
|
| + FILTER_FIELD_URL,
|
| + FILTER_FIELD_URL_REGEX,
|
| + };
|
| +
|
| + enum SortFieldName {
|
| + SORT_FIELD_BYTES_RECEIVED,
|
| + SORT_FIELD_DANGER,
|
| + SORT_FIELD_DANGER_ACCEPTED,
|
| + SORT_FIELD_END_TIME,
|
| + SORT_FIELD_ERROR,
|
| + SORT_FIELD_FILENAME,
|
| + SORT_FIELD_FILE_SIZE,
|
| + SORT_FIELD_MIME,
|
| + SORT_FIELD_PAUSED,
|
| + SORT_FIELD_START_TIME,
|
| + SORT_FIELD_STATE,
|
| + SORT_FIELD_TOTAL_BYTES,
|
| + SORT_FIELD_URL,
|
| + };
|
| +
|
| + enum SortFieldDirection {
|
| + ASCENDING,
|
| + DESCENDING,
|
| + };
|
| +
|
| + DownloadQuery();
|
| + ~DownloadQuery();
|
| +
|
| + // Returns false if |name| is unrecognized or if |value| is the wrong type or
|
| + // malformed. Returns true and sets the filter field named |name| to |value|
|
| + // otherwise. The filter field will be used to filter out DownloadItem*s when
|
| + // you call Search(). See the implementation for the type of each |name|.
|
| + // (DRY.)
|
| + template <typename ValueType>
|
| + bool Filter(FilterFieldName name, const ValueType& value);
|
| +
|
| + // XXX comment
|
| + void Sort(SortFieldName name, SortFieldDirection direction);
|
| +
|
| + // Remember to limit the size of search results to |limit|.
|
| + void Limit(size_t limit) { limit_ = limit; }
|
| +
|
| + typedef std::vector<DownloadItem*> DownloadVector;
|
| +
|
| + // Filters DownloadItem*s from |iter| to |last| into |results|, sorts
|
| + // |results|, and limits the size of |results|. |results| must be non-NULL.
|
| + template <typename InputIterator>
|
| + void Search(InputIterator iter, const InputIterator last,
|
| + DownloadVector* results) const;
|
| +
|
| + // Returns true if |item| matches all set filter fields; returns false if any
|
| + // filter fields have been set that the item does not match.
|
| + bool Matches(const DownloadItem& item) const;
|
| +
|
| + private:
|
| + class FilterFieldInterface;
|
| + struct OrderTerm {
|
| + OrderTerm(SortFieldName _name, SortFieldDirection _direction)
|
| + : name(_name),
|
| + direction(_direction) {
|
| + }
|
| + SortFieldName name;
|
| + SortFieldDirection direction;
|
| + };
|
| + typedef std::vector<FilterFieldInterface*> FilterFieldVector;
|
| + typedef std::vector<OrderTerm> OrderTermVector;
|
| +
|
| + bool AddFilter(FilterFieldInterface* field);
|
| +
|
| + FilterFieldVector filter_fields_;
|
| + OrderTermVector order_by_fields_;
|
| + size_t limit_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(DownloadQuery);
|
| +};
|
| +} // namespace download_util
|
| +
|
| +#endif // CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_QUERY_H_
|
|
|