summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorvanlam@google.com <vanlam@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-16 19:48:32 +0000
committervanlam@google.com <vanlam@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-16 19:48:32 +0000
commit5a3b50a265fca82189c0947cfef94ef84e351e81 (patch)
tree962ccc58d1052d40bc8c5de22bc5e343f9abe466 /content
parent4ee0c305219d65cb8602666b580337fd63eb7aa8 (diff)
downloadchromium_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.cc18
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) {