Chromium Code Reviews| Index: chrome/browser/net/dns_probe_runner.h |
| diff --git a/chrome/browser/net/dns_probe_runner.h b/chrome/browser/net/dns_probe_runner.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..e9607ea22e24be1c34c61cac1279b6db371f9163 |
| --- /dev/null |
| +++ b/chrome/browser/net/dns_probe_runner.h |
| @@ -0,0 +1,74 @@ |
| +// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef CHROME_BROWSER_NET_DNS_PROBE_RUNNER_H_ |
| +#define CHROME_BROWSER_NET_DNS_PROBE_RUNNER_H_ |
| + |
| +#include "base/basictypes.h" |
| +#include "base/bind.h" |
| +#include "base/memory/scoped_ptr.h" |
| +#include "base/memory/weak_ptr.h" |
| + |
| +namespace net { |
| +class DnsClient; |
| +class DnsResponse; |
| +class DnsTransaction; |
| +} |
| + |
| +namespace chrome_browser_net { |
| + |
| +// Runs DNS probes using a single DnsClient and evaluates the responses. |
| +// (Currently requests A records for google.com and expects at least one IP |
| +// address in the response.) |
| +// Used by DnsProbeService to probe the system and public DNS configurations. |
| +class DnsProbeRunner { |
| + public: |
| + enum Result { |
| + UNKNOWN, |
| + CORRECT, // Response contains at least one A record |
| + INCORRECT, // Response claimed success but included no A records |
| + FAILING, // Response included an error or was malformed |
| + UNREACHABLE // No response received (timeout, network unreachable, etc.) |
| + }; |
| + |
| + DnsProbeRunner(); |
| + ~DnsProbeRunner(); |
| + |
| + // Starts a probe using the client specified with SetClient, which must have |
| + // been called before RunProbe. |callback| will be called asynchronously |
| + // when the result is ready (even if it is ready synchronously). Must not |
| + // be called again // until the callback is called (but may be called during |
|
mmenke
2013/06/24 16:20:00
nit: Remove bonux "//"
Deprecated (see juliatuttle)
2013/06/25 16:45:04
Done.
|
| + // the callback). |
| + void RunProbe(const base::Closure& callback); |
| + |
| + // Sets the DnsClient that will be used for DNS probes sent by this runner. |
| + // Must be called before RunProbe; can be called repeatedly, including during |
| + // a probe. (It will not, of course, affect the in-flight probe.) |
| + void SetClient(scoped_ptr<net::DnsClient> client); |
| + |
| + // Returns true if a probe is running. Guaranteed to return true after |
| + // RunProbe returns, and false during and after the callback. |
| + bool IsRunning() const; |
| + |
| + // Returns the result of the last probe. |
| + Result result() const { return result_; } |
| + |
| + private: |
| + void OnTransactionComplete(net::DnsTransaction* transaction, |
| + int net_error, |
| + const net::DnsResponse* response); |
| + void CallCallback(); |
| + |
| + base::WeakPtrFactory<DnsProbeRunner> weak_factory_; |
| + scoped_ptr<net::DnsClient> client_; |
| + base::Closure callback_; |
| + scoped_ptr<net::DnsTransaction> transaction_; |
| + Result result_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(DnsProbeRunner); |
| +}; |
| + |
| +} // namespace chrome_browser_net |
| + |
| +#endif // CHROME_BROWSER_NET_DNS_PROBE_RUNNER_H_ |