| Index: chrome/browser/autocomplete/autocomplete.cc
 | 
| ===================================================================
 | 
| --- chrome/browser/autocomplete/autocomplete.cc	(revision 30723)
 | 
| +++ chrome/browser/autocomplete/autocomplete.cc	(working copy)
 | 
| @@ -182,8 +182,29 @@
 | 
|    url_canon::CanonHostInfo host_info;
 | 
|    const std::string canonicalized_host(net::CanonicalizeHost(host, &host_info));
 | 
|    if ((host_info.family == url_canon::CanonHostInfo::NEUTRAL) &&
 | 
| -      !net::IsCanonicalizedHostCompliant(canonicalized_host))
 | 
| -    return QUERY;
 | 
| +      !net::IsCanonicalizedHostCompliant(canonicalized_host)) {
 | 
| +    // Invalid hostname.  There are several possible cases:
 | 
| +    // * Our checker is too strict and the user pasted in a real-world URL
 | 
| +    //   that's "invalid" but resolves.  To catch these, we return UNKNOWN when
 | 
| +    //   the user explicitly typed a scheme, so we'll still search by default
 | 
| +    //   but we'll show the accidental search infobar if necessary.
 | 
| +    // * The user is typing a multi-word query.  If we see a space anywhere in
 | 
| +    //   the hostname we assume this is a search and return QUERY.
 | 
| +    // * Our checker is too strict and the user is typing a real-world hostname
 | 
| +    //   that's "invalid" but resolves.  We return UNKNOWN if the TLD is known.
 | 
| +    //   Note that we explicitly excluded hosts with spaces above so that
 | 
| +    //   "toys at amazon.com" will be treated as a search.
 | 
| +    // * The user is typing some garbage string.  Return QUERY.
 | 
| +    //
 | 
| +    // Thus we fall down in the following cases:
 | 
| +    // * Trying to navigate to a hostname with spaces
 | 
| +    // * Trying to navigate to a hostname with invalid characters and an unknown
 | 
| +    //   TLD
 | 
| +    // These are rare, though probably possible in intranets.
 | 
| +    return (parts->scheme.is_nonempty() ||
 | 
| +           ((registry_length != 0) && (host.find(' ') == std::wstring::npos))) ?
 | 
| +        UNKNOWN : QUERY;
 | 
| +  }
 | 
|  
 | 
|    // Presence of a port means this is likely a URL, if the port is really a port
 | 
|    // number.  If it's just garbage after a colon, this is a query.
 | 
| 
 |