Chromium Code Reviews| 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..d3367d32b73775bbb90108339f3d91c00a14dfc8 100644 |
| --- a/components/offline_pages/offline_page_model_impl.cc |
| +++ b/components/offline_pages/offline_page_model_impl.cc |
| @@ -740,6 +740,7 @@ void OfflinePageModelImpl::OnAddOfflinePageDone( |
| } |
| InformSavePageDone(callback, result, offline_page.client_id, |
| offline_page.offline_id); |
| + DeleteExistingPageWithSameURL(result, offline_page); |
|
fgorski
2016/07/01 17:43:22
Did you consider this?
if (result == SavePageResu
romax
2016/07/06 19:44:50
Done.
|
| DeletePendingArchiver(archiver); |
| FOR_EACH_OBSERVER(Observer, observers_, OfflinePageModelChanged(this)); |
| @@ -808,30 +809,35 @@ void OfflinePageModelImpl::InformSavePageDone(const SavePageCallback& callback, |
| ReportSavePageResultHistogramAfterSave(client_id, result); |
| archive_manager_->GetStorageStats( |
| base::Bind(&ReportStorageHistogramsAfterSave)); |
| + callback.Run(result, offline_id); |
| +} |
| + |
| +void OfflinePageModelImpl::DeleteExistingPageWithSameURL( |
| + SavePageResult result, |
| + 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; |
| + policy_controller_->GetPolicy(offline_page.client_id.name_space) |
| + .pages_allowed_per_url; |
| if (result == SavePageResult::SUCCESS && pages_allowed != kUnlimitedPages) { |
| GetPagesByOnlineURL( |
| - offline_pages_[offline_id].url, |
| + offline_page.url, |
| base::Bind(&OfflinePageModelImpl::OnPagesFoundWithSameURL, |
| - weak_ptr_factory_.GetWeakPtr(), client_id, offline_id, |
| + weak_ptr_factory_.GetWeakPtr(), offline_page, |
| pages_allowed)); |
| } else { |
| PostClearStorageIfNeededTask(); |
| } |
| - callback.Run(result, offline_id); |
| } |
| 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); |
| } |
| } |