| Index: chrome/browser/net/dns_probe_service.h | 
| diff --git a/chrome/browser/net/dns_probe_service.h b/chrome/browser/net/dns_probe_service.h | 
| index a906d751cde0dc09bac8f719caeb78bb07cb9234..d1df98e014264ee662f86c7720f7cf091ac479b9 100644 | 
| --- a/chrome/browser/net/dns_probe_service.h | 
| +++ b/chrome/browser/net/dns_probe_service.h | 
| @@ -8,78 +8,70 @@ | 
| #include <vector> | 
|  | 
| #include "base/basictypes.h" | 
| +#include "base/bind.h" | 
| #include "base/memory/scoped_ptr.h" | 
| #include "base/time/time.h" | 
| -#include "chrome/browser/net/dns_probe_job.h" | 
| +#include "chrome/browser/net/dns_probe_runner.h" | 
| #include "chrome/common/net/net_error_info.h" | 
| #include "net/base/network_change_notifier.h" | 
|  | 
| namespace net { | 
| +class DnsClient; | 
| struct DnsConfig; | 
| } | 
|  | 
| namespace chrome_browser_net { | 
|  | 
| -class DnsProbeService : public net::NetworkChangeNotifier::IPAddressObserver { | 
| +// Probes the system and public DNS servers to determine the (probable) cause | 
| +// of a recent DNS-related page load error.  Coalesces multiple probe requests | 
| +// (perhaps from multiple tabs) and caches the results. | 
| +// | 
| +// Uses a single DNS attempt per config, and doesn't randomize source ports. | 
| +class DnsProbeService : public net::NetworkChangeNotifier::DNSObserver { | 
| public: | 
| -  typedef base::Callback<void(chrome_common_net::DnsProbeResult result)> | 
| -      CallbackType; | 
| +  typedef base::Callback<void(chrome_common_net::DnsProbeStatus result)> | 
| +      ProbeCallback; | 
|  | 
| DnsProbeService(); | 
| virtual ~DnsProbeService(); | 
|  | 
| -  void ProbeDns(const CallbackType& callback); | 
| +  virtual void ProbeDns(const ProbeCallback& callback); | 
|  | 
| -  // NetworkChangeNotifier::IPAddressObserver implementation: | 
| -  virtual void OnIPAddressChanged() OVERRIDE; | 
| +  // NetworkChangeNotifier::DNSObserver implementation: | 
| +  virtual void OnDNSChanged() OVERRIDE; | 
|  | 
| - protected: | 
| -  // This can be called by tests to pretend the cached reuslt has expired. | 
| -  void ExpireResults(); | 
| +  void SetSystemClientForTesting(scoped_ptr<net::DnsClient> system_client); | 
| +  void SetPublicClientForTesting(scoped_ptr<net::DnsClient> public_client); | 
| +  void ClearCachedResultForTesting(); | 
|  | 
| private: | 
| enum State { | 
| -    STATE_NO_RESULTS, | 
| +    STATE_NO_RESULT, | 
| STATE_PROBE_RUNNING, | 
| -    STATE_RESULTS_CACHED, | 
| +    STATE_RESULT_CACHED, | 
| }; | 
|  | 
| +  void SetSystemClientToCurrentConfig(); | 
| +  void SetPublicClientToGooglePublicDns(); | 
| + | 
| +  // Starts a probe (runs system and public probes). | 
| void StartProbes(); | 
| -  void OnProbesComplete(); | 
| +  void OnProbeComplete(); | 
| +  // Calls all |pending_callbacks_| with the |cached_result_|. | 
| void CallCallbacks(); | 
| +  // Clears a cached probe result. | 
| +  void ClearCachedResult(); | 
| + | 
| +  bool CachedResultIsExpired() const; | 
|  | 
| -  void OnProbeJobComplete(DnsProbeJob* job, DnsProbeJob::Result result); | 
| -  chrome_common_net::DnsProbeResult EvaluateResults() const; | 
| -  void HistogramProbes() const; | 
| - | 
| -  // These are expected to be overridden by tests to return mock jobs. | 
| -  virtual scoped_ptr<DnsProbeJob> CreateSystemProbeJob( | 
| -      const DnsProbeJob::CallbackType& job_callback); | 
| -  virtual scoped_ptr<DnsProbeJob> CreatePublicProbeJob( | 
| -      const DnsProbeJob::CallbackType& job_callback); | 
| - | 
| -  scoped_ptr<DnsProbeJob> CreateProbeJob( | 
| -      const net::DnsConfig& dns_config, | 
| -      const DnsProbeJob::CallbackType& job_callback); | 
| -  void GetSystemDnsConfig(net::DnsConfig* config); | 
| -  void GetPublicDnsConfig(net::DnsConfig* config); | 
| -  bool ResultsExpired(); | 
| - | 
| -  scoped_ptr<DnsProbeJob> system_job_; | 
| -  scoped_ptr<DnsProbeJob> public_job_; | 
| -  DnsProbeJob::Result system_result_; | 
| -  DnsProbeJob::Result public_result_; | 
| -  std::vector<CallbackType> callbacks_; | 
| State state_; | 
| -  chrome_common_net::DnsProbeResult result_; | 
| +  std::vector<ProbeCallback> pending_callbacks_; | 
| base::Time probe_start_time_; | 
| -  // How many DNS request attempts the probe jobs will make before giving up | 
| -  // (Overrides the attempts field in the system DnsConfig.) | 
| -  const int dns_attempts_; | 
| -  // How many nameservers the system config has. | 
| -  int system_nameserver_count_; | 
| -  // Whether the only system nameserver is 127.0.0.1. | 
| -  bool system_is_localhost_; | 
| +  chrome_common_net::DnsProbeStatus cached_result_; | 
| + | 
| +  // DnsProbeRunners for the system DNS configuration and a public DNS server. | 
| +  DnsProbeRunner system_runner_; | 
| +  DnsProbeRunner public_runner_; | 
|  | 
| DISALLOW_COPY_AND_ASSIGN(DnsProbeService); | 
| }; | 
|  |