Index: net/base/url_util_unittest.cc |
diff --git a/net/base/url_util_unittest.cc b/net/base/url_util_unittest.cc |
index 8140e3ab15e9f7f8030ec5dd1ea08c84bea46a18..b670165ad9dd17f6857336d1e799a2f67be4469e 100644 |
--- a/net/base/url_util_unittest.cc |
+++ b/net/base/url_util_unittest.cc |
@@ -4,6 +4,8 @@ |
#include "net/base/url_util.h" |
+#include <ostream> |
+ |
#include "base/format_macros.h" |
#include "base/strings/utf_string_conversions.h" |
#include "base/strings/stringprintf.h" |
@@ -306,6 +308,85 @@ TEST(UrlUtilTest, CompliantHost) { |
} |
} |
+struct NonUniqueNameTestData { |
+ bool is_unique; |
+ const char* const hostname; |
+}; |
+ |
+// Google Test pretty-printer. |
+void PrintTo(const NonUniqueNameTestData& data, std::ostream* os) { |
+ ASSERT_TRUE(data.hostname); |
+ *os << " hostname: " << testing::PrintToString(data.hostname) |
+ << "; is_unique: " << testing::PrintToString(data.is_unique); |
+} |
+ |
+const NonUniqueNameTestData kNonUniqueNameTestData[] = { |
+ // Domains under ICANN-assigned domains. |
+ { true, "google.com" }, |
+ { true, "google.co.uk" }, |
+ // Domains under private registries. |
+ { true, "appspot.com" }, |
+ { true, "test.appspot.com" }, |
+ // Unreserved IPv4 addresses (in various forms). |
+ { true, "8.8.8.8" }, |
+ { true, "99.64.0.0" }, |
+ { true, "212.15.0.0" }, |
+ { true, "212.15" }, |
+ { true, "212.15.0" }, |
+ { true, "3557752832" }, |
+ // Reserved IPv4 addresses (in various forms). |
+ { false, "192.168.0.0" }, |
+ { false, "192.168.0.6" }, |
+ { false, "10.0.0.5" }, |
+ { false, "10.0" }, |
+ { false, "10.0.0" }, |
+ { false, "3232235526" }, |
+ // Unreserved IPv6 addresses. |
+ { true, "FFC0:ba98:7654:3210:FEDC:BA98:7654:3210" }, |
+ { true, "2000:ba98:7654:2301:EFCD:BA98:7654:3210" }, |
+ // Reserved IPv6 addresses. |
+ { false, "::192.9.5.5" }, |
+ { false, "FEED::BEEF" }, |
+ { false, "FEC0:ba98:7654:3210:FEDC:BA98:7654:3210" }, |
+ // 'internal'/non-IANA assigned domains. |
+ { false, "intranet" }, |
+ { false, "intranet." }, |
+ { false, "intranet.example" }, |
+ { false, "host.intranet.example" }, |
+ // gTLDs under discussion, but not yet assigned. |
+ { false, "intranet.corp" }, |
+ { false, "intranet.internal" }, |
+ // Invalid host names are treated as unique - but expected to be |
+ // filtered out before then. |
+ { true, "junk)(£)$*!@~#" }, |
+ { true, "w$w.example.com" }, |
+ { true, "nocolonsallowed:example" }, |
+ { true, "[::4.5.6.9]" }, |
+}; |
+ |
+class UrlUtilNonUniqueNameTest |
+ : public testing::TestWithParam<NonUniqueNameTestData> { |
+ public: |
+ virtual ~UrlUtilNonUniqueNameTest() {} |
+ |
+ protected: |
+ bool IsUnique(const std::string& hostname) { |
+ return !IsHostnameNonUnique(hostname); |
+ } |
+}; |
+ |
+// Test that internal/non-unique names are properly identified as such, but |
+// that IP addresses and hosts beneath registry-controlled domains are flagged |
+// as unique names. |
+TEST_P(UrlUtilNonUniqueNameTest, IsHostnameNonUnique) { |
+ const NonUniqueNameTestData& test_data = GetParam(); |
+ |
+ EXPECT_EQ(test_data.is_unique, IsUnique(test_data.hostname)); |
+} |
+ |
+INSTANTIATE_TEST_CASE_P(, UrlUtilNonUniqueNameTest, |
+ testing::ValuesIn(kNonUniqueNameTestData)); |
+ |
TEST(UrlUtilTest, SimplifyUrlForRequest) { |
struct { |
const char* const input_url; |