| 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 3e93bf9b86b157b8db4373d286061ebf12a76b80..d3a0e5977fc1a0b60825db666f6b489e3693836d 100644
|
| --- a/components/offline_pages/offline_page_model.cc
|
| +++ b/components/offline_pages/offline_page_model.cc
|
| @@ -5,6 +5,7 @@
|
| #include "components/offline_pages/offline_page_model.h"
|
|
|
| #include <algorithm>
|
| +#include <utility>
|
|
|
| #include "base/bind.h"
|
| #include "base/files/file_util.h"
|
| @@ -73,6 +74,19 @@ void DeleteArchiveFiles(const std::vector<base::FilePath>& paths_to_delete,
|
| void EmptyDeleteCallback(OfflinePageModel::DeletePageResult /* result */) {
|
| }
|
|
|
| +void FindPagesMissingArchiveFile(
|
| + const std::vector<std::pair<int64, base::FilePath>>& id_path_pairs,
|
| + std::vector<int64>* ids_of_pages_missing_archive_file) {
|
| + DCHECK(ids_of_pages_missing_archive_file);
|
| +
|
| + for (const auto& id_path : id_path_pairs) {
|
| + if (!base::PathExists(id_path.second) ||
|
| + base::DirectoryExists(id_path.second)) {
|
| + ids_of_pages_missing_archive_file->push_back(id_path.first);
|
| + }
|
| + }
|
| +}
|
| +
|
| } // namespace
|
|
|
| OfflinePageModel::OfflinePageModel(
|
| @@ -233,6 +247,25 @@ const OfflinePageItem* OfflinePageModel::GetPageByOfflineURL(
|
| return nullptr;
|
| }
|
|
|
| +void OfflinePageModel::CheckForExternalFileDeletion() {
|
| + DCHECK(is_loaded_);
|
| +
|
| + std::vector<std::pair<int64, base::FilePath>> id_path_pairs;
|
| + for (const auto& id_page_pair : offline_pages_) {
|
| + id_path_pairs.push_back(
|
| + std::make_pair(id_page_pair.first, id_page_pair.second.file_path));
|
| + }
|
| +
|
| + std::vector<int64>* ids_of_pages_missing_archive_file =
|
| + new std::vector<int64>();
|
| + task_runner_->PostTaskAndReply(
|
| + FROM_HERE, base::Bind(&FindPagesMissingArchiveFile, id_path_pairs,
|
| + ids_of_pages_missing_archive_file),
|
| + base::Bind(&OfflinePageModel::OnFindPagesMissingArchiveFile,
|
| + weak_ptr_factory_.GetWeakPtr(),
|
| + base::Owned(ids_of_pages_missing_archive_file)));
|
| +}
|
| +
|
| OfflinePageMetadataStore* OfflinePageModel::GetStoreForTesting() {
|
| return store_.get();
|
| }
|
| @@ -320,7 +353,8 @@ void OfflinePageModel::OnMarkPageForDeletionDone(
|
| weak_ptr_factory_.GetWeakPtr()),
|
| kFinalDeletionDelay);
|
|
|
| - FOR_EACH_OBSERVER(Observer, observers_, OfflinePageModelChanged(this));
|
| + FOR_EACH_OBSERVER(
|
| + Observer, observers_, OfflinePageDeleted(offline_page_item.bookmark_id));
|
| }
|
|
|
| void OfflinePageModel::OnUndoOfflinePageDone(
|
| @@ -410,6 +444,8 @@ void OfflinePageModel::OnLoadDone(
|
| FinalizePageDeletion();
|
|
|
| FOR_EACH_OBSERVER(Observer, observers_, OfflinePageModelLoaded(this));
|
| +
|
| + CheckForExternalFileDeletion();
|
| }
|
|
|
| void OfflinePageModel::InformSavePageDone(const SavePageCallback& callback,
|
| @@ -478,4 +514,31 @@ void OfflinePageModel::InformDeletePageDone(const DeletePageCallback& callback,
|
| callback.Run(result);
|
| }
|
|
|
| +void OfflinePageModel::OnFindPagesMissingArchiveFile(
|
| + const std::vector<int64>* ids_of_pages_missing_archive_file) {
|
| + DCHECK(ids_of_pages_missing_archive_file);
|
| + if (ids_of_pages_missing_archive_file->empty())
|
| + return;
|
| +
|
| + DeletePageCallback done_callback(
|
| + base::Bind(&OfflinePageModel::OnRemoveOfflinePagesMissingArchiveFileDone,
|
| + weak_ptr_factory_.GetWeakPtr(),
|
| + *ids_of_pages_missing_archive_file));
|
| +
|
| + store_->RemoveOfflinePages(
|
| + *ids_of_pages_missing_archive_file,
|
| + base::Bind(&OfflinePageModel::OnRemoveOfflinePagesDone,
|
| + weak_ptr_factory_.GetWeakPtr(),
|
| + *ids_of_pages_missing_archive_file,
|
| + done_callback));
|
| +}
|
| +
|
| +void OfflinePageModel::OnRemoveOfflinePagesMissingArchiveFileDone(
|
| + const std::vector<int64>& bookmark_ids,
|
| + OfflinePageModel::DeletePageResult /* result */) {
|
| + for (int64 bookmark_id : bookmark_ids) {
|
| + FOR_EACH_OBSERVER(Observer, observers_, OfflinePageDeleted(bookmark_id));
|
| + }
|
| +}
|
| +
|
| } // namespace offline_pages
|
|
|