Index: components/ntp_snippets/remote/ntp_snippets_database.cc |
diff --git a/components/ntp_snippets/remote/ntp_snippets_database.cc b/components/ntp_snippets/remote/ntp_snippets_database.cc |
index 5ded341343d74ca9813d4f1ead438928cdd52e88..41498820e306410985565ca27354dae0afda5cc7 100644 |
--- a/components/ntp_snippets/remote/ntp_snippets_database.cc |
+++ b/components/ntp_snippets/remote/ntp_snippets_database.cc |
@@ -133,6 +133,32 @@ void NTPSnippetsDatabase::DeleteImages(const NTPSnippet::PtrVector& snippets) { |
DeleteImagesImpl(std::move(keys_to_remove)); |
} |
+void NTPSnippetsDatabase::DeleteUnreferencedImages( |
+ std::unique_ptr<std::set<std::string>> references, |
+ bool success, |
+ std::unique_ptr<std::vector<std::string>> keys) { |
+ if (!success) { |
+ DVLOG(1) << "NTPSnippetsDatabase garbage collection failed."; |
+ OnDatabaseError(); |
+ return; |
+ } |
+ auto keys_to_remove = base::MakeUnique<std::vector<std::string>>(); |
+ for (const std::string& key : *keys) { |
+ if (references->count(key) == 0) { |
+ keys_to_remove->emplace_back(key); |
+ } |
+ } |
+ DeleteImagesImpl(std::move(keys_to_remove)); |
+} |
+ |
+void NTPSnippetsDatabase::GarbageCollectImages( |
+ std::unique_ptr<std::set<std::string>> alive_snippets) { |
+ DCHECK(image_database_initialized_); |
+ image_database_->LoadKeys(base::Bind( |
+ &NTPSnippetsDatabase::DeleteUnreferencedImages, |
+ weak_ptr_factory_.GetWeakPtr(), base::Passed(std::move(alive_snippets)))); |
+} |
+ |
void NTPSnippetsDatabase::OnDatabaseInited(bool success) { |
DCHECK(!database_initialized_); |
if (!success) { |