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

Unified Diff: components/offline_pages/offline_page_model_impl.cc

Issue 2343743002: [Offline pages] Updating the UpdateCallback in OPMStoreSQL (Closed)
Patch Set: Addressing final feedback Created 4 years, 3 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_impl.cc
diff --git a/components/offline_pages/offline_page_model_impl.cc b/components/offline_pages/offline_page_model_impl.cc
index cfb67fc33925267e49eabbd588ec40d6ad2eda6f..3fab9ae3ed8e4c5bc4bdd71c3680ad71755a57e1 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,43 @@ 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 part of the loop is explicitly broken out, as it should be gone in
+ // 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.
+ // TODO(fgorski): We need a better callback interface for the Remove action on
+ // the this class. Currently removing an item that does not exist is
+ // considered a success, but not called out as such to the caller.
+ DeletePageResult delete_result;
+ if (result->store_state == StoreState::LOADED)
+ delete_result = DeletePageResult::SUCCESS;
+ else
+ delete_result = DeletePageResult::STORE_FAILURE;
+
+ InformDeletePageDone(callback, delete_result);
}
void OfflinePageModelImpl::InformDeletePageDone(

Powered by Google App Engine
This is Rietveld 408576698