diff options
author | vanlam@google.com <vanlam@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-16 19:48:32 +0000 |
---|---|---|
committer | vanlam@google.com <vanlam@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-16 19:48:32 +0000 |
commit | 5a3b50a265fca82189c0947cfef94ef84e351e81 (patch) | |
tree | 962ccc58d1052d40bc8c5de22bc5e343f9abe466 /content | |
parent | 4ee0c305219d65cb8602666b580337fd63eb7aa8 (diff) | |
download | chromium_src-5a3b50a265fca82189c0947cfef94ef84e351e81.zip chromium_src-5a3b50a265fca82189c0947cfef94ef84e351e81.tar.gz chromium_src-5a3b50a265fca82189c0947cfef94ef84e351e81.tar.bz2 |
Searching for downloads currently does a plain substring search, which does not
take into account different Unicode representations of characters. Used ICU API
to handle this.
BUG=chromium:71982
TEST=Check that MatchesQuery uses substring search taking into account Unicode
normalization at primary level.
Review URL: http://codereview.chromium.org/7782009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@101548 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r-- | content/browser/download/download_item.cc | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/content/browser/download/download_item.cc b/content/browser/download/download_item.cc index 0809872..d37cd51 100644 --- a/content/browser/download/download_item.cc +++ b/content/browser/download/download_item.cc @@ -8,6 +8,7 @@ #include "base/file_util.h" #include "base/format_macros.h" #include "base/i18n/case_conversion.h" +#include "base/i18n/string_search.h" #include "base/logging.h" #include "base/metrics/histogram.h" #include "base/stringprintf.h" @@ -614,8 +615,8 @@ bool DownloadItem::MatchesQuery(const string16& query) const { DCHECK_EQ(query, base::i18n::ToLower(query)); - string16 url_raw(base::i18n::ToLower(UTF8ToUTF16(GetURL().spec()))); - if (url_raw.find(query) != string16::npos) + string16 url_raw(UTF8ToUTF16(GetURL().spec())); + if (base::i18n::StringSearchIgnoringCaseAndAccents(query, url_raw)) return true; // TODO(phajdan.jr): write a test case for the following code. @@ -627,17 +628,12 @@ bool DownloadItem::MatchesQuery(const string16& query) const { TabContents* tab = request_handle_.GetTabContents(); if (tab) languages = content::GetContentClient()->browser()->GetAcceptLangs(tab); - string16 url_formatted( - base::i18n::ToLower(net::FormatUrl(GetURL(), languages))); - if (url_formatted.find(query) != string16::npos) + string16 url_formatted(net::FormatUrl(GetURL(), languages)); + if (base::i18n::StringSearchIgnoringCaseAndAccents(query, url_formatted)) return true; - string16 path(base::i18n::ToLower(full_path().LossyDisplayName())); - // This shouldn't just do a substring match; it is wrong for Unicode - // due to normalization and we have a fancier search-query system - // used elsewhere. - // http://code.google.com/p/chromium/issues/detail?id=71982 - return (path.find(query) != string16::npos); + string16 path(full_path().LossyDisplayName()); + return base::i18n::StringSearchIgnoringCaseAndAccents(query, path); } void DownloadItem::SetFileCheckResults(const DownloadStateInfo& state) { |