Chromium Code Reviews| 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 7f2eb8792031d2cf56c13c17dda1b49909a0e000..f3bfffc165447e57ebc500f0f90a17c758a6c1cb 100644 |
| --- a/components/network_time/network_time_tracker.h |
| +++ b/components/network_time/network_time_tracker.h |
| @@ -7,17 +7,31 @@ |
| #include <memory> |
| +#include "base/gtest_prod_util.h" |
| #include "base/macros.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" |
| +#include "net/url_request/url_request_context_getter.h" |
|
Ryan Sleevi
2016/04/29 22:54:16
You forward declare this, no need for the header.
mab
2016/04/29 23:30:09
Actually it's the forward declaration that has to
Ryan Sleevi
2016/04/29 23:35:30
It doesn't require it in this header, it requires
mab
2016/04/30 00:37:19
OK, done.
|
| +#include "url/gurl.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 { |
| @@ -30,14 +44,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(std::unique_ptr<base::Clock> clock, |
| std::unique_ptr<base::TickClock> tick_clock, |
| - PrefService* pref_service); |
| - ~NetworkTimeTracker(); |
| + PrefService* pref_service, |
| + scoped_refptr<net::URLRequestContextGetter> getter); |
| + ~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 |
| @@ -62,6 +80,39 @@ 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); |
| + FRIEND_TEST_ALL_PREFIXES(NetworkTimeTrackerTest, |
| + UpdateFromNetworkServerError); |
| + FRIEND_TEST_ALL_PREFIXES(NetworkTimeTrackerTest, |
| + UpdateFromNetworkLargeResponse); |
| + |
| + void SetMaxResponseSize(size_t limit); // For testing. |
| + void SetTimeServerURL(const GURL& url); // For testing. |
| + |
| + // If synchronization has been lost, 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; |
| + |
| + // Sets the next time query to be run at the specified time. |
| + void QueueTimeQuery(base::TimeDelta delay); |
| + |
| + // State variables for internally-managed secure time service queries. |
| + GURL server_url_; |
| + size_t max_response_size_; |
| + base::RepeatingTimer query_timer_; |
| + scoped_refptr<net::URLRequestContextGetter> getter_; |
| + std::unique_ptr<net::URLFetcher> time_fetcher_; |
| + base::TimeTicks fetch_started_; |
| + std::unique_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. |