| Index: components/ntp_snippets/remote/scheduling_remote_suggestions_provider.cc
|
| diff --git a/components/ntp_snippets/remote/scheduling_remote_suggestions_provider.cc b/components/ntp_snippets/remote/scheduling_remote_suggestions_provider.cc
|
| index 7b9091800da96dc48a921813fbb6e387af64bd7a..346dd6439f9535c8518eb0fb55865d1e9acac91e 100644
|
| --- a/components/ntp_snippets/remote/scheduling_remote_suggestions_provider.cc
|
| +++ b/components/ntp_snippets/remote/scheduling_remote_suggestions_provider.cc
|
| @@ -186,6 +186,18 @@ SchedulingRemoteSuggestionsProvider::SchedulingRemoteSuggestionsProvider(
|
| persistent_scheduler_(persistent_scheduler),
|
| background_fetch_in_progress_(false),
|
| user_classifier_(user_classifier),
|
| + request_throttler_rare_ntp_user_(
|
| + pref_service,
|
| + RequestThrottler::RequestType::
|
| + CONTENT_SUGGESTION_FETCHER_RARE_NTP_USER),
|
| + request_throttler_active_ntp_user_(
|
| + pref_service,
|
| + RequestThrottler::RequestType::
|
| + CONTENT_SUGGESTION_FETCHER_ACTIVE_NTP_USER),
|
| + request_throttler_active_suggestions_consumer_(
|
| + pref_service,
|
| + RequestThrottler::RequestType::
|
| + CONTENT_SUGGESTION_FETCHER_ACTIVE_SUGGESTIONS_CONSUMER),
|
| pref_service_(pref_service),
|
| clock_(std::move(clock)),
|
| enabled_triggers_(GetEnabledTriggerTypes()) {
|
| @@ -284,6 +296,14 @@ void SchedulingRemoteSuggestionsProvider::RefetchInTheBackground(
|
| return;
|
| }
|
|
|
| + if (!AcquireQuota(/*interactive_request=*/false)) {
|
| + if (callback) {
|
| + callback->Run(Status(StatusCode::TEMPORARY_ERROR,
|
| + "Non-interactive quota exceeded"));
|
| + }
|
| + return;
|
| + }
|
| +
|
| background_fetch_in_progress_ = true;
|
| RemoteSuggestionsProvider::FetchStatusCallback wrapper_callback = base::Bind(
|
| &SchedulingRemoteSuggestionsProvider::RefetchInTheBackgroundFinished,
|
| @@ -323,6 +343,15 @@ void SchedulingRemoteSuggestionsProvider::Fetch(
|
| const Category& category,
|
| const std::set<std::string>& known_suggestion_ids,
|
| const FetchDoneCallback& callback) {
|
| + if (!AcquireQuota(/*interactive_request=*/true)) {
|
| + if (callback) {
|
| + callback.Run(
|
| + Status(StatusCode::TEMPORARY_ERROR, "Interactive quota exceeded"),
|
| + std::vector<ContentSuggestion>());
|
| + }
|
| + return;
|
| + }
|
| +
|
| provider_->Fetch(
|
| category, known_suggestion_ids,
|
| base::Bind(&SchedulingRemoteSuggestionsProvider::FetchFinished,
|
| @@ -330,6 +359,10 @@ void SchedulingRemoteSuggestionsProvider::Fetch(
|
| }
|
|
|
| void SchedulingRemoteSuggestionsProvider::ReloadSuggestions() {
|
| + if (!AcquireQuota(/*interactive_request=*/true)) {
|
| + return;
|
| + }
|
| +
|
| provider_->ReloadSuggestions();
|
| }
|
|
|
| @@ -490,6 +523,23 @@ bool SchedulingRemoteSuggestionsProvider::BackgroundFetchesDisabled(
|
| return false;
|
| }
|
|
|
| +bool SchedulingRemoteSuggestionsProvider::AcquireQuota(
|
| + bool interactive_request) {
|
| + switch (user_classifier_->GetUserClass()) {
|
| + case UserClassifier::UserClass::RARE_NTP_USER:
|
| + return request_throttler_rare_ntp_user_.DemandQuotaForRequest(
|
| + interactive_request);
|
| + case UserClassifier::UserClass::ACTIVE_NTP_USER:
|
| + return request_throttler_active_ntp_user_.DemandQuotaForRequest(
|
| + interactive_request);
|
| + case UserClassifier::UserClass::ACTIVE_SUGGESTIONS_CONSUMER:
|
| + return request_throttler_active_suggestions_consumer_
|
| + .DemandQuotaForRequest(interactive_request);
|
| + }
|
| + NOTREACHED();
|
| + return false;
|
| +}
|
| +
|
| void SchedulingRemoteSuggestionsProvider::FetchFinished(
|
| const FetchDoneCallback& callback,
|
| Status fetch_status,
|
|
|