| 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..e41b6d221db6150e1bef2158a8f844d88c957cfa
|
| --- /dev/null
|
| +++ b/chrome/browser/net/dns_probe_runner.h
|
| @@ -0,0 +1,85 @@
|
| +// 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:
|
| + static const char* kKnownGoodHostname;
|
| +
|
| + // Used in histograms; add new entries at the bottom, and don't remove any.
|
| + 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();
|
| +
|
| + // 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 affect an in-flight probe, if one is running.
|
| + void SetClient(scoped_ptr<net::DnsClient> client);
|
| +
|
| + // 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 the
|
| + // callback.
|
| + void RunProbe(const base::Closure& callback);
|
| +
|
| + // 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_;
|
| +
|
| + // The callback passed to |RunProbe|. Cleared right before calling the
|
| + // callback.
|
| + base::Closure callback_;
|
| +
|
| + // The transaction started in |RunProbe| for the DNS probe. Reset once the
|
| + // results have been examined.
|
| + scoped_ptr<net::DnsTransaction> transaction_;
|
| +
|
| + Result result_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(DnsProbeRunner);
|
| +};
|
| +
|
| +} // namespace chrome_browser_net
|
| +
|
| +#endif // CHROME_BROWSER_NET_DNS_PROBE_RUNNER_H_
|
|
|