OLD | NEW |
---|---|
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 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
187 database_->LoadSnippets(base::Bind(&NTPSnippetsService::OnDatabaseLoaded, | 187 database_->LoadSnippets(base::Bind(&NTPSnippetsService::OnDatabaseLoaded, |
188 base::Unretained(this))); | 188 base::Unretained(this))); |
189 } | 189 } |
190 | 190 |
191 NTPSnippetsService::~NTPSnippetsService() { | 191 NTPSnippetsService::~NTPSnippetsService() { |
192 } | 192 } |
193 | 193 |
194 // static | 194 // static |
195 void NTPSnippetsService::RegisterProfilePrefs(PrefRegistrySimple* registry) { | 195 void NTPSnippetsService::RegisterProfilePrefs(PrefRegistrySimple* registry) { |
196 registry->RegisterListPref(prefs::kSnippetHosts); | 196 registry->RegisterListPref(prefs::kSnippetHosts); |
197 registry->RegisterInt64Pref(prefs::kSnippetBackgroundFetchingIntervalWifi, 0); | |
198 registry->RegisterInt64Pref(prefs::kSnippetBackgroundFetchingIntervalFallback, | |
199 0); | |
197 | 200 |
198 NTPSnippetsStatusService::RegisterProfilePrefs(registry); | 201 NTPSnippetsStatusService::RegisterProfilePrefs(registry); |
199 } | 202 } |
200 | 203 |
201 void NTPSnippetsService::FetchSnippets(bool interactive_request) { | 204 void NTPSnippetsService::FetchSnippets(bool interactive_request) { |
202 if (ready()) | 205 if (ready()) |
203 FetchSnippetsFromHosts(GetSuggestionsHosts(), interactive_request); | 206 FetchSnippetsFromHosts(GetSuggestionsHosts(), interactive_request); |
204 else | 207 else |
205 fetch_when_ready_ = true; | 208 fetch_when_ready_ = true; |
206 } | 209 } |
(...skipping 16 matching lines...) Expand all Loading... | |
223 for (const auto& item : categories_) { | 226 for (const auto& item : categories_) { |
224 const CategoryContent& content = item.second; | 227 const CategoryContent& content = item.second; |
225 for (const auto& snippet : content.dismissed) | 228 for (const auto& snippet : content.dismissed) |
226 excluded_ids.insert(snippet->id()); | 229 excluded_ids.insert(snippet->id()); |
227 } | 230 } |
228 snippets_fetcher_->FetchSnippetsFromHosts(hosts, application_language_code_, | 231 snippets_fetcher_->FetchSnippetsFromHosts(hosts, application_language_code_, |
229 excluded_ids, kMaxSnippetCount, | 232 excluded_ids, kMaxSnippetCount, |
230 interactive_request); | 233 interactive_request); |
231 } | 234 } |
232 | 235 |
233 void NTPSnippetsService::RescheduleFetching() { | 236 void NTPSnippetsService::RescheduleFetching(bool force) { |
234 // The scheduler only exists on Android so far, it's null on other platforms. | 237 // The scheduler only exists on Android so far, it's null on other platforms. |
235 if (!scheduler_) | 238 if (!scheduler_) |
236 return; | 239 return; |
237 | 240 |
238 // If we're NOT_INITED, we don't know whether to schedule or un-schedule. | |
239 // We'll reschedule on the next state change anyway, so do nothing here. | |
240 if (state_ == State::NOT_INITED) | |
241 return; | |
242 | |
243 if (ready()) { | 241 if (ready()) { |
244 scheduler_->Schedule(GetFetchingIntervalWifi(), | 242 base::TimeDelta old_interval_wifi = |
245 GetFetchingIntervalFallback()); | 243 base::TimeDelta::FromInternalValue(pref_service_->GetInt64( |
244 prefs::kSnippetBackgroundFetchingIntervalWifi)); | |
245 base::TimeDelta old_interval_fallback = | |
246 base::TimeDelta::FromInternalValue(pref_service_->GetInt64( | |
247 prefs::kSnippetBackgroundFetchingIntervalFallback)); | |
248 base::TimeDelta interval_wifi = GetFetchingIntervalWifi(); | |
249 base::TimeDelta interval_fallback = GetFetchingIntervalFallback(); | |
250 if (force || interval_wifi != old_interval_wifi || | |
251 interval_fallback != old_interval_fallback) { | |
jkrcal
2016/09/23 10:28:34
What if:
- the current fallback is scheduled, say
Marc Treib
2016/09/23 11:19:13
Prefs do survive the upgrade, so they won't be res
jkrcal
2016/09/23 11:24:53
I see, thanks!
| |
252 scheduler_->Schedule(interval_wifi, interval_fallback); | |
253 pref_service_->SetInt64(prefs::kSnippetBackgroundFetchingIntervalWifi, | |
254 interval_wifi.ToInternalValue()); | |
255 pref_service_->SetInt64( | |
256 prefs::kSnippetBackgroundFetchingIntervalFallback, | |
257 interval_fallback.ToInternalValue()); | |
258 } | |
246 } else { | 259 } else { |
247 scheduler_->Unschedule(); | 260 // If we're NOT_INITED, we don't know whether to schedule or un-schedule. |
261 // If |force| is false, all is well: We'll reschedule on the next state | |
262 // change anyway. If it's true, then unschedule here, to make sure that the | |
263 // next reschedule actually happens. | |
264 if (state_ != State::NOT_INITED || force) { | |
265 scheduler_->Unschedule(); | |
266 pref_service_->ClearPref(prefs::kSnippetBackgroundFetchingIntervalWifi); | |
267 pref_service_->ClearPref( | |
268 prefs::kSnippetBackgroundFetchingIntervalFallback); | |
269 } | |
248 } | 270 } |
249 } | 271 } |
250 | 272 |
251 CategoryStatus NTPSnippetsService::GetCategoryStatus(Category category) { | 273 CategoryStatus NTPSnippetsService::GetCategoryStatus(Category category) { |
252 DCHECK(categories_.find(category) != categories_.end()); | 274 DCHECK(categories_.find(category) != categories_.end()); |
253 return categories_[category].status; | 275 return categories_[category].status; |
254 } | 276 } |
255 | 277 |
256 CategoryInfo NTPSnippetsService::GetCategoryInfo(Category category) { | 278 CategoryInfo NTPSnippetsService::GetCategoryInfo(Category category) { |
257 DCHECK(categories_.find(category) != categories_.end()); | 279 DCHECK(categories_.find(category) != categories_.end()); |
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
554 } | 576 } |
555 | 577 |
556 // TODO(sfiera): notify only when a category changed above. | 578 // TODO(sfiera): notify only when a category changed above. |
557 NotifyNewSuggestions(); | 579 NotifyNewSuggestions(); |
558 | 580 |
559 // Reschedule after a successful fetch. This resets all currently scheduled | 581 // Reschedule after a successful fetch. This resets all currently scheduled |
560 // fetches, to make sure the fallback interval triggers only if no wifi fetch | 582 // fetches, to make sure the fallback interval triggers only if no wifi fetch |
561 // succeeded, and also that we don't do a background fetch immediately after | 583 // succeeded, and also that we don't do a background fetch immediately after |
562 // a user-initiated one. | 584 // a user-initiated one. |
563 if (snippets) | 585 if (snippets) |
564 RescheduleFetching(); | 586 RescheduleFetching(true); |
565 } | 587 } |
566 | 588 |
567 void NTPSnippetsService::MergeSnippets(Category category, | 589 void NTPSnippetsService::MergeSnippets(Category category, |
568 NTPSnippet::PtrVector new_snippets) { | 590 NTPSnippet::PtrVector new_snippets) { |
569 DCHECK(ready()); | 591 DCHECK(ready()); |
570 CategoryContent* content = &categories_[category]; | 592 CategoryContent* content = &categories_[category]; |
571 | 593 |
572 // Remove new snippets that we already have, or that have been dismissed. | 594 // Remove new snippets that we already have, or that have been dismissed. |
573 std::set<std::string> old_snippet_ids; | 595 std::set<std::string> old_snippet_ids; |
574 InsertAllIDs(content->dismissed, &old_snippet_ids); | 596 InsertAllIDs(content->dismissed, &old_snippet_ids); |
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
946 break; | 968 break; |
947 | 969 |
948 case State::ERROR_OCCURRED: | 970 case State::ERROR_OCCURRED: |
949 DVLOG(1) << "Entering state: ERROR_OCCURRED"; | 971 DVLOG(1) << "Entering state: ERROR_OCCURRED"; |
950 state_ = State::ERROR_OCCURRED; | 972 state_ = State::ERROR_OCCURRED; |
951 EnterStateError(); | 973 EnterStateError(); |
952 break; | 974 break; |
953 } | 975 } |
954 | 976 |
955 // Schedule or un-schedule background fetching after each state change. | 977 // Schedule or un-schedule background fetching after each state change. |
956 // TODO(treib): This resets all currently scheduled fetches on each Chrome | 978 RescheduleFetching(false); |
957 // start. Maybe store the currently scheduled values in prefs, and only | |
958 // reschedule if they have changed? crbug.com/646842 | |
959 RescheduleFetching(); | |
960 } | 979 } |
961 | 980 |
962 void NTPSnippetsService::NotifyNewSuggestions() { | 981 void NTPSnippetsService::NotifyNewSuggestions() { |
963 for (const auto& item : categories_) { | 982 for (const auto& item : categories_) { |
964 Category category = item.first; | 983 Category category = item.first; |
965 const CategoryContent& content = item.second; | 984 const CategoryContent& content = item.second; |
966 | 985 |
967 std::vector<ContentSuggestion> result; | 986 std::vector<ContentSuggestion> result; |
968 for (const std::unique_ptr<NTPSnippet>& snippet : content.snippets) { | 987 for (const std::unique_ptr<NTPSnippet>& snippet : content.snippets) { |
969 // TODO(sfiera): if a snippet is not going to be displayed, move it | 988 // 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 Loading... | |
1011 } | 1030 } |
1012 | 1031 |
1013 NTPSnippetsService::CategoryContent::CategoryContent() = default; | 1032 NTPSnippetsService::CategoryContent::CategoryContent() = default; |
1014 NTPSnippetsService::CategoryContent::CategoryContent(CategoryContent&&) = | 1033 NTPSnippetsService::CategoryContent::CategoryContent(CategoryContent&&) = |
1015 default; | 1034 default; |
1016 NTPSnippetsService::CategoryContent::~CategoryContent() = default; | 1035 NTPSnippetsService::CategoryContent::~CategoryContent() = default; |
1017 NTPSnippetsService::CategoryContent& NTPSnippetsService::CategoryContent:: | 1036 NTPSnippetsService::CategoryContent& NTPSnippetsService::CategoryContent:: |
1018 operator=(CategoryContent&&) = default; | 1037 operator=(CategoryContent&&) = default; |
1019 | 1038 |
1020 } // namespace ntp_snippets | 1039 } // namespace ntp_snippets |
OLD | NEW |