Chromium Code Reviews| 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..3531e469b7c12b16fc47c541ab396123e1b8d4da 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,7 +430,13 @@ 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. |
|
Bernhard Bauer
2016/12/21 10:38:42
Nit: empty line before comments plz :)
jkrcal
2016/12/21 11:54:40
Done.
|
| + 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 |
| @@ -446,9 +446,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_ |