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

Unified Diff: components/bookmarks/browser/bookmark_index.cc

Issue 701553002: Allow systematic prefix search in bookmarks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month 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
Index: components/bookmarks/browser/bookmark_index.cc
diff --git a/components/bookmarks/browser/bookmark_index.cc b/components/bookmarks/browser/bookmark_index.cc
index 0d549e39a0dcad51a47db0809e0d72e836fa1750..2da18c0aa766c48f80331ccbd1a1360a1838439f 100644
--- a/components/bookmarks/browser/bookmark_index.cc
+++ b/components/bookmarks/browser/bookmark_index.cc
@@ -135,6 +135,7 @@ void BookmarkIndex::Remove(const BookmarkNode* node) {
void BookmarkIndex::GetBookmarksMatching(const base::string16& input_query,
size_t max_count,
+ bool always_prefix_search,
std::vector<BookmarkMatch>* results) {
const base::string16 query = Normalize(input_query);
std::vector<base::string16> terms = ExtractQueryWords(query);
@@ -143,8 +144,10 @@ void BookmarkIndex::GetBookmarksMatching(const base::string16& input_query,
Matches matches;
for (size_t i = 0; i < terms.size(); ++i) {
- if (!GetBookmarksMatchingTerm(terms[i], i == 0, &matches))
+ if (!GetBookmarksMatchingTerm(
+ terms[i], i == 0, always_prefix_search, &matches)) {
return;
+ }
}
Nodes sorted_nodes;
@@ -155,7 +158,7 @@ void BookmarkIndex::GetBookmarksMatching(const base::string16& input_query,
// matches and so this shouldn't be performance critical.
query_parser::QueryParser parser;
ScopedVector<query_parser::QueryNode> query_nodes;
- parser.ParseQueryNodes(query, &query_nodes.get());
+ parser.ParseQueryNodes(query, always_prefix_search, &query_nodes.get());
// The highest typed counts should be at the beginning of the results vector
// so that the best matches will always be included in the results. The loop
@@ -247,13 +250,15 @@ void BookmarkIndex::AddMatchToResults(
}
bool BookmarkIndex::GetBookmarksMatchingTerm(const base::string16& term,
- bool first_term,
- Matches* matches) {
+ bool first_term,
+ bool always_prefix_search,
+ Matches* matches) {
Index::const_iterator i = index_.lower_bound(term);
if (i == index_.end())
return false;
- if (!query_parser::QueryParser::IsWordLongEnoughForPrefixSearch(term)) {
+ if (!always_prefix_search &&
+ !query_parser::QueryParser::IsWordLongEnoughForPrefixSearch(term)) {
// Term is too short for prefix match, compare using exact match.
if (i->first != term)
return false; // No bookmarks with this term.
@@ -334,7 +339,9 @@ std::vector<base::string16> BookmarkIndex::ExtractQueryWords(
if (query.empty())
return std::vector<base::string16>();
query_parser::QueryParser parser;
- parser.ParseQueryWords(base::i18n::ToLower(query), &terms);
+ parser.ParseQueryWords(base::i18n::ToLower(query),
+ false, /* always_prefix_search */
+ &terms);
return terms;
}

Powered by Google App Engine
This is Rietveld 408576698