diff options
author | eroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-21 19:12:57 +0000 |
---|---|---|
committer | eroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-21 19:12:57 +0000 |
commit | 123ab1e334b44051297c8d4242e81044478c6588 (patch) | |
tree | 7ba32a449e6715f5f4bace667b161b129745b78d /chrome | |
parent | 57d1ec8fc4b72112bd4d32df76c55395bf33681a (diff) | |
download | chromium_src-123ab1e334b44051297c8d4242e81044478c6588.zip chromium_src-123ab1e334b44051297c8d4242e81044478c6588.tar.gz chromium_src-123ab1e334b44051297c8d4242e81044478c6588.tar.bz2 |
Add a mechanism to disable IPv6.
(1) Adds the ability to specify the address family on a per-request basis.
(2) Exposes a --disable-ipv6 flag to chrome that changes the default address family from AF_UNSPEC to AF_INET (same sort of thing Firefox does).
(3) Changes the backing datastructure for HostCache:EntryMap and HostResolverImpl::JobMap from a "hash_map" to a "std::map". This was for consistency with other code (when I went to add a custom hash trait, I couldn't find any existing code which was using hashmap for custom keys).
(4) Updates about:net-internals to display an address family for the hostcache dump (since it is now a part of the key).
This change is in anticipation of turning off IPv6 host resolving in the PAC utility functions (see bug 24641). But it is also a feature addition.
BUG=24641
TEST=HostCacheTest.AddressFamilyIsPartOfKey
Review URL: http://codereview.chromium.org/302010
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@29686 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/net/dns_global.cc | 5 | ||||
-rw-r--r-- | chrome/common/chrome_switches.cc | 3 | ||||
-rw-r--r-- | chrome/common/chrome_switches.h | 2 | ||||
-rw-r--r-- | chrome/test/unit/chrome_test_suite.h | 6 |
4 files changed, 14 insertions, 2 deletions
diff --git a/chrome/browser/net/dns_global.cc b/chrome/browser/net/dns_global.cc index 434208b..c2a89c0 100644 --- a/chrome/browser/net/dns_global.cc +++ b/chrome/browser/net/dns_global.cc @@ -22,7 +22,9 @@ #include "chrome/common/notification_service.h" #include "chrome/common/pref_names.h" #include "chrome/common/pref_service.h" +#include "chrome/common/chrome_switches.h" #include "net/base/host_resolver.h" +#include "net/base/host_resolver_impl.h" using base::Time; using base::TimeDelta; @@ -477,6 +479,9 @@ net::HostResolver* GetGlobalHostResolver() { // Called from UI thread. if (!global_host_resolver) { global_host_resolver = net::CreateSystemHostResolver(); + + if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableIPv6)) + global_host_resolver->DisableIPv6(true); } return global_host_resolver; } diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc index f9413b4..4b47a59 100644 --- a/chrome/common/chrome_switches.cc +++ b/chrome/common/chrome_switches.cc @@ -237,6 +237,9 @@ const char kShowIcons[] = "show-icons"; // Make Chrome default browser const char kMakeDefaultBrowser[] = "make-default-browser"; +// Don't resolve hostnames to IPv6 addresses. +const char kDisableIPv6[] = "disable-ipv6"; + // Use a specified proxy server, overrides system settings. This switch only // affects HTTP and HTTPS requests. const char kProxyServer[] = "proxy-server"; diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h index 9920df2..ded4e54 100644 --- a/chrome/common/chrome_switches.h +++ b/chrome/common/chrome_switches.h @@ -81,6 +81,8 @@ extern const char kHideIcons[]; extern const char kShowIcons[]; extern const char kMakeDefaultBrowser[]; +extern const char kDisableIPv6[]; + extern const char kProxyServer[]; extern const char kNoProxyServer[]; extern const char kProxyBypassList[]; diff --git a/chrome/test/unit/chrome_test_suite.h b/chrome/test/unit/chrome_test_suite.h index 52dcc2c..43c7de0 100644 --- a/chrome/test/unit/chrome_test_suite.h +++ b/chrome/test/unit/chrome_test_suite.h @@ -36,7 +36,9 @@ class WarningHostResolverProc : public net::HostResolverProc { public: WarningHostResolverProc() : HostResolverProc(NULL) {} - virtual int Resolve(const std::string& host, net::AddressList* addrlist) { + virtual int Resolve(const std::string& host, + net::AddressFamily address_family, + net::AddressList* addrlist) { const char* kLocalHostNames[] = {"localhost", "127.0.0.1"}; bool local = false; @@ -55,7 +57,7 @@ class WarningHostResolverProc : public net::HostResolverProc { // net::RuleBasedHostResolverProc and its AllowDirectLookup method. EXPECT_TRUE(local) << "Making external DNS lookup of " << host; - return ResolveUsingPrevious(host, addrlist); + return ResolveUsingPrevious(host, address_family, addrlist); } }; |