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

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

Issue 2421463002: FetchMore functionality backend (Closed)
Patch Set: NTBR. Rebasing a lot. Created 4 years, 1 month 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/ntp_snippets_fetcher.h" 5 #include "components/ntp_snippets/remote/ntp_snippets_fetcher.h"
6 6
7 #include <cstdlib> 7 #include <cstdlib>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 << "Unknown value for " << kPersonalizationName << ": " 309 << "Unknown value for " << kPersonalizationName << ": "
310 << personalization; 310 << personalization;
311 } 311 }
312 } 312 }
313 313
314 NTPSnippetsFetcher::~NTPSnippetsFetcher() { 314 NTPSnippetsFetcher::~NTPSnippetsFetcher() {
315 if (waiting_for_refresh_token_) 315 if (waiting_for_refresh_token_)
316 token_service_->RemoveObserver(this); 316 token_service_->RemoveObserver(this);
317 } 317 }
318 318
319 void NTPSnippetsFetcher::SetCallback(
320 const SnippetsAvailableCallback& callback) {
321 snippets_available_callback_ = callback;
322 }
323
324 void NTPSnippetsFetcher::FetchSnippets(const Params& params) { 319 void NTPSnippetsFetcher::FetchSnippets(const Params& params) {
325 if (!DemandQuotaForRequest(params.interactive_request)) { 320 if (!DemandQuotaForRequest(params.interactive_request)) {
326 FetchFinished(OptionalFetchedCategories(), 321 FetchFinished(OptionalFetchedCategories(),
327 params.interactive_request 322 params.interactive_request
328 ? FetchResult::INTERACTIVE_QUOTA_ERROR 323 ? FetchResult::INTERACTIVE_QUOTA_ERROR
329 : FetchResult::NON_INTERACTIVE_QUOTA_ERROR, 324 : FetchResult::NON_INTERACTIVE_QUOTA_ERROR,
330 /*extra_message=*/std::string()); 325 /*extra_message=*/std::string());
331 return; 326 return;
332 } 327 }
333 328
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
731 } 726 }
732 727
733 void NTPSnippetsFetcher::OnJsonError(const std::string& error) { 728 void NTPSnippetsFetcher::OnJsonError(const std::string& error) {
734 LOG(WARNING) << "Received invalid JSON (" << error 729 LOG(WARNING) << "Received invalid JSON (" << error
735 << "): " << last_fetch_json_; 730 << "): " << last_fetch_json_;
736 FetchFinished( 731 FetchFinished(
737 OptionalFetchedCategories(), FetchResult::JSON_PARSE_ERROR, 732 OptionalFetchedCategories(), FetchResult::JSON_PARSE_ERROR,
738 /*extra_message=*/base::StringPrintf(" (error %s)", error.c_str())); 733 /*extra_message=*/base::StringPrintf(" (error %s)", error.c_str()));
739 } 734 }
740 735
736 void NTPSnippetsFetcher::FilterCategories(OptionalFetchedCategories* fetched)
737 const {
738 if (!fetched->has_value())
739 return;
740 if (!params_.exclusive_category.has_value())
741 return;
742 FetchedCategoriesVector* categories = &fetched->value();
743 Category exclusive = params_.exclusive_category.value();
744 auto category_it =
745 std::find_if(categories->begin(), categories->end(),
746 [exclusive](const FetchedCategory& c) -> bool {
747 return c.category == exclusive;
748 });
749 if (category_it == categories->end()) {
750 categories->clear();
751 return;
752 }
753 categories->erase(categories->begin(), category_it);
754 categories->erase(category_it + 1, categories->end());
755 }
756
741 void NTPSnippetsFetcher::FetchFinished( 757 void NTPSnippetsFetcher::FetchFinished(
742 OptionalFetchedCategories fetched_categories, 758 OptionalFetchedCategories fetched_categories,
743 FetchResult result, 759 FetchResult result,
744 const std::string& extra_message) { 760 const std::string& extra_message) {
745 DCHECK(result == FetchResult::SUCCESS || !fetched_categories); 761 DCHECK(result == FetchResult::SUCCESS || !fetched_categories);
746 last_status_ = FetchResultToString(result) + extra_message; 762 last_status_ = FetchResultToString(result) + extra_message;
747 763
764 // TODO(fhorschig): Filter unwanted categories by sending the exclusive
765 // category to the backend. As soon as backends support this, there is no
766 // reason to overfetch and filter here.
767 FilterCategories(&fetched_categories);
768
748 // Don't record FetchTimes if the result indicates that a precondition 769 // Don't record FetchTimes if the result indicates that a precondition
749 // failed and we never actually sent a network request 770 // failed and we never actually sent a network request
750 if (!IsFetchPreconditionFailed(result)) { 771 if (!IsFetchPreconditionFailed(result)) {
751 UMA_HISTOGRAM_TIMES("NewTabPage.Snippets.FetchTime", 772 UMA_HISTOGRAM_TIMES("NewTabPage.Snippets.FetchTime",
752 tick_clock_->NowTicks() - fetch_start_time_); 773 tick_clock_->NowTicks() - fetch_start_time_);
753 } 774 }
754 UMA_HISTOGRAM_ENUMERATION("NewTabPage.Snippets.FetchResult", 775 UMA_HISTOGRAM_ENUMERATION("NewTabPage.Snippets.FetchResult",
755 static_cast<int>(result), 776 static_cast<int>(result),
756 static_cast<int>(FetchResult::RESULT_MAX)); 777 static_cast<int>(FetchResult::RESULT_MAX));
757 778
758 DVLOG(1) << "Fetch finished: " << last_status_; 779 DVLOG(1) << "Fetch finished: " << last_status_;
759 if (!snippets_available_callback_.is_null()) 780 if (!params_.snippets_available_callback.is_null()) {
760 snippets_available_callback_.Run(std::move(fetched_categories)); 781 std::move(params_.snippets_available_callback).Run(
vitaliii 2016/11/01 23:29:57 Why do you need this external |std::move|?
fhorschig 2016/11/02 05:05:27 It's a "OnceCallback" that is consumed upon call:
782 std::move(fetched_categories));
783 }
761 } 784 }
762 785
763 bool NTPSnippetsFetcher::DemandQuotaForRequest(bool interactive_request) { 786 bool NTPSnippetsFetcher::DemandQuotaForRequest(bool interactive_request) {
764 switch (user_classifier_->GetUserClass()) { 787 switch (user_classifier_->GetUserClass()) {
765 case UserClassifier::UserClass::RARE_NTP_USER: 788 case UserClassifier::UserClass::RARE_NTP_USER:
766 return request_throttler_rare_ntp_user_.DemandQuotaForRequest( 789 return request_throttler_rare_ntp_user_.DemandQuotaForRequest(
767 interactive_request); 790 interactive_request);
768 case UserClassifier::UserClass::ACTIVE_NTP_USER: 791 case UserClassifier::UserClass::ACTIVE_NTP_USER:
769 return request_throttler_active_ntp_user_.DemandQuotaForRequest( 792 return request_throttler_active_ntp_user_.DemandQuotaForRequest(
770 interactive_request); 793 interactive_request);
771 case UserClassifier::UserClass::ACTIVE_SUGGESTIONS_CONSUMER: 794 case UserClassifier::UserClass::ACTIVE_SUGGESTIONS_CONSUMER:
772 return request_throttler_active_suggestions_consumer_ 795 return request_throttler_active_suggestions_consumer_
773 .DemandQuotaForRequest(interactive_request); 796 .DemandQuotaForRequest(interactive_request);
774 } 797 }
775 NOTREACHED(); 798 NOTREACHED();
776 return false; 799 return false;
777 } 800 }
778 801
779 } // namespace ntp_snippets 802 } // namespace ntp_snippets
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698