| OLD | NEW | 
|---|
| (Empty) |  | 
|  | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 
|  | 2 // Use of this source code is governed by a BSD-style license that can be | 
|  | 3 // found in the LICENSE file. | 
|  | 4 | 
|  | 5 #ifndef CHROME_BROWSER_NET_DNS_PROBE_RUNNER_H_ | 
|  | 6 #define CHROME_BROWSER_NET_DNS_PROBE_RUNNER_H_ | 
|  | 7 | 
|  | 8 #include "base/basictypes.h" | 
|  | 9 #include "base/bind.h" | 
|  | 10 #include "base/memory/scoped_ptr.h" | 
|  | 11 #include "base/memory/weak_ptr.h" | 
|  | 12 | 
|  | 13 namespace net { | 
|  | 14 class DnsClient; | 
|  | 15 class DnsResponse; | 
|  | 16 class DnsTransaction; | 
|  | 17 } | 
|  | 18 | 
|  | 19 namespace chrome_browser_net { | 
|  | 20 | 
|  | 21 // Runs DNS probes using a single DnsClient and evaluates the responses. | 
|  | 22 // (Currently requests A records for google.com and expects at least one IP | 
|  | 23 // address in the response.) | 
|  | 24 // Used by DnsProbeService to probe the system and public DNS configurations. | 
|  | 25 class DnsProbeRunner { | 
|  | 26  public: | 
|  | 27   static const char* kKnownGoodHostname; | 
|  | 28 | 
|  | 29   // Used in histograms; add new entries at the bottom, and don't remove any. | 
|  | 30   enum Result { | 
|  | 31     UNKNOWN, | 
|  | 32     CORRECT,     // Response contains at least one A record. | 
|  | 33     INCORRECT,   // Response claimed success but included no A records. | 
|  | 34     FAILING,     // Response included an error or was malformed. | 
|  | 35     UNREACHABLE  // No response received (timeout, network unreachable, etc.). | 
|  | 36   }; | 
|  | 37 | 
|  | 38   DnsProbeRunner(); | 
|  | 39   ~DnsProbeRunner(); | 
|  | 40 | 
|  | 41   // Starts a probe using the client specified with SetClient, which must have | 
|  | 42   // been called before RunProbe.  |callback| will be called asynchronously | 
|  | 43   // when the result is ready, even if it is ready synchronously.  Must not | 
|  | 44   // be called again until the callback is called, but may be called during the | 
|  | 45   // callback. | 
|  | 46   void RunProbe(const base::Closure& callback); | 
|  | 47 | 
|  | 48   // Sets the DnsClient that will be used for DNS probes sent by this runner. | 
|  | 49   // Must be called before RunProbe; can be called repeatedly, including during | 
|  | 50   // a probe.  It will not affect an in-flight probe, if one is running. | 
|  | 51   void SetClient(scoped_ptr<net::DnsClient> client); | 
|  | 52 | 
|  | 53   // Returns true if a probe is running.  Guaranteed to return true after | 
|  | 54   // RunProbe returns, and false during and after the callback. | 
|  | 55   bool IsRunning() const; | 
|  | 56 | 
|  | 57   // Returns the result of the last probe. | 
|  | 58   Result result() const { return result_; } | 
|  | 59 | 
|  | 60  private: | 
|  | 61   void OnTransactionComplete(net::DnsTransaction* transaction, | 
|  | 62                              int net_error, | 
|  | 63                              const net::DnsResponse* response); | 
|  | 64   void CallCallback(); | 
|  | 65 | 
|  | 66   base::WeakPtrFactory<DnsProbeRunner> weak_factory_; | 
|  | 67   scoped_ptr<net::DnsClient> client_; | 
|  | 68   base::Closure callback_; | 
|  | 69   scoped_ptr<net::DnsTransaction> transaction_; | 
|  | 70   Result result_; | 
|  | 71 | 
|  | 72   DISALLOW_COPY_AND_ASSIGN(DnsProbeRunner); | 
|  | 73 }; | 
|  | 74 | 
|  | 75 }  // namespace chrome_browser_net | 
|  | 76 | 
|  | 77 #endif  // CHROME_BROWSER_NET_DNS_PROBE_RUNNER_H_ | 
| OLD | NEW | 
|---|