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 3 // found in the LICENSE file. 4 5 #ifndef COMPONENTS_AUTOCOMPLETE_URL_PREFIX_H_ 6 #define COMPONENTS_AUTOCOMPLETE_URL_PREFIX_H_ 7 8 #include <vector> 9 10 #include "base/strings/string16.h" 11 12 struct URLPrefix; 13 typedef std::vector<URLPrefix> URLPrefixes; 14 15 // A URL prefix; combinations of schemes and (least significant) domain labels 16 // that may be inferred from certain URL-like input strings. 17 struct URLPrefix { 18 URLPrefix(const base::string16& prefix, size_t num_components); 19 20 // Returns a vector of URL prefixes sorted by descending number of components. 21 static const URLPrefixes& GetURLPrefixes(); 22 23 // Returns if the argument is a valid URL prefix. 24 static bool IsURLPrefix(const base::string16& prefix); 25 26 // Returns the URL prefix of |text| with the most components, or NULL. 27 // |prefix_suffix| (which may be empty) is appended to every attempted prefix, 28 // which is useful for finding the innermost match of user input in a URL. 29 // Performs case insensitive string comparison. 30 static const URLPrefix* BestURLPrefix(const base::string16& text, 31 const base::string16& prefix_suffix); 32 33 // A helper function for BestURLPrefix(). Returns true if |text| starts 34 // with |prefix| which is then followed by |prefix_suffix|. 35 // Performs case insensitive string comparison. 36 static bool PrefixMatch(const URLPrefix& prefix, 37 const base::string16& text, 38 const base::string16& prefix_suffix); 39 40 // Sees if |text| is inlineable against either |input| or |fixed_up_input|, 41 // returning the appropriate inline autocomplete offset or 42 // base::string16::npos if |text| is not inlineable. 43 // |allow_www_prefix_without_scheme| says whether to consider an input such 44 // as "foo" to be allowed to match against text "www.foo.com". This is 45 // needed because sometimes the string we're matching against here can come 46 // from a match's fill_into_edit, which can start with "www." without having 47 // a protocol at the beginning, and we want to allow these matches to be 48 // inlineable. ("www." is not otherwise on the default prefix list.) 49 static size_t GetInlineAutocompleteOffset( 50 const base::string16& input, 51 const base::string16& fixed_up_input, 52 const bool allow_www_prefix_without_scheme, 53 const base::string16& text); 54 55 base::string16 prefix; 56 57 // The number of URL components (scheme, domain label, etc.) in the prefix. 58 // For example, "http://foo.com" and "www.bar.com" each have one component, 59 // while "ftp://ftp.ftp.com" has two, and "mysite.com" has none. 60 size_t num_components; 61 }; 62 63 #endif // COMPONENTS_AUTOCOMPLETE_URL_PREFIX_H_ 64