Chromium Code Reviews| 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..3397aa56d68565e7b0ff4713215118feb7ca8de8 100644 |
| --- a/chrome/browser/autocomplete/search_provider.cc |
| +++ b/chrome/browser/autocomplete/search_provider.cc |
| @@ -846,19 +846,29 @@ 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 > |
|
msw
2013/01/23 19:15:19
Shouldn't this only kick in when keyword_search_wh
|
| + 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 +877,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, |
|
msw
2013/01/23 19:15:19
It seems odd that you're just passing in true for
|
| + 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 +895,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 +906,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 +914,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(); |