Index: components/ntp_snippets/remote/ntp_snippets_service.cc |
diff --git a/components/ntp_snippets/remote/ntp_snippets_service.cc b/components/ntp_snippets/remote/ntp_snippets_service.cc |
index 64eb84f7ad6f0f60080ad4e35302c5c8ae904df7..4acda602c6cb089bbd7c340b2b7910bd0ea41340 100644 |
--- a/components/ntp_snippets/remote/ntp_snippets_service.cc |
+++ b/components/ntp_snippets/remote/ntp_snippets_service.cc |
@@ -12,6 +12,7 @@ |
#include "base/files/file_path.h" |
#include "base/files/file_util.h" |
#include "base/location.h" |
+#include "base/memory/ptr_util.h" |
#include "base/metrics/histogram_macros.h" |
#include "base/metrics/sparse_histogram.h" |
#include "base/path_service.h" |
@@ -490,6 +491,9 @@ void NTPSnippetsService::OnDatabaseLoaded(NTPSnippet::PtrVector snippets) { |
DCHECK_EQ(1u, categories_.size()); // Only articles category, so far. |
DCHECK(categories_.find(articles_category_) != categories_.end()); |
+ ClearExpiredDismissedSnippets(); |
+ ClearOrphanedImages(snippets); |
+ |
// TODO(sfiera): support non-article categories in database. |
CategoryContent* content = &categories_[articles_category_]; |
for (std::unique_ptr<NTPSnippet>& snippet : snippets) { |
@@ -505,8 +509,6 @@ void NTPSnippetsService::OnDatabaseLoaded(NTPSnippet::PtrVector snippets) { |
return lhs->score() > rhs->score(); |
}); |
- ClearExpiredDismissedSnippets(); |
- ClearOrphanedImages(); |
FinishInitialization(); |
} |
@@ -591,7 +593,6 @@ void NTPSnippetsService::OnFetchFinished( |
UMA_HISTOGRAM_SPARSE_SLOWLY("NewTabPage.Snippets.NumArticlesFetched", |
fetched_category.snippets.size()); |
} |
- |
ReplaceSnippets(category, std::move(fetched_category.snippets)); |
} |
} |
@@ -767,8 +768,13 @@ void NTPSnippetsService::ClearExpiredDismissedSnippets() { |
} |
} |
-void NTPSnippetsService::ClearOrphanedImages() { |
- // TODO(jkrcal): Implement. crbug.com/649009 |
+void NTPSnippetsService::ClearOrphanedImages( |
+ const NTPSnippet::PtrVector& snippets) { |
+ auto alive_snippets = base::MakeUnique<std::set<std::string>>(); |
+ for (const auto& snippet_ptr : snippets) { |
+ alive_snippets->insert(snippet_ptr->id()); |
+ } |
+ database_->GarbageCollectImages(std::move(alive_snippets)); |
} |
void NTPSnippetsService::NukeAllSnippets() { |