 Chromium Code Reviews
 Chromium Code Reviews Issue 1420003004:
  Wipe out offline page data on clearing cookie and site data  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@master
    
  
    Issue 1420003004:
  Wipe out offline page data on clearing cookie and site data  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@master| 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 |