| 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
|
|
|