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

Unified Diff: components/omnibox/browser/url_index_private_data.cc

Issue 2842513006: Omnibox - HistoryQuick Provider - Don't Run Duplicate Searches (Closed)
Patch Set: add comment Created 3 years, 7 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/omnibox/browser/url_index_private_data.cc
diff --git a/components/omnibox/browser/url_index_private_data.cc b/components/omnibox/browser/url_index_private_data.cc
index b9f2a93ea945bc2e73e33afdb396d0bd0ef8a975..663ee8a7dc6c3fbacccb78130779cc6e3832749e 100644
--- a/components/omnibox/browser/url_index_private_data.cc
+++ b/components/omnibox/browser/url_index_private_data.cc
@@ -10,6 +10,7 @@
#include <iterator>
#include <limits>
#include <numeric>
+#include <set>
#include <string>
#include <vector>
@@ -155,7 +156,10 @@ ScoredHistoryMatches URLIndexPrivateData::HistoryItemsForTerms(
(cursor_position < original_search_string.length()) &&
(cursor_position > 0)) {
// The original search_string broken at cursor position. This is one type of
- // transformation.
+ // transformation. It's possible this transformation doesn't actually
+ // break any words. There's no harm in adding the transformation in this
+ // case because the searching code below prevents running duplicate
+ // searches.
base::string16 transformed_search_string(original_search_string);
transformed_search_string.insert(cursor_position, base::ASCIIToUTF16(" "));
search_strings.push_back(transformed_search_string);
@@ -173,6 +177,9 @@ ScoredHistoryMatches URLIndexPrivateData::HistoryItemsForTerms(
ResetSearchTermCache();
bool history_ids_were_trimmed = false;
+ // A set containing the list of words extracted from each search string,
+ // used to prevent running duplicate searches.
+ std::set<String16Vector> search_string_words;
for (const base::string16& search_string : search_strings) {
// The search string we receive may contain escaped characters. For reducing
// the index we need individual, lower-cased words, ignoring escapings. For
@@ -192,6 +199,10 @@ ScoredHistoryMatches URLIndexPrivateData::HistoryItemsForTerms(
String16VectorFromString16(lower_unescaped_string, false, nullptr));
if (lower_words.empty())
continue;
+ // If we've already searched for this list of words, don't do it again.
+ if (search_string_words.find(lower_words) != search_string_words.end())
+ continue;
+ search_string_words.insert(lower_words);
HistoryIDVector history_ids = HistoryIDsFromWords(lower_words);
history_ids_were_trimmed |= TrimHistoryIdsPool(&history_ids);
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698