Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(39)

Side by Side Diff: components/ntp_snippets/remote/scheduling_remote_suggestions_provider.cc

Issue 2714863004: [Remote suggestions] Move the throttler into the Scheduler (Closed)
Patch Set: Ilya's comment Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/ntp_snippets/remote/scheduling_remote_suggestions_provider. h" 5 #include "components/ntp_snippets/remote/scheduling_remote_suggestions_provider. h"
6 6
7 #include <random> 7 #include <random>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 PersistentScheduler* persistent_scheduler, 179 PersistentScheduler* persistent_scheduler,
180 const UserClassifier* user_classifier, 180 const UserClassifier* user_classifier,
181 PrefService* pref_service, 181 PrefService* pref_service,
182 std::unique_ptr<base::Clock> clock) 182 std::unique_ptr<base::Clock> clock)
183 : RemoteSuggestionsProvider(observer), 183 : RemoteSuggestionsProvider(observer),
184 RemoteSuggestionsScheduler(), 184 RemoteSuggestionsScheduler(),
185 provider_(std::move(provider)), 185 provider_(std::move(provider)),
186 persistent_scheduler_(persistent_scheduler), 186 persistent_scheduler_(persistent_scheduler),
187 background_fetch_in_progress_(false), 187 background_fetch_in_progress_(false),
188 user_classifier_(user_classifier), 188 user_classifier_(user_classifier),
189 request_throttler_rare_ntp_user_(
190 pref_service,
191 RequestThrottler::RequestType::
192 CONTENT_SUGGESTION_FETCHER_RARE_NTP_USER),
193 request_throttler_active_ntp_user_(
194 pref_service,
195 RequestThrottler::RequestType::
196 CONTENT_SUGGESTION_FETCHER_ACTIVE_NTP_USER),
197 request_throttler_active_suggestions_consumer_(
198 pref_service,
199 RequestThrottler::RequestType::
200 CONTENT_SUGGESTION_FETCHER_ACTIVE_SUGGESTIONS_CONSUMER),
189 pref_service_(pref_service), 201 pref_service_(pref_service),
190 clock_(std::move(clock)), 202 clock_(std::move(clock)),
191 enabled_triggers_(GetEnabledTriggerTypes()) { 203 enabled_triggers_(GetEnabledTriggerTypes()) {
192 DCHECK(user_classifier); 204 DCHECK(user_classifier);
193 DCHECK(pref_service); 205 DCHECK(pref_service);
194 206
195 LoadLastFetchingSchedule(); 207 LoadLastFetchingSchedule();
196 } 208 }
197 209
198 SchedulingRemoteSuggestionsProvider::~SchedulingRemoteSuggestionsProvider() = 210 SchedulingRemoteSuggestionsProvider::~SchedulingRemoteSuggestionsProvider() =
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 void SchedulingRemoteSuggestionsProvider::RefetchInTheBackground( 288 void SchedulingRemoteSuggestionsProvider::RefetchInTheBackground(
277 std::unique_ptr<FetchStatusCallback> callback) { 289 std::unique_ptr<FetchStatusCallback> callback) {
278 if (background_fetch_in_progress_) { 290 if (background_fetch_in_progress_) {
279 if (callback) { 291 if (callback) {
280 callback->Run( 292 callback->Run(
281 Status(StatusCode::TEMPORARY_ERROR, "Background fetch in progress")); 293 Status(StatusCode::TEMPORARY_ERROR, "Background fetch in progress"));
282 } 294 }
283 return; 295 return;
284 } 296 }
285 297
298 if (!AcquireQuota(/*interactive_request=*/false)) {
299 if (callback) {
300 callback->Run(Status(StatusCode::TEMPORARY_ERROR,
301 "Non-interactive quota exceeded"));
302 }
303 return;
304 }
305
286 background_fetch_in_progress_ = true; 306 background_fetch_in_progress_ = true;
287 RemoteSuggestionsProvider::FetchStatusCallback wrapper_callback = base::Bind( 307 RemoteSuggestionsProvider::FetchStatusCallback wrapper_callback = base::Bind(
288 &SchedulingRemoteSuggestionsProvider::RefetchInTheBackgroundFinished, 308 &SchedulingRemoteSuggestionsProvider::RefetchInTheBackgroundFinished,
289 base::Unretained(this), base::Passed(&callback)); 309 base::Unretained(this), base::Passed(&callback));
290 provider_->RefetchInTheBackground( 310 provider_->RefetchInTheBackground(
291 base::MakeUnique<RemoteSuggestionsProvider::FetchStatusCallback>( 311 base::MakeUnique<RemoteSuggestionsProvider::FetchStatusCallback>(
292 std::move(wrapper_callback))); 312 std::move(wrapper_callback)));
293 } 313 }
294 314
295 const RemoteSuggestionsFetcher* 315 const RemoteSuggestionsFetcher*
(...skipping 19 matching lines...) Expand all
315 void SchedulingRemoteSuggestionsProvider::FetchSuggestionImage( 335 void SchedulingRemoteSuggestionsProvider::FetchSuggestionImage(
316 const ContentSuggestion::ID& suggestion_id, 336 const ContentSuggestion::ID& suggestion_id,
317 const ImageFetchedCallback& callback) { 337 const ImageFetchedCallback& callback) {
318 provider_->FetchSuggestionImage(suggestion_id, callback); 338 provider_->FetchSuggestionImage(suggestion_id, callback);
319 } 339 }
320 340
321 void SchedulingRemoteSuggestionsProvider::Fetch( 341 void SchedulingRemoteSuggestionsProvider::Fetch(
322 const Category& category, 342 const Category& category,
323 const std::set<std::string>& known_suggestion_ids, 343 const std::set<std::string>& known_suggestion_ids,
324 const FetchDoneCallback& callback) { 344 const FetchDoneCallback& callback) {
345 if (!AcquireQuota(/*interactive_request=*/true)) {
346 if (callback) {
347 callback.Run(
348 Status(StatusCode::TEMPORARY_ERROR, "Interactive quota exceeded"),
349 std::vector<ContentSuggestion>());
350 }
351 return;
352 }
353
325 provider_->Fetch( 354 provider_->Fetch(
326 category, known_suggestion_ids, 355 category, known_suggestion_ids,
327 base::Bind(&SchedulingRemoteSuggestionsProvider::FetchFinished, 356 base::Bind(&SchedulingRemoteSuggestionsProvider::FetchFinished,
328 base::Unretained(this), callback)); 357 base::Unretained(this), callback));
329 } 358 }
330 359
331 void SchedulingRemoteSuggestionsProvider::ReloadSuggestions() { 360 void SchedulingRemoteSuggestionsProvider::ReloadSuggestions() {
361 if (!AcquireQuota(/*interactive_request=*/true)) {
362 return;
363 }
364
332 provider_->ReloadSuggestions(); 365 provider_->ReloadSuggestions();
333 } 366 }
334 367
335 void SchedulingRemoteSuggestionsProvider::ClearHistory( 368 void SchedulingRemoteSuggestionsProvider::ClearHistory(
336 base::Time begin, 369 base::Time begin,
337 base::Time end, 370 base::Time end,
338 const base::Callback<bool(const GURL& url)>& filter) { 371 const base::Callback<bool(const GURL& url)>& filter) {
339 provider_->ClearHistory(begin, end, filter); 372 provider_->ClearHistory(begin, end, filter);
340 } 373 }
341 374
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 if (schedule_.is_empty()) { 515 if (schedule_.is_empty()) {
483 return true; // Background fetches are disabled in general. 516 return true; // Background fetches are disabled in general.
484 } 517 }
485 518
486 if (enabled_triggers_.count(trigger) == 0) { 519 if (enabled_triggers_.count(trigger) == 0) {
487 return true; // Background fetches for |trigger| are not enabled. 520 return true; // Background fetches for |trigger| are not enabled.
488 } 521 }
489 return false; 522 return false;
490 } 523 }
491 524
525 bool SchedulingRemoteSuggestionsProvider::AcquireQuota(
526 bool interactive_request) {
527 switch (user_classifier_->GetUserClass()) {
528 case UserClassifier::UserClass::RARE_NTP_USER:
529 return request_throttler_rare_ntp_user_.DemandQuotaForRequest(
530 interactive_request);
531 case UserClassifier::UserClass::ACTIVE_NTP_USER:
532 return request_throttler_active_ntp_user_.DemandQuotaForRequest(
533 interactive_request);
534 case UserClassifier::UserClass::ACTIVE_SUGGESTIONS_CONSUMER:
535 return request_throttler_active_suggestions_consumer_
536 .DemandQuotaForRequest(interactive_request);
537 }
538 NOTREACHED();
539 return false;
540 }
541
492 void SchedulingRemoteSuggestionsProvider::FetchFinished( 542 void SchedulingRemoteSuggestionsProvider::FetchFinished(
493 const FetchDoneCallback& callback, 543 const FetchDoneCallback& callback,
494 Status fetch_status, 544 Status fetch_status,
495 std::vector<ContentSuggestion> suggestions) { 545 std::vector<ContentSuggestion> suggestions) {
496 OnFetchCompleted(fetch_status); 546 OnFetchCompleted(fetch_status);
497 if (callback) { 547 if (callback) {
498 callback.Run(fetch_status, std::move(suggestions)); 548 callback.Run(fetch_status, std::move(suggestions));
499 } 549 }
500 } 550 }
501 551
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 return enabled_types; 617 return enabled_types;
568 } 618 }
569 619
570 std::set<SchedulingRemoteSuggestionsProvider::TriggerType> 620 std::set<SchedulingRemoteSuggestionsProvider::TriggerType>
571 SchedulingRemoteSuggestionsProvider::GetDefaultEnabledTriggerTypes() { 621 SchedulingRemoteSuggestionsProvider::GetDefaultEnabledTriggerTypes() {
572 return {TriggerType::PERSISTENT_SCHEDULER_WAKE_UP, TriggerType::NTP_OPENED, 622 return {TriggerType::PERSISTENT_SCHEDULER_WAKE_UP, TriggerType::NTP_OPENED,
573 TriggerType::BROWSER_FOREGROUNDED}; 623 TriggerType::BROWSER_FOREGROUNDED};
574 } 624 }
575 625
576 } // namespace ntp_snippets 626 } // namespace ntp_snippets
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698