| Index: components/ntp_snippets/remote/remote_suggestions_provider_impl.cc
|
| diff --git a/components/ntp_snippets/remote/remote_suggestions_provider_impl.cc b/components/ntp_snippets/remote/remote_suggestions_provider_impl.cc
|
| index 826efbfb0e8bda89ae01fe7c35f5e21ae047e4be..2308811b7f2ea99be15fcf5a98fa263867219de5 100644
|
| --- a/components/ntp_snippets/remote/remote_suggestions_provider_impl.cc
|
| +++ b/components/ntp_snippets/remote/remote_suggestions_provider_impl.cc
|
| @@ -256,6 +256,7 @@ RemoteSuggestionsProviderImpl::RemoteSuggestionsProviderImpl(
|
| PrefService* pref_service,
|
| const std::string& application_language_code,
|
| CategoryRanker* category_ranker,
|
| + RemoteSuggestionsScheduler* scheduler,
|
| std::unique_ptr<RemoteSuggestionsFetcher> suggestions_fetcher,
|
| std::unique_ptr<image_fetcher::ImageFetcher> image_fetcher,
|
| std::unique_ptr<RemoteSuggestionsDatabase> database,
|
| @@ -267,6 +268,7 @@ RemoteSuggestionsProviderImpl::RemoteSuggestionsProviderImpl(
|
| Category::FromKnownCategory(KnownCategories::ARTICLES)),
|
| application_language_code_(application_language_code),
|
| category_ranker_(category_ranker),
|
| + remote_suggestions_scheduler_(scheduler),
|
| suggestions_fetcher_(std::move(suggestions_fetcher)),
|
| database_(std::move(database)),
|
| image_fetcher_(std::move(image_fetcher), pref_service, database_.get()),
|
| @@ -274,7 +276,6 @@ RemoteSuggestionsProviderImpl::RemoteSuggestionsProviderImpl(
|
| fetch_when_ready_(false),
|
| fetch_when_ready_interactive_(false),
|
| fetch_when_ready_callback_(nullptr),
|
| - remote_suggestions_scheduler_(nullptr),
|
| clear_history_dependent_state_when_initialized_(false),
|
| clock_(base::MakeUnique<base::DefaultClock>()) {
|
| RestoreCategoriesFromPrefs();
|
| @@ -316,14 +317,10 @@ void RemoteSuggestionsProviderImpl::RegisterProfilePrefs(
|
| RemoteSuggestionsStatusService::RegisterProfilePrefs(registry);
|
| }
|
|
|
| -void RemoteSuggestionsProviderImpl::SetRemoteSuggestionsScheduler(
|
| - RemoteSuggestionsScheduler* scheduler) {
|
| - remote_suggestions_scheduler_ = scheduler;
|
| - // Call the observer right away if we've reached any final state.
|
| - NotifyStateChanged();
|
| -}
|
| -
|
| void RemoteSuggestionsProviderImpl::ReloadSuggestions() {
|
| + if (!remote_suggestions_scheduler_->AcquireQuotaForInteractiveFetch()) {
|
| + return;
|
| + }
|
| FetchSuggestions(/*interactive_request=*/true,
|
| /*callback=*/nullptr);
|
| }
|
| @@ -368,6 +365,11 @@ void RemoteSuggestionsProviderImpl::Fetch(
|
| "RemoteSuggestionsProvider is not ready!"));
|
| return;
|
| }
|
| + if (!remote_suggestions_scheduler_->AcquireQuotaForInteractiveFetch()) {
|
| + CallWithEmptyResults(callback, Status(StatusCode::TEMPORARY_ERROR,
|
| + "Interactive quota exceeded!"));
|
| + return;
|
| + }
|
| RequestParams params = BuildFetchParams();
|
| params.excluded_ids.insert(known_suggestion_ids.begin(),
|
| known_suggestion_ids.end());
|
| @@ -643,6 +645,7 @@ void RemoteSuggestionsProviderImpl::OnFetchMoreFinished(
|
| // status?
|
| UpdateCategoryStatus(category, CategoryStatus::AVAILABLE);
|
| // Notify callers and observers.
|
| + remote_suggestions_scheduler_->OnInteractiveFetchFinished(status);
|
| fetching_callback.Run(Status::Success(), std::move(result));
|
| NotifyNewSuggestions(category, *existing_content);
|
| }
|
| @@ -727,6 +730,10 @@ void RemoteSuggestionsProviderImpl::OnFetchFinished(
|
| content.dismissed.size());
|
| }
|
|
|
| + if (interactive_request) {
|
| + remote_suggestions_scheduler_->OnInteractiveFetchFinished(status);
|
| + }
|
| +
|
| if (callback) {
|
| callback->Run(status);
|
| }
|
| @@ -872,18 +879,14 @@ void RemoteSuggestionsProviderImpl::ClearHistoryDependentState() {
|
| }
|
|
|
| NukeAllSuggestions();
|
| - if (remote_suggestions_scheduler_) {
|
| - remote_suggestions_scheduler_->OnHistoryCleared();
|
| - }
|
| + remote_suggestions_scheduler_->OnHistoryCleared();
|
| }
|
|
|
| void RemoteSuggestionsProviderImpl::ClearSuggestions() {
|
| DCHECK(initialized());
|
|
|
| NukeAllSuggestions();
|
| - if (remote_suggestions_scheduler_) {
|
| - remote_suggestions_scheduler_->OnSuggestionsCleared();
|
| - }
|
| + remote_suggestions_scheduler_->OnSuggestionsCleared();
|
| }
|
|
|
| void RemoteSuggestionsProviderImpl::NukeAllSuggestions() {
|
| @@ -1070,10 +1073,6 @@ void RemoteSuggestionsProviderImpl::EnterState(State state) {
|
| }
|
|
|
| void RemoteSuggestionsProviderImpl::NotifyStateChanged() {
|
| - if (!remote_suggestions_scheduler_) {
|
| - return;
|
| - }
|
| -
|
| switch (state_) {
|
| case State::NOT_INITED:
|
| // Initial state, not sure yet whether active or not.
|
|
|