| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/omnibox/autocomplete_result.h" | 5 #include "components/omnibox/autocomplete_result.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <iterator> | 8 #include <iterator> |
| 9 | 9 |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 // It's probably safe to do this in the initializer list, but there's little | 116 // It's probably safe to do this in the initializer list, but there's little |
| 117 // penalty to doing it here and it ensures our object is fully constructed | 117 // penalty to doing it here and it ensures our object is fully constructed |
| 118 // before calling member functions. | 118 // before calling member functions. |
| 119 default_match_ = end(); | 119 default_match_ = end(); |
| 120 } | 120 } |
| 121 | 121 |
| 122 AutocompleteResult::~AutocompleteResult() {} | 122 AutocompleteResult::~AutocompleteResult() {} |
| 123 | 123 |
| 124 void AutocompleteResult::CopyOldMatches( | 124 void AutocompleteResult::CopyOldMatches( |
| 125 const AutocompleteInput& input, | 125 const AutocompleteInput& input, |
| 126 const std::string& languages, |
| 126 const AutocompleteResult& old_matches, | 127 const AutocompleteResult& old_matches, |
| 127 TemplateURLService* template_url_service) { | 128 TemplateURLService* template_url_service) { |
| 128 if (old_matches.empty()) | 129 if (old_matches.empty()) |
| 129 return; | 130 return; |
| 130 | 131 |
| 131 if (empty()) { | 132 if (empty()) { |
| 132 // If we've got no matches we can copy everything from the last result. | 133 // If we've got no matches we can copy everything from the last result. |
| 133 CopyFrom(old_matches); | 134 CopyFrom(old_matches); |
| 134 for (ACMatches::iterator i(begin()); i != end(); ++i) | 135 for (ACMatches::iterator i(begin()); i != end(); ++i) |
| 135 i->from_previous = true; | 136 i->from_previous = true; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 153 // anything permanently. | 154 // anything permanently. |
| 154 ProviderToMatches matches_per_provider, old_matches_per_provider; | 155 ProviderToMatches matches_per_provider, old_matches_per_provider; |
| 155 BuildProviderToMatches(&matches_per_provider); | 156 BuildProviderToMatches(&matches_per_provider); |
| 156 old_matches.BuildProviderToMatches(&old_matches_per_provider); | 157 old_matches.BuildProviderToMatches(&old_matches_per_provider); |
| 157 for (ProviderToMatches::const_iterator i(old_matches_per_provider.begin()); | 158 for (ProviderToMatches::const_iterator i(old_matches_per_provider.begin()); |
| 158 i != old_matches_per_provider.end(); ++i) { | 159 i != old_matches_per_provider.end(); ++i) { |
| 159 MergeMatchesByProvider(input.current_page_classification(), | 160 MergeMatchesByProvider(input.current_page_classification(), |
| 160 i->second, matches_per_provider[i->first]); | 161 i->second, matches_per_provider[i->first]); |
| 161 } | 162 } |
| 162 | 163 |
| 163 SortAndCull(input, template_url_service); | 164 SortAndCull(input, languages, template_url_service); |
| 164 } | 165 } |
| 165 | 166 |
| 166 void AutocompleteResult::AppendMatches(const AutocompleteInput& input, | 167 void AutocompleteResult::AppendMatches(const AutocompleteInput& input, |
| 167 const ACMatches& matches) { | 168 const ACMatches& matches) { |
| 168 for (const auto& i : matches) { | 169 for (const auto& i : matches) { |
| 169 #ifndef NDEBUG | 170 #ifndef NDEBUG |
| 170 DCHECK_EQ(AutocompleteMatch::SanitizeString(i.contents), i.contents); | 171 DCHECK_EQ(AutocompleteMatch::SanitizeString(i.contents), i.contents); |
| 171 DCHECK_EQ(AutocompleteMatch::SanitizeString(i.description), | 172 DCHECK_EQ(AutocompleteMatch::SanitizeString(i.description), |
| 172 i.description); | 173 i.description); |
| 173 #endif | 174 #endif |
| 174 matches_.push_back(i); | 175 matches_.push_back(i); |
| 175 if (!AutocompleteMatch::IsSearchType(i.type) && !i.description.empty() && | 176 if (!AutocompleteMatch::IsSearchType(i.type) && !i.description.empty() && |
| 176 base::CommandLine::ForCurrentProcess()-> | 177 base::CommandLine::ForCurrentProcess()-> |
| 177 HasSwitch(switches::kEmphasizeTitlesInOmniboxDropdown) && | 178 HasSwitch(switches::kEmphasizeTitlesInOmniboxDropdown) && |
| 178 ((input.type() == metrics::OmniboxInputType::QUERY) || | 179 ((input.type() == metrics::OmniboxInputType::QUERY) || |
| 179 (input.type() == metrics::OmniboxInputType::FORCED_QUERY)) && | 180 (input.type() == metrics::OmniboxInputType::FORCED_QUERY)) && |
| 180 AutocompleteMatch::HasMatchStyle(i.description_class)) { | 181 AutocompleteMatch::HasMatchStyle(i.description_class)) { |
| 181 matches_.back().swap_contents_and_description = true; | 182 matches_.back().swap_contents_and_description = true; |
| 182 } | 183 } |
| 183 } | 184 } |
| 184 default_match_ = end(); | 185 default_match_ = end(); |
| 185 alternate_nav_url_ = GURL(); | 186 alternate_nav_url_ = GURL(); |
| 186 } | 187 } |
| 187 | 188 |
| 188 void AutocompleteResult::SortAndCull( | 189 void AutocompleteResult::SortAndCull( |
| 189 const AutocompleteInput& input, | 190 const AutocompleteInput& input, |
| 191 const std::string& languages, |
| 190 TemplateURLService* template_url_service) { | 192 TemplateURLService* template_url_service) { |
| 191 for (ACMatches::iterator i(matches_.begin()); i != matches_.end(); ++i) | 193 for (ACMatches::iterator i(matches_.begin()); i != matches_.end(); ++i) |
| 192 i->ComputeStrippedDestinationURL(template_url_service); | 194 i->ComputeStrippedDestinationURL(input, languages, template_url_service); |
| 193 | 195 |
| 194 DedupMatchesByDestination(input.current_page_classification(), true, | 196 DedupMatchesByDestination(input.current_page_classification(), true, |
| 195 &matches_); | 197 &matches_); |
| 196 | 198 |
| 197 // Sort and trim to the most relevant kMaxMatches matches. | 199 // Sort and trim to the most relevant kMaxMatches matches. |
| 198 size_t max_num_matches = std::min(kMaxMatches, matches_.size()); | 200 size_t max_num_matches = std::min(kMaxMatches, matches_.size()); |
| 199 CompareWithDemoteByType comparing_object(input.current_page_classification()); | 201 CompareWithDemoteByType comparing_object(input.current_page_classification()); |
| 200 std::sort(matches_.begin(), matches_.end(), comparing_object); | 202 std::sort(matches_.begin(), matches_.end(), comparing_object); |
| 201 if (!matches_.empty() && !matches_.begin()->allowed_to_be_default_match) { | 203 if (!matches_.empty() && !matches_.begin()->allowed_to_be_default_match) { |
| 202 // Top match is not allowed to be the default match. Find the most | 204 // Top match is not allowed to be the default match. Find the most |
| (...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 446 i != old_matches.rend() && delta > 0; ++i) { | 448 i != old_matches.rend() && delta > 0; ++i) { |
| 447 if (!HasMatchByDestination(*i, new_matches)) { | 449 if (!HasMatchByDestination(*i, new_matches)) { |
| 448 AutocompleteMatch match = *i; | 450 AutocompleteMatch match = *i; |
| 449 match.relevance = std::min(max_relevance, match.relevance); | 451 match.relevance = std::min(max_relevance, match.relevance); |
| 450 match.from_previous = true; | 452 match.from_previous = true; |
| 451 matches_.push_back(match); | 453 matches_.push_back(match); |
| 452 delta--; | 454 delta--; |
| 453 } | 455 } |
| 454 } | 456 } |
| 455 } | 457 } |
| OLD | NEW |