| 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/browser/autocomplete_result.h" | 5 #include "components/omnibox/browser/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 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 159 if (default_match_ != matches_.end()) { | 159 if (default_match_ != matches_.end()) { |
| 160 const base::string16 debug_info = | 160 const base::string16 debug_info = |
| 161 base::ASCIIToUTF16("fill_into_edit=") + | 161 base::ASCIIToUTF16("fill_into_edit=") + |
| 162 default_match_->fill_into_edit + | 162 default_match_->fill_into_edit + |
| 163 base::ASCIIToUTF16(", provider=") + | 163 base::ASCIIToUTF16(", provider=") + |
| 164 ((default_match_->provider != NULL) | 164 ((default_match_->provider != NULL) |
| 165 ? base::ASCIIToUTF16(default_match_->provider->GetName()) | 165 ? base::ASCIIToUTF16(default_match_->provider->GetName()) |
| 166 : base::string16()) + | 166 : base::string16()) + |
| 167 base::ASCIIToUTF16(", input=") + | 167 base::ASCIIToUTF16(", input=") + |
| 168 input.text(); | 168 input.text(); |
| 169 DCHECK(default_match_->allowed_to_be_default_match) << debug_info; | 169 |
| 170 // If the default match is valid (i.e., not a prompt/placeholder), make | 170 // Ensure there is a default match if (and only if) the omnibox is not |
| 171 // sure the type of destination is what the user would expect given the | 171 // empty. Typically, the omnibox will never be empty because it is filled |
| 172 // input. | 172 // with the current page URL when the omnibox is focused. The zero-suggest |
| 173 if (default_match_->destination_url.is_valid()) { | 173 // default match, if any, should navigate to this URL. However, on some |
| 174 if (AutocompleteMatch::IsSearchType(default_match_->type)) { | 174 // WebUI pages (eg: chrome://newtab) the URL is not auto-filled. In this |
| 175 // We shouldn't get query matches for URL inputs. | 175 // case, there should be no default match. |
| 176 DCHECK_NE(metrics::OmniboxInputType::URL, input.type()) << debug_info; | 176 if (input.text().empty()) { |
| 177 } else { | 177 DCHECK(!default_match_->allowed_to_be_default_match) << debug_info; |
| 178 // If the user explicitly typed a scheme, the default match should | 178 } else { |
| 179 // have the same scheme. | 179 DCHECK(default_match_->allowed_to_be_default_match) << debug_info; |
| 180 if ((input.type() == metrics::OmniboxInputType::URL) && | 180 // If the default match is valid (i.e., not a prompt/placeholder), make |
| 181 input.parts().scheme.is_nonempty()) { | 181 // sure the type of destination is what the user would expect given the |
| 182 const std::string& in_scheme = base::UTF16ToUTF8(input.scheme()); | 182 // input. |
| 183 const std::string& dest_scheme = | 183 if (default_match_->destination_url.is_valid()) { |
| 184 default_match_->destination_url.scheme(); | 184 if (AutocompleteMatch::IsSearchType(default_match_->type)) { |
| 185 DCHECK(url_formatter::IsEquivalentScheme(in_scheme, dest_scheme)) | 185 // We shouldn't get query matches for URL inputs. |
| 186 << debug_info; | 186 DCHECK_NE(metrics::OmniboxInputType::URL, input.type()) << debug_info; |
| 187 } else { |
| 188 // If the user explicitly typed a scheme, the default match should |
| 189 // have the same scheme. |
| 190 if ((input.type() == metrics::OmniboxInputType::URL) && |
| 191 input.parts().scheme.is_nonempty()) { |
| 192 const std::string& in_scheme = base::UTF16ToUTF8(input.scheme()); |
| 193 const std::string& dest_scheme = |
| 194 default_match_->destination_url.scheme(); |
| 195 DCHECK(url_formatter::IsEquivalentScheme(in_scheme, dest_scheme)) |
| 196 << debug_info; |
| 197 } |
| 187 } | 198 } |
| 188 } | 199 } |
| 189 } | 200 } |
| 190 } | 201 } |
| 191 | 202 |
| 192 // Set the alternate nav URL. | 203 // Set the alternate nav URL. |
| 193 alternate_nav_url_ = (default_match_ == matches_.end()) ? | 204 alternate_nav_url_ = (default_match_ == matches_.end()) ? |
| 194 GURL() : ComputeAlternateNavUrl(input, *default_match_); | 205 GURL() : ComputeAlternateNavUrl(input, *default_match_); |
| 195 } | 206 } |
| 196 | 207 |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 379 i != old_matches.rend() && delta > 0; ++i) { | 390 i != old_matches.rend() && delta > 0; ++i) { |
| 380 if (!HasMatchByDestination(*i, new_matches)) { | 391 if (!HasMatchByDestination(*i, new_matches)) { |
| 381 AutocompleteMatch match = *i; | 392 AutocompleteMatch match = *i; |
| 382 match.relevance = std::min(max_relevance, match.relevance); | 393 match.relevance = std::min(max_relevance, match.relevance); |
| 383 match.from_previous = true; | 394 match.from_previous = true; |
| 384 matches_.push_back(match); | 395 matches_.push_back(match); |
| 385 delta--; | 396 delta--; |
| 386 } | 397 } |
| 387 } | 398 } |
| 388 } | 399 } |
| OLD | NEW |