Chromium Code Reviews| 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..56e5603bd10a2b9ed33d22e3f0d7e4e24c6aa9f8 100644 |
| --- a/components/ntp_snippets/remote/ntp_snippets_database.cc |
| +++ b/components/ntp_snippets/remote/ntp_snippets_database.cc |
| @@ -84,16 +84,18 @@ void NTPSnippetsDatabase::SaveSnippets(const NTPSnippet::PtrVector& snippets) { |
| } |
| void NTPSnippetsDatabase::DeleteSnippet(const std::string& snippet_id) { |
| - DeleteSnippetsImpl(base::MakeUnique<std::vector<std::string>>(1, snippet_id)); |
| + DeleteSnippets(base::MakeUnique<std::vector<std::string>>(1, snippet_id)); |
| } |
| void NTPSnippetsDatabase::DeleteSnippets( |
| - const NTPSnippet::PtrVector& snippets) { |
| - std::unique_ptr<std::vector<std::string>> keys_to_remove( |
| - new std::vector<std::string>()); |
| - for (const std::unique_ptr<NTPSnippet>& snippet : snippets) |
| - keys_to_remove->emplace_back(snippet->id()); |
| - DeleteSnippetsImpl(std::move(keys_to_remove)); |
| + std::unique_ptr<std::vector<std::string>> keys_to_remove) { |
| + DCHECK(IsInitialized()); |
| + |
| + std::unique_ptr<KeyEntryVector> entries_to_save(new KeyEntryVector()); |
| + database_->UpdateEntries(std::move(entries_to_save), |
| + std::move(keys_to_remove), |
| + base::Bind(&NTPSnippetsDatabase::OnDatabaseSaved, |
| + weak_ptr_factory_.GetWeakPtr())); |
| } |
| void NTPSnippetsDatabase::LoadImage(const std::string& snippet_id, |
| @@ -122,15 +124,24 @@ void NTPSnippetsDatabase::SaveImage(const std::string& snippet_id, |
| } |
| void NTPSnippetsDatabase::DeleteImage(const std::string& snippet_id) { |
| - DeleteImagesImpl(base::MakeUnique<std::vector<std::string>>(1, snippet_id)); |
| + DeleteImages(base::MakeUnique<std::vector<std::string>>(1, snippet_id)); |
| } |
| -void NTPSnippetsDatabase::DeleteImages(const NTPSnippet::PtrVector& snippets) { |
| - std::unique_ptr<std::vector<std::string>> keys_to_remove( |
| - new std::vector<std::string>()); |
| - for (const std::unique_ptr<NTPSnippet>& snippet : snippets) |
| - keys_to_remove->emplace_back(snippet->id()); |
| - DeleteImagesImpl(std::move(keys_to_remove)); |
| +void NTPSnippetsDatabase::DeleteImages( |
| + std::unique_ptr<std::vector<std::string>> keys_to_remove) { |
| + DCHECK(IsInitialized()); |
| + image_database_->UpdateEntries( |
| + base::MakeUnique<ImageKeyEntryVector>(), std::move(keys_to_remove), |
| + base::Bind(&NTPSnippetsDatabase::OnImageDatabaseSaved, |
| + weak_ptr_factory_.GetWeakPtr())); |
| +} |
| + |
| +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) { |
| @@ -174,7 +185,7 @@ void NTPSnippetsDatabase::OnDatabaseLoaded( |
| // If any of the snippet protos couldn't be converted to actual snippets, |
| // clean them up now. |
| if (!keys_to_remove->empty()) |
| - DeleteSnippetsImpl(std::move(keys_to_remove)); |
| + DeleteSnippets(std::move(keys_to_remove)); |
| } |
| void NTPSnippetsDatabase::OnDatabaseSaved(bool success) { |
| @@ -260,17 +271,6 @@ void NTPSnippetsDatabase::SaveSnippetsImpl( |
| weak_ptr_factory_.GetWeakPtr())); |
| } |
| -void NTPSnippetsDatabase::DeleteSnippetsImpl( |
| - std::unique_ptr<std::vector<std::string>> keys_to_remove) { |
| - DCHECK(IsInitialized()); |
| - |
| - std::unique_ptr<KeyEntryVector> entries_to_save(new KeyEntryVector()); |
| - database_->UpdateEntries(std::move(entries_to_save), |
| - std::move(keys_to_remove), |
| - base::Bind(&NTPSnippetsDatabase::OnDatabaseSaved, |
| - weak_ptr_factory_.GetWeakPtr())); |
| -} |
| - |
| void NTPSnippetsDatabase::LoadImageImpl(const std::string& snippet_id, |
| const SnippetImageCallback& callback) { |
| DCHECK(IsInitialized()); |
| @@ -280,14 +280,23 @@ void NTPSnippetsDatabase::LoadImageImpl(const std::string& snippet_id, |
| weak_ptr_factory_.GetWeakPtr(), callback)); |
| } |
| -void NTPSnippetsDatabase::DeleteImagesImpl( |
| - std::unique_ptr<std::vector<std::string>> keys_to_remove) { |
| - DCHECK(IsInitialized()); |
| - |
| - image_database_->UpdateEntries( |
| - base::MakeUnique<ImageKeyEntryVector>(), std::move(keys_to_remove), |
| - base::Bind(&NTPSnippetsDatabase::OnImageDatabaseSaved, |
| - weak_ptr_factory_.GetWeakPtr())); |
| +void NTPSnippetsDatabase::DeleteUnreferencedImages( |
| + std::unique_ptr<std::set<std::string>> references, |
| + bool load_keys_success, |
| + std::unique_ptr<std::vector<std::string>> image_keys) { |
| + if (!load_keys_success) { |
| + DVLOG(1) << "NTPSnippetsDatabase garbage collection failed."; |
| + OnDatabaseError(); |
| + return; |
| + } |
| + auto keys_to_remove = base::MakeUnique<std::vector<std::string>>(); |
| + for (const std::string& key : *image_keys) { |
| + if (references->count(key) == 0) { |
| + keys_to_remove->emplace_back(key); |
| + } |
| + } |
| + DeleteImages(std::move(keys_to_remove)); |
| } |
| + |
|
Marc Treib
2016/10/06 12:47:35
nit: remove the extra empty line
|
| } // namespace ntp_snippets |