OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/autocomplete/autocomplete_result.h" | 5 #include "chrome/browser/autocomplete/autocomplete_result.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <iterator> | 8 #include <iterator> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 | 127 |
128 // Sort and trim to the most relevant kMaxMatches matches. | 128 // Sort and trim to the most relevant kMaxMatches matches. |
129 const size_t num_matches = std::min(kMaxMatches, matches_.size()); | 129 const size_t num_matches = std::min(kMaxMatches, matches_.size()); |
130 std::partial_sort(matches_.begin(), matches_.begin() + num_matches, | 130 std::partial_sort(matches_.begin(), matches_.begin() + num_matches, |
131 matches_.end(), &AutocompleteMatch::MoreRelevant); | 131 matches_.end(), &AutocompleteMatch::MoreRelevant); |
132 matches_.resize(num_matches); | 132 matches_.resize(num_matches); |
133 | 133 |
134 default_match_ = begin(); | 134 default_match_ = begin(); |
135 | 135 |
136 // Set the alternate nav URL. | 136 // Set the alternate nav URL. |
137 alternate_nav_url_ = GURL(); | 137 alternate_nav_url_ = default_match_ == end() ? GURL() : |
138 if (input.type() == AutocompleteInput::UNKNOWN && | 138 ComputeAlternateNavUrl(input, *default_match_); |
139 default_match_ != end() && | |
140 AutocompleteMatch::IsSearchType(default_match_->type) && | |
141 default_match_->transition != content::PAGE_TRANSITION_KEYWORD && | |
142 input.canonicalized_url() != default_match_->destination_url) | |
143 alternate_nav_url_ = input.canonicalized_url(); | |
144 } | 139 } |
145 | 140 |
146 bool AutocompleteResult::HasCopiedMatches() const { | 141 bool AutocompleteResult::HasCopiedMatches() const { |
147 for (ACMatches::const_iterator i(begin()); i != end(); ++i) { | 142 for (ACMatches::const_iterator i(begin()); i != end(); ++i) { |
148 if (i->from_previous) | 143 if (i->from_previous) |
149 return true; | 144 return true; |
150 } | 145 } |
151 return false; | 146 return false; |
152 } | 147 } |
153 | 148 |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
201 alternate_nav_url_.Swap(&(other->alternate_nav_url_)); | 196 alternate_nav_url_.Swap(&(other->alternate_nav_url_)); |
202 } | 197 } |
203 | 198 |
204 #ifndef NDEBUG | 199 #ifndef NDEBUG |
205 void AutocompleteResult::Validate() const { | 200 void AutocompleteResult::Validate() const { |
206 for (const_iterator i(begin()); i != end(); ++i) | 201 for (const_iterator i(begin()); i != end(); ++i) |
207 i->Validate(); | 202 i->Validate(); |
208 } | 203 } |
209 #endif | 204 #endif |
210 | 205 |
| 206 // static |
| 207 GURL AutocompleteResult::ComputeAlternateNavUrl( |
| 208 const AutocompleteInput& input, |
| 209 const AutocompleteMatch& match) { |
| 210 return (input.type() == AutocompleteInput::UNKNOWN && |
| 211 AutocompleteMatch::IsSearchType(match.type) && |
| 212 match.transition != content::PAGE_TRANSITION_KEYWORD && |
| 213 input.canonicalized_url() != match.destination_url) ? |
| 214 input.canonicalized_url() : GURL(); |
| 215 } |
| 216 |
211 void AutocompleteResult::BuildProviderToMatches( | 217 void AutocompleteResult::BuildProviderToMatches( |
212 ProviderToMatches* provider_to_matches) const { | 218 ProviderToMatches* provider_to_matches) const { |
213 for (ACMatches::const_iterator i(begin()); i != end(); ++i) | 219 for (ACMatches::const_iterator i(begin()); i != end(); ++i) |
214 (*provider_to_matches)[i->provider].push_back(*i); | 220 (*provider_to_matches)[i->provider].push_back(*i); |
215 } | 221 } |
216 | 222 |
217 // static | 223 // static |
218 bool AutocompleteResult::HasMatchByDestination(const AutocompleteMatch& match, | 224 bool AutocompleteResult::HasMatchByDestination(const AutocompleteMatch& match, |
219 const ACMatches& matches) { | 225 const ACMatches& matches) { |
220 for (ACMatches::const_iterator i(matches.begin()); i != matches.end(); ++i) { | 226 for (ACMatches::const_iterator i(matches.begin()); i != matches.end(); ++i) { |
(...skipping 21 matching lines...) Expand all Loading... |
242 i != old_matches.rend() && delta > 0; ++i) { | 248 i != old_matches.rend() && delta > 0; ++i) { |
243 if (!HasMatchByDestination(*i, new_matches)) { | 249 if (!HasMatchByDestination(*i, new_matches)) { |
244 AutocompleteMatch match = *i; | 250 AutocompleteMatch match = *i; |
245 match.relevance = std::min(max_relevance, match.relevance); | 251 match.relevance = std::min(max_relevance, match.relevance); |
246 match.from_previous = true; | 252 match.from_previous = true; |
247 AddMatch(match); | 253 AddMatch(match); |
248 delta--; | 254 delta--; |
249 } | 255 } |
250 } | 256 } |
251 } | 257 } |
OLD | NEW |