| Index: components/ntp_snippets/remote/remote_suggestions_provider_impl.h
|
| diff --git a/components/ntp_snippets/remote/remote_suggestions_provider.h b/components/ntp_snippets/remote/remote_suggestions_provider_impl.h
|
| similarity index 87%
|
| copy from components/ntp_snippets/remote/remote_suggestions_provider.h
|
| copy to components/ntp_snippets/remote/remote_suggestions_provider_impl.h
|
| index e743b42951a75c8322bf0bcf98ac7a4fd16d3fbb..9301dd83cdf8e776b9117a3f0cb0affba4f75011 100644
|
| --- a/components/ntp_snippets/remote/remote_suggestions_provider.h
|
| +++ b/components/ntp_snippets/remote/remote_suggestions_provider_impl.h
|
| @@ -2,8 +2,8 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#ifndef COMPONENTS_NTP_SNIPPETS_REMOTE_REMOTE_SUGGESTIONS_PROVIDER_H_
|
| -#define COMPONENTS_NTP_SNIPPETS_REMOTE_REMOTE_SUGGESTIONS_PROVIDER_H_
|
| +#ifndef COMPONENTS_NTP_SNIPPETS_REMOTE_REMOTE_SUGGESTIONS_PROVIDER_IMPL_H_
|
| +#define COMPONENTS_NTP_SNIPPETS_REMOTE_REMOTE_SUGGESTIONS_PROVIDER_IMPL_H_
|
|
|
| #include <cstddef>
|
| #include <deque>
|
| @@ -27,7 +27,7 @@
|
| #include "components/ntp_snippets/remote/ntp_snippet.h"
|
| #include "components/ntp_snippets/remote/ntp_snippets_fetcher.h"
|
| #include "components/ntp_snippets/remote/ntp_snippets_request_params.h"
|
| -#include "components/ntp_snippets/remote/ntp_snippets_scheduler.h"
|
| +#include "components/ntp_snippets/remote/remote_suggestions_provider.h"
|
| #include "components/ntp_snippets/remote/remote_suggestions_status_service.h"
|
| #include "components/ntp_snippets/remote/request_throttler.h"
|
|
|
| @@ -45,9 +45,8 @@ class ImageFetcher;
|
|
|
| namespace ntp_snippets {
|
|
|
| -class RemoteSuggestionsDatabase;
|
| class CategoryRanker;
|
| -class UserClassifier;
|
| +class RemoteSuggestionsDatabase;
|
|
|
| // CachedImageFetcher takes care of fetching images from the network and caching
|
| // them in the database.
|
| @@ -107,26 +106,24 @@ class CachedImageFetcher : public image_fetcher::ImageFetcherDelegate {
|
| // This class is final because it does things in its constructor which make it
|
| // unsafe to derive from it.
|
| // TODO(treib): Introduce two-phase initialization and make the class not final?
|
| -class RemoteSuggestionsProvider final : public ContentSuggestionsProvider {
|
| +class RemoteSuggestionsProviderImpl final : public RemoteSuggestionsProvider {
|
| public:
|
| // |application_language_code| should be a ISO 639-1 compliant string, e.g.
|
| // 'en' or 'en-US'. Note that this code should only specify the language, not
|
| // the locale, so 'en_US' (English language with US locale) and 'en-GB_US'
|
| // (British English person in the US) are not language codes.
|
| - RemoteSuggestionsProvider(
|
| + RemoteSuggestionsProviderImpl(
|
| Observer* observer,
|
| PrefService* pref_service,
|
| const std::string& application_language_code,
|
| CategoryRanker* category_ranker,
|
| - const UserClassifier* user_classifier,
|
| - NTPSnippetsScheduler* scheduler,
|
| std::unique_ptr<NTPSnippetsFetcher> snippets_fetcher,
|
| std::unique_ptr<image_fetcher::ImageFetcher> image_fetcher,
|
| std::unique_ptr<image_fetcher::ImageDecoder> image_decoder,
|
| std::unique_ptr<RemoteSuggestionsDatabase> database,
|
| std::unique_ptr<RemoteSuggestionsStatusService> status_service);
|
|
|
| - ~RemoteSuggestionsProvider() override;
|
| + ~RemoteSuggestionsProviderImpl() override;
|
|
|
| static void RegisterProfilePrefs(PrefRegistrySimple* registry);
|
|
|
| @@ -135,33 +132,22 @@ class RemoteSuggestionsProvider final : public ContentSuggestionsProvider {
|
| // will be ignored.
|
| bool ready() const { return state_ == State::READY; }
|
|
|
| - // Returns whether the service is initialized. While this is false, some
|
| - // calls may trigger DCHECKs.
|
| + // Returns whether the service is successfully initialized. While this is
|
| + // false, some calls may trigger DCHECKs.
|
| bool initialized() const { return ready() || state_ == State::DISABLED; }
|
|
|
| - // Fetchs content suggestions from the Content Suggestions server for all
|
| - // remote categories in the background.
|
| - void FetchSnippetsInTheBackground();
|
| -
|
| - // Fetchs content suggestions from the Content Suggestions server for all
|
| - // remote categories. The request to the server is performed as an interactive
|
| - // request. Interactive requests are used for actions triggered by the user
|
| - // and request lower latency processing.
|
| - void FetchSnippetsForAllCategories();
|
| + // RemoteSuggestionsProvider implementation.
|
| + void SetProviderStatusCallback(
|
| + std::unique_ptr<ProviderStatusCallback> callback) override;
|
| + void RefetchInTheBackground(
|
| + std::unique_ptr<FetchStatusCallback> callback) override;
|
|
|
| - // Only used in tests and for debugging in snippets-internal/.
|
| // TODO(fhorschig): Remove this getter when there is an interface for the
|
| // fetcher that allows better mocks.
|
| - const NTPSnippetsFetcher* snippets_fetcher() const {
|
| - return snippets_fetcher_.get();
|
| - }
|
| -
|
| - // (Re)schedules the periodic fetching of snippets. If |force| is true, the
|
| - // tasks will be re-scheduled even if they already exist and have the correct
|
| - // periods.
|
| - void RescheduleFetching(bool force);
|
| + const NTPSnippetsFetcher* snippets_fetcher_for_testing_and_debugging()
|
| + const override;
|
|
|
| - // ContentSuggestionsProvider implementation
|
| + // ContentSuggestionsProvider implementation.
|
| CategoryStatus GetCategoryStatus(Category category) override;
|
| CategoryInfo GetCategoryInfo(Category category) override;
|
| void DismissSuggestion(const ContentSuggestion::ID& suggestion_id) override;
|
| @@ -170,6 +156,7 @@ class RemoteSuggestionsProvider final : public ContentSuggestionsProvider {
|
| void Fetch(const Category& category,
|
| const std::set<std::string>& known_suggestion_ids,
|
| const FetchDoneCallback& callback) override;
|
| + void ReloadSuggestions() override;
|
| void ClearHistory(
|
| base::Time begin,
|
| base::Time end,
|
| @@ -206,16 +193,22 @@ class RemoteSuggestionsProvider final : public ContentSuggestionsProvider {
|
| CachedImageFetcher& GetImageFetcherForTesting() { return image_fetcher_; }
|
|
|
| private:
|
| - friend class RemoteSuggestionsProviderTest;
|
| -
|
| - FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsProviderTest,
|
| + friend class RemoteSuggestionsProviderImplTest;
|
| +
|
| + FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsProviderImplTest,
|
| + CallsProviderStatusCallbackWhenReady);
|
| + FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsProviderImplTest,
|
| + CallsProviderStatusCallbackOnError);
|
| + FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsProviderImplTest,
|
| + CallsProviderStatusCallbackWhenDisabled);
|
| + FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsProviderImplTest,
|
| + ShouldNotCrashWhenCallingEmptyCallback);
|
| + FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsProviderImplTest,
|
| DontNotifyIfNotAvailable);
|
| - FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsProviderTest,
|
| + FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsProviderImplTest,
|
| RemoveExpiredDismissedContent);
|
| - FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsProviderTest,
|
| - RescheduleOnStateChange);
|
| - FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsProviderTest, StatusChanges);
|
| - FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsProviderTest,
|
| + FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsProviderImplTest, StatusChanges);
|
| + FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsProviderImplTest,
|
| SuggestionsFetchedOnSignInAndSignOut);
|
|
|
| // Possible state transitions:
|
| @@ -296,8 +289,10 @@ class RemoteSuggestionsProvider final : public ContentSuggestionsProvider {
|
| // Fetches snippets from the server and replaces old snippets by the new ones.
|
| // Requests can be marked more important by setting |interactive_request| to
|
| // true (such request might circumvent the daily quota for requests, etc.)
|
| - // Useful for requests triggered by the user.
|
| - void FetchSnippets(bool interactive_request);
|
| + // Useful for requests triggered by the user. After the fetch finished, the
|
| + // provided |callback| will be triggered with the status of the fetch.
|
| + void FetchSnippets(bool interactive_request,
|
| + std::unique_ptr<FetchStatusCallback> callback);
|
|
|
| // Returns the URL of the image of a snippet if it is among the current or
|
| // among the archived snippets in the matching category. Returns an empty URL
|
| @@ -316,6 +311,7 @@ class RemoteSuggestionsProvider final : public ContentSuggestionsProvider {
|
|
|
| // Callback for regular fetch requests with the NTPSnippetsFetcher.
|
| void OnFetchFinished(
|
| + std::unique_ptr<FetchStatusCallback> callback,
|
| bool interactive_request,
|
| Status status,
|
| NTPSnippetsFetcher::OptionalFetchedCategories fetched_categories);
|
| @@ -368,6 +364,10 @@ class RemoteSuggestionsProvider final : public ContentSuggestionsProvider {
|
| // status if called with the current state.
|
| void EnterState(State state);
|
|
|
| + // Notifies the state change to ProviderStatusCallback specified by
|
| + // SetProviderStatusCallback().
|
| + void NotifyStateChanged();
|
| +
|
| // Enables the service. Do not call directly, use |EnterState| instead.
|
| void EnterStateReady();
|
|
|
| @@ -415,12 +415,6 @@ class RemoteSuggestionsProvider final : public ContentSuggestionsProvider {
|
| // Ranker that orders the categories. Not owned.
|
| CategoryRanker* category_ranker_;
|
|
|
| - // Classifier that tells us how active the user is. Not owned.
|
| - const UserClassifier* user_classifier_;
|
| -
|
| - // Scheduler for fetching snippets. Not owned.
|
| - NTPSnippetsScheduler* scheduler_;
|
| -
|
| // The snippets fetcher.
|
| std::unique_ptr<NTPSnippetsFetcher> snippets_fetcher_;
|
|
|
| @@ -436,8 +430,15 @@ class RemoteSuggestionsProvider final : public ContentSuggestionsProvider {
|
|
|
| // Set to true if FetchSnippets is called while the service isn't ready.
|
| // The fetch will be executed once the service enters the READY state.
|
| + // TODO(jkrcal): create a struct and have here just one base::Optional<>?
|
| bool fetch_when_ready_;
|
|
|
| + // The parameters for the fetch to perform later.
|
| + bool fetch_when_ready_interactive_;
|
| + std::unique_ptr<FetchStatusCallback> fetch_when_ready_callback_;
|
| +
|
| + std::unique_ptr<ProviderStatusCallback> provider_status_callback_;
|
| +
|
| // Set to true if NukeAllSnippets is called while the service isn't ready.
|
| // The nuke will be executed once the service finishes initialization or
|
| // enters the READY state.
|
| @@ -446,9 +447,9 @@ class RemoteSuggestionsProvider final : public ContentSuggestionsProvider {
|
| // A clock for getting the time. This allows to inject a clock in tests.
|
| std::unique_ptr<base::Clock> clock_;
|
|
|
| - DISALLOW_COPY_AND_ASSIGN(RemoteSuggestionsProvider);
|
| + DISALLOW_COPY_AND_ASSIGN(RemoteSuggestionsProviderImpl);
|
| };
|
|
|
| } // namespace ntp_snippets
|
|
|
| -#endif // COMPONENTS_NTP_SNIPPETS_REMOTE_REMOTE_SUGGESTIONS_PROVIDER_H_
|
| +#endif // COMPONENTS_NTP_SNIPPETS_REMOTE_REMOTE_SUGGESTIONS_PROVIDER_IMPL_H_
|
|
|