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 |