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

Unified Diff: chrome/browser/download/download_query.cc

Issue 1706193002: Expose final download URL (actual url after redirects) in the extension API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 5 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/download/download_query.h ('k') | chrome/browser/download/download_query_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/download/download_query.cc
diff --git a/chrome/browser/download/download_query.cc b/chrome/browser/download/download_query.cc
index e1c0dbf3b3acf445095e998dd25d75faba615b9a..064dfec3fcedc90b82a89f5030abc6d665cf521b 100644
--- a/chrome/browser/download/download_query.cc
+++ b/chrome/browser/download/download_query.cc
@@ -70,11 +70,11 @@ template<> bool GetAs(const base::Value& in, std::vector<base::string16>* out) {
// The next several functions are helpers for making Callbacks that access
// DownloadItem fields.
-static int64_t GetStartTimeMsEpoch(const DownloadItem& item) {
+int64_t GetStartTimeMsEpoch(const DownloadItem& item) {
return (item.GetStartTime() - base::Time::UnixEpoch()).InMilliseconds();
}
-static int64_t GetEndTimeMsEpoch(const DownloadItem& item) {
+int64_t GetEndTimeMsEpoch(const DownloadItem& item) {
return (item.GetEndTime() - base::Time::UnixEpoch()).InMilliseconds();
}
@@ -87,58 +87,62 @@ std::string TimeToISO8601(const base::Time& t) {
exploded.millisecond);
}
-static std::string GetStartTime(const DownloadItem& item) {
+std::string GetStartTime(const DownloadItem& item) {
return TimeToISO8601(item.GetStartTime());
}
-static std::string GetEndTime(const DownloadItem& item) {
+std::string GetEndTime(const DownloadItem& item) {
return TimeToISO8601(item.GetEndTime());
}
-static bool GetDangerAccepted(const DownloadItem& item) {
+bool GetDangerAccepted(const DownloadItem& item) {
return (item.GetDangerType() ==
content::DOWNLOAD_DANGER_TYPE_USER_VALIDATED);
}
-static bool GetExists(const DownloadItem& item) {
+bool GetExists(const DownloadItem& item) {
return !item.GetFileExternallyRemoved();
}
-static base::string16 GetFilename(const DownloadItem& item) {
+base::string16 GetFilename(const DownloadItem& item) {
// This filename will be compared with strings that could be passed in by the
// user, who only sees LossyDisplayNames.
return item.GetTargetFilePath().LossyDisplayName();
}
-static std::string GetFilenameUTF8(const DownloadItem& item) {
+std::string GetFilenameUTF8(const DownloadItem& item) {
return base::UTF16ToUTF8(GetFilename(item));
}
-static std::string GetUrl(const DownloadItem& item) {
+std::string GetOriginalUrl(const DownloadItem& item) {
return item.GetOriginalUrl().spec();
}
-static DownloadItem::DownloadState GetState(const DownloadItem& item) {
+std::string GetUrl(const DownloadItem& item) {
+ return item.GetURL().spec();
+}
+
+DownloadItem::DownloadState GetState(const DownloadItem& item) {
return item.GetState();
}
-static DownloadDangerType GetDangerType(const DownloadItem& item) {
+DownloadDangerType GetDangerType(const DownloadItem& item) {
return item.GetDangerType();
}
-static double GetReceivedBytes(const DownloadItem& item) {
+double GetReceivedBytes(const DownloadItem& item) {
return item.GetReceivedBytes();
}
-static double GetTotalBytes(const DownloadItem& item) {
+double GetTotalBytes(const DownloadItem& item) {
return item.GetTotalBytes();
}
-static std::string GetMimeType(const DownloadItem& item) {
+std::string GetMimeType(const DownloadItem& item) {
return item.GetMimeType();
}
-static bool IsPaused(const DownloadItem& item) {
+bool IsPaused(const DownloadItem& item) {
return item.IsPaused();
}
@@ -149,7 +153,7 @@ enum ComparisonType {LT, EQ, GT};
// DownloadItem and returns one of its fields, which is then compared to
// |value|.
template<typename ValueType>
-static bool FieldMatches(
+bool FieldMatches(
const ValueType& value,
ComparisonType cmptype,
const base::Callback<ValueType(const DownloadItem&)>& accessor,
@@ -174,7 +178,7 @@ template <typename ValueType> DownloadQuery::FilterCallback BuildFilter(
}
// Returns true if |accessor.Run(item)| matches |pattern|.
-static bool FindRegex(
+bool FindRegex(
RE2* pattern,
const base::Callback<std::string(const DownloadItem&)>& accessor,
const DownloadItem& item) {
@@ -196,7 +200,7 @@ DownloadQuery::FilterCallback BuildRegexFilter(
// Returns a ComparisonType to indicate whether a field in |left| is less than,
// greater than or equal to the same field in |right|.
template<typename ValueType>
-static ComparisonType Compare(
+ComparisonType Compare(
const base::Callback<ValueType(const DownloadItem&)>& accessor,
const DownloadItem& left, const DownloadItem& right) {
ValueType left_value = accessor.Run(left);
@@ -215,16 +219,27 @@ bool DownloadQuery::MatchesQuery(const std::vector<base::string16>& query_terms,
if (query_terms.empty())
return true;
- base::string16 url_raw(base::UTF8ToUTF16(item.GetOriginalUrl().spec()));
- base::string16 url_formatted = url_raw;
- if (item.GetBrowserContext())
- url_formatted = url_formatter::FormatUrl(item.GetOriginalUrl());
+ base::string16 original_url_raw(
+ base::UTF8ToUTF16(item.GetOriginalUrl().spec()));
+ base::string16 url_raw(base::UTF8ToUTF16(item.GetURL().spec()));
+ // Try to also match query with above URLs formatted in user display friendly
+ // way. This will unescape characters (including spaces) and trim all extra
+ // data (like username and password) from raw url so that for example raw url
+ // "http://some.server.org/example%20download/file.zip" will be matched with
+ // search term "example download".
+ base::string16 original_url_formatted(
+ url_formatter::FormatUrl(item.GetOriginalUrl()));
+ base::string16 url_formatted(url_formatter::FormatUrl(item.GetURL()));
base::string16 path(item.GetTargetFilePath().LossyDisplayName());
for (std::vector<base::string16>::const_iterator it = query_terms.begin();
it != query_terms.end(); ++it) {
base::string16 term = base::i18n::ToLower(*it);
if (!base::i18n::StringSearchIgnoringCaseAndAccents(
+ term, original_url_raw, NULL, NULL) &&
+ !base::i18n::StringSearchIgnoringCaseAndAccents(
+ term, original_url_formatted, NULL, NULL) &&
+ !base::i18n::StringSearchIgnoringCaseAndAccents(
term, url_raw, NULL, NULL) &&
!base::i18n::StringSearchIgnoringCaseAndAccents(
term, url_formatted, NULL, NULL) &&
@@ -301,6 +316,10 @@ bool DownloadQuery::AddFilter(DownloadQuery::FilterType type,
return AddFilter(BuildFilter<double>(value, GT, &GetTotalBytes));
case FILTER_TOTAL_BYTES_LESS:
return AddFilter(BuildFilter<double>(value, LT, &GetTotalBytes));
+ case FILTER_ORIGINAL_URL:
+ return AddFilter(BuildFilter<std::string>(value, EQ, &GetOriginalUrl));
+ case FILTER_ORIGINAL_URL_REGEX:
+ return AddFilter(BuildRegexFilter(value, &GetOriginalUrl));
case FILTER_URL:
return AddFilter(BuildFilter<std::string>(value, EQ, &GetUrl));
case FILTER_URL_REGEX:
@@ -391,6 +410,10 @@ void DownloadQuery::AddSorter(DownloadQuery::SortType type,
sorters_.push_back(
Sorter::Build<int64_t>(direction, &GetStartTimeMsEpoch));
break;
+ case SORT_ORIGINAL_URL:
+ sorters_.push_back(
+ Sorter::Build<std::string>(direction, &GetOriginalUrl));
+ break;
case SORT_URL:
sorters_.push_back(Sorter::Build<std::string>(direction, &GetUrl));
break;
« no previous file with comments | « chrome/browser/download/download_query.h ('k') | chrome/browser/download/download_query_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698