OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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.h" | 5 #include "chrome/browser/autocomplete/autocomplete.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "app/l10n_util.h" | 9 #include "app/l10n_util.h" |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 if (registry_length == std::wstring::npos) | 175 if (registry_length == std::wstring::npos) |
176 return QUERY; // Could be a broken IP address, etc. | 176 return QUERY; // Could be a broken IP address, etc. |
177 | 177 |
178 // See if the hostname is valid. While IE and GURL allow hostnames to contain | 178 // See if the hostname is valid. While IE and GURL allow hostnames to contain |
179 // many other characters (perhaps for weird intranet machines), it's extremely | 179 // many other characters (perhaps for weird intranet machines), it's extremely |
180 // unlikely that a user would be trying to type those in for anything other | 180 // unlikely that a user would be trying to type those in for anything other |
181 // than a search query. | 181 // than a search query. |
182 url_canon::CanonHostInfo host_info; | 182 url_canon::CanonHostInfo host_info; |
183 const std::string canonicalized_host(net::CanonicalizeHost(host, &host_info)); | 183 const std::string canonicalized_host(net::CanonicalizeHost(host, &host_info)); |
184 if ((host_info.family == url_canon::CanonHostInfo::NEUTRAL) && | 184 if ((host_info.family == url_canon::CanonHostInfo::NEUTRAL) && |
185 !net::IsCanonicalizedHostCompliant(canonicalized_host)) | 185 !net::IsCanonicalizedHostCompliant(canonicalized_host)) { |
186 return QUERY; | 186 // Invalid hostname. There are several possible cases: |
| 187 // * Our checker is too strict and the user pasted in a real-world URL |
| 188 // that's "invalid" but resolves. To catch these, we return UNKNOWN when |
| 189 // the user explicitly typed a scheme, so we'll still search by default |
| 190 // but we'll show the accidental search infobar if necessary. |
| 191 // * The user is typing a multi-word query. If we see a space anywhere in |
| 192 // the hostname we assume this is a search and return QUERY. |
| 193 // * Our checker is too strict and the user is typing a real-world hostname |
| 194 // that's "invalid" but resolves. We return UNKNOWN if the TLD is known. |
| 195 // Note that we explicitly excluded hosts with spaces above so that |
| 196 // "toys at amazon.com" will be treated as a search. |
| 197 // * The user is typing some garbage string. Return QUERY. |
| 198 // |
| 199 // Thus we fall down in the following cases: |
| 200 // * Trying to navigate to a hostname with spaces |
| 201 // * Trying to navigate to a hostname with invalid characters and an unknown |
| 202 // TLD |
| 203 // These are rare, though probably possible in intranets. |
| 204 return (parts->scheme.is_nonempty() || |
| 205 ((registry_length != 0) && (host.find(' ') == std::wstring::npos))) ? |
| 206 UNKNOWN : QUERY; |
| 207 } |
187 | 208 |
188 // Presence of a port means this is likely a URL, if the port is really a port | 209 // Presence of a port means this is likely a URL, if the port is really a port |
189 // number. If it's just garbage after a colon, this is a query. | 210 // number. If it's just garbage after a colon, this is a query. |
190 if (parts->port.is_nonempty()) { | 211 if (parts->port.is_nonempty()) { |
191 int port; | 212 int port; |
192 return (StringToInt(WideToUTF16( | 213 return (StringToInt(WideToUTF16( |
193 text.substr(parts->port.begin, parts->port.len)), &port) && | 214 text.substr(parts->port.begin, parts->port.len)), &port) && |
194 (port >= 0) && (port <= 65535)) ? URL : QUERY; | 215 (port >= 0) && (port <= 65535)) ? URL : QUERY; |
195 } | 216 } |
196 | 217 |
(...skipping 744 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
941 void AutocompleteController::CheckIfDone() { | 962 void AutocompleteController::CheckIfDone() { |
942 for (ACProviders::const_iterator i(providers_.begin()); i != providers_.end(); | 963 for (ACProviders::const_iterator i(providers_.begin()); i != providers_.end(); |
943 ++i) { | 964 ++i) { |
944 if (!(*i)->done()) { | 965 if (!(*i)->done()) { |
945 done_ = false; | 966 done_ = false; |
946 return; | 967 return; |
947 } | 968 } |
948 } | 969 } |
949 done_ = true; | 970 done_ = true; |
950 } | 971 } |
OLD | NEW |