| Index: net/dns/dns_util_unittest.cc | 
| diff --git a/net/dns/dns_util_unittest.cc b/net/dns/dns_util_unittest.cc | 
| index 1d534716b6afead994e02d9789c3ef0f130371ed..7b01d4263b926a24abc37042a59957ccf797697a 100644 | 
| --- a/net/dns/dns_util_unittest.cc | 
| +++ b/net/dns/dns_util_unittest.cc | 
| @@ -6,6 +6,28 @@ | 
|  | 
| #include "testing/gtest/include/gtest/gtest.h" | 
|  | 
| +namespace { | 
| + | 
| +bool IsValidDNSDomainName(const char* name) { | 
| +  size_t length = strlen(name); | 
| +  for (size_t i = 0; i < length; ++i) { | 
| +    if (name[i] == '.') { | 
| +      if (i == 0 || name[i - 1] == '.') { | 
| +        return false; | 
| +      } | 
| +      continue; | 
| +    } | 
| + | 
| +    if (!net::IsValidHostLabelCharacter(name[i], | 
| +                                        i == 0 || name[i - 1] == '.')) { | 
| +      return false; | 
| +    } | 
| +  } | 
| +  return true; | 
| +} | 
| + | 
| +}  // namespace | 
| + | 
| namespace net { | 
|  | 
| class DNSUtilTest : public testing::Test { | 
| @@ -69,4 +91,30 @@ TEST_F(DNSUtilTest, DNSDomainToString) { | 
| EXPECT_EQ("", DNSDomainToString("\x06")); | 
| } | 
|  | 
| +TEST_F(DNSUtilTest, IsValidDNSDomain) { | 
| +  const char* const bad_hostnames[] = { | 
| +      "%20%20noodles.blorg", "noo dles.blorg ",    "noo dles.blorg. ", | 
| +      "^noodles.blorg",      "noodles^.blorg",     "noo&dles.blorg", | 
| +      "noodles.blorg`",      "www.-noodles.blorg", | 
| +  }; | 
| + | 
| +  // TODO(palmer): In the future, when we can remove support for invalid names, | 
| +  // change the calls to from |IsValidDNSDomainName| to |IsValidDNSDomain|, and | 
| +  // remove |IsValidDNSDomainName| (defined above). | 
| + | 
| +  for (size_t i = 0; i < arraysize(bad_hostnames); ++i) { | 
| +    EXPECT_FALSE(IsValidDNSDomainName(bad_hostnames[i])); | 
| +  } | 
| + | 
| +  const char* const good_hostnames[] = { | 
| +      "www.noodles.blorg",   "1www.noodles.blorg", "www.2noodles.blorg", | 
| +      "www.n--oodles.blorg", "www.noodl_es.blorg", "www.no-_odles.blorg", | 
| +      "www_.noodles.blorg",  "www.noodles.blorg.", "_privet._tcp.local", | 
| +  }; | 
| + | 
| +  for (size_t i = 0; i < arraysize(good_hostnames); ++i) { | 
| +    EXPECT_TRUE(IsValidDNSDomainName(good_hostnames[i])); | 
| +  } | 
| +} | 
| + | 
| }  // namespace net | 
|  |