| Index: components/network_time/network_time_tracker.h
|
| diff --git a/components/network_time/network_time_tracker.h b/components/network_time/network_time_tracker.h
|
| index dc7524a58302b2748c33941bc40938a73f792392..35c2ed232d5060b64a4f4fe4ce98828ed36b32a6 100644
|
| --- a/components/network_time/network_time_tracker.h
|
| +++ b/components/network_time/network_time_tracker.h
|
| @@ -5,18 +5,30 @@
|
| #ifndef COMPONENTS_NETWORK_TIME_NETWORK_TIME_TRACKER_H_
|
| #define COMPONENTS_NETWORK_TIME_NETWORK_TIME_TRACKER_H_
|
|
|
| +#include "base/gtest_prod_util.h"
|
| #include "base/macros.h"
|
| #include "base/memory/scoped_ptr.h"
|
| #include "base/threading/thread_checker.h"
|
| #include "base/time/clock.h"
|
| #include "base/time/time.h"
|
| +#include "base/timer/timer.h"
|
| +#include "net/url_request/url_fetcher_delegate.h"
|
|
|
| class PrefRegistrySimple;
|
| class PrefService;
|
|
|
| namespace base {
|
| class TickClock;
|
| -}
|
| +} // namespace base
|
| +
|
| +namespace client_update_protocol {
|
| +class Ecdsa;
|
| +} // namespace client_udpate_protocol
|
| +
|
| +namespace net {
|
| +class URLFetcher;
|
| +class URLRequestContextGetter;
|
| +} // namespace net
|
|
|
| namespace network_time {
|
|
|
| @@ -29,14 +41,18 @@ const int64_t kTicksResolutionMs = 1; // Assume 1ms for non-windows platforms.
|
|
|
| // A class that receives network time updates and can provide the network time
|
| // for a corresponding local time. This class is not thread safe.
|
| -class NetworkTimeTracker {
|
| +class NetworkTimeTracker : public net::URLFetcherDelegate {
|
| public:
|
| static void RegisterPrefs(PrefRegistrySimple* registry);
|
|
|
| + // Constructor. Arguments may be stubbed out for tests. |getter|, if not
|
| + // null, will cause automatic queries to a time server. Otherwise, time is
|
| + // available only if |UpdateNetworkTime| is called.
|
| NetworkTimeTracker(scoped_ptr<base::Clock> clock,
|
| scoped_ptr<base::TickClock> tick_clock,
|
| - PrefService* pref_service);
|
| - ~NetworkTimeTracker();
|
| + PrefService* pref_service,
|
| + net::URLRequestContextGetter* getter = nullptr);
|
| + ~NetworkTimeTracker() override;
|
|
|
| // Sets |network_time| to an estimate of the true time. Returns true if time
|
| // is available, and false otherwise. If |uncertainty| is non-NULL, it will
|
| @@ -61,6 +77,27 @@ class NetworkTimeTracker {
|
| base::TimeTicks post_time);
|
|
|
| private:
|
| + friend class NetworkTimeTrackerTest;
|
| + FRIEND_TEST_ALL_PREFIXES(NetworkTimeTrackerTest, UpdateFromNetwork);
|
| + FRIEND_TEST_ALL_PREFIXES(NetworkTimeTrackerTest, NoNetworkQueryWhileSynced);
|
| + FRIEND_TEST_ALL_PREFIXES(NetworkTimeTrackerTest,
|
| + UpdateFromNetworkBadSignature);
|
| +
|
| + // Sends a query to the secure time service. Upon response, execution resumes
|
| + // in |OnURLFetchComplete|.
|
| + void QueryTimeService();
|
| +
|
| + // net::URLFetcherDelegate:
|
| + // Called to process responses from the secure time service.
|
| + void OnURLFetchComplete(const net::URLFetcher* source) override;
|
| +
|
| + // State variables for internally-managed secure time service queries.
|
| + base::RepeatingTimer query_timer_;
|
| + net::URLRequestContextGetter* getter_;
|
| + scoped_ptr<net::URLFetcher> time_fetcher_;
|
| + base::TimeTicks fetch_started_;
|
| + scoped_ptr<client_update_protocol::Ecdsa> query_signer_;
|
| +
|
| // The |Clock| and |TickClock| are used to sanity-check one another, allowing
|
| // the NetworkTimeTracker to notice e.g. suspend/resume events and clock
|
| // resets.
|
|
|