summaryrefslogtreecommitdiffstats
path: root/chrome/browser/io_thread.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/io_thread.cc')
-rw-r--r--chrome/browser/io_thread.cc61
1 files changed, 28 insertions, 33 deletions
diff --git a/chrome/browser/io_thread.cc b/chrome/browser/io_thread.cc
index 6378c50..f4d4698 100644
--- a/chrome/browser/io_thread.cc
+++ b/chrome/browser/io_thread.cc
@@ -24,49 +24,44 @@ namespace {
net::HostResolver* CreateGlobalHostResolver(
net::NetworkChangeNotifier* network_change_notifier) {
+ net::HostResolver* global_host_resolver = NULL;
+
const CommandLine& command_line = *CommandLine::ForCurrentProcess();
- net::HostResolver* global_host_resolver =
+
+ global_host_resolver =
net::CreateSystemHostResolver(network_change_notifier);
- // Determine if we should disable IPv6 support.
if (!command_line.HasSwitch(switches::kEnableIPv6)) {
- if (command_line.HasSwitch(switches::kDisableIPv6)) {
+ // Measure impact of allowing IPv6 support without probing.
+ const FieldTrial::Probability kDivisor = 100;
+ const FieldTrial::Probability kProbability = 50; // 50% probability.
+ FieldTrial* trial = new FieldTrial("IPv6_Probe", kDivisor);
+ int skip_group = trial->AppendGroup("_IPv6_probe_skipped", kProbability);
+ trial->AppendGroup("_IPv6_probe_done",
+ FieldTrial::kAllRemainingProbability);
+ bool use_ipv6_probe = (trial->group() != skip_group);
+
+ // Perform probe, and then optionally use result to disable IPv6.
+ // Some users report confused OS handling of IPv6, leading to large
+ // latency. If we can show that IPv6 is not supported, then disabliing it
+ // will work around such problems.
+ if ((!net::IPv6Supported() && use_ipv6_probe) ||
+ command_line.HasSwitch(switches::kDisableIPv6))
global_host_resolver->SetDefaultAddressFamily(net::ADDRESS_FAMILY_IPV4);
- } else {
- net::HostResolverImpl* host_resolver_impl =
- global_host_resolver->GetAsHostResolverImpl();
- if (host_resolver_impl != NULL) {
- // (optionally) Use probe to decide if support is warranted.
-
- // Measure impact of probing to allow IPv6.
- // Some users report confused OS handling of IPv6, leading to large
- // latency. If we can show that IPv6 is not supported, then disabliing
- // it will work around such problems.
- const FieldTrial::Probability kDivisor = 100;
- const FieldTrial::Probability kProbability = 50; // 50% probability.
- FieldTrial* trial = new FieldTrial("IPv6_Probe", kDivisor);
- int skip_group = trial->AppendGroup("_IPv6_probe_skipped",
- kProbability);
- trial->AppendGroup("_IPv6_probe_done",
- FieldTrial::kAllRemainingProbability);
- bool use_ipv6_probe = (trial->group() != skip_group);
- if (use_ipv6_probe)
- host_resolver_impl->ProbeIPv6Support();
- }
- }
}
// 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;
-
- net::MappedHostResolver* remapped_resolver =
- new net::MappedHostResolver(global_host_resolver);
- remapped_resolver->SetRulesFromString(
- command_line.GetSwitchValueASCII(switches::kHostResolverRules));
- return remapped_resolver;
+ if (command_line.HasSwitch(switches::kHostResolverRules)) {
+ net::MappedHostResolver* remapped_resolver =
+ new net::MappedHostResolver(global_host_resolver);
+ global_host_resolver = remapped_resolver;
+ remapped_resolver->SetRulesFromString(
+ command_line.GetSwitchValueASCII(switches::kHostResolverRules));
+ }
+
+ return global_host_resolver;
}
} // namespace