| Index: components/password_manager/core/browser/affiliation_backend.h
|
| diff --git a/components/password_manager/core/browser/affiliation_backend.h b/components/password_manager/core/browser/affiliation_backend.h
|
| index 0e1558a08a65857bd106cd1b9eb114b6c2cd503c..29fb0283faa6b32b01d2fca82c97b432302c10bd 100644
|
| --- a/components/password_manager/core/browser/affiliation_backend.h
|
| +++ b/components/password_manager/core/browser/affiliation_backend.h
|
| @@ -12,6 +12,7 @@
|
| #include "base/macros.h"
|
| #include "base/memory/ref_counted.h"
|
| #include "base/memory/weak_ptr.h"
|
| +#include "components/password_manager/core/browser/affiliation_fetch_throttler_delegate.h"
|
| #include "components/password_manager/core/browser/affiliation_fetcher_delegate.h"
|
| #include "components/password_manager/core/browser/affiliation_service.h"
|
| #include "components/password_manager/core/browser/affiliation_utils.h"
|
| @@ -20,7 +21,9 @@
|
| namespace base {
|
| class Clock;
|
| class FilePath;
|
| +class SingleThreadTaskRunner;
|
| class ThreadChecker;
|
| +class TickClock;
|
| class Time;
|
| } // namespace base
|
|
|
| @@ -32,6 +35,7 @@ namespace password_manager {
|
|
|
| class AffiliationDatabase;
|
| class AffiliationFetcher;
|
| +class AffiliationFetchThrottler;
|
| class FacetManager;
|
|
|
| // The AffiliationBackend is the part of the AffiliationService that lives on a
|
| @@ -43,15 +47,18 @@ class FacetManager;
|
| // and then transfer it to the background thread for the rest of its life.
|
| // Initialize() must be called already on the final (background) thread.
|
| class AffiliationBackend : public FacetManagerHost,
|
| - public AffiliationFetcherDelegate {
|
| + public AffiliationFetcherDelegate,
|
| + public AffiliationFetchThrottlerDelegate {
|
| public:
|
| // Constructs an instance that will use |request_context_getter| for all
|
| - // network requests, and will rely on |time_source| to tell the current time,
|
| - // which is expected to always be no less than the Unix epoch.
|
| + // network requests, use |task_runner| for asynchronous tasks, and will rely
|
| + // on |time_source| and |time_tick_source| to tell the current time/ticks.
|
| // Construction is very cheap, expensive steps are deferred to Initialize().
|
| AffiliationBackend(
|
| const scoped_refptr<net::URLRequestContextGetter>& request_context_getter,
|
| - scoped_ptr<base::Clock> time_source);
|
| + const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
|
| + scoped_ptr<base::Clock> time_source,
|
| + scoped_ptr<base::TickClock> time_tick_source);
|
| ~AffiliationBackend() override;
|
|
|
| // Performs the I/O-heavy part of initialization. The database used to cache
|
| @@ -77,10 +84,6 @@ class AffiliationBackend : public FacetManagerHost,
|
| // storing it into |facet_managers_| if it did not exist.
|
| FacetManager* GetOrCreateFacetManager(const FacetURI& facet_uri);
|
|
|
| - // Collects facet URIs that require fetching and issues a network request
|
| - // against the Affiliation API to fetch corresponding affiliation information.
|
| - void SendNetworkRequest();
|
| -
|
| // Scheduled by RequestNotificationAtTime() to be called back at times when a
|
| // FacetManager needs to be notified.
|
| void OnSendNotification(const FacetURI& facet_uri);
|
| @@ -99,20 +102,28 @@ class AffiliationBackend : public FacetManagerHost,
|
| void OnFetchFailed() override;
|
| void OnMalformedResponse() override;
|
|
|
| - // Used only for testing.
|
| + // AffiliationFetchThrottlerDelegate:
|
| + bool OnCanSendNetworkRequest() override;
|
| +
|
| + // Returns the number of in-memory FacetManagers. Used only for testing.
|
| size_t facet_manager_count_for_testing() { return facet_managers_.size(); }
|
|
|
| + // To be called after Initialize() to use |throttler| instead of the default
|
| + // one. Used only for testing.
|
| + void SetThrottlerForTesting(scoped_ptr<AffiliationFetchThrottler> throttler);
|
| +
|
| // Created in Initialize(), and ensures that all subsequent methods are called
|
| // on the same thread.
|
| scoped_ptr<base::ThreadChecker> thread_checker_;
|
|
|
| scoped_refptr<net::URLRequestContextGetter> request_context_getter_;
|
| -
|
| - // Will always return a Now() that is strictly greater than the NULL time.
|
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
|
| scoped_ptr<base::Clock> clock_;
|
| + scoped_ptr<base::TickClock> tick_clock_;
|
|
|
| scoped_ptr<AffiliationDatabase> cache_;
|
| scoped_ptr<AffiliationFetcher> fetcher_;
|
| + scoped_ptr<AffiliationFetchThrottler> throttler_;
|
|
|
| // Contains a FacetManager for each facet URI that need ongoing attention. To
|
| // save memory, managers are discarded as soon as they become redundant.
|
|
|