| Index: chrome/browser/autocomplete/autocomplete_result.cc
|
| diff --git a/chrome/browser/autocomplete/autocomplete_result.cc b/chrome/browser/autocomplete/autocomplete_result.cc
|
| index 58a19c98b6bcbb4720141f66a1f0a0242b9b2706..537de0d8902029d06a374992f8bcbd12577a3fb6 100644
|
| --- a/chrome/browser/autocomplete/autocomplete_result.cc
|
| +++ b/chrome/browser/autocomplete/autocomplete_result.cc
|
| @@ -10,6 +10,7 @@
|
| #include "base/logging.h"
|
| #include "chrome/browser/autocomplete/autocomplete_input.h"
|
| #include "chrome/browser/autocomplete/autocomplete_match.h"
|
| +#include "chrome/browser/omnibox/omnibox_field_trial.h"
|
|
|
| // static
|
| const size_t AutocompleteResult::kMaxMatches = 6;
|
| @@ -21,7 +22,9 @@ void AutocompleteResult::Selection::Clear() {
|
| is_history_what_you_typed_match = false;
|
| }
|
|
|
| -AutocompleteResult::AutocompleteResult() {
|
| +AutocompleteResult::AutocompleteResult()
|
| + : reorder_for_legal_default_match_(
|
| + OmniboxFieldTrial::InReorderForLegalDefaultMatchGroup()) {
|
| // Reserve space for the max number of matches we'll show.
|
| matches_.reserve(kMaxMatches);
|
|
|
| @@ -99,12 +102,23 @@ void AutocompleteResult::SortAndCull(const AutocompleteInput& input,
|
| matches_.end());
|
|
|
| // Sort and trim to the most relevant kMaxMatches matches.
|
| - const size_t num_matches = std::min(kMaxMatches, matches_.size());
|
| - std::partial_sort(matches_.begin(), matches_.begin() + num_matches,
|
| - matches_.end(), &AutocompleteMatch::MoreRelevant);
|
| - matches_.resize(num_matches);
|
| + std::sort(matches_.begin(), matches_.end(), &AutocompleteMatch::MoreRelevant);
|
| + if (!empty() && !begin()->allowed_to_be_default_match &&
|
| + reorder_for_legal_default_match_) {
|
| + // Top match is not allowed to be the default match. Find the most
|
| + // relevance legal match and shift it to the front.
|
| + for (AutocompleteResult::iterator it = begin(); it != end(); ++it) {
|
| + if (it->allowed_to_be_default_match) {
|
| + std::rotate(matches_.begin(), it, it + 1);
|
| + break;
|
| + }
|
| + }
|
| + }
|
| + matches_.resize(std::min(kMaxMatches, matches_.size()));
|
|
|
| default_match_ = begin();
|
| + DCHECK((default_match_ == end()) ||
|
| + default_match_->allowed_to_be_default_match);
|
|
|
| // Set the alternate nav URL.
|
| alternate_nav_url_ = (default_match_ == end()) ?
|
|
|