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

Side by Side Diff: components/offline_pages/offline_page_model_impl.cc

Issue 2339693002: [Offline pages] Splitting Add and Update methods in OPMStore (Closed)
Patch Set: 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/offline_pages/offline_page_model_impl.h" 5 #include "components/offline_pages/offline_page_model_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 325
326 // Make a copy of the cached item and update it. The cached item should only 326 // Make a copy of the cached item and update it. The cached item should only
327 // be updated upon the successful store operation. 327 // be updated upon the successful store operation.
328 OfflinePageItem offline_page_item = iter->second; 328 OfflinePageItem offline_page_item = iter->second;
329 329
330 ReportPageHistogramsAfterAccess(offline_page_item, GetCurrentTime()); 330 ReportPageHistogramsAfterAccess(offline_page_item, GetCurrentTime());
331 331
332 offline_page_item.last_access_time = GetCurrentTime(); 332 offline_page_item.last_access_time = GetCurrentTime();
333 offline_page_item.access_count++; 333 offline_page_item.access_count++;
334 334
335 store_->AddOrUpdateOfflinePage( 335 std::vector<OfflinePageItem> items;
dewittj 2016/09/14 00:24:11 nit: std::vector<OfflinePageItem> items = { offlin
fgorski 2016/09/14 03:54:22 Done.
336 offline_page_item, 336 items.push_back(offline_page_item);
337 base::Bind(&OfflinePageModelImpl::OnMarkPageAccesseDone, 337 store_->UpdateOfflinePages(
338 weak_ptr_factory_.GetWeakPtr(), offline_page_item)); 338 items, base::Bind(&OfflinePageModelImpl::OnMarkPageAccesseDone,
339 weak_ptr_factory_.GetWeakPtr(), offline_page_item));
339 } 340 }
340 341
341 void OfflinePageModelImpl::DeletePagesByOfflineId( 342 void OfflinePageModelImpl::DeletePagesByOfflineId(
342 const std::vector<int64_t>& offline_ids, 343 const std::vector<int64_t>& offline_ids,
343 const DeletePageCallback& callback) { 344 const DeletePageCallback& callback) {
344 RunWhenLoaded(base::Bind(&OfflinePageModelImpl::DoDeletePagesByOfflineId, 345 RunWhenLoaded(base::Bind(&OfflinePageModelImpl::DoDeletePagesByOfflineId,
345 weak_ptr_factory_.GetWeakPtr(), offline_ids, 346 weak_ptr_factory_.GetWeakPtr(), offline_ids,
346 callback)); 347 callback));
347 } 348 }
348 349
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 archive_manager_->GetAllArchives( 622 archive_manager_->GetAllArchives(
622 base::Bind(&OfflinePageModelImpl::CheckMetadataConsistencyForArchivePaths, 623 base::Bind(&OfflinePageModelImpl::CheckMetadataConsistencyForArchivePaths,
623 weak_ptr_factory_.GetWeakPtr())); 624 weak_ptr_factory_.GetWeakPtr()));
624 } 625 }
625 626
626 void OfflinePageModelImpl::ExpirePages( 627 void OfflinePageModelImpl::ExpirePages(
627 const std::vector<int64_t>& offline_ids, 628 const std::vector<int64_t>& offline_ids,
628 const base::Time& expiration_time, 629 const base::Time& expiration_time,
629 const base::Callback<void(bool)>& callback) { 630 const base::Callback<void(bool)>& callback) {
630 std::vector<base::FilePath> paths_to_delete; 631 std::vector<base::FilePath> paths_to_delete;
632 std::vector<OfflinePageItem> items_to_update;
631 for (int64_t offline_id : offline_ids) { 633 for (int64_t offline_id : offline_ids) {
632 auto iter = offline_pages_.find(offline_id); 634 auto iter = offline_pages_.find(offline_id);
633 if (iter == offline_pages_.end()) 635 if (iter == offline_pages_.end())
634 continue; 636 continue;
635 637
636 OfflinePageItem offline_page = iter->second; 638 OfflinePageItem offline_page = iter->second;
637 paths_to_delete.push_back(offline_page.file_path); 639 paths_to_delete.push_back(offline_page.file_path);
638 offline_page.expiration_time = expiration_time; 640 offline_page.expiration_time = expiration_time;
639 641
640 store_->AddOrUpdateOfflinePage( 642 items_to_update.push_back(offline_page);
641 offline_page, base::Bind(&OfflinePageModelImpl::OnExpirePageDone,
642 weak_ptr_factory_.GetWeakPtr(), offline_id,
643 expiration_time));
644 } 643 }
644
645 store_->UpdateOfflinePages(items_to_update,
646 base::Bind(&OfflinePageModelImpl::OnExpirePageDone,
647 weak_ptr_factory_.GetWeakPtr(),
648 items_to_update, expiration_time));
649
645 if (paths_to_delete.empty()) { 650 if (paths_to_delete.empty()) {
646 callback.Run(true); 651 callback.Run(true);
647 return; 652 return;
648 } 653 }
649 archive_manager_->DeleteMultipleArchives(paths_to_delete, callback); 654 archive_manager_->DeleteMultipleArchives(paths_to_delete, callback);
650 } 655 }
651 656
652 void OfflinePageModelImpl::OnExpirePageDone(int64_t offline_id, 657 void OfflinePageModelImpl::OnExpirePageDone(
653 const base::Time& expiration_time, 658 const std::vector<OfflinePageItem>& expired_pages,
654 bool success) { 659 const base::Time& expiration_time,
660 bool success) {
655 UMA_HISTOGRAM_BOOLEAN("OfflinePages.ExpirePage.StoreUpdateResult", success); 661 UMA_HISTOGRAM_BOOLEAN("OfflinePages.ExpirePage.StoreUpdateResult", success);
656 if (!success) 662 if (!success)
657 return; 663 return;
658 const auto& iter = offline_pages_.find(offline_id); 664 for (auto& expired_page : expired_pages) {
659 if (iter != offline_pages_.end()) { 665 const auto& iter = offline_pages_.find(expired_page.offline_id);
666 if (iter == offline_pages_.end())
667 continue;
668
660 iter->second.expiration_time = expiration_time; 669 iter->second.expiration_time = expiration_time;
661 ClientId client_id = iter->second.client_id; 670 ClientId client_id = iter->second.client_id;
662 offline_event_logger_.RecordPageExpired(std::to_string(offline_id)); 671 offline_event_logger_.RecordPageExpired(
672 std::to_string(expired_page.offline_id));
663 base::HistogramBase* histogram = base::Histogram::FactoryGet( 673 base::HistogramBase* histogram = base::Histogram::FactoryGet(
664 AddHistogramSuffix(client_id, "OfflinePages.ExpirePage.PageLifetime"), 674 AddHistogramSuffix(client_id, "OfflinePages.ExpirePage.PageLifetime"),
665 1, base::TimeDelta::FromDays(30).InMinutes(), 50, 675 1, base::TimeDelta::FromDays(30).InMinutes(), 50,
666 base::HistogramBase::kUmaTargetedHistogramFlag); 676 base::HistogramBase::kUmaTargetedHistogramFlag);
667 histogram->Add((expiration_time - iter->second.creation_time).InMinutes()); 677 histogram->Add((expiration_time - iter->second.creation_time).InMinutes());
668 histogram = base::Histogram::FactoryGet( 678 histogram = base::Histogram::FactoryGet(
669 AddHistogramSuffix(client_id, 679 AddHistogramSuffix(client_id,
670 "OfflinePages.ExpirePage.TimeSinceLastAccess"), 680 "OfflinePages.ExpirePage.TimeSinceLastAccess"),
671 1, base::TimeDelta::FromDays(30).InMinutes(), 50, 681 1, base::TimeDelta::FromDays(30).InMinutes(), 50,
672 base::HistogramBase::kUmaTargetedHistogramFlag); 682 base::HistogramBase::kUmaTargetedHistogramFlag);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
718 728
719 if (archiver_result != ArchiverResult::SUCCESSFULLY_CREATED) { 729 if (archiver_result != ArchiverResult::SUCCESSFULLY_CREATED) {
720 SavePageResult result = ToSavePageResult(archiver_result); 730 SavePageResult result = ToSavePageResult(archiver_result);
721 InformSavePageDone(callback, result, client_id, offline_id); 731 InformSavePageDone(callback, result, client_id, offline_id);
722 DeletePendingArchiver(archiver); 732 DeletePendingArchiver(archiver);
723 return; 733 return;
724 } 734 }
725 OfflinePageItem offline_page_item(url, offline_id, client_id, file_path, 735 OfflinePageItem offline_page_item(url, offline_id, client_id, file_path,
726 file_size, start_time); 736 file_size, start_time);
727 offline_page_item.title = title; 737 offline_page_item.title = title;
728 store_->AddOrUpdateOfflinePage( 738 store_->AddOfflinePage(offline_page_item,
729 offline_page_item, base::Bind(&OfflinePageModelImpl::OnAddOfflinePageDone, 739 base::Bind(&OfflinePageModelImpl::OnAddOfflinePageDone,
730 weak_ptr_factory_.GetWeakPtr(), archiver, 740 weak_ptr_factory_.GetWeakPtr(), archiver,
731 callback, offline_page_item)); 741 callback, offline_page_item));
732 } 742 }
733 743
734 void OfflinePageModelImpl::OnAddOfflinePageDone( 744 void OfflinePageModelImpl::OnAddOfflinePageDone(
735 OfflinePageArchiver* archiver, 745 OfflinePageArchiver* archiver,
736 const SavePageCallback& callback, 746 const SavePageCallback& callback,
737 const OfflinePageItem& offline_page, 747 const OfflinePageItem& offline_page,
738 bool success) { 748 OfflinePageMetadataStore::ItemActionStatus status) {
739 SavePageResult result; 749 SavePageResult result;
740 if (success) { 750 if (status == OfflinePageMetadataStore::SUCCESS) {
741 offline_pages_[offline_page.offline_id] = offline_page; 751 offline_pages_[offline_page.offline_id] = offline_page;
742 result = SavePageResult::SUCCESS; 752 result = SavePageResult::SUCCESS;
743 ReportPageHistogramAfterSave(offline_page, GetCurrentTime()); 753 ReportPageHistogramAfterSave(offline_page, GetCurrentTime());
744 offline_event_logger_.RecordPageSaved( 754 offline_event_logger_.RecordPageSaved(
745 offline_page.client_id.name_space, offline_page.url.spec(), 755 offline_page.client_id.name_space, offline_page.url.spec(),
746 std::to_string(offline_page.offline_id)); 756 std::to_string(offline_page.offline_id));
747 } else { 757 } else {
748 result = SavePageResult::STORE_FAILURE; 758 result = status == OfflinePageMetadataStore::ALREADY_EXISTS
dewittj 2016/09/14 00:24:11 nit: make an else if or a switch statement and rem
fgorski 2016/09/14 03:54:22 Done.
759 ? SavePageResult::ALREADY_EXISTS
760 : SavePageResult::STORE_FAILURE;
749 } 761 }
750 InformSavePageDone(callback, result, offline_page.client_id, 762 InformSavePageDone(callback, result, offline_page.client_id,
751 offline_page.offline_id); 763 offline_page.offline_id);
752 if (result == SavePageResult::SUCCESS) { 764 if (result == SavePageResult::SUCCESS) {
753 DeleteExistingPagesWithSameURL(offline_page); 765 DeleteExistingPagesWithSameURL(offline_page);
754 } else { 766 } else {
755 PostClearStorageIfNeededTask(); 767 PostClearStorageIfNeededTask();
756 } 768 }
757 769
758 DeletePendingArchiver(archiver); 770 DeletePendingArchiver(archiver);
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
1081 } 1093 }
1082 1094
1083 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, task); 1095 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, task);
1084 } 1096 }
1085 1097
1086 base::Time OfflinePageModelImpl::GetCurrentTime() const { 1098 base::Time OfflinePageModelImpl::GetCurrentTime() const {
1087 return testing_clock_ ? testing_clock_->Now() : base::Time::Now(); 1099 return testing_clock_ ? testing_clock_->Now() : base::Time::Now();
1088 } 1100 }
1089 1101
1090 } // namespace offline_pages 1102 } // namespace offline_pages
OLDNEW
« no previous file with comments | « components/offline_pages/offline_page_model_impl.h ('k') | components/offline_pages/offline_page_test_store.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698