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 cfb67fc33925267e49eabbd588ec40d6ad2eda6f..925bc5099e0c1f25298a3761f2adfd46aa5ed0b5 100644 |
| --- a/components/offline_pages/offline_page_model_impl.cc |
| +++ b/components/offline_pages/offline_page_model_impl.cc |
| @@ -236,23 +236,20 @@ void ReportPageHistogramAfterSave( |
| void ReportPageHistogramsAfterDelete( |
| const std::map<int64_t, OfflinePageItem>& offline_pages, |
| - const std::vector<int64_t>& deleted_offline_ids, |
| + const std::vector<OfflinePageItem>& deleted_pages, |
| const base::Time& delete_time) { |
| const int max_minutes = base::TimeDelta::FromDays(365).InMinutes(); |
| int64_t total_size = 0; |
| - for (int64_t offline_id : deleted_offline_ids) { |
| - auto iter = offline_pages.find(offline_id); |
| - if (iter == offline_pages.end()) |
| - continue; |
| - total_size += iter->second.file_size; |
| - ClientId client_id = iter->second.client_id; |
| + for (const auto& page : deleted_pages) { |
| + total_size += page.file_size; |
| + ClientId client_id = page.client_id; |
| if (client_id.name_space == kDownloadNamespace) { |
| int remaining_pages_with_url; |
| GetMatchingURLCountAndMostRecentCreationTime( |
| - offline_pages, iter->second.client_id.name_space, iter->second.url, |
| - base::Time::Max(), &remaining_pages_with_url, nullptr); |
| + offline_pages, page.client_id.name_space, page.url, base::Time::Max(), |
| + &remaining_pages_with_url, nullptr); |
| UMA_HISTOGRAM_CUSTOM_COUNTS( |
| "OfflinePages.DownloadDeletedPageDuplicateCount", |
| remaining_pages_with_url, 1, 20, 10); |
| @@ -264,37 +261,35 @@ void ReportPageHistogramsAfterDelete( |
| base::HistogramBase* histogram = base::Histogram::FactoryGet( |
| AddHistogramSuffix(client_id, "OfflinePages.PageLifetime"), |
| 1, max_minutes, 100, base::HistogramBase::kUmaTargetedHistogramFlag); |
| - histogram->Add((delete_time - iter->second.creation_time).InMinutes()); |
| + histogram->Add((delete_time - page.creation_time).InMinutes()); |
| histogram = base::Histogram::FactoryGet( |
| AddHistogramSuffix( |
| client_id, "OfflinePages.DeletePage.TimeSinceLastOpen"), |
| 1, max_minutes, 100, base::HistogramBase::kUmaTargetedHistogramFlag); |
| - histogram->Add((delete_time - iter->second.last_access_time).InMinutes()); |
| + histogram->Add((delete_time - page.last_access_time).InMinutes()); |
| histogram = base::Histogram::FactoryGet( |
| AddHistogramSuffix( |
| client_id, "OfflinePages.DeletePage.LastOpenToCreated"), |
| 1, max_minutes, 100, base::HistogramBase::kUmaTargetedHistogramFlag); |
| - histogram->Add( |
| - (iter->second.last_access_time - iter->second.creation_time). |
| - InMinutes()); |
| + histogram->Add((page.last_access_time - page.creation_time).InMinutes()); |
| // Reported as Kb between 1Kb and 10Mb. |
| histogram = base::Histogram::FactoryGet( |
| AddHistogramSuffix(client_id, "OfflinePages.DeletePage.PageSize"), |
| 1, 10000, 50, base::HistogramBase::kUmaTargetedHistogramFlag); |
| - histogram->Add(iter->second.file_size / 1024); |
| + histogram->Add(page.file_size / 1024); |
| histogram = base::Histogram::FactoryGet( |
| AddHistogramSuffix(client_id, "OfflinePages.DeletePage.AccessCount"), |
| 1, 1000000, 50, base::HistogramBase::kUmaTargetedHistogramFlag); |
| - histogram->Add(iter->second.access_count); |
| + histogram->Add(page.access_count); |
| } |
| - if (deleted_offline_ids.size() > 1) { |
| + if (deleted_pages.size() > 1) { |
| UMA_HISTOGRAM_COUNTS("OfflinePages.BatchDelete.Count", |
| - static_cast<int32_t>(deleted_offline_ids.size())); |
| + static_cast<int32_t>(deleted_pages.size())); |
| UMA_HISTOGRAM_MEMORY_KB( |
| "OfflinePages.BatchDelete.TotalPageSize", total_size / 1024); |
| } |
| @@ -689,10 +684,10 @@ void OfflinePageModelImpl::ExpirePages( |
| items_to_update.push_back(offline_page); |
| } |
| - store_->UpdateOfflinePages(items_to_update, |
| - base::Bind(&OfflinePageModelImpl::OnExpirePageDone, |
| - weak_ptr_factory_.GetWeakPtr(), |
| - items_to_update, expiration_time)); |
| + store_->UpdateOfflinePages( |
| + items_to_update, |
| + base::Bind(&OfflinePageModelImpl::OnExpirePageDone, |
| + weak_ptr_factory_.GetWeakPtr(), expiration_time)); |
| if (paths_to_delete.empty()) { |
| callback.Run(true); |
| @@ -702,13 +697,11 @@ void OfflinePageModelImpl::ExpirePages( |
| } |
| void OfflinePageModelImpl::OnExpirePageDone( |
| - const std::vector<OfflinePageItem>& expired_pages, |
| const base::Time& expiration_time, |
| - bool success) { |
| - UMA_HISTOGRAM_BOOLEAN("OfflinePages.ExpirePage.StoreUpdateResult", success); |
| - if (!success) |
| - return; |
| - for (auto& expired_page : expired_pages) { |
| + std::unique_ptr<StoreUpdateResult> result) { |
| + UMA_HISTOGRAM_BOOLEAN("OfflinePages.ExpirePage.StoreUpdateResult", |
| + result->updated_items.size() > 0); |
| + for (const auto& expired_page : result->updated_items) { |
| const auto& iter = offline_pages_.find(expired_page.offline_id); |
| if (iter == offline_pages_.end()) |
| continue; |
| @@ -792,9 +785,9 @@ void OfflinePageModelImpl::OnAddOfflinePageDone( |
| OfflinePageArchiver* archiver, |
| const SavePageCallback& callback, |
| const OfflinePageItem& offline_page, |
| - OfflinePageMetadataStore::ItemActionStatus status) { |
| + ItemActionStatus status) { |
| SavePageResult result; |
| - if (status == OfflinePageMetadataStore::SUCCESS) { |
| + if (status == ItemActionStatus::SUCCESS) { |
| offline_pages_[offline_page.offline_id] = offline_page; |
| result = SavePageResult::SUCCESS; |
| ReportPageHistogramAfterSave(offline_pages_, offline_page, |
| @@ -802,7 +795,7 @@ void OfflinePageModelImpl::OnAddOfflinePageDone( |
| offline_event_logger_.RecordPageSaved( |
| offline_page.client_id.name_space, offline_page.url.spec(), |
| std::to_string(offline_page.offline_id)); |
| - } else if (status == OfflinePageMetadataStore::ALREADY_EXISTS) { |
| + } else if (status == ItemActionStatus::ALREADY_EXISTS) { |
| result = SavePageResult::ALREADY_EXISTS; |
| } else { |
| result = SavePageResult::STORE_FAILURE; |
| @@ -821,9 +814,9 @@ void OfflinePageModelImpl::OnAddOfflinePageDone( |
| void OfflinePageModelImpl::OnMarkPageAccesseDone( |
| const OfflinePageItem& offline_page_item, |
| - bool success) { |
| + std::unique_ptr<StoreUpdateResult> result) { |
| // Update the item in the cache only upon success. |
| - if (success) |
| + if (result->updated_items.size() > 0) |
| offline_pages_[offline_page_item.offline_id] = offline_page_item; |
| // No need to fire OfflinePageModelChanged event since updating access info |
| @@ -951,33 +944,40 @@ void OfflinePageModelImpl::OnDeleteArchiveFilesDone( |
| } |
| store_->RemoveOfflinePages( |
| - offline_ids, |
| - base::Bind(&OfflinePageModelImpl::OnRemoveOfflinePagesDone, |
| - weak_ptr_factory_.GetWeakPtr(), offline_ids, callback)); |
| + offline_ids, base::Bind(&OfflinePageModelImpl::OnRemoveOfflinePagesDone, |
| + weak_ptr_factory_.GetWeakPtr(), callback)); |
| } |
| void OfflinePageModelImpl::OnRemoveOfflinePagesDone( |
| - const std::vector<int64_t>& offline_ids, |
| const DeletePageCallback& callback, |
| - bool success) { |
| - ReportPageHistogramsAfterDelete( |
| - offline_pages_, offline_ids, GetCurrentTime()); |
| - |
| - for (int64_t offline_id : offline_ids) { |
| + std::unique_ptr<StoreUpdateResult> result) { |
| + ReportPageHistogramsAfterDelete(offline_pages_, result->updated_items, |
| + GetCurrentTime()); |
| + |
| + // This pat of the loop is explicitly broken out, as it should be gone in |
|
dougarnett
2016/09/20 16:12:44
pat => part ?
fgorski
2016/09/20 18:43:55
Done.
|
| + // fully asynchronous code. |
| + for (const auto& page : result->updated_items) { |
| + int64_t offline_id = page.offline_id; |
| offline_event_logger_.RecordPageDeleted(std::to_string(offline_id)); |
| auto iter = offline_pages_.find(offline_id); |
| if (iter == offline_pages_.end()) |
| continue; |
| - FOR_EACH_OBSERVER( |
| - Observer, observers_, |
| - OfflinePageDeleted(iter->second.offline_id, iter->second.client_id)); |
| offline_pages_.erase(iter); |
| } |
| - // Deleting multiple pages always succeeds when it gets to this point. |
| - InformDeletePageDone(callback, (success || offline_ids.size() > 1) |
| - ? DeletePageResult::SUCCESS |
| - : DeletePageResult::STORE_FAILURE); |
| + for (const auto& page : result->updated_items) { |
| + FOR_EACH_OBSERVER(Observer, observers_, |
| + OfflinePageDeleted(page.offline_id, page.client_id)); |
| + } |
| + |
| + // TODO(fgorski): React the FAILED_INITIALIZATION, FAILED_RESET here. |
| + DeletePageResult delete_result; |
| + if (result->store_state == StoreState::LOADED) |
| + delete_result = DeletePageResult::SUCCESS; |
|
dougarnett
2016/09/20 16:12:44
Is this mapping accurate? Does the DeletePageResul
fgorski
2016/09/20 18:43:55
1. I agree we have some work to do here. For now w
dougarnett
2016/09/20 20:22:10
Ah, ok, I see the deprecated comment on NOT_FOUND
|
| + else |
| + delete_result = DeletePageResult::STORE_FAILURE; |
| + |
| + InformDeletePageDone(callback, delete_result); |
| } |
| void OfflinePageModelImpl::InformDeletePageDone( |