Chromium Code Reviews| Index: components/offline_pages/offline_page_model.cc |
| diff --git a/components/offline_pages/offline_page_model.cc b/components/offline_pages/offline_page_model.cc |
| index c007366c99bae9358ce43e51af940b7d7aa5f5f9..e09e314cc85770a02144e6f293a821a5f4911531 100644 |
| --- a/components/offline_pages/offline_page_model.cc |
| +++ b/components/offline_pages/offline_page_model.cc |
| @@ -219,6 +219,19 @@ void OfflinePageModel::DeletePagesByBookmarkId( |
| base::Owned(success))); |
| } |
| +void OfflinePageModel::ClearAll(const base::Closure& callback) { |
| + DCHECK(is_loaded_); |
| + |
| + std::vector<int64> bookmark_ids; |
| + for (const auto& id_page_pair : offline_pages_) |
| + bookmark_ids.push_back(id_page_pair.second.bookmark_id); |
|
fgorski
2015/10/23 20:55:03
bookmark_ids.push_back(id_page_pair.first);
jianli
2015/10/26 21:42:43
Done.
|
| + DeletePagesByBookmarkId( |
| + bookmark_ids, |
| + base::Bind(&OfflinePageModel::OnRemoveAllFilesDoneForClearAll, |
| + weak_ptr_factory_.GetWeakPtr(), |
| + callback)); |
| +} |
| + |
| const std::vector<OfflinePageItem> OfflinePageModel::GetAllPages() const { |
| DCHECK(is_loaded_); |
| std::vector<OfflinePageItem> offline_pages; |
| @@ -442,10 +455,10 @@ void OfflinePageModel::OnLoadDone( |
| DCHECK(!is_loaded_); |
| is_loaded_ = true; |
| - if (success) { |
| - for (const auto& offline_page : offline_pages) |
| - offline_pages_[offline_page.bookmark_id] = offline_page; |
| - } |
| + // TODO(jianli): rebuild the store upon failure. |
| + |
| + if (success) |
| + CacheLoadedData(offline_pages); |
| // Run all the delayed tasks. |
| for (const auto& delayed_task : delayed_tasks_) |
| @@ -554,4 +567,36 @@ void OfflinePageModel::OnRemoveOfflinePagesMissingArchiveFileDone( |
| } |
| } |
| +void OfflinePageModel::OnRemoveAllFilesDoneForClearAll( |
| + const base::Closure& callback, |
| + DeletePageResult result) { |
| + store_->Reset(base::Bind(&OfflinePageModel::OnResetStoreDoneForClearAll, |
| + weak_ptr_factory_.GetWeakPtr(), |
|
fgorski
2015/10/23 20:55:03
nit: alignment is off
jianli
2015/10/26 21:42:43
Done.
|
| + callback)); |
| +} |
| + |
| +void OfflinePageModel::OnResetStoreDoneForClearAll( |
| + const base::Closure& callback, bool success) { |
|
fgorski
2015/10/23 20:55:03
can you more explicitly ignore success here?
jianli
2015/10/26 21:42:43
Done.
|
| + offline_pages_.clear(); |
| + store_->Load(base::Bind(&OfflinePageModel::OnReloadStoreDoneForClearAll, |
| + weak_ptr_factory_.GetWeakPtr(), |
| + callback)); |
| +} |
| + |
| +void OfflinePageModel::OnReloadStoreDoneForClearAll( |
| + const base::Closure& callback, |
| + bool success, |
| + const std::vector<OfflinePageItem>& offline_pages) { |
| + DCHECK(success); |
| + |
| + CacheLoadedData(offline_pages); |
| + callback.Run(); |
| +} |
| + |
| +void OfflinePageModel::CacheLoadedData( |
| + const std::vector<OfflinePageItem>& offline_pages) { |
|
fgorski
2015/10/23 20:55:03
offline_pages.clear(); should probably go here as
jianli
2015/10/26 21:42:44
Done.
|
| + for (const auto& offline_page : offline_pages) |
| + offline_pages_[offline_page.bookmark_id] = offline_page; |
| +} |
| + |
| } // namespace offline_pages |