Internal change

PiperOrigin-RevId: 158864096
Change-Id: I6da047fc01ca7eaa37b5bb7882214dacc1e82c2e
diff --git a/src/base/optional.h b/src/base/optional.h
index cf65ad7..485baf7 100644
--- a/src/base/optional.h
+++ b/src/base/optional.h
@@ -10,6 +10,7 @@
 #include "base/logging.h"
 #include "base/template_util.h"
 
+namespace url {
 namespace base {
 
 // Specification:
@@ -32,7 +33,7 @@
 
 namespace internal {
 
-template <typename T, bool = base::is_trivially_destructible<T>::value>
+template <typename T, bool = std::is_trivially_destructible<T>::value>
 struct OptionalStorage {
   // Initializing |empty_| here instead of using default member initializing
   // to avoid errors in g++ 4.8.
@@ -491,13 +492,14 @@
 }
 
 }  // namespace base
+}  // namespace url
 
 namespace std {
 
 template <class T>
-struct hash<base::Optional<T>> {
-  size_t operator()(const base::Optional<T>& opt) const {
-    return opt == base::nullopt ? 0 : std::hash<T>()(*opt);
+struct hash<url::base::Optional<T>> {
+  size_t operator()(const url::base::Optional<T>& opt) const {
+    return opt == url::base::nullopt ? 0 : std::hash<T>()(*opt);
   }
 };
 
diff --git a/src/base/strings/utf_string_conversions.cc b/src/base/strings/utf_string_conversions.cc
index ffbfa53..d8a85ad 100644
--- a/src/base/strings/utf_string_conversions.cc
+++ b/src/base/strings/utf_string_conversions.cc
@@ -44,6 +44,32 @@
 
 }  // namespace
 
+// UTF-16 <-> Wide -------------------------------------------------------------
+
+#if defined(WCHAR_T_IS_UTF16)
+
+string16 WideToUTF16(const std::wstring& wide) {
+  return wide;
+}
+
+#elif defined(WCHAR_T_IS_UTF32)
+
+bool WideToUTF16(const wchar_t* src, size_t src_len, string16* output) {
+  output->clear();
+  // Assume that normally we won't have any non-BMP characters so the counts
+  // will be the same.
+  output->reserve(src_len);
+  return ConvertUnicode(src, src_len, output);
+}
+
+string16 WideToUTF16(const std::wstring& wide) {
+  string16 ret;
+  WideToUTF16(wide.data(), wide.length(), &ret);
+  return ret;
+}
+
+#endif  // defined(WCHAR_T_IS_UTF32)
+
 // UTF16 <-> UTF8 --------------------------------------------------------------
 
 #if defined(WCHAR_T_IS_UTF32)
diff --git a/src/base/strings/utf_string_conversions.h b/src/base/strings/utf_string_conversions.h
index d6876b3..7458519 100644
--- a/src/base/strings/utf_string_conversions.h
+++ b/src/base/strings/utf_string_conversions.h
@@ -17,6 +17,7 @@
 namespace url {
 namespace base {
 
+BASE_EXPORT string16 WideToUTF16(const std::wstring& wide);
 BASE_EXPORT string16 UTF8ToUTF16(StringPiece utf8);
 BASE_EXPORT std::string UTF16ToUTF8(StringPiece16 utf16);
 
diff --git a/src/net/base/lookup_string_in_fixed_set.cc b/src/net/base/lookup_string_in_fixed_set.cc
index 5c145f8..cdd1787 100644
--- a/src/net/base/lookup_string_in_fixed_set.cc
+++ b/src/net/base/lookup_string_in_fixed_set.cc
@@ -6,6 +6,7 @@
 
 #include "base/logging.h"
 
+namespace url {
 namespace net {
 
 namespace {
@@ -196,3 +197,4 @@
 }
 
 }  // namespace net
+}  // namespace url
diff --git a/src/net/base/lookup_string_in_fixed_set.h b/src/net/base/lookup_string_in_fixed_set.h
index 3da3856..cedf8d7 100644
--- a/src/net/base/lookup_string_in_fixed_set.h
+++ b/src/net/base/lookup_string_in_fixed_set.h
@@ -7,8 +7,9 @@
 
 #include <stddef.h>
 
-#include "net/base/net_export.h"
+#define NET_EXPORT
 
+namespace url {
 namespace net {
 
 enum {
@@ -143,5 +144,6 @@
 };
 
 }  // namespace net
+}  // namespace url
 
 #endif  // NET_BASE_LOOKUP_STRING_IN_FIXED_SET_H_
diff --git a/src/net/base/lookup_string_in_fixed_set_unittest.cc b/src/net/base/lookup_string_in_fixed_set_unittest.cc
index 612f640..3827d18 100644
--- a/src/net/base/lookup_string_in_fixed_set_unittest.cc
+++ b/src/net/base/lookup_string_in_fixed_set_unittest.cc
@@ -12,30 +12,25 @@
 #include <utility>
 #include <vector>
 
-#include "base/base_paths.h"
-#include "base/files/file_path.h"
-#include "base/files/file_util.h"
-#include "base/path_service.h"
-#include "base/strings/string_util.h"
-#include "base/strings/stringprintf.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#include "testing/base/public/gunit.h"
 
+namespace url {
 namespace net {
 namespace {
 namespace test1 {
-#include "net/base/registry_controlled_domains/effective_tld_names_unittest1-inc.cc"
+#include "effective_tld_names_unittest1.inc"
 }
 namespace test3 {
-#include "net/base/registry_controlled_domains/effective_tld_names_unittest3-inc.cc"
+#include "effective_tld_names_unittest3.inc"
 }
 namespace test4 {
-#include "net/base/registry_controlled_domains/effective_tld_names_unittest4-inc.cc"
+#include "effective_tld_names_unittest4.inc"
 }
 namespace test5 {
-#include "net/base/registry_controlled_domains/effective_tld_names_unittest5-inc.cc"
+#include "effective_tld_names_unittest5.inc"
 }
 namespace test6 {
-#include "net/base/registry_controlled_domains/effective_tld_names_unittest6-inc.cc"
+#include "effective_tld_names_unittest6.inc"
 }
 
 struct Expectation {
@@ -74,7 +69,9 @@
   int result = lookup.GetResultForCurrentSequence();
   if (result != kDafsaNotFound) {
     std::string line(sequence->begin(), sequence->end());
-    line += base::StringPrintf(", %d", result);
+    char buf[2 + sizeof(result) * 4 + 1];
+    snprintf(buf, sizeof(buf), ", %d", result);
+    line += buf;
     language->emplace_back(std::move(line));
   }
   // Try appending each char value.
@@ -249,3 +246,4 @@
 
 }  // namespace
 }  // namespace net
+}  // namespace url
diff --git a/src/net/base/registry_controlled_domains/registry_controlled_domain.cc b/src/net/base/registry_controlled_domains/registry_controlled_domain.cc
index 3777582..3a2af19 100644
--- a/src/net/base/registry_controlled_domains/registry_controlled_domain.cc
+++ b/src/net/base/registry_controlled_domains/registry_controlled_domain.cc
@@ -49,18 +49,18 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "net/base/lookup_string_in_fixed_set.h"
-#include "net/base/net_module.h"
 #include "net/base/url_util.h"
 #include "url/gurl.h"
 #include "url/origin.h"
 #include "url/third_party/mozilla/url_parse.h"
 #include "url/url_util.h"
 
+namespace url {
 namespace net {
 namespace registry_controlled_domains {
 
 namespace {
-#include "net/base/registry_controlled_domains/effective_tld_names-inc.cc"
+#include "effective_tld_names.inc"
 
 // See make_dafsa.py for documentation of the generated dafsa byte array.
 
@@ -131,7 +131,7 @@
           // "!foo").  This would only be valid if we had a corresponding
           // wildcard rule, which would have to be "*".  But we explicitly
           // disallow that case, so this kind of rule is invalid.
-          NOTREACHED() << "Invalid exception rule";
+          DCHECK(false) << "Invalid exception rule";  // NOTREACHED();
           return 0;
         }
         return host.length() - next_dot - 1;
@@ -172,7 +172,8 @@
   // subcomponent length.
   DCHECK(host.length() >= 2);
   if (registry_length > (host.length() - 2)) {
-    NOTREACHED() <<
+    // NOTREACHED()
+    DCHECK(false) <<
         "Host does not have at least one subcomponent before registry!";
     return base::StringPiece();
   }
@@ -305,7 +306,7 @@
     }
   }
 
-  NOTREACHED();
+  DCHECK(false);  // NOTREACHED();
   return canonical_rcd_len;
 }
 
@@ -402,7 +403,7 @@
           GetRegistryLengthImpl(canon_host, unknown_filter, private_filter);
       break;
     default:
-      NOTREACHED();
+      DCHECK(false);  // NOTREACHED();
       return false;
   }
   return (rcd_length != 0) && (rcd_length != std::string::npos);
@@ -448,3 +449,4 @@
 
 }  // namespace registry_controlled_domains
 }  // namespace net
+}  // namespace url
diff --git a/src/net/base/registry_controlled_domains/registry_controlled_domain.h b/src/net/base/registry_controlled_domains/registry_controlled_domain.h
index 9f3101a..76da91e 100644
--- a/src/net/base/registry_controlled_domains/registry_controlled_domain.h
+++ b/src/net/base/registry_controlled_domains/registry_controlled_domain.h
@@ -117,16 +117,16 @@
 
 #include <string>
 
-#include "base/optional.h"
-#include "base/strings/string_piece.h"
-#include "net/base/net_export.h"
+#include "third_party/googleurl/src/base/optional.h"
+#include "third_party/googleurl/src/base/strings/string_piece.h"
+#define NET_EXPORT
+#define NET_EXPORT_PRIVATE
 
 class GURL;
 
 namespace url {
-class Origin;
-};
 
+class Origin;
 struct DomainRule;
 
 namespace net {
@@ -299,5 +299,6 @@
 
 }  // namespace registry_controlled_domains
 }  // namespace net
+}  // namespace url
 
 #endif  // NET_BASE_REGISTRY_CONTROLLED_DOMAINS_REGISTRY_CONTROLLED_DOMAIN_H_
diff --git a/src/net/base/registry_controlled_domains/registry_controlled_domain_unittest.cc b/src/net/base/registry_controlled_domains/registry_controlled_domain_unittest.cc
index fd19789..e690fb5 100644
--- a/src/net/base/registry_controlled_domains/registry_controlled_domain_unittest.cc
+++ b/src/net/base/registry_controlled_domains/registry_controlled_domain_unittest.cc
@@ -4,34 +4,34 @@
 
 #include "base/strings/utf_string_conversions.h"
 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#include "testing/base/public/gunit.h"
 #include "url/gurl.h"
 #include "url/origin.h"
-#include "url/url_features.h"
 
 namespace {
 
 namespace test1 {
-#include "net/base/registry_controlled_domains/effective_tld_names_unittest1-inc.cc"
+#include "effective_tld_names_unittest1.inc"
 }
 namespace test2 {
-#include "net/base/registry_controlled_domains/effective_tld_names_unittest2-inc.cc"
+#include "effective_tld_names_unittest2.inc"
 }
 namespace test3 {
-#include "net/base/registry_controlled_domains/effective_tld_names_unittest3-inc.cc"
+#include "effective_tld_names_unittest3.inc"
 }
 namespace test4 {
-#include "net/base/registry_controlled_domains/effective_tld_names_unittest4-inc.cc"
+#include "effective_tld_names_unittest4.inc"
 }
 namespace test5 {
-#include "net/base/registry_controlled_domains/effective_tld_names_unittest5-inc.cc"
+#include "effective_tld_names_unittest5.inc"
 }
 namespace test6 {
-#include "net/base/registry_controlled_domains/effective_tld_names_unittest6-inc.cc"
+#include "effective_tld_names_unittest6.inc"
 }
 
 }  // namespace
 
+namespace url {
 namespace net {
 namespace registry_controlled_domains {
 
@@ -67,7 +67,9 @@
 }
 
 // Only called when using ICU (avoids unused static function error).
-#if !BUILDFLAG(USE_PLATFORM_ICU_ALTERNATIVES)
+// if !BUILDFLAG(USE_PLATFORM_ICU_ALTERNATIVES)
+// google3 has ICU.
+#if 1
 size_t PermissiveGetHostRegistryLength(base::StringPiece16 host) {
   return PermissiveGetHostRegistryLength(host, EXCLUDE_UNKNOWN_REGISTRIES,
                                          EXCLUDE_PRIVATE_REGISTRIES);
@@ -596,7 +598,9 @@
   EXPECT_EQ(4U, PermissiveGetHostRegistryLength("Www.Googl%45%2e%4Ap"));
 
 // IDN cases (not supported when not linking ICU).
-#if !BUILDFLAG(USE_PLATFORM_ICU_ALTERNATIVES)
+// if !BUILDFLAG(USE_PLATFORM_ICU_ALTERNATIVES)
+// google3 has ICU.
+#if 1
   EXPECT_EQ(10U, PermissiveGetHostRegistryLength("foo.xn--fiqs8s"));
   EXPECT_EQ(11U, PermissiveGetHostRegistryLength("foo.xn--fiqs8s."));
   EXPECT_EQ(18U, PermissiveGetHostRegistryLength("foo.%E4%B8%AD%E5%9B%BD"));
@@ -607,7 +611,7 @@
             PermissiveGetHostRegistryLength("foo.\xE4\xB8\xAD\xE5\x9B\xBD."));
   // UTF-16 IDN.
   EXPECT_EQ(2U, PermissiveGetHostRegistryLength(
-                    base::WideToUTF16(L"foo.\x4e2d\x56fd")));
+      base::WideToUTF16(L"foo.\x4e2d\x56fd")));
 
   // Fullwidth dot (u+FF0E) that will get canonicalized to a dot.
   EXPECT_EQ(2U, PermissiveGetHostRegistryLength("Www.Google\xEF\xBC\x8Ejp"));
@@ -620,9 +624,10 @@
                      "Www.Google%EF%BC%8E%EF%BC%AA%EF%BD%90%EF%BC%8E"));
   // UTF-16 (ending in a dot).
   EXPECT_EQ(3U, PermissiveGetHostRegistryLength(
-                    base::WideToUTF16(L"Www.Google\xFF0E\xFF2A\xFF50\xFF0E")));
+      base::WideToUTF16(L"Www.Google\xFF0E\xFF2A\xFF50\xFF0E")));
 #endif
 }
 
 }  // namespace registry_controlled_domains
 }  // namespace net
+}  // namespace url
diff --git a/src/net/base/url_util.cc b/src/net/base/url_util.cc
index 062481f..b47074d 100644
--- a/src/net/base/url_util.cc
+++ b/src/net/base/url_util.cc
@@ -12,249 +12,12 @@
 #include <ws2tcpip.h>
 #endif
 
-#include "base/logging.h"
-#include "base/strings/string_util.h"
-#include "base/strings/stringprintf.h"
-#include "net/base/escape.h"
-#include "net/base/ip_address.h"
-#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
 #include "url/gurl.h"
 #include "url/url_canon.h"
-#include "url/url_canon_ip.h"
 
+namespace url {
 namespace net {
 
-namespace {
-
-bool IsHostCharAlphanumeric(char c) {
-  // We can just check lowercase because uppercase characters have already been
-  // normalized.
-  return ((c >= 'a') && (c <= 'z')) || ((c >= '0') && (c <= '9'));
-}
-
-bool IsNormalizedLocalhostTLD(const std::string& host) {
-  return base::EndsWith(host, ".localhost", base::CompareCase::SENSITIVE);
-}
-
-}  // namespace
-
-GURL AppendQueryParameter(const GURL& url,
-                          const std::string& name,
-                          const std::string& value) {
-  std::string query(url.query());
-
-  if (!query.empty())
-    query += "&";
-
-  query += (EscapeQueryParamValue(name, true) + "=" +
-            EscapeQueryParamValue(value, true));
-  GURL::Replacements replacements;
-  replacements.SetQueryStr(query);
-  return url.ReplaceComponents(replacements);
-}
-
-GURL AppendOrReplaceQueryParameter(const GURL& url,
-                                   const std::string& name,
-                                   const std::string& value) {
-  bool replaced = false;
-  std::string param_name = EscapeQueryParamValue(name, true);
-  std::string param_value = EscapeQueryParamValue(value, true);
-
-  const std::string input = url.query();
-  url::Component cursor(0, input.size());
-  std::string output;
-  url::Component key_range, value_range;
-  while (url::ExtractQueryKeyValue(input.data(), &cursor, &key_range,
-                                   &value_range)) {
-    const base::StringPiece key(
-        input.data() + key_range.begin, key_range.len);
-    std::string key_value_pair;
-    // Check |replaced| as only the first pair should be replaced.
-    if (!replaced && key == param_name) {
-      replaced = true;
-      key_value_pair = (param_name + "=" + param_value);
-    } else {
-      key_value_pair.assign(input, key_range.begin,
-                            value_range.end() - key_range.begin);
-    }
-    if (!output.empty())
-      output += "&";
-
-    output += key_value_pair;
-  }
-  if (!replaced) {
-    if (!output.empty())
-      output += "&";
-
-    output += (param_name + "=" + param_value);
-  }
-  GURL::Replacements replacements;
-  replacements.SetQueryStr(output);
-  return url.ReplaceComponents(replacements);
-}
-
-QueryIterator::QueryIterator(const GURL& url)
-    : url_(url),
-      at_end_(!url.is_valid()) {
-  if (!at_end_) {
-    query_ = url.parsed_for_possibly_invalid_spec().query;
-    Advance();
-  }
-}
-
-QueryIterator::~QueryIterator() {
-}
-
-std::string QueryIterator::GetKey() const {
-  DCHECK(!at_end_);
-  if (key_.is_nonempty())
-    return url_.spec().substr(key_.begin, key_.len);
-  return std::string();
-}
-
-std::string QueryIterator::GetValue() const {
-  DCHECK(!at_end_);
-  if (value_.is_nonempty())
-    return url_.spec().substr(value_.begin, value_.len);
-  return std::string();
-}
-
-const std::string& QueryIterator::GetUnescapedValue() {
-  DCHECK(!at_end_);
-  if (value_.is_nonempty() && unescaped_value_.empty()) {
-    unescaped_value_ = UnescapeURLComponent(
-        GetValue(), UnescapeRule::SPACES | UnescapeRule::PATH_SEPARATORS |
-                        UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS |
-                        UnescapeRule::REPLACE_PLUS_WITH_SPACE);
-  }
-  return unescaped_value_;
-}
-
-bool QueryIterator::IsAtEnd() const {
-  return at_end_;
-}
-
-void QueryIterator::Advance() {
-  DCHECK (!at_end_);
-  key_.reset();
-  value_.reset();
-  unescaped_value_.clear();
-  at_end_ =
-      !url::ExtractQueryKeyValue(url_.spec().c_str(), &query_, &key_, &value_);
-}
-
-bool GetValueForKeyInQuery(const GURL& url,
-                           const std::string& search_key,
-                           std::string* out_value) {
-  for (QueryIterator it(url); !it.IsAtEnd(); it.Advance()) {
-    if (it.GetKey() == search_key) {
-      *out_value = it.GetUnescapedValue();
-      return true;
-    }
-  }
-  return false;
-}
-
-bool ParseHostAndPort(std::string::const_iterator host_and_port_begin,
-                      std::string::const_iterator host_and_port_end,
-                      std::string* host,
-                      int* port) {
-  if (host_and_port_begin >= host_and_port_end)
-    return false;
-
-  // When using url, we use char*.
-  const char* auth_begin = &(*host_and_port_begin);
-  int auth_len = host_and_port_end - host_and_port_begin;
-
-  url::Component auth_component(0, auth_len);
-  url::Component username_component;
-  url::Component password_component;
-  url::Component hostname_component;
-  url::Component port_component;
-
-  url::ParseAuthority(auth_begin, auth_component, &username_component,
-      &password_component, &hostname_component, &port_component);
-
-  // There shouldn't be a username/password.
-  if (username_component.is_valid() || password_component.is_valid())
-    return false;
-
-  if (!hostname_component.is_nonempty())
-    return false;  // Failed parsing.
-
-  int parsed_port_number = -1;
-  if (port_component.is_nonempty()) {
-    parsed_port_number = url::ParsePort(auth_begin, port_component);
-
-    // If parsing failed, port_number will be either PORT_INVALID or
-    // PORT_UNSPECIFIED, both of which are negative.
-    if (parsed_port_number < 0)
-      return false;  // Failed parsing the port number.
-  }
-
-  if (port_component.len == 0)
-    return false;  // Reject inputs like "foo:"
-
-  unsigned char tmp_ipv6_addr[16];
-
-  // If the hostname starts with a bracket, it is either an IPv6 literal or
-  // invalid. If it is an IPv6 literal then strip the brackets.
-  if (hostname_component.len > 0 &&
-      auth_begin[hostname_component.begin] == '[') {
-    if (auth_begin[hostname_component.end() - 1] == ']' &&
-        url::IPv6AddressToNumber(
-            auth_begin, hostname_component, tmp_ipv6_addr)) {
-      // Strip the brackets.
-      hostname_component.begin++;
-      hostname_component.len -= 2;
-    } else {
-      return false;
-    }
-  }
-
-  // Pass results back to caller.
-  host->assign(auth_begin + hostname_component.begin, hostname_component.len);
-  *port = parsed_port_number;
-
-  return true;  // Success.
-}
-
-bool ParseHostAndPort(const std::string& host_and_port,
-                      std::string* host,
-                      int* port) {
-  return ParseHostAndPort(
-      host_and_port.begin(), host_and_port.end(), host, port);
-}
-
-
-std::string GetHostAndPort(const GURL& url) {
-  // For IPv6 literals, GURL::host() already includes the brackets so it is
-  // safe to just append a colon.
-  return base::StringPrintf("%s:%d", url.host().c_str(),
-                            url.EffectiveIntPort());
-}
-
-std::string GetHostAndOptionalPort(const GURL& url) {
-  // For IPv6 literals, GURL::host() already includes the brackets
-  // so it is safe to just append a colon.
-  if (url.has_port())
-    return base::StringPrintf("%s:%s", url.host().c_str(), url.port().c_str());
-  return url.host();
-}
-
-std::string TrimEndingDot(base::StringPiece host) {
-  base::StringPiece host_trimmed = host;
-  size_t len = host_trimmed.length();
-  if (len > 1 && host_trimmed[len - 1] == '.') {
-    host_trimmed.remove_suffix(1);
-  }
-  return host_trimmed.as_string();
-}
-
-std::string GetHostOrSpecFromURL(const GURL& url) {
-  return url.has_host() ? TrimEndingDot(url.host_piece()) : url.spec();
-}
-
 std::string CanonicalizeHost(base::StringPiece host,
                              url::CanonHostInfo* host_info) {
   // Try to canonicalize the host.
@@ -277,166 +40,5 @@
   return canon_host;
 }
 
-bool IsCanonicalizedHostCompliant(const std::string& host) {
-  if (host.empty())
-    return false;
-
-  bool in_component = false;
-  bool most_recent_component_started_alphanumeric = false;
-
-  for (std::string::const_iterator i(host.begin()); i != host.end(); ++i) {
-    const char c = *i;
-    if (!in_component) {
-      most_recent_component_started_alphanumeric = IsHostCharAlphanumeric(c);
-      if (!most_recent_component_started_alphanumeric && (c != '-') &&
-          (c != '_')) {
-        return false;
-      }
-      in_component = true;
-    } else if (c == '.') {
-      in_component = false;
-    } else if (!IsHostCharAlphanumeric(c) && (c != '-') && (c != '_')) {
-      return false;
-    }
-  }
-
-  return most_recent_component_started_alphanumeric;
-}
-
-bool IsHostnameNonUnique(const std::string& hostname) {
-  // CanonicalizeHost requires surrounding brackets to parse an IPv6 address.
-  const std::string host_or_ip = hostname.find(':') != std::string::npos ?
-      "[" + hostname + "]" : hostname;
-  url::CanonHostInfo host_info;
-  std::string canonical_name = CanonicalizeHost(host_or_ip, &host_info);
-
-  // If canonicalization fails, then the input is truly malformed. However,
-  // to avoid mis-reporting bad inputs as "non-unique", treat them as unique.
-  if (canonical_name.empty())
-    return false;
-
-  // If |hostname| is an IP address, check to see if it's in an IANA-reserved
-  // range.
-  if (host_info.IsIPAddress()) {
-    IPAddress host_addr;
-    if (!host_addr.AssignFromIPLiteral(hostname.substr(
-            host_info.out_host.begin, host_info.out_host.len))) {
-      return false;
-    }
-    switch (host_info.family) {
-      case url::CanonHostInfo::IPV4:
-      case url::CanonHostInfo::IPV6:
-        return host_addr.IsReserved();
-      case url::CanonHostInfo::NEUTRAL:
-      case url::CanonHostInfo::BROKEN:
-        return false;
-    }
-  }
-
-  // Check for a registry controlled portion of |hostname|, ignoring private
-  // registries, as they already chain to ICANN-administered registries,
-  // and explicitly ignoring unknown registries.
-  //
-  // Note: This means that as new gTLDs are introduced on the Internet, they
-  // will be treated as non-unique until the registry controlled domain list
-  // is updated. However, because gTLDs are expected to provide significant
-  // advance notice to deprecate older versions of this code, this an
-  // acceptable tradeoff.
-  return !registry_controlled_domains::HostHasRegistryControlledDomain(
-      canonical_name, registry_controlled_domains::EXCLUDE_UNKNOWN_REGISTRIES,
-      registry_controlled_domains::EXCLUDE_PRIVATE_REGISTRIES);
-}
-
-bool IsLocalhost(base::StringPiece host) {
-  if (IsLocalHostname(host, nullptr))
-    return true;
-
-  IPAddress ip_address;
-  if (ip_address.AssignFromIPLiteral(host)) {
-    size_t size = ip_address.size();
-    switch (size) {
-      case IPAddress::kIPv4AddressSize: {
-        const uint8_t prefix[] = {127};
-        return IPAddressStartsWith(ip_address, prefix);
-      }
-
-      case IPAddress::kIPv6AddressSize:
-        return ip_address == IPAddress::IPv6Localhost();
-
-      default:
-        NOTREACHED();
-    }
-  }
-
-  return false;
-}
-
-GURL SimplifyUrlForRequest(const GURL& url) {
-  DCHECK(url.is_valid());
-  // Fast path to avoid re-canonicalization via ReplaceComponents.
-  if (!url.has_username() && !url.has_password() && !url.has_ref())
-    return url;
-  GURL::Replacements replacements;
-  replacements.ClearUsername();
-  replacements.ClearPassword();
-  replacements.ClearRef();
-  return url.ReplaceComponents(replacements);
-}
-
-void GetIdentityFromURL(const GURL& url,
-                        base::string16* username,
-                        base::string16* password) {
-  UnescapeRule::Type flags =
-      UnescapeRule::SPACES | UnescapeRule::PATH_SEPARATORS |
-      UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS;
-  *username = UnescapeAndDecodeUTF8URLComponent(url.username(), flags);
-  *password = UnescapeAndDecodeUTF8URLComponent(url.password(), flags);
-}
-
-bool HasGoogleHost(const GURL& url) {
-  static const char* kGoogleHostSuffixes[] = {
-      ".google.com",
-      ".youtube.com",
-      ".gmail.com",
-      ".doubleclick.net",
-      ".gstatic.com",
-      ".googlevideo.com",
-      ".googleusercontent.com",
-      ".googlesyndication.com",
-      ".google-analytics.com",
-      ".googleadservices.com",
-      ".googleapis.com",
-      ".ytimg.com",
-  };
-  base::StringPiece host = url.host_piece();
-  for (const char* suffix : kGoogleHostSuffixes) {
-    // Here it's possible to get away with faster case-sensitive comparisons
-    // because the list above is all lowercase, and a GURL's host name will
-    // always be canonicalized to lowercase as well.
-    if (base::EndsWith(host, suffix, base::CompareCase::SENSITIVE))
-      return true;
-  }
-  return false;
-}
-
-bool IsLocalHostname(base::StringPiece host, bool* is_local6) {
-  std::string normalized_host = base::ToLowerASCII(host);
-  // Remove any trailing '.'.
-  if (!normalized_host.empty() && *normalized_host.rbegin() == '.')
-    normalized_host.resize(normalized_host.size() - 1);
-
-  if (normalized_host == "localhost6" ||
-      normalized_host == "localhost6.localdomain6") {
-    if (is_local6)
-      *is_local6 = true;
-    return true;
-  }
-
-  if (is_local6)
-    *is_local6 = false;
-  return normalized_host == "localhost" ||
-         normalized_host == "localhost.localdomain" ||
-         IsNormalizedLocalhostTLD(normalized_host);
-}
-
 }  // namespace net
+}  // namespace url
diff --git a/src/net/base/url_util.h b/src/net/base/url_util.h
index 75f7b62..6810b89 100644
--- a/src/net/base/url_util.h
+++ b/src/net/base/url_util.h
@@ -12,166 +12,23 @@
 
 #include <string>
 
-#include "base/macros.h"
-#include "base/strings/string16.h"
 #include "base/strings/string_piece.h"
-#include "net/base/net_export.h"
-#include "url/third_party/mozilla/url_parse.h"
+#define NET_EXPORT
 
 class GURL;
 
 namespace url {
+
 struct CanonHostInfo;
-}
 
 namespace net {
 
-// Returns a new GURL by appending the given query parameter name and the
-// value. Unsafe characters in the name and the value are escaped like
-// %XX%XX. The original query component is preserved if it's present.
-//
-// Examples:
-//
-// AppendQueryParameter(GURL("http://example.com"), "name", "value").spec()
-// => "http://example.com?name=value"
-// AppendQueryParameter(GURL("http://example.com?x=y"), "name", "value").spec()
-// => "http://example.com?x=y&name=value"
-NET_EXPORT GURL AppendQueryParameter(const GURL& url,
-                                     const std::string& name,
-                                     const std::string& value);
-
-// Returns a new GURL by appending or replacing the given query parameter name
-// and the value. If |name| appears more than once, only the first name-value
-// pair is replaced. Unsafe characters in the name and the value are escaped
-// like %XX%XX. The original query component is preserved if it's present.
-//
-// Examples:
-//
-// AppendOrReplaceQueryParameter(
-//     GURL("http://example.com"), "name", "new").spec()
-// => "http://example.com?name=value"
-// AppendOrReplaceQueryParameter(
-//     GURL("http://example.com?x=y&name=old"), "name", "new").spec()
-// => "http://example.com?x=y&name=new"
-NET_EXPORT GURL AppendOrReplaceQueryParameter(const GURL& url,
-                                              const std::string& name,
-                                              const std::string& value);
-
-// Iterates over the key-value pairs in the query portion of |url|.
-class NET_EXPORT QueryIterator {
- public:
-  explicit QueryIterator(const GURL& url);
-  ~QueryIterator();
-
-  std::string GetKey() const;
-  std::string GetValue() const;
-  const std::string& GetUnescapedValue();
-
-  bool IsAtEnd() const;
-  void Advance();
-
- private:
-  const GURL& url_;
-  url::Component query_;
-  bool at_end_;
-  url::Component key_;
-  url::Component value_;
-  std::string unescaped_value_;
-
-  DISALLOW_COPY_AND_ASSIGN(QueryIterator);
-};
-
-// Looks for |search_key| in the query portion of |url|. Returns true if the
-// key is found and sets |out_value| to the unescaped value for the key.
-// Returns false if the key is not found.
-NET_EXPORT bool GetValueForKeyInQuery(const GURL& url,
-                                      const std::string& search_key,
-                                      std::string* out_value);
-
-// Splits an input of the form <host>[":"<port>] into its consitituent parts.
-// Saves the result into |*host| and |*port|. If the input did not have
-// the optional port, sets |*port| to -1.
-// Returns true if the parsing was successful, false otherwise.
-// The returned host is NOT canonicalized, and may be invalid.
-//
-// IPv6 literals must be specified in a bracketed form, for instance:
-//   [::1]:90 and [::1]
-//
-// The resultant |*host| in both cases will be "::1" (not bracketed).
-NET_EXPORT bool ParseHostAndPort(
-    std::string::const_iterator host_and_port_begin,
-    std::string::const_iterator host_and_port_end,
-    std::string* host,
-    int* port);
-NET_EXPORT bool ParseHostAndPort(const std::string& host_and_port,
-                                 std::string* host,
-                                 int* port);
-
-// Returns a host:port string for the given URL.
-NET_EXPORT std::string GetHostAndPort(const GURL& url);
-
-// Returns a host[:port] string for the given URL, where the port is omitted
-// if it is the default for the URL's scheme.
-NET_EXPORT std::string GetHostAndOptionalPort(const GURL& url);
-
-// Returns the hostname by trimming the ending dot, if one exists.
-NET_EXPORT std::string TrimEndingDot(base::StringPiece host);
-
-// Returns either the host from |url|, or, if the host is empty, the full spec.
-NET_EXPORT std::string GetHostOrSpecFromURL(const GURL& url);
-
 // Canonicalizes |host| and returns it.  Also fills |host_info| with
 // IP address information.  |host_info| must not be NULL.
 NET_EXPORT std::string CanonicalizeHost(base::StringPiece host,
                                         url::CanonHostInfo* host_info);
 
-// Returns true if |host| is not an IP address and is compliant with a set of
-// rules based on RFC 1738 and tweaked to be compatible with the real world.
-// The rules are:
-//   * One or more components separated by '.'
-//   * Each component contains only alphanumeric characters and '-' or '_'
-//   * The last component begins with an alphanumeric character
-//   * Optional trailing dot after last component (means "treat as FQDN")
-//
-// NOTE: You should only pass in hosts that have been returned from
-// CanonicalizeHost(), or you may not get accurate results.
-NET_EXPORT bool IsCanonicalizedHostCompliant(const std::string& host);
-
-// Returns true if |hostname| contains a non-registerable or non-assignable
-// domain name (eg: a gTLD that has not been assigned by IANA) or an IP address
-// that falls in an IANA-reserved range.
-NET_EXPORT bool IsHostnameNonUnique(const std::string& hostname);
-
-// Returns true if |host| is one of the local hostnames
-// (e.g. "localhost") or IP addresses (IPv4 127.0.0.0/8 or IPv6 ::1).
-//
-// Note that this function does not check for IP addresses other than
-// the above, although other IP addresses may point to the local
-// machine.
-NET_EXPORT bool IsLocalhost(base::StringPiece host);
-
-// Strip the portions of |url| that aren't core to the network request.
-//   - user name / password
-//   - reference section
-NET_EXPORT GURL SimplifyUrlForRequest(const GURL& url);
-
-// Extracts the unescaped username/password from |url|, saving the results
-// into |*username| and |*password|.
-NET_EXPORT_PRIVATE void GetIdentityFromURL(const GURL& url,
-                                           base::string16* username,
-                                           base::string16* password);
-
-// Returns true if the url's host is a Google server. This should only be used
-// for histograms and shouldn't be used to affect behavior.
-NET_EXPORT_PRIVATE bool HasGoogleHost(const GURL& url);
-
-// This function tests |host| to see if it is of any local hostname form.
-// |host| is normalized before being tested and if |is_local6| is not NULL then
-// it it will be set to true if the localhost name implies an IPv6 interface (
-// for instance localhost6.localdomain6).
-NET_EXPORT_PRIVATE bool IsLocalHostname(base::StringPiece host,
-                                        bool* is_local6);
-
 }  // namespace net
+}  // namespace url
 
 #endif  // NET_BASE_URL_UTIL_H_
diff --git a/src/net/tools/dafsa/make_dafsa_unittest.py b/src/net/tools/dafsa/make_dafsa_unittest.py
index 65a8244..95c8454 100755
--- a/src/net/tools/dafsa/make_dafsa_unittest.py
+++ b/src/net/tools/dafsa/make_dafsa_unittest.py
@@ -6,7 +6,7 @@
 
 import sys
 import unittest
-import make_dafsa
+from google3.third_party.googleurl.src.net.tools.dafsa import make_dafsa
 
 
 class ParseGperfTest(unittest.TestCase):