| Index: components/offline_pages/offline_page_model_impl.cc
|
| diff --git a/components/offline_pages/offline_page_model_impl.cc b/components/offline_pages/offline_page_model_impl.cc
|
| index 78cf6ebe4db5ce36d2d501efcd0a42b6bd9d29b1..8642ab137cadd30b0c337de6a28463c82e85c2d6 100644
|
| --- a/components/offline_pages/offline_page_model_impl.cc
|
| +++ b/components/offline_pages/offline_page_model_impl.cc
|
| @@ -740,8 +740,13 @@ void OfflinePageModelImpl::OnAddOfflinePageDone(
|
| }
|
| InformSavePageDone(callback, result, offline_page.client_id,
|
| offline_page.offline_id);
|
| - DeletePendingArchiver(archiver);
|
| + if (result == SavePageResult::SUCCESS) {
|
| + DeleteExistingPagesWithSameURL(offline_page);
|
| + } else {
|
| + PostClearStorageIfNeededTask();
|
| + }
|
|
|
| + DeletePendingArchiver(archiver);
|
| FOR_EACH_OBSERVER(Observer, observers_, OfflinePageModelChanged(this));
|
| }
|
|
|
| @@ -808,30 +813,31 @@ void OfflinePageModelImpl::InformSavePageDone(const SavePageCallback& callback,
|
| ReportSavePageResultHistogramAfterSave(client_id, result);
|
| archive_manager_->GetStorageStats(
|
| base::Bind(&ReportStorageHistogramsAfterSave));
|
| + callback.Run(result, offline_id);
|
| +}
|
| +
|
| +void OfflinePageModelImpl::DeleteExistingPagesWithSameURL(
|
| + const OfflinePageItem& offline_page) {
|
| // Remove existing pages generated by the same policy and with same url.
|
| size_t pages_allowed =
|
| - policy_controller_->GetPolicy(client_id.name_space).pages_allowed_per_url;
|
| - if (result == SavePageResult::SUCCESS && pages_allowed != kUnlimitedPages) {
|
| - GetPagesByOnlineURL(
|
| - offline_pages_[offline_id].url,
|
| - base::Bind(&OfflinePageModelImpl::OnPagesFoundWithSameURL,
|
| - weak_ptr_factory_.GetWeakPtr(), client_id, offline_id,
|
| - pages_allowed));
|
| - } else {
|
| - PostClearStorageIfNeededTask();
|
| - }
|
| - callback.Run(result, offline_id);
|
| + policy_controller_->GetPolicy(offline_page.client_id.name_space)
|
| + .pages_allowed_per_url;
|
| + if (pages_allowed == kUnlimitedPages)
|
| + return;
|
| + GetPagesByOnlineURL(
|
| + offline_page.url,
|
| + base::Bind(&OfflinePageModelImpl::OnPagesFoundWithSameURL,
|
| + weak_ptr_factory_.GetWeakPtr(), offline_page, pages_allowed));
|
| }
|
|
|
| void OfflinePageModelImpl::OnPagesFoundWithSameURL(
|
| - const ClientId& client_id,
|
| - int64_t offline_id,
|
| + const OfflinePageItem& offline_page,
|
| size_t pages_allowed,
|
| const MultipleOfflinePageItemResult& items) {
|
| std::vector<OfflinePageItem> pages_to_delete;
|
| for (const auto& item : items) {
|
| - if (item.offline_id != offline_id &&
|
| - item.client_id.name_space == client_id.name_space) {
|
| + if (item.offline_id != offline_page.offline_id &&
|
| + item.client_id.name_space == offline_page.client_id.name_space) {
|
| pages_to_delete.push_back(item);
|
| }
|
| }
|
|
|