Index: components/ntp_snippets/remote/ntp_snippets_fetcher.cc |
diff --git a/components/ntp_snippets/remote/ntp_snippets_fetcher.cc b/components/ntp_snippets/remote/ntp_snippets_fetcher.cc |
index 87f5a361d3c7a1e92afa7679e6920552dcd3144a..c677ffdc5129ff04e5b43e957c7d2ae117fb9ad9 100644 |
--- a/components/ntp_snippets/remote/ntp_snippets_fetcher.cc |
+++ b/components/ntp_snippets/remote/ntp_snippets_fetcher.cc |
@@ -23,6 +23,7 @@ |
#include "components/data_use_measurement/core/data_use_user_data.h" |
#include "components/ntp_snippets/category_factory.h" |
#include "components/ntp_snippets/ntp_snippets_constants.h" |
+#include "components/ntp_snippets/user_classifier.h" |
#include "components/signin/core/browser/profile_oauth2_token_service.h" |
#include "components/signin/core/browser/signin_manager.h" |
#include "components/signin/core/browser/signin_manager_base.h" |
@@ -168,6 +169,19 @@ std::string PosixLocaleFromBCP47Language(const std::string& language_code) { |
return locale; |
} |
+std::string GetUserClassString(UserClassifier::UserClass user_class) { |
+ switch (user_class) { |
+ case UserClassifier::UserClass::RARE_NTP_USER: |
+ return "RARE_NTP_USER"; |
+ case UserClassifier::UserClass::ACTIVE_NTP_USER: |
+ return "ACTIVE_NTP_USER"; |
+ case UserClassifier::UserClass::ACTIVE_SUGGESTIONS_CONSUMER: |
+ return "ACTIVE_SUGGESTIONS_CONSUMER"; |
+ } |
+ NOTREACHED(); |
+ return std::string(); |
+} |
+ |
} // namespace |
NTPSnippetsFetcher::FetchedCategory::FetchedCategory(Category c) |
@@ -186,7 +200,8 @@ NTPSnippetsFetcher::NTPSnippetsFetcher( |
PrefService* pref_service, |
CategoryFactory* category_factory, |
const ParseJSONCallback& parse_json_callback, |
- const std::string& api_key) |
+ const std::string& api_key, |
+ const UserClassifier* user_classifier) |
: OAuth2TokenService::Consumer("ntp_snippets"), |
signin_manager_(signin_manager), |
token_service_(token_service), |
@@ -202,9 +217,19 @@ NTPSnippetsFetcher::NTPSnippetsFetcher( |
api_key_(api_key), |
interactive_request_(false), |
tick_clock_(new base::DefaultTickClock()), |
- request_throttler_( |
+ 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), |
+ RequestThrottler::RequestType:: |
+ CONTENT_SUGGESTION_FETCHER_ACTIVE_SUGGESTIONS_CONSUMER), |
oauth_token_retried_(false), |
weak_ptr_factory_(this) { |
// Parse the variation parameters and set the defaults if missing. |
@@ -239,7 +264,7 @@ void NTPSnippetsFetcher::FetchSnippetsFromHosts( |
const std::set<std::string>& excluded_ids, |
int count, |
bool interactive_request) { |
- if (!request_throttler_.DemandQuotaForRequest(interactive_request)) { |
+ if (!DemandQuotaForRequest(interactive_request)) { |
FetchFinished(OptionalFetchedCategories(), |
interactive_request |
? FetchResult::INTERACTIVE_QUOTA_ERROR |
@@ -283,7 +308,8 @@ NTPSnippetsFetcher::RequestParams::RequestParams() |
user_locale(), |
host_restricts(), |
count_to_fetch(), |
- interactive_request() {} |
+ interactive_request(), |
+ user_class() {} |
NTPSnippetsFetcher::RequestParams::~RequestParams() = default; |
@@ -358,6 +384,7 @@ std::string NTPSnippetsFetcher::RequestParams::BuildRequest() { |
break; |
} |
request->Set("excludedSuggestionIds", std::move(excluded)); |
+ request->SetString("user_activeness_class", user_class); |
// TODO(sfiera): support authentication and personalization |
// TODO(sfiera): support count_to_fetch |
@@ -439,6 +466,7 @@ void NTPSnippetsFetcher::FetchSnippetsAuthenticated( |
params.excluded_ids = excluded_ids_; |
params.count_to_fetch = count_to_fetch_; |
params.interactive_request = interactive_request_; |
+ params.user_class = GetUserClassString(user_classifier_->GetUserClass()); |
// TODO(jkrcal, treib): Add unit-tests for authenticated fetches. |
FetchSnippetsImpl(fetch_url_, |
base::StringPrintf(kAuthorizationRequestHeaderFormat, |
@@ -642,4 +670,20 @@ void NTPSnippetsFetcher::FetchFinished( |
snippets_available_callback_.Run(std::move(fetched_categories)); |
} |
+bool NTPSnippetsFetcher::DemandQuotaForRequest(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; |
+} |
+ |
} // namespace ntp_snippets |