| 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 b447572fe8b65433991268f54ec99c0a0593be8e..6d7123b5489fc57aaed9aae2e36dded7b943e1cd 100644
|
| --- a/components/ntp_snippets/remote/ntp_snippets_fetcher.cc
|
| +++ b/components/ntp_snippets/remote/ntp_snippets_fetcher.cc
|
| @@ -24,6 +24,7 @@
|
| #include "components/ntp_snippets/category_factory.h"
|
| #include "components/ntp_snippets/ntp_snippets_constants.h"
|
| #include "components/ntp_snippets/switches.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"
|
| @@ -173,6 +174,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)
|
| @@ -191,7 +205,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),
|
| @@ -207,9 +222,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.
|
| @@ -256,7 +281,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(OptionalSnippets(),
|
| interactive_request
|
| ? FetchResult::INTERACTIVE_QUOTA_ERROR
|
| @@ -306,7 +331,8 @@ NTPSnippetsFetcher::RequestParams::RequestParams()
|
| user_locale(),
|
| host_restricts(),
|
| count_to_fetch(),
|
| - interactive_request() {}
|
| + interactive_request(),
|
| + user_class() {}
|
|
|
| NTPSnippetsFetcher::RequestParams::~RequestParams() = default;
|
|
|
| @@ -381,6 +407,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
|
| @@ -453,6 +480,7 @@ void NTPSnippetsFetcher::FetchSnippetsNonAuthenticated() {
|
| params.count_to_fetch = count_to_fetch_;
|
| params.interactive_request = interactive_request_;
|
| params.user_locale = locale_;
|
| + params.user_class = GetUserClassString(user_classifier_->GetUserClass());
|
| FetchSnippetsImpl(url, std::string(), params.BuildRequest());
|
| }
|
|
|
| @@ -470,6 +498,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,
|
| @@ -670,4 +699,20 @@ void NTPSnippetsFetcher::FetchFinished(OptionalSnippets snippets,
|
| snippets_available_callback_.Run(std::move(snippets));
|
| }
|
|
|
| +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
|
|
|