Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(580)

Unified Diff: components/offline_pages/offline_page_model.cc

Issue 1397233002: [Offline pages] Detecting missing offline copy (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Adding tests and fixing memory bots Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 17e499bde753056e803db37f02ff624147ada661..f5ff60330227a435082c9aaa7af02facbeee87f6 100644
--- a/components/offline_pages/offline_page_model.cc
+++ b/components/offline_pages/offline_page_model.cc
@@ -67,6 +67,17 @@ void DeleteArchiveFiles(const std::vector<base::FilePath>& paths_to_delete,
void EmptyDeleteCallback(OfflinePageModel::DeletePageResult /* result */) {
}
+void ListPagesMissingOfflineCopy(
jianli 2015/10/13 00:17:53 ValidateArchiveFiles?
fgorski 2015/10/13 17:39:58 Changed to ListPagesMissingArchiveFile since that
+ const std::vector<OfflinePageItem>& offline_pages,
+ std::vector<int64>* pages_missing_offline_copy) {
+ DCHECK(pages_missing_offline_copy);
+
+ for (const auto& offline_page : offline_pages) {
+ if (!base::PathExists(offline_page.file_path))
+ pages_missing_offline_copy->push_back(offline_page.bookmark_id);
+ }
+}
+
} // namespace
OfflinePageModel::OfflinePageModel(
@@ -203,6 +214,22 @@ const OfflinePageItem* OfflinePageModel::GetPageByOfflineURL(
return nullptr;
}
+void OfflinePageModel::CheckMetadataConsistency() {
+ DCHECK(is_loaded_);
+
+ std::vector<OfflinePageItem> offline_pages;
+ for (const auto& id_page_pair : offline_pages_)
jianli 2015/10/13 00:17:54 I think it might be better to combine this logic w
fgorski 2015/10/13 17:39:58 I don't understand what exactly is your expectatio
+ offline_pages.push_back(id_page_pair.second);
+
+ std::vector<int64>* pages_missing_offline_copy = new std::vector<int64>();
+ task_runner_->PostTaskAndReply(
+ FROM_HERE, base::Bind(&ListPagesMissingOfflineCopy, offline_pages,
+ pages_missing_offline_copy),
+ base::Bind(&OfflinePageModel::OnListPagesMissingOfflineCopy,
+ weak_ptr_factory_.GetWeakPtr(),
+ base::Owned(pages_missing_offline_copy)));
+}
+
OfflinePageMetadataStore* OfflinePageModel::GetStoreForTesting() {
return store_.get();
}
@@ -301,6 +328,8 @@ void OfflinePageModel::OnLoadDone(
delayed_tasks_.clear();
FOR_EACH_OBSERVER(Observer, observers_, OfflinePageModelLoaded(this));
+
+ CheckMetadataConsistency();
}
void OfflinePageModel::InformSavePageDone(const SavePageCallback& callback,
@@ -357,6 +386,10 @@ void OfflinePageModel::OnRemoveOfflinePagesDone(
callback,
(success || bookmark_ids.size() > 1) ? DeletePageResult::SUCCESS
: DeletePageResult::STORE_FAILURE);
+
+ for (int64 bookmark_id : bookmark_ids) {
jianli 2015/10/13 00:17:53 nit: brackets are not needed
fgorski 2015/10/13 17:39:58 Not true: a) FOR_EACH_OBSERVER is in fact multi-li
+ FOR_EACH_OBSERVER(Observer, observers_, OfflinePageDeleted(bookmark_id));
+ }
}
void OfflinePageModel::InformDeletePageDone(const DeletePageCallback& callback,
@@ -368,4 +401,17 @@ void OfflinePageModel::InformDeletePageDone(const DeletePageCallback& callback,
callback.Run(result);
}
+void OfflinePageModel::OnListPagesMissingOfflineCopy(
+ const std::vector<int64>* pages_missing_offline_copy) {
+ DCHECK(pages_missing_offline_copy);
+ if (pages_missing_offline_copy->empty())
+ return;
+
+ store_->RemoveOfflinePages(
+ *pages_missing_offline_copy,
+ base::Bind(&OfflinePageModel::OnRemoveOfflinePagesDone,
+ weak_ptr_factory_.GetWeakPtr(), *pages_missing_offline_copy,
+ base::Bind(&EmptyDeleteCallback)));
+}
+
} // namespace offline_pages

Powered by Google App Engine
This is Rietveld 408576698