summaryrefslogtreecommitdiffstats
path: root/chrome/browser/autocomplete/history_url_provider.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/autocomplete/history_url_provider.cc')
-rw-r--r--chrome/browser/autocomplete/history_url_provider.cc31
1 files changed, 23 insertions, 8 deletions
diff --git a/chrome/browser/autocomplete/history_url_provider.cc b/chrome/browser/autocomplete/history_url_provider.cc
index d28038a..45c660b 100644
--- a/chrome/browser/autocomplete/history_url_provider.cc
+++ b/chrome/browser/autocomplete/history_url_provider.cc
@@ -21,6 +21,8 @@
#include "chrome/browser/history/history_service.h"
#include "chrome/browser/history/history_service_factory.h"
#include "chrome/browser/history/history_types.h"
+#include "chrome/browser/history/in_memory_url_index_types.h"
+#include "chrome/browser/history/scored_history_match.h"
#include "chrome/browser/omnibox/omnibox_field_trial.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/search_engines/template_url_service.h"
@@ -771,10 +773,8 @@ bool HistoryURLProvider::FixupExactSuggestion(
match->deletable = true;
match->description = classifier.url_row().title();
RecordAdditionalInfoFromUrlRow(classifier.url_row(), match);
- AutocompleteMatch::ClassifyMatchInString(
- input.text(),
- classifier.url_row().title(),
- ACMatchClassification::NONE, &match->description_class);
+ match->description_class =
+ ClassifyDescription(input.text(), match->description);
if (!classifier.url_row().typed_count()) {
// If we reach here, we must be in the second pass, and we must not have
// this row's data available during the first pass. That means we
@@ -1087,10 +1087,25 @@ AutocompleteMatch HistoryURLProvider::HistoryMatchToACMatch(
&match.contents_class);
}
match.description = info.title();
- AutocompleteMatch::ClassifyMatchInString(params.input.text(),
- info.title(),
- ACMatchClassification::NONE,
- &match.description_class);
+ match.description_class =
+ ClassifyDescription(params.input.text(), match.description);
RecordAdditionalInfoFromUrlRow(info, &match);
return match;
}
+
+// static
+ACMatchClassifications HistoryURLProvider::ClassifyDescription(
+ const string16& input_text,
+ const string16& description) {
+ string16 clean_description = history::CleanUpTitleForMatching(description);
+ history::TermMatches description_matches(SortAndDeoverlapMatches(
+ history::MatchTermInString(input_text, clean_description, 0)));
+ history::WordStarts description_word_starts;
+ history::String16VectorFromString16(
+ clean_description, false, &description_word_starts);
+ description_matches =
+ history::ScoredHistoryMatch::FilterTermMatchesByWordStarts(
+ description_matches, description_word_starts, 0);
+ return SpansFromTermMatch(
+ description_matches, clean_description.length(), false);
+}