Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(797)

Side by Side Diff: components/omnibox/browser/autocomplete_input.cc

Issue 2378213002: Mark URLs with empty schemes as invalid. (Closed)
Patch Set: . Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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_input.h" 5 #include "components/omnibox/browser/autocomplete_input.h"
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/strings/string_split.h" 8 #include "base/strings/string_split.h"
9 #include "base/strings/string_util.h" 9 #include "base/strings/string_util.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 const base::string16& text, 148 const base::string16& text,
149 const std::string& desired_tld, 149 const std::string& desired_tld,
150 const AutocompleteSchemeClassifier& scheme_classifier, 150 const AutocompleteSchemeClassifier& scheme_classifier,
151 url::Parsed* parts, 151 url::Parsed* parts,
152 base::string16* scheme, 152 base::string16* scheme,
153 GURL* canonicalized_url) { 153 GURL* canonicalized_url) {
154 size_t first_non_white = text.find_first_not_of(base::kWhitespaceUTF16, 0); 154 size_t first_non_white = text.find_first_not_of(base::kWhitespaceUTF16, 0);
155 if (first_non_white == base::string16::npos) 155 if (first_non_white == base::string16::npos)
156 return metrics::OmniboxInputType::INVALID; // All whitespace. 156 return metrics::OmniboxInputType::INVALID; // All whitespace.
157 157
158 // Treat input that beings with a colon as a query. Otherwise the URL
Peter Kasting 2016/09/29 04:54:12 Nit: begins
159 // formatter will attempt to fix it by prepending a scheme, which the user
160 // probably did not want if they explicitly typed a colon at the beginning.
161 if (text[first_non_white] == ':')
162 return metrics::OmniboxInputType::QUERY;
Peter Kasting 2016/09/29 04:54:12 It would be nice to avoid doing this check here, a
163
158 // Ask our parsing back-end to help us understand what the user typed. We 164 // Ask our parsing back-end to help us understand what the user typed. We
159 // use the URLFixerUpper here because we want to be smart about what we 165 // use the URLFixerUpper here because we want to be smart about what we
160 // consider a scheme. For example, we shouldn't consider www.google.com:80 166 // consider a scheme. For example, we shouldn't consider www.google.com:80
161 // to have a scheme. 167 // to have a scheme.
162 url::Parsed local_parts; 168 url::Parsed local_parts;
163 if (!parts) 169 if (!parts)
164 parts = &local_parts; 170 parts = &local_parts;
165 const base::string16 parsed_scheme(url_formatter::SegmentURL(text, parts)); 171 const base::string16 parsed_scheme(url_formatter::SegmentURL(text, parts));
166 if (scheme) 172 if (scheme)
167 *scheme = parsed_scheme; 173 *scheme = parsed_scheme;
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 // the option of treating it as a URL if we're wrong. 253 // the option of treating it as a URL if we're wrong.
248 // Note that SegmentURL() is smart so we aren't tricked by "c:\foo" or 254 // Note that SegmentURL() is smart so we aren't tricked by "c:\foo" or
249 // "www.example.com:81" in this case. 255 // "www.example.com:81" in this case.
250 return metrics::OmniboxInputType::UNKNOWN; 256 return metrics::OmniboxInputType::UNKNOWN;
251 } 257 }
252 258
253 // Either the user didn't type a scheme, in which case we need to distinguish 259 // Either the user didn't type a scheme, in which case we need to distinguish
254 // between an HTTP URL and a query, or the scheme is HTTP or HTTPS, in which 260 // between an HTTP URL and a query, or the scheme is HTTP or HTTPS, in which
255 // case we should reject invalid formulations. 261 // case we should reject invalid formulations.
256 262
257 // If we have an empty host it can't be a valid HTTP[S] URL. (This should
258 // only trigger for input that begins with a colon, which GURL will parse as a
259 // valid, non-standard URL; for standard URLs, an empty host would have
260 // resulted in an invalid |canonicalized_url| above.)
261 if (!canonicalized_url->has_host())
262 return metrics::OmniboxInputType::QUERY;
263
264 // Determine the host family. We get this information by (re-)canonicalizing 263 // Determine the host family. We get this information by (re-)canonicalizing
265 // the already-canonicalized host rather than using the user's original input, 264 // the already-canonicalized host rather than using the user's original input,
266 // in case fixup affected the result here (e.g. an input that looks like an 265 // in case fixup affected the result here (e.g. an input that looks like an
267 // IPv4 address but with a non-empty desired TLD would return IPV4 before 266 // IPv4 address but with a non-empty desired TLD would return IPV4 before
268 // fixup and NEUTRAL afterwards, and we want to treat it as NEUTRAL). 267 // fixup and NEUTRAL afterwards, and we want to treat it as NEUTRAL).
269 url::CanonHostInfo host_info; 268 url::CanonHostInfo host_info;
270 net::CanonicalizeHost(canonicalized_url->host(), &host_info); 269 net::CanonicalizeHost(canonicalized_url->host(), &host_info);
271 270
272 // Check if the canonicalized host has a known TLD, which we'll want to know 271 // Check if the canonicalized host has a known TLD, which we'll want to know
273 // below. 272 // below.
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
526 parts_ = url::Parsed(); 525 parts_ = url::Parsed();
527 scheme_.clear(); 526 scheme_.clear();
528 canonicalized_url_ = GURL(); 527 canonicalized_url_ = GURL();
529 prevent_inline_autocomplete_ = false; 528 prevent_inline_autocomplete_ = false;
530 prefer_keyword_ = false; 529 prefer_keyword_ = false;
531 allow_exact_keyword_match_ = false; 530 allow_exact_keyword_match_ = false;
532 want_asynchronous_matches_ = true; 531 want_asynchronous_matches_ = true;
533 from_omnibox_focus_ = false; 532 from_omnibox_focus_ = false;
534 terms_prefixed_by_http_or_https_.clear(); 533 terms_prefixed_by_http_or_https_.clear();
535 } 534 }
OLDNEW
« no previous file with comments | « no previous file | components/url_formatter/url_fixer.cc » ('j') | components/url_formatter/url_fixer.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698