Index: chrome/browser/io_thread.cc |
diff --git a/chrome/browser/io_thread.cc b/chrome/browser/io_thread.cc |
index ee97bb952a9ecb0ffe8e207b3acd5038d995391a..4a436833976195386bab890e3700fe77af4ee39b 100644 |
--- a/chrome/browser/io_thread.cc |
+++ b/chrome/browser/io_thread.cc |
@@ -48,6 +48,7 @@ |
#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/cookie_store_factory.h" |
#include "net/base/host_mapping_rules.h" |
+#include "net/base/ip_mapping_rules.h" |
#include "net/base/net_util.h" |
#include "net/base/network_time_notifier.h" |
#include "net/base/sdch_manager.h" |
@@ -58,6 +59,7 @@ |
#include "net/dns/host_cache.h" |
#include "net/dns/host_resolver.h" |
#include "net/dns/mapped_host_resolver.h" |
+#include "net/dns/mapped_ip_resolver.h" |
#include "net/ftp/ftp_network_layer.h" |
#include "net/http/http_auth_filter.h" |
#include "net/http/http_auth_handler_factory.h" |
@@ -190,17 +192,28 @@ scoped_ptr<net::HostResolver> CreateGlobalHostResolver(net::NetLog* net_log) { |
global_host_resolver->SetDefaultAddressFamily(net::ADDRESS_FAMILY_IPV4); |
} |
- // If hostname remappings were specified on the command-line, layer these |
- // rules on top of the real host resolver. This allows forwarding all requests |
- // through a designated test server. |
- if (!command_line.HasSwitch(switches::kHostResolverRules)) |
- return global_host_resolver.PassAs<net::HostResolver>(); |
- |
- scoped_ptr<net::MappedHostResolver> remapped_resolver( |
- new net::MappedHostResolver(global_host_resolver.Pass())); |
- remapped_resolver->SetRulesFromString( |
- command_line.GetSwitchValueASCII(switches::kHostResolverRules)); |
- return remapped_resolver.PassAs<net::HostResolver>(); |
+ // If hostname or IP remappings were specified on the command-line, layer |
+ // these rules on top of the real host resolver. Hostname remapping allows |
+ // forwarding of all requests to hosts (matching a pattern) through a |
+ // designated test server. IP remapping allows for all IP resolutions that |
+ // match a given pattern, such as those destined for a specific CDN, to be |
+ // instead directed to a specific/alternate IP address. |
+ if (command_line.HasSwitch(switches::kHostResolverRules)) { |
+ scoped_ptr<net::MappedHostResolver> remapped_resolver( |
+ new net::MappedHostResolver(global_host_resolver.Pass())); |
+ remapped_resolver->SetRulesFromString( |
+ command_line.GetSwitchValueASCII(switches::kHostResolverRules)); |
+ global_host_resolver = remapped_resolver.Pass(); |
+ } |
+ |
+ if (command_line.HasSwitch(switches::kIpResolverRules)) { |
+ scoped_ptr<net::MappedIPResolver> remapped_resolver( |
+ new net::MappedIPResolver(global_host_resolver.Pass())); |
+ remapped_resolver->SetRulesFromString( |
+ command_line.GetSwitchValueASCII(switches::kIpResolverRules)); |
+ global_host_resolver = remapped_resolver.Pass(); |
+ } |
+ return global_host_resolver.Pass(); |
} |
// TODO(willchan): Remove proxy script fetcher context since it's not necessary |