Index: components/ntp_snippets/remote/remote_suggestions_provider_impl.h |
diff --git a/components/ntp_snippets/remote/remote_suggestions_provider_impl.h b/components/ntp_snippets/remote/remote_suggestions_provider_impl.h |
index 5fc9f77a9ebd8ccfe401e24fdeb321d0a2522c32..ecd1566b2b3d0478296cd25c2468c382a55e368a 100644 |
--- a/components/ntp_snippets/remote/remote_suggestions_provider_impl.h |
+++ b/components/ntp_snippets/remote/remote_suggestions_provider_impl.h |
@@ -47,6 +47,7 @@ namespace ntp_snippets { |
class CategoryRanker; |
class RemoteSuggestionsDatabase; |
+class RemoteSuggestionsScheduler; |
// CachedImageFetcher takes care of fetching images from the network and caching |
// them in the database. |
@@ -136,9 +137,13 @@ class RemoteSuggestionsProviderImpl final : public RemoteSuggestionsProvider { |
// false, some calls may trigger DCHECKs. |
bool initialized() const { return ready() || state_ == State::DISABLED; } |
+ // Set the scheduler to be notified whenever the provider becomes active / |
+ // in-active and whenever history is deleted. The initial change is also |
+ // notified (switching from an initial undecided status). If the scheduler is |
+ // set after the first change, it is called back immediately. |
+ void SetRemoteSuggestionsScheduler(RemoteSuggestionsScheduler* scheduler); |
+ |
// RemoteSuggestionsProvider implementation. |
- void SetProviderStatusCallback( |
- std::unique_ptr<ProviderStatusCallback> callback) override; |
void RefetchInTheBackground( |
std::unique_ptr<FetchStatusCallback> callback) override; |
@@ -196,21 +201,19 @@ class RemoteSuggestionsProviderImpl final : public RemoteSuggestionsProvider { |
private: |
friend class RemoteSuggestionsProviderImplTest; |
+ // TODO(jkrcal): Mock the database to trigger the error naturally (or remove |
+ // the error state and get rid of the test). |
FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsProviderImplTest, |
- CallsProviderStatusCallbackWhenReady); |
- FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsProviderImplTest, |
- CallsProviderStatusCallbackOnError); |
- FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsProviderImplTest, |
- CallsProviderStatusCallbackWhenDisabled); |
+ CallsSchedulerOnError); |
+ // TODO(jkrcal): Mock the status service and remove these friend declarations. |
FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsProviderImplTest, |
- ShouldNotCrashWhenCallingEmptyCallback); |
+ CallsSchedulerWhenDisabled); |
FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsProviderImplTest, |
DontNotifyIfNotAvailable); |
FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsProviderImplTest, |
- RemoveExpiredDismissedContent); |
- FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsProviderImplTest, StatusChanges); |
+ CallsSchedulerWhenSignedIn); |
FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsProviderImplTest, |
- SuggestionsFetchedOnSignInAndSignOut); |
+ CallsSchedulerWhenSignedOut); |
// Possible state transitions: |
// NOT_INITED --------+ |
@@ -220,6 +223,8 @@ class RemoteSuggestionsProviderImpl final : public RemoteSuggestionsProvider { |
// \ / | |
// v v | |
// ERROR_OCCURRED <-----+ |
+ // TODO(jkrcal): Do we need to keep the distinction between states DISABLED |
+ // and ERROR_OCCURED? |
enum class State { |
// The service has just been created. Can change to states: |
// - DISABLED: After the database is done loading, |
@@ -352,6 +357,13 @@ class RemoteSuggestionsProviderImpl final : public RemoteSuggestionsProvider { |
// the file system. |
void ClearOrphanedImages(); |
+ // Clears suggestions because any history item has been removed. |
+ void ClearHistoryDependentState(); |
+ |
+ // Clears suggestions for any non-history related reason (e.g., sign-in status |
+ // change, etc.). |
+ void ClearSuggestions(); |
+ |
// Clears all stored suggestions and updates the observer. |
void NukeAllSuggestions(); |
@@ -442,12 +454,12 @@ class RemoteSuggestionsProviderImpl final : public RemoteSuggestionsProvider { |
bool fetch_when_ready_interactive_; |
std::unique_ptr<FetchStatusCallback> fetch_when_ready_callback_; |
- std::unique_ptr<ProviderStatusCallback> provider_status_callback_; |
+ RemoteSuggestionsScheduler* remote_suggestions_scheduler_; |
- // Set to true if NukeAllSuggestions is called while the service isn't ready. |
- // The nuke will be executed once the service finishes initialization or |
- // enters the READY state. |
- bool nuke_when_initialized_; |
+ // Set to true if ClearHistoryDependentState is called while the service isn't |
+ // ready. The nuke will be executed once the service finishes initialization |
+ // or enters the READY state. |
+ bool clear_history_dependent_state_when_initialized_; |
// A clock for getting the time. This allows to inject a clock in tests. |
std::unique_ptr<base::Clock> clock_; |