summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-12 05:09:23 +0000
committerpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-12 05:09:23 +0000
commit2eb9211ec68ed46b5c1f19d2d81a05f2eabe7d8a (patch)
treeb5007d527ea51ac66800c4582532087e5b05cdad
parente523a277f8edf84a773f2107e7f340af13523d81 (diff)
downloadchromium_src-2eb9211ec68ed46b5c1f19d2d81a05f2eabe7d8a.zip
chromium_src-2eb9211ec68ed46b5c1f19d2d81a05f2eabe7d8a.tar.gz
chromium_src-2eb9211ec68ed46b5c1f19d2d81a05f2eabe7d8a.tar.bz2
Allow the omnibox to recognize as URLs inputs that have a host component that ends with a hyphen.
BUG=123732 TEST=Type in "kline-.github.com/NAMS" in the address bar and check that the default action is to navigate. Review URL: https://chromiumcodereview.appspot.com/10533102 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@141621 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/autocomplete/autocomplete_unittest.cc6
-rw-r--r--net/base/net_util.cc12
-rw-r--r--net/base/net_util.h2
-rw-r--r--net/base/net_util_unittest.cc5
4 files changed, 14 insertions, 11 deletions
diff --git a/chrome/browser/autocomplete/autocomplete_unittest.cc b/chrome/browser/autocomplete/autocomplete_unittest.cc
index 2783f74..61d984f 100644
--- a/chrome/browser/autocomplete/autocomplete_unittest.cc
+++ b/chrome/browser/autocomplete/autocomplete_unittest.cc
@@ -412,7 +412,8 @@ TEST_F(AutocompleteTest, InputType) {
{ ASCIIToUTF16("foo.c"), AutocompleteInput::UNKNOWN },
{ ASCIIToUTF16("foo.com"), AutocompleteInput::URL },
{ ASCIIToUTF16("-foo.com"), AutocompleteInput::URL },
- { ASCIIToUTF16("foo-.com"), AutocompleteInput::UNKNOWN },
+ { ASCIIToUTF16("foo-.com"), AutocompleteInput::URL },
+ { ASCIIToUTF16("foo_.com"), AutocompleteInput::UNKNOWN },
{ ASCIIToUTF16("foo.-com"), AutocompleteInput::QUERY },
{ ASCIIToUTF16("foo/"), AutocompleteInput::URL },
{ ASCIIToUTF16("foo/bar"), AutocompleteInput::UNKNOWN },
@@ -472,7 +473,8 @@ TEST_F(AutocompleteTest, InputType) {
{ ASCIIToUTF16("http://foo_bar.com"), AutocompleteInput::URL },
{ ASCIIToUTF16("http://foo/bar baz"), AutocompleteInput::URL },
{ ASCIIToUTF16("http://-foo.com"), AutocompleteInput::URL },
- { ASCIIToUTF16("http://foo-.com"), AutocompleteInput::UNKNOWN },
+ { ASCIIToUTF16("http://foo-.com"), AutocompleteInput::URL },
+ { ASCIIToUTF16("http://foo_.com"), AutocompleteInput::UNKNOWN },
{ ASCIIToUTF16("http://foo.-com"), AutocompleteInput::UNKNOWN },
{ ASCIIToUTF16("http://_foo_.com"), AutocompleteInput::UNKNOWN },
{ ASCIIToUTF16("http://foo.com:abc"), AutocompleteInput::QUERY },
diff --git a/net/base/net_util.cc b/net/base/net_util.cc
index 967eb03..5404204 100644
--- a/net/base/net_util.cc
+++ b/net/base/net_util.cc
@@ -1305,7 +1305,7 @@ bool IsCanonicalizedHostCompliant(const std::string& host,
bool in_component = false;
bool most_recent_component_started_alpha = false;
- bool last_char_was_hyphen_or_underscore = false;
+ bool last_char_was_underscore = false;
for (std::string::const_iterator i(host.begin()); i != host.end(); ++i) {
const char c = *i;
@@ -1317,13 +1317,13 @@ bool IsCanonicalizedHostCompliant(const std::string& host,
in_component = true;
} else {
if (c == '.') {
- if (last_char_was_hyphen_or_underscore)
+ if (last_char_was_underscore)
return false;
in_component = false;
- } else if (IsHostCharAlpha(c) || IsHostCharDigit(c)) {
- last_char_was_hyphen_or_underscore = false;
- } else if ((c == '-') || (c == '_')) {
- last_char_was_hyphen_or_underscore = true;
+ } else if (IsHostCharAlpha(c) || IsHostCharDigit(c) || (c == '-')) {
+ last_char_was_underscore = false;
+ } else if (c == '_') {
+ last_char_was_underscore = true;
} else {
return false;
}
diff --git a/net/base/net_util.h b/net/base/net_util.h
index f63f860..dabaa0f 100644
--- a/net/base/net_util.h
+++ b/net/base/net_util.h
@@ -172,7 +172,7 @@ NET_EXPORT std::string CanonicalizeHost(const std::string& host,
// * One or more components separated by '.'
// * Each component begins with an alphanumeric character or '-'
// * Each component contains only alphanumeric characters and '-' or '_'
-// * Each component ends with an alphanumeric character
+// * Each component ends with an alphanumeric character or '-'
// * The last component begins with an alphabetic character
// * Optional trailing dot after last component (means "treat as FQDN")
// If |desired_tld| is non-NULL, the host will only be considered invalid if
diff --git a/net/base/net_util_unittest.cc b/net/base/net_util_unittest.cc
index 67d202c..283ac6c 100644
--- a/net/base/net_util_unittest.cc
+++ b/net/base/net_util_unittest.cc
@@ -774,7 +774,8 @@ TEST(NetUtilTest, CompliantHost) {
{"a.9a", "", false},
{"a+9a", "", false},
{"-a.a9", "", true},
- {"1-.a-b", "", false},
+ {"1-.a-b", "", true},
+ {"1_.a-b", "", false},
{"1-2.a_b", "", true},
{"a.b.c.d.e", "", true},
{"1.2.3.4.e", "", true},
@@ -786,7 +787,7 @@ TEST(NetUtilTest, CompliantHost) {
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(compliant_host_cases); ++i) {
EXPECT_EQ(compliant_host_cases[i].expected_output,
IsCanonicalizedHostCompliant(compliant_host_cases[i].host,
- compliant_host_cases[i].desired_tld));
+ compliant_host_cases[i].desired_tld));
}
}