| Index: components/suggestions/suggestions_service.h
|
| diff --git a/components/suggestions/suggestions_service.h b/components/suggestions/suggestions_service.h
|
| index 558633ceadea13162660bd840ebad69da43dadde..49d2052b3060d540f5361f879556a71b2a54abc9 100644
|
| --- a/components/suggestions/suggestions_service.h
|
| +++ b/components/suggestions/suggestions_service.h
|
| @@ -10,15 +10,17 @@
|
| #include <string>
|
|
|
| #include "base/callback.h"
|
| +#include "base/callback_list.h"
|
| #include "base/gtest_prod_util.h"
|
| #include "base/macros.h"
|
| #include "base/memory/scoped_ptr.h"
|
| #include "base/memory/weak_ptr.h"
|
| +#include "base/scoped_observer.h"
|
| #include "base/threading/thread_checker.h"
|
| #include "base/time/time.h"
|
| #include "components/keyed_service/core/keyed_service.h"
|
| #include "components/suggestions/proto/suggestions.pb.h"
|
| -#include "components/suggestions/suggestions_utils.h"
|
| +#include "components/sync_driver/sync_service_observer.h"
|
| #include "net/url_request/url_fetcher_delegate.h"
|
| #include "url/gurl.h"
|
|
|
| @@ -26,6 +28,10 @@ namespace net {
|
| class URLRequestContextGetter;
|
| } // namespace net
|
|
|
| +namespace sync_driver {
|
| +class SyncService;
|
| +}
|
| +
|
| namespace user_prefs {
|
| class PrefRegistrySyncable;
|
| } // namespace user_prefs
|
| @@ -41,32 +47,36 @@ class ImageManager;
|
| class SuggestionsStore;
|
|
|
| // An interface to fetch server suggestions asynchronously.
|
| -class SuggestionsService : public KeyedService, public net::URLFetcherDelegate {
|
| +class SuggestionsService : public KeyedService,
|
| + public net::URLFetcherDelegate,
|
| + public sync_driver::SyncServiceObserver {
|
| public:
|
| using ResponseCallback = base::Callback<void(const SuggestionsProfile&)>;
|
| using BitmapCallback = base::Callback<void(const GURL&, const SkBitmap*)>;
|
|
|
| - SuggestionsService(
|
| - const SigninManagerBase* signin_manager,
|
| - OAuth2TokenService* token_service,
|
| - net::URLRequestContextGetter* url_request_context,
|
| - scoped_ptr<SuggestionsStore> suggestions_store,
|
| - scoped_ptr<ImageManager> thumbnail_manager,
|
| - scoped_ptr<BlacklistStore> blacklist_store);
|
| + using ResponseCallbackList =
|
| + base::CallbackList<void(const SuggestionsProfile&)>;
|
| +
|
| + SuggestionsService(const SigninManagerBase* signin_manager,
|
| + OAuth2TokenService* token_service,
|
| + sync_driver::SyncService* sync_service,
|
| + net::URLRequestContextGetter* url_request_context,
|
| + scoped_ptr<SuggestionsStore> suggestions_store,
|
| + scoped_ptr<ImageManager> thumbnail_manager,
|
| + scoped_ptr<BlacklistStore> blacklist_store);
|
| ~SuggestionsService() override;
|
|
|
| - // Requests suggestions data. Passes the currently cached data to |callback|.
|
| - // |sync_state| influences the behavior of this function (see SyncState
|
| - // definition).
|
| - //
|
| - // |sync_state| must be specified based on the current state of the system
|
| - // (see suggestions::GetSyncState). Callers should call this function again if
|
| - // sync state changes.
|
| - //
|
| - // If state allows for a network request, it is initiated unless a pending one
|
| - // exists, to fill the cache for next time.
|
| - void FetchSuggestionsData(SyncState sync_state,
|
| - const ResponseCallback& callback);
|
| + // Initiates a network request for suggestions if sync state allows and there
|
| + // is no pending request. Returns true iff sync state allowed for a request,
|
| + // whether a new request was actually sent or not.
|
| + bool FetchSuggestionsData();
|
| +
|
| + // Returns the current set of suggestions from the cache.
|
| + SuggestionsProfile GetSuggestionsDataFromCache() const;
|
| +
|
| + // Adds a callback that is called when the suggestions are updated.
|
| + scoped_ptr<ResponseCallbackList::Subscription> AddCallback(
|
| + const ResponseCallback& callback) WARN_UNUSED_RESULT;
|
|
|
| // Retrieves stored thumbnail for website |url| asynchronously. Calls
|
| // |callback| with Bitmap pointer if found, and NULL otherwise.
|
| @@ -79,21 +89,16 @@ class SuggestionsService : public KeyedService, public net::URLFetcherDelegate {
|
| const GURL& thumbnail_url,
|
| const BitmapCallback& callback);
|
|
|
| - // Adds a URL to the blacklist cache, invoking |callback| on success or
|
| - // |fail_callback| otherwise. The URL will eventually be uploaded to the
|
| - // server.
|
| - void BlacklistURL(const GURL& candidate_url,
|
| - const ResponseCallback& callback,
|
| - const base::Closure& fail_callback);
|
| + // Adds a URL to the blacklist cache, returning true on success or false on
|
| + // failure. The URL will eventually be uploaded to the server.
|
| + bool BlacklistURL(const GURL& candidate_url);
|
|
|
| - // Removes a URL from the local blacklist, then invokes |callback|. If the URL
|
| - // cannot be removed, the |fail_callback| is called.
|
| - void UndoBlacklistURL(const GURL& url,
|
| - const ResponseCallback& callback,
|
| - const base::Closure& fail_callback);
|
| + // Removes a URL from the local blacklist, returning true on success or false
|
| + // on failure.
|
| + bool UndoBlacklistURL(const GURL& url);
|
|
|
| - // Removes all URLs from the blacklist then invokes |callback|.
|
| - void ClearBlacklist(const ResponseCallback& callback);
|
| + // Removes all URLs from the blacklist.
|
| + void ClearBlacklist();
|
|
|
| // Determines which URL a blacklist request was for, irrespective of the
|
| // request's status. Returns false if |request| is not a blacklist request.
|
| @@ -104,6 +109,9 @@ class SuggestionsService : public KeyedService, public net::URLFetcherDelegate {
|
|
|
| private:
|
| friend class SuggestionsServiceTest;
|
| + FRIEND_TEST_ALL_PREFIXES(SuggestionsServiceTest, FetchSuggestionsData);
|
| + FRIEND_TEST_ALL_PREFIXES(SuggestionsServiceTest,
|
| + FetchSuggestionsDataSyncDisabled);
|
| FRIEND_TEST_ALL_PREFIXES(SuggestionsServiceTest,
|
| FetchSuggestionsDataNoAccessToken);
|
| FRIEND_TEST_ALL_PREFIXES(SuggestionsServiceTest,
|
| @@ -131,6 +139,9 @@ class SuggestionsService : public KeyedService, public net::URLFetcherDelegate {
|
| static GURL BuildSuggestionsBlacklistURL(const GURL& candidate_url);
|
| static GURL BuildSuggestionsBlacklistClearURL();
|
|
|
| + // sync_driver::SyncServiceObserver implementation.
|
| + void OnStateChanged() override;
|
| +
|
| // Sets default timestamp for suggestions which do not have expiry timestamp.
|
| void SetDefaultExpiryTimestamp(SuggestionsProfile* suggestions,
|
| int64_t timestamp_usec);
|
| @@ -159,10 +170,6 @@ class SuggestionsService : public KeyedService, public net::URLFetcherDelegate {
|
| // KeyedService implementation.
|
| void Shutdown() override;
|
|
|
| - // Loads the cached suggestions (or empty suggestions if no cache), applies
|
| - // the local blacklist, then calls the |callback|.
|
| - void ServeFromCache(const ResponseCallback& callback);
|
| -
|
| // Schedules a blacklisting request if the local blacklist isn't empty.
|
| void ScheduleBlacklistUpload();
|
|
|
| @@ -183,6 +190,10 @@ class SuggestionsService : public KeyedService, public net::URLFetcherDelegate {
|
|
|
| base::ThreadChecker thread_checker_;
|
|
|
| + sync_driver::SyncService* sync_service_;
|
| + ScopedObserver<sync_driver::SyncService, sync_driver::SyncServiceObserver>
|
| + sync_service_observer_;
|
| +
|
| net::URLRequestContextGetter* url_request_context_;
|
|
|
| // The cache for the suggestions.
|
| @@ -210,6 +221,8 @@ class SuggestionsService : public KeyedService, public net::URLFetcherDelegate {
|
| // the latency of requests. Initially zero.
|
| base::TimeTicks last_request_started_time_;
|
|
|
| + ResponseCallbackList callback_list_;
|
| +
|
| // For callbacks may be run after destruction.
|
| base::WeakPtrFactory<SuggestionsService> weak_ptr_factory_;
|
|
|
|
|