| 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 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 GetFetchingIntervalWifiCharging(), GetFetchingIntervalWifi(now), | 273 GetFetchingIntervalWifiCharging(), GetFetchingIntervalWifi(now), |
| 274 GetFetchingIntervalFallback(), GetRescheduleTime(now)); | 274 GetFetchingIntervalFallback(), GetRescheduleTime(now)); |
| 275 } else { | 275 } else { |
| 276 scheduler_->Unschedule(); | 276 scheduler_->Unschedule(); |
| 277 } | 277 } |
| 278 } | 278 } |
| 279 | 279 |
| 280 void NTPSnippetsService::FetchSuggestionImage( | 280 void NTPSnippetsService::FetchSuggestionImage( |
| 281 const std::string& suggestion_id, | 281 const std::string& suggestion_id, |
| 282 const ImageFetchedCallback& callback) { | 282 const ImageFetchedCallback& callback) { |
| 283 std::string snippet_id = GetWithinCategoryIDFromUniqueID(suggestion_id); |
| 283 database_->LoadImage( | 284 database_->LoadImage( |
| 284 suggestion_id, | 285 snippet_id, |
| 285 base::Bind(&NTPSnippetsService::OnSnippetImageFetchedFromDatabase, | 286 base::Bind(&NTPSnippetsService::OnSnippetImageFetchedFromDatabase, |
| 286 base::Unretained(this), suggestion_id, callback)); | 287 base::Unretained(this), snippet_id, callback)); |
| 287 } | 288 } |
| 288 | 289 |
| 289 void NTPSnippetsService::ClearCachedSuggestionsForDebugging() { | 290 void NTPSnippetsService::ClearCachedSuggestionsForDebugging() { |
| 290 if (!initialized()) | 291 if (!initialized()) |
| 291 return; | 292 return; |
| 292 | 293 |
| 293 if (snippets_.empty()) | 294 if (snippets_.empty()) |
| 294 return; | 295 return; |
| 295 | 296 |
| 296 database_->DeleteSnippets(snippets_); | 297 database_->DeleteSnippets(snippets_); |
| 297 snippets_.clear(); | 298 snippets_.clear(); |
| 298 | 299 |
| 299 NotifyNewSuggestions(); | 300 NotifyNewSuggestions(); |
| 300 } | 301 } |
| 301 | 302 |
| 302 std::set<std::string> NTPSnippetsService::GetSuggestionsHosts() const { | 303 std::set<std::string> NTPSnippetsService::GetSuggestionsHosts() const { |
| 303 // |suggestions_service_| can be null in tests. | 304 // |suggestions_service_| can be null in tests. |
| 304 if (!suggestions_service_) | 305 if (!suggestions_service_) |
| 305 return std::set<std::string>(); | 306 return std::set<std::string>(); |
| 306 | 307 |
| 307 // TODO(treib): This should just call GetSnippetHostsFromPrefs. | 308 // TODO(treib): This should just call GetSnippetHostsFromPrefs. |
| 308 return GetSuggestionsHostsImpl( | 309 return GetSuggestionsHostsImpl( |
| 309 suggestions_service_->GetSuggestionsDataFromCache()); | 310 suggestions_service_->GetSuggestionsDataFromCache()); |
| 310 } | 311 } |
| 311 | 312 |
| 312 void NTPSnippetsService::DiscardSuggestion(const std::string& suggestion_id) { | 313 void NTPSnippetsService::DiscardSuggestion(const std::string& suggestion_id) { |
| 313 if (!ready()) | 314 if (!ready()) |
| 314 return; | 315 return; |
| 315 | 316 |
| 316 auto it = std::find_if( | 317 std::string snippet_id = GetWithinCategoryIDFromUniqueID(suggestion_id); |
| 317 snippets_.begin(), snippets_.end(), | 318 |
| 318 [&suggestion_id](const std::unique_ptr<NTPSnippet>& snippet) { | 319 auto it = |
| 319 return snippet->id() == suggestion_id; | 320 std::find_if(snippets_.begin(), snippets_.end(), |
| 320 }); | 321 [&snippet_id](const std::unique_ptr<NTPSnippet>& snippet) { |
| 322 return snippet->id() == snippet_id; |
| 323 }); |
| 321 if (it == snippets_.end()) | 324 if (it == snippets_.end()) |
| 322 return; | 325 return; |
| 323 | 326 |
| 324 (*it)->set_discarded(true); | 327 (*it)->set_discarded(true); |
| 325 | 328 |
| 326 database_->SaveSnippet(**it); | 329 database_->SaveSnippet(**it); |
| 327 database_->DeleteImage((*it)->id()); | 330 database_->DeleteImage((*it)->id()); |
| 328 | 331 |
| 329 discarded_snippets_.push_back(std::move(*it)); | 332 discarded_snippets_.push_back(std::move(*it)); |
| 330 snippets_.erase(it); | 333 snippets_.erase(it); |
| 331 | |
| 332 NotifyNewSuggestions(); | |
| 333 } | 334 } |
| 334 | 335 |
| 335 void NTPSnippetsService::ClearDiscardedSuggestionsForDebugging() { | 336 void NTPSnippetsService::ClearDiscardedSuggestionsForDebugging() { |
| 336 if (!initialized()) | 337 if (!initialized()) |
| 337 return; | 338 return; |
| 338 | 339 |
| 339 if (discarded_snippets_.empty()) | 340 if (discarded_snippets_.empty()) |
| 340 return; | 341 return; |
| 341 | 342 |
| 342 database_->DeleteSnippets(discarded_snippets_); | 343 database_->DeleteSnippets(discarded_snippets_); |
| (...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 615 | 616 |
| 616 // Fetching from the DB failed; start a network fetch. | 617 // Fetching from the DB failed; start a network fetch. |
| 617 FetchSnippetImageFromNetwork(snippet_id, callback); | 618 FetchSnippetImageFromNetwork(snippet_id, callback); |
| 618 } | 619 } |
| 619 | 620 |
| 620 void NTPSnippetsService::OnSnippetImageDecoded( | 621 void NTPSnippetsService::OnSnippetImageDecoded( |
| 621 const std::string& snippet_id, | 622 const std::string& snippet_id, |
| 622 const ImageFetchedCallback& callback, | 623 const ImageFetchedCallback& callback, |
| 623 const gfx::Image& image) { | 624 const gfx::Image& image) { |
| 624 if (!image.IsEmpty()) { | 625 if (!image.IsEmpty()) { |
| 625 callback.Run(snippet_id, image); | 626 callback.Run(MakeUniqueID(ContentSuggestionsCategory::ARTICLES, snippet_id), |
| 627 image); |
| 626 return; | 628 return; |
| 627 } | 629 } |
| 628 | 630 |
| 629 // If decoding the image failed, delete the DB entry. | 631 // If decoding the image failed, delete the DB entry. |
| 630 database_->DeleteImage(snippet_id); | 632 database_->DeleteImage(snippet_id); |
| 631 | 633 |
| 632 FetchSnippetImageFromNetwork(snippet_id, callback); | 634 FetchSnippetImageFromNetwork(snippet_id, callback); |
| 633 } | 635 } |
| 634 | 636 |
| 635 void NTPSnippetsService::FetchSnippetImageFromNetwork( | 637 void NTPSnippetsService::FetchSnippetImageFromNetwork( |
| 636 const std::string& snippet_id, | 638 const std::string& snippet_id, |
| 637 const ImageFetchedCallback& callback) { | 639 const ImageFetchedCallback& callback) { |
| 638 auto it = | 640 auto it = |
| 639 std::find_if(snippets_.begin(), snippets_.end(), | 641 std::find_if(snippets_.begin(), snippets_.end(), |
| 640 [&snippet_id](const std::unique_ptr<NTPSnippet>& snippet) { | 642 [&snippet_id](const std::unique_ptr<NTPSnippet>& snippet) { |
| 641 return snippet->id() == snippet_id; | 643 return snippet->id() == snippet_id; |
| 642 }); | 644 }); |
| 643 if (it == snippets_.end()) { | 645 if (it == snippets_.end()) { |
| 644 callback.Run(snippet_id, gfx::Image()); | 646 callback.Run(MakeUniqueID(ContentSuggestionsCategory::ARTICLES, snippet_id), |
| 647 gfx::Image()); |
| 645 return; | 648 return; |
| 646 } | 649 } |
| 647 | 650 |
| 648 const NTPSnippet& snippet = *it->get(); | 651 const NTPSnippet& snippet = *it->get(); |
| 649 image_fetcher_->StartOrQueueNetworkRequest( | 652 image_fetcher_->StartOrQueueNetworkRequest( |
| 650 snippet.id(), snippet.salient_image_url(), callback); | 653 snippet.id(), snippet.salient_image_url(), callback); |
| 651 } | 654 } |
| 652 | 655 |
| 653 void NTPSnippetsService::EnterStateEnabled(bool fetch_snippets) { | 656 void NTPSnippetsService::EnterStateEnabled(bool fetch_snippets) { |
| 654 if (fetch_snippets) | 657 if (fetch_snippets) |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 822 } | 825 } |
| 823 | 826 |
| 824 void NTPSnippetsService::NotifyCategoryStatusChanged() { | 827 void NTPSnippetsService::NotifyCategoryStatusChanged() { |
| 825 if (observer_) { | 828 if (observer_) { |
| 826 observer_->OnCategoryStatusChanged(ContentSuggestionsCategory::ARTICLES, | 829 observer_->OnCategoryStatusChanged(ContentSuggestionsCategory::ARTICLES, |
| 827 category_status_); | 830 category_status_); |
| 828 } | 831 } |
| 829 } | 832 } |
| 830 | 833 |
| 831 } // namespace ntp_snippets | 834 } // namespace ntp_snippets |
| OLD | NEW |