Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(47)

Unified Diff: chrome/browser/net/dns_probe_service.h

Issue 13270005: Display DNS probe results. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fix moar nits Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 c40967acc10c64e35dc34b5739b580b9dcd4a150..3c5a98c672730a858ba58d343b0f5c28fd23c313 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.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);
+ 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);
};

Powered by Google App Engine
This is Rietveld 408576698