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

Side by Side Diff: components/ntp_snippets/ntp_snippets_service.cc

Issue 2363753002: [NTP Snippets] Don't reschedule background fetching on every startup (Closed)
Patch Set: rebase Created 4 years, 2 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/ntp_snippets_service.h" 5 #include "components/ntp_snippets/ntp_snippets_service.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <iterator> 8 #include <iterator>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 database_->LoadSnippets(base::Bind(&NTPSnippetsService::OnDatabaseLoaded, 225 database_->LoadSnippets(base::Bind(&NTPSnippetsService::OnDatabaseLoaded,
226 base::Unretained(this))); 226 base::Unretained(this)));
227 } 227 }
228 228
229 NTPSnippetsService::~NTPSnippetsService() { 229 NTPSnippetsService::~NTPSnippetsService() {
230 } 230 }
231 231
232 // static 232 // static
233 void NTPSnippetsService::RegisterProfilePrefs(PrefRegistrySimple* registry) { 233 void NTPSnippetsService::RegisterProfilePrefs(PrefRegistrySimple* registry) {
234 registry->RegisterListPref(prefs::kSnippetHosts); 234 registry->RegisterListPref(prefs::kSnippetHosts);
235 registry->RegisterInt64Pref(prefs::kSnippetBackgroundFetchingIntervalWifi, 0);
236 registry->RegisterInt64Pref(prefs::kSnippetBackgroundFetchingIntervalFallback,
237 0);
235 238
236 NTPSnippetsStatusService::RegisterProfilePrefs(registry); 239 NTPSnippetsStatusService::RegisterProfilePrefs(registry);
237 } 240 }
238 241
239 void NTPSnippetsService::FetchSnippets(bool interactive_request) { 242 void NTPSnippetsService::FetchSnippets(bool interactive_request) {
240 if (ready()) 243 if (ready())
241 FetchSnippetsFromHosts(GetSuggestionsHosts(), interactive_request); 244 FetchSnippetsFromHosts(GetSuggestionsHosts(), interactive_request);
242 else 245 else
243 fetch_when_ready_ = true; 246 fetch_when_ready_ = true;
244 } 247 }
(...skipping 16 matching lines...) Expand all
261 for (const auto& item : categories_) { 264 for (const auto& item : categories_) {
262 const CategoryContent& content = item.second; 265 const CategoryContent& content = item.second;
263 for (const auto& snippet : content.dismissed) 266 for (const auto& snippet : content.dismissed)
264 excluded_ids.insert(snippet->id()); 267 excluded_ids.insert(snippet->id());
265 } 268 }
266 snippets_fetcher_->FetchSnippetsFromHosts(hosts, application_language_code_, 269 snippets_fetcher_->FetchSnippetsFromHosts(hosts, application_language_code_,
267 excluded_ids, kMaxSnippetCount, 270 excluded_ids, kMaxSnippetCount,
268 interactive_request); 271 interactive_request);
269 } 272 }
270 273
271 void NTPSnippetsService::RescheduleFetching() { 274 void NTPSnippetsService::RescheduleFetching(bool force) {
272 // The scheduler only exists on Android so far, it's null on other platforms. 275 // The scheduler only exists on Android so far, it's null on other platforms.
273 if (!scheduler_) 276 if (!scheduler_)
274 return; 277 return;
275 278
276 // If we're NOT_INITED, we don't know whether to schedule or un-schedule.
277 // We'll reschedule on the next state change anyway, so do nothing here.
278 if (state_ == State::NOT_INITED)
279 return;
280
281 if (ready()) { 279 if (ready()) {
282 scheduler_->Schedule(GetFetchingIntervalWifi(), 280 base::TimeDelta old_interval_wifi =
283 GetFetchingIntervalFallback()); 281 base::TimeDelta::FromInternalValue(pref_service_->GetInt64(
282 prefs::kSnippetBackgroundFetchingIntervalWifi));
283 base::TimeDelta old_interval_fallback =
284 base::TimeDelta::FromInternalValue(pref_service_->GetInt64(
285 prefs::kSnippetBackgroundFetchingIntervalFallback));
286 base::TimeDelta interval_wifi = GetFetchingIntervalWifi();
287 base::TimeDelta interval_fallback = GetFetchingIntervalFallback();
288 if (force || interval_wifi != old_interval_wifi ||
289 interval_fallback != old_interval_fallback) {
290 scheduler_->Schedule(interval_wifi, interval_fallback);
291 pref_service_->SetInt64(prefs::kSnippetBackgroundFetchingIntervalWifi,
292 interval_wifi.ToInternalValue());
293 pref_service_->SetInt64(
294 prefs::kSnippetBackgroundFetchingIntervalFallback,
295 interval_fallback.ToInternalValue());
296 }
284 } else { 297 } else {
285 scheduler_->Unschedule(); 298 // If we're NOT_INITED, we don't know whether to schedule or un-schedule.
299 // If |force| is false, all is well: We'll reschedule on the next state
300 // change anyway. If it's true, then unschedule here, to make sure that the
301 // next reschedule actually happens.
302 if (state_ != State::NOT_INITED || force) {
303 scheduler_->Unschedule();
304 pref_service_->ClearPref(prefs::kSnippetBackgroundFetchingIntervalWifi);
305 pref_service_->ClearPref(
306 prefs::kSnippetBackgroundFetchingIntervalFallback);
307 }
286 } 308 }
287 } 309 }
288 310
289 CategoryStatus NTPSnippetsService::GetCategoryStatus(Category category) { 311 CategoryStatus NTPSnippetsService::GetCategoryStatus(Category category) {
290 DCHECK(categories_.find(category) != categories_.end()); 312 DCHECK(categories_.find(category) != categories_.end());
291 return categories_[category].status; 313 return categories_[category].status;
292 } 314 }
293 315
294 CategoryInfo NTPSnippetsService::GetCategoryInfo(Category category) { 316 CategoryInfo NTPSnippetsService::GetCategoryInfo(Category category) {
295 DCHECK(categories_.find(category) != categories_.end()); 317 DCHECK(categories_.find(category) != categories_.end());
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
603 } 625 }
604 626
605 // TODO(sfiera): notify only when a category changed above. 627 // TODO(sfiera): notify only when a category changed above.
606 NotifyNewSuggestions(); 628 NotifyNewSuggestions();
607 629
608 // Reschedule after a successful fetch. This resets all currently scheduled 630 // Reschedule after a successful fetch. This resets all currently scheduled
609 // fetches, to make sure the fallback interval triggers only if no wifi fetch 631 // fetches, to make sure the fallback interval triggers only if no wifi fetch
610 // succeeded, and also that we don't do a background fetch immediately after 632 // succeeded, and also that we don't do a background fetch immediately after
611 // a user-initiated one. 633 // a user-initiated one.
612 if (snippets) 634 if (snippets)
613 RescheduleFetching(); 635 RescheduleFetching(true);
614 } 636 }
615 637
616 void NTPSnippetsService::ArchiveSnippets(Category category, 638 void NTPSnippetsService::ArchiveSnippets(Category category,
617 NTPSnippet::PtrVector* to_archive) { 639 NTPSnippet::PtrVector* to_archive) {
618 CategoryContent* content = &categories_[category]; 640 CategoryContent* content = &categories_[category];
619 641
620 // TODO(sfiera): handle DB for non-articles too. 642 // TODO(sfiera): handle DB for non-articles too.
621 if (category == articles_category_) { 643 if (category == articles_category_) {
622 database_->DeleteSnippets(*to_archive); 644 database_->DeleteSnippets(*to_archive);
623 // Do not delete the thumbnail images as they are still handy on open NTPs. 645 // Do not delete the thumbnail images as they are still handy on open NTPs.
(...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after
983 break; 1005 break;
984 1006
985 case State::ERROR_OCCURRED: 1007 case State::ERROR_OCCURRED:
986 DVLOG(1) << "Entering state: ERROR_OCCURRED"; 1008 DVLOG(1) << "Entering state: ERROR_OCCURRED";
987 state_ = State::ERROR_OCCURRED; 1009 state_ = State::ERROR_OCCURRED;
988 EnterStateError(); 1010 EnterStateError();
989 break; 1011 break;
990 } 1012 }
991 1013
992 // Schedule or un-schedule background fetching after each state change. 1014 // Schedule or un-schedule background fetching after each state change.
993 // TODO(treib): This resets all currently scheduled fetches on each Chrome 1015 RescheduleFetching(false);
994 // start. Maybe store the currently scheduled values in prefs, and only
995 // reschedule if they have changed? crbug.com/646842
996 RescheduleFetching();
997 } 1016 }
998 1017
999 void NTPSnippetsService::NotifyNewSuggestions() { 1018 void NTPSnippetsService::NotifyNewSuggestions() {
1000 for (const auto& item : categories_) { 1019 for (const auto& item : categories_) {
1001 Category category = item.first; 1020 Category category = item.first;
1002 const CategoryContent& content = item.second; 1021 const CategoryContent& content = item.second;
1003 1022
1004 std::vector<ContentSuggestion> result; 1023 std::vector<ContentSuggestion> result;
1005 for (const std::unique_ptr<NTPSnippet>& snippet : content.snippets) { 1024 for (const std::unique_ptr<NTPSnippet>& snippet : content.snippets) {
1006 // TODO(sfiera): if a snippet is not going to be displayed, move it 1025 // TODO(sfiera): if a snippet is not going to be displayed, move it
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1048 } 1067 }
1049 1068
1050 NTPSnippetsService::CategoryContent::CategoryContent() = default; 1069 NTPSnippetsService::CategoryContent::CategoryContent() = default;
1051 NTPSnippetsService::CategoryContent::CategoryContent(CategoryContent&&) = 1070 NTPSnippetsService::CategoryContent::CategoryContent(CategoryContent&&) =
1052 default; 1071 default;
1053 NTPSnippetsService::CategoryContent::~CategoryContent() = default; 1072 NTPSnippetsService::CategoryContent::~CategoryContent() = default;
1054 NTPSnippetsService::CategoryContent& NTPSnippetsService::CategoryContent:: 1073 NTPSnippetsService::CategoryContent& NTPSnippetsService::CategoryContent::
1055 operator=(CategoryContent&&) = default; 1074 operator=(CategoryContent&&) = default;
1056 1075
1057 } // namespace ntp_snippets 1076 } // namespace ntp_snippets
OLDNEW
« no previous file with comments | « components/ntp_snippets/ntp_snippets_service.h ('k') | components/ntp_snippets/ntp_snippets_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698