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

Unified Diff: chrome/browser/autocomplete/search_provider.cc

Issue 11953016: Omnibox: Better Enforce Suggest Relevance Constraints in Keyword Mode (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 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
Index: chrome/browser/autocomplete/search_provider.cc
diff --git a/chrome/browser/autocomplete/search_provider.cc b/chrome/browser/autocomplete/search_provider.cc
index 713af35fd7e0e65b091f63f1af5cbb4e3990949e..7c74e370d0192737083857948a79bd5f88da558c 100644
--- a/chrome/browser/autocomplete/search_provider.cc
+++ b/chrome/browser/autocomplete/search_provider.cc
@@ -846,19 +846,28 @@ void SearchProvider::ConvertResultsToAutocompleteMatches() {
matches_.resize(max_total_matches);
}
-bool SearchProvider::IsTopMatchScoreTooLow() const {
- return matches_.front().relevance < CalculateRelevanceForVerbatim();
+bool SearchProvider::IsTopMatchScoreTooLow(
+ int keyword_search_what_you_typed_relevance) const {
+ return std::max(matches_.front().relevance,
+ keyword_search_what_you_typed_relevance) <
+ CalculateRelevanceForVerbatim();
}
-bool SearchProvider::IsTopMatchHighRankSearchForURL() const {
+bool SearchProvider::IsTopMatchHighRankSearchForURL(
+ int keyword_search_what_you_typed_relevance) const {
return input_.type() == AutocompleteInput::URL &&
- matches_.front().relevance > CalculateRelevanceForVerbatim() &&
- (matches_.front().type == AutocompleteMatch::SEARCH_SUGGEST ||
- matches_.front().type == AutocompleteMatch::SEARCH_WHAT_YOU_TYPED);
+ ((keyword_search_what_you_typed_relevance >
+ matches_.front().relevance) ||
+ (matches_.front().relevance > CalculateRelevanceForVerbatim() &&
+ (matches_.front().type == AutocompleteMatch::SEARCH_SUGGEST ||
+ matches_.front().type == AutocompleteMatch::SEARCH_WHAT_YOU_TYPED)));
}
-bool SearchProvider::IsTopMatchNotInlinable() const {
- return matches_.front().type != AutocompleteMatch::SEARCH_WHAT_YOU_TYPED &&
+bool SearchProvider::IsTopMatchNotInlinable(
+ int keyword_search_what_you_typed_relevance) const {
+ return (keyword_search_what_you_typed_relevance <
+ matches_.front().relevance) &&
+ matches_.front().type != AutocompleteMatch::SEARCH_WHAT_YOU_TYPED &&
matches_.front().type != AutocompleteMatch::URL_WHAT_YOU_TYPED &&
matches_.front().inline_autocomplete_offset == string16::npos &&
matches_.front().fill_into_edit != input_.text();
@@ -867,12 +876,17 @@ bool SearchProvider::IsTopMatchNotInlinable() const {
void SearchProvider::UpdateMatches() {
ConvertResultsToAutocompleteMatches();
+ const int keyword_search_what_you_typed_relevance =
+ providers_.keyword_provider().empty() ? 0 :
+ KeywordProvider::CalculateRelevance(input_.type(), true, true,
+ input_.prefer_keyword(), input_.allow_exact_keyword_match());
+
// Check constraints that may be violated by suggested relevances.
if (!matches_.empty() &&
(has_suggested_relevance_ || verbatim_relevance_ >= 0)) {
// These two blocks attempt to repair undesriable behavior by suggested
// relevances with minimal impact, preserving other suggested relevances.
- if (IsTopMatchScoreTooLow()) {
+ if (IsTopMatchScoreTooLow(keyword_search_what_you_typed_relevance)) {
// Disregard the suggested verbatim relevance if the top score is below
// the usual verbatim value. For example, a BarProvider may rely on
// SearchProvider's verbatim or inlineable matches for input "foo" to
@@ -880,7 +894,8 @@ void SearchProvider::UpdateMatches() {
verbatim_relevance_ = -1;
ConvertResultsToAutocompleteMatches();
}
- if (IsTopMatchHighRankSearchForURL()) {
+ if (IsTopMatchHighRankSearchForURL(
+ keyword_search_what_you_typed_relevance)) {
// Disregard the suggested search and verbatim relevances if the input
// type is URL and the top match is a highly-ranked search suggestion.
// For example, prevent a search for "foo.com" from outranking another
@@ -890,7 +905,7 @@ void SearchProvider::UpdateMatches() {
verbatim_relevance_ = -1;
ConvertResultsToAutocompleteMatches();
}
- if (IsTopMatchNotInlinable()) {
+ if (IsTopMatchNotInlinable(keyword_search_what_you_typed_relevance)) {
// Disregard suggested relevances if the top match is not SWYT, inlinable,
// or URL_WHAT_YOU_TYPED (which may be top match regardless of inlining).
// For example, input "foo" should not invoke a search for "bar", which
@@ -898,9 +913,10 @@ void SearchProvider::UpdateMatches() {
ApplyCalculatedRelevance();
ConvertResultsToAutocompleteMatches();
}
- DCHECK(!IsTopMatchScoreTooLow());
- DCHECK(!IsTopMatchHighRankSearchForURL());
- DCHECK(!IsTopMatchNotInlinable());
+ DCHECK(!IsTopMatchScoreTooLow(keyword_search_what_you_typed_relevance));
+ DCHECK(!IsTopMatchHighRankSearchForURL(
+ keyword_search_what_you_typed_relevance));
+ DCHECK(!IsTopMatchNotInlinable(keyword_search_what_you_typed_relevance));
}
UpdateStarredStateOfMatches();

Powered by Google App Engine
This is Rietveld 408576698