OLD | NEW |
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 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
373 | 373 |
374 void OfflinePageModelImpl::MarkPageAccessed(int64_t offline_id) { | 374 void OfflinePageModelImpl::MarkPageAccessed(int64_t offline_id) { |
375 RunWhenLoaded(base::Bind(&OfflinePageModelImpl::MarkPageAccessedWhenLoadDone, | 375 RunWhenLoaded(base::Bind(&OfflinePageModelImpl::MarkPageAccessedWhenLoadDone, |
376 weak_ptr_factory_.GetWeakPtr(), offline_id)); | 376 weak_ptr_factory_.GetWeakPtr(), offline_id)); |
377 } | 377 } |
378 | 378 |
379 void OfflinePageModelImpl::MarkPageAccessedWhenLoadDone(int64_t offline_id) { | 379 void OfflinePageModelImpl::MarkPageAccessedWhenLoadDone(int64_t offline_id) { |
380 DCHECK(is_loaded_); | 380 DCHECK(is_loaded_); |
381 | 381 |
382 auto iter = offline_pages_.find(offline_id); | 382 auto iter = offline_pages_.find(offline_id); |
383 if (iter == offline_pages_.end() || iter->second.IsExpired()) | 383 if (iter == offline_pages_.end()) |
384 return; | 384 return; |
385 | 385 |
386 // Make a copy of the cached item and update it. The cached item should only | 386 // Make a copy of the cached item and update it. The cached item should only |
387 // be updated upon the successful store operation. | 387 // be updated upon the successful store operation. |
388 OfflinePageItem offline_page_item = iter->second; | 388 OfflinePageItem offline_page_item = iter->second; |
389 | 389 |
390 ReportPageHistogramsAfterAccess(offline_page_item, GetCurrentTime()); | 390 ReportPageHistogramsAfterAccess(offline_page_item, GetCurrentTime()); |
391 | 391 |
392 offline_page_item.last_access_time = GetCurrentTime(); | 392 offline_page_item.last_access_time = GetCurrentTime(); |
393 offline_page_item.access_count++; | 393 offline_page_item.access_count++; |
(...skipping 13 matching lines...) Expand all Loading... |
407 } | 407 } |
408 | 408 |
409 void OfflinePageModelImpl::DoDeletePagesByOfflineId( | 409 void OfflinePageModelImpl::DoDeletePagesByOfflineId( |
410 const std::vector<int64_t>& offline_ids, | 410 const std::vector<int64_t>& offline_ids, |
411 const DeletePageCallback& callback) { | 411 const DeletePageCallback& callback) { |
412 DCHECK(is_loaded_); | 412 DCHECK(is_loaded_); |
413 | 413 |
414 std::vector<base::FilePath> paths_to_delete; | 414 std::vector<base::FilePath> paths_to_delete; |
415 for (const auto& offline_id : offline_ids) { | 415 for (const auto& offline_id : offline_ids) { |
416 auto iter = offline_pages_.find(offline_id); | 416 auto iter = offline_pages_.find(offline_id); |
417 if (iter != offline_pages_.end() && !iter->second.IsExpired()) { | 417 if (iter != offline_pages_.end()) { |
418 paths_to_delete.push_back(iter->second.file_path); | 418 paths_to_delete.push_back(iter->second.file_path); |
419 } | 419 } |
420 } | 420 } |
421 | 421 |
422 // If there're no pages to delete, return early. | 422 // If there're no pages to delete, return early. |
423 if (paths_to_delete.empty()) { | 423 if (paths_to_delete.empty()) { |
424 InformDeletePageDone(callback, DeletePageResult::SUCCESS); | 424 InformDeletePageDone(callback, DeletePageResult::SUCCESS); |
425 return; | 425 return; |
426 } | 426 } |
427 | 427 |
428 archive_manager_->DeleteMultipleArchives( | 428 archive_manager_->DeleteMultipleArchives( |
429 paths_to_delete, | 429 paths_to_delete, |
430 base::Bind(&OfflinePageModelImpl::OnDeleteArchiveFilesDone, | 430 base::Bind(&OfflinePageModelImpl::OnDeleteArchiveFilesDone, |
431 weak_ptr_factory_.GetWeakPtr(), offline_ids, callback)); | 431 weak_ptr_factory_.GetWeakPtr(), offline_ids, callback)); |
432 } | 432 } |
433 | 433 |
434 void OfflinePageModelImpl::DeletePagesByClientIds( | 434 void OfflinePageModelImpl::DeletePagesByClientIds( |
435 const std::vector<ClientId>& client_ids, | 435 const std::vector<ClientId>& client_ids, |
436 const DeletePageCallback& callback) { | 436 const DeletePageCallback& callback) { |
437 OfflinePageModelQueryBuilder builder; | 437 OfflinePageModelQueryBuilder builder; |
438 builder | 438 builder.SetClientIds(OfflinePageModelQuery::Requirement::INCLUDE_MATCHING, |
439 .SetClientIds(OfflinePageModelQuery::Requirement::INCLUDE_MATCHING, | 439 client_ids); |
440 client_ids) | |
441 .AllowExpiredPages(true); | |
442 auto delete_pages = base::Bind(&OfflinePageModelImpl::DeletePages, | 440 auto delete_pages = base::Bind(&OfflinePageModelImpl::DeletePages, |
443 weak_ptr_factory_.GetWeakPtr(), callback); | 441 weak_ptr_factory_.GetWeakPtr(), callback); |
444 RunWhenLoaded(base::Bind( | 442 RunWhenLoaded(base::Bind( |
445 &OfflinePageModelImpl::GetPagesMatchingQueryWhenLoadDone, | 443 &OfflinePageModelImpl::GetPagesMatchingQueryWhenLoadDone, |
446 weak_ptr_factory_.GetWeakPtr(), | 444 weak_ptr_factory_.GetWeakPtr(), |
447 base::Passed(builder.Build(GetPolicyController())), delete_pages)); | 445 base::Passed(builder.Build(GetPolicyController())), delete_pages)); |
448 } | 446 } |
449 | 447 |
450 void OfflinePageModelImpl::DeletePages( | 448 void OfflinePageModelImpl::DeletePages( |
451 const DeletePageCallback& callback, | 449 const DeletePageCallback& callback, |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
544 | 542 |
545 void OfflinePageModelImpl::GetAllPages( | 543 void OfflinePageModelImpl::GetAllPages( |
546 const MultipleOfflinePageItemCallback& callback) { | 544 const MultipleOfflinePageItemCallback& callback) { |
547 OfflinePageModelQueryBuilder builder; | 545 OfflinePageModelQueryBuilder builder; |
548 RunWhenLoaded( | 546 RunWhenLoaded( |
549 base::Bind(&OfflinePageModelImpl::GetPagesMatchingQueryWhenLoadDone, | 547 base::Bind(&OfflinePageModelImpl::GetPagesMatchingQueryWhenLoadDone, |
550 weak_ptr_factory_.GetWeakPtr(), | 548 weak_ptr_factory_.GetWeakPtr(), |
551 base::Passed(builder.Build(GetPolicyController())), callback)); | 549 base::Passed(builder.Build(GetPolicyController())), callback)); |
552 } | 550 } |
553 | 551 |
554 void OfflinePageModelImpl::GetAllPagesWithExpired( | |
555 const MultipleOfflinePageItemCallback& callback) { | |
556 OfflinePageModelQueryBuilder builder; | |
557 builder.AllowExpiredPages(true); | |
558 | |
559 RunWhenLoaded( | |
560 base::Bind(&OfflinePageModelImpl::GetPagesMatchingQueryWhenLoadDone, | |
561 weak_ptr_factory_.GetWeakPtr(), | |
562 base::Passed(builder.Build(GetPolicyController())), callback)); | |
563 } | |
564 | |
565 void OfflinePageModelImpl::GetOfflineIdsForClientId( | 552 void OfflinePageModelImpl::GetOfflineIdsForClientId( |
566 const ClientId& client_id, | 553 const ClientId& client_id, |
567 const MultipleOfflineIdCallback& callback) { | 554 const MultipleOfflineIdCallback& callback) { |
568 RunWhenLoaded( | 555 RunWhenLoaded( |
569 base::Bind(&OfflinePageModelImpl::GetOfflineIdsForClientIdWhenLoadDone, | 556 base::Bind(&OfflinePageModelImpl::GetOfflineIdsForClientIdWhenLoadDone, |
570 weak_ptr_factory_.GetWeakPtr(), client_id, callback)); | 557 weak_ptr_factory_.GetWeakPtr(), client_id, callback)); |
571 } | 558 } |
572 | 559 |
573 void OfflinePageModelImpl::GetOfflineIdsForClientIdWhenLoadDone( | 560 void OfflinePageModelImpl::GetOfflineIdsForClientIdWhenLoadDone( |
574 const ClientId& client_id, | 561 const ClientId& client_id, |
575 const MultipleOfflineIdCallback& callback) const { | 562 const MultipleOfflineIdCallback& callback) const { |
576 DCHECK(is_loaded_); | 563 DCHECK(is_loaded_); |
577 callback.Run(MaybeGetOfflineIdsForClientId(client_id)); | 564 callback.Run(MaybeGetOfflineIdsForClientId(client_id)); |
578 } | 565 } |
579 | 566 |
580 const std::vector<int64_t> OfflinePageModelImpl::MaybeGetOfflineIdsForClientId( | 567 const std::vector<int64_t> OfflinePageModelImpl::MaybeGetOfflineIdsForClientId( |
581 const ClientId& client_id) const { | 568 const ClientId& client_id) const { |
582 DCHECK(is_loaded_); | 569 DCHECK(is_loaded_); |
583 std::vector<int64_t> results; | 570 std::vector<int64_t> results; |
584 | 571 |
585 // We want only all pages, including those marked for deletion. | 572 // We want only all pages, including those marked for deletion. |
586 // TODO(fgorski): actually use an index rather than linear scan. | 573 // TODO(fgorski): actually use an index rather than linear scan. |
587 for (const auto& id_page_pair : offline_pages_) { | 574 for (const auto& id_page_pair : offline_pages_) { |
588 if (id_page_pair.second.client_id == client_id && | 575 if (id_page_pair.second.client_id == client_id) |
589 !id_page_pair.second.IsExpired()) { | |
590 results.push_back(id_page_pair.second.offline_id); | 576 results.push_back(id_page_pair.second.offline_id); |
591 } | |
592 } | 577 } |
593 return results; | 578 return results; |
594 } | 579 } |
595 | 580 |
596 void OfflinePageModelImpl::GetPageByOfflineId( | 581 void OfflinePageModelImpl::GetPageByOfflineId( |
597 int64_t offline_id, | 582 int64_t offline_id, |
598 const SingleOfflinePageItemCallback& callback) { | 583 const SingleOfflinePageItemCallback& callback) { |
599 std::vector<int64_t> query_ids; | 584 std::vector<int64_t> query_ids; |
600 query_ids.emplace_back(offline_id); | 585 query_ids.emplace_back(offline_id); |
601 | 586 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
638 DCHECK(is_loaded_); | 623 DCHECK(is_loaded_); |
639 std::vector<OfflinePageItem> result; | 624 std::vector<OfflinePageItem> result; |
640 | 625 |
641 GURL::Replacements remove_params; | 626 GURL::Replacements remove_params; |
642 remove_params.ClearRef(); | 627 remove_params.ClearRef(); |
643 | 628 |
644 GURL url_without_fragment = | 629 GURL url_without_fragment = |
645 url.ReplaceComponents(remove_params); | 630 url.ReplaceComponents(remove_params); |
646 | 631 |
647 for (const auto& id_page_pair : offline_pages_) { | 632 for (const auto& id_page_pair : offline_pages_) { |
648 if (id_page_pair.second.IsExpired()) | |
649 continue; | |
650 // First, search by last committed URL with fragment stripped. | 633 // First, search by last committed URL with fragment stripped. |
651 if (url_without_fragment == | 634 if (url_without_fragment == |
652 id_page_pair.second.url.ReplaceComponents(remove_params)) { | 635 id_page_pair.second.url.ReplaceComponents(remove_params)) { |
653 result.push_back(id_page_pair.second); | 636 result.push_back(id_page_pair.second); |
654 continue; | 637 continue; |
655 } | 638 } |
656 // Then, search by original request URL if |url_search_mode| wants it. | 639 // Then, search by original request URL if |url_search_mode| wants it. |
657 // Note that we want to do the exact match with fragment included. This is | 640 // Note that we want to do the exact match with fragment included. This is |
658 // because original URL is used for redirect purpose and it is always safer | 641 // because original URL is used for redirect purpose and it is always safer |
659 // to support the exact redirect. | 642 // to support the exact redirect. |
660 if (url_search_mode == URLSearchMode::SEARCH_BY_ALL_URLS && | 643 if (url_search_mode == URLSearchMode::SEARCH_BY_ALL_URLS && |
661 url == id_page_pair.second.original_url) { | 644 url == id_page_pair.second.original_url) { |
662 result.push_back(id_page_pair.second); | 645 result.push_back(id_page_pair.second); |
663 } | 646 } |
664 } | 647 } |
665 | 648 |
666 callback.Run(result); | 649 callback.Run(result); |
667 } | 650 } |
668 | 651 |
669 void OfflinePageModelImpl::CheckMetadataConsistency() { | 652 void OfflinePageModelImpl::CheckMetadataConsistency() { |
670 archive_manager_->GetAllArchives( | 653 archive_manager_->GetAllArchives( |
671 base::Bind(&OfflinePageModelImpl::CheckMetadataConsistencyForArchivePaths, | 654 base::Bind(&OfflinePageModelImpl::CheckMetadataConsistencyForArchivePaths, |
672 weak_ptr_factory_.GetWeakPtr())); | 655 weak_ptr_factory_.GetWeakPtr())); |
673 } | 656 } |
674 | 657 |
675 void OfflinePageModelImpl::ExpirePages( | |
676 const std::vector<int64_t>& offline_ids, | |
677 const base::Time& expiration_time, | |
678 const base::Callback<void(bool)>& callback) { | |
679 std::vector<base::FilePath> paths_to_delete; | |
680 std::vector<OfflinePageItem> items_to_update; | |
681 for (int64_t offline_id : offline_ids) { | |
682 auto iter = offline_pages_.find(offline_id); | |
683 if (iter == offline_pages_.end()) | |
684 continue; | |
685 | |
686 OfflinePageItem offline_page = iter->second; | |
687 paths_to_delete.push_back(offline_page.file_path); | |
688 offline_page.expiration_time = expiration_time; | |
689 | |
690 items_to_update.push_back(offline_page); | |
691 } | |
692 | |
693 store_->UpdateOfflinePages( | |
694 items_to_update, | |
695 base::Bind(&OfflinePageModelImpl::OnExpirePageDone, | |
696 weak_ptr_factory_.GetWeakPtr(), expiration_time)); | |
697 | |
698 if (paths_to_delete.empty()) { | |
699 callback.Run(true); | |
700 return; | |
701 } | |
702 archive_manager_->DeleteMultipleArchives(paths_to_delete, callback); | |
703 } | |
704 | |
705 void OfflinePageModelImpl::OnExpirePageDone( | |
706 const base::Time& expiration_time, | |
707 std::unique_ptr<OfflinePagesUpdateResult> result) { | |
708 UMA_HISTOGRAM_BOOLEAN("OfflinePages.ExpirePage.StoreUpdateResult", | |
709 result->updated_items.size() > 0); | |
710 for (const auto& expired_page : result->updated_items) { | |
711 const auto& iter = offline_pages_.find(expired_page.offline_id); | |
712 if (iter == offline_pages_.end()) | |
713 continue; | |
714 | |
715 iter->second.expiration_time = expiration_time; | |
716 ClientId client_id = iter->second.client_id; | |
717 offline_event_logger_.RecordPageExpired( | |
718 std::to_string(expired_page.offline_id)); | |
719 base::HistogramBase* histogram = base::Histogram::FactoryGet( | |
720 AddHistogramSuffix(client_id, "OfflinePages.ExpirePage.PageLifetime"), | |
721 1, base::TimeDelta::FromDays(30).InMinutes(), 50, | |
722 base::HistogramBase::kUmaTargetedHistogramFlag); | |
723 histogram->Add((expiration_time - iter->second.creation_time).InMinutes()); | |
724 histogram = base::Histogram::FactoryGet( | |
725 AddHistogramSuffix(client_id, | |
726 "OfflinePages.ExpirePage.TimeSinceLastAccess"), | |
727 1, base::TimeDelta::FromDays(30).InMinutes(), 50, | |
728 base::HistogramBase::kUmaTargetedHistogramFlag); | |
729 histogram->Add( | |
730 (expiration_time - iter->second.last_access_time).InMinutes()); | |
731 } | |
732 } | |
733 | |
734 ClientPolicyController* OfflinePageModelImpl::GetPolicyController() { | 658 ClientPolicyController* OfflinePageModelImpl::GetPolicyController() { |
735 return policy_controller_.get(); | 659 return policy_controller_.get(); |
736 } | 660 } |
737 | 661 |
738 OfflinePageMetadataStore* OfflinePageModelImpl::GetStoreForTesting() { | 662 OfflinePageMetadataStore* OfflinePageModelImpl::GetStoreForTesting() { |
739 return store_.get(); | 663 return store_.get(); |
740 } | 664 } |
741 | 665 |
742 OfflinePageStorageManager* OfflinePageModelImpl::GetStorageManager() { | 666 OfflinePageStorageManager* OfflinePageModelImpl::GetStorageManager() { |
743 return storage_manager_.get(); | 667 return storage_manager_.get(); |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1038 static_cast<int>(result), | 962 static_cast<int>(result), |
1039 static_cast<int>(DeletePageResult::RESULT_COUNT)); | 963 static_cast<int>(DeletePageResult::RESULT_COUNT)); |
1040 archive_manager_->GetStorageStats( | 964 archive_manager_->GetStorageStats( |
1041 base::Bind(&ReportStorageHistogramsAfterDelete)); | 965 base::Bind(&ReportStorageHistogramsAfterDelete)); |
1042 if (!callback.is_null()) | 966 if (!callback.is_null()) |
1043 callback.Run(result); | 967 callback.Run(result); |
1044 } | 968 } |
1045 | 969 |
1046 void OfflinePageModelImpl::CheckMetadataConsistencyForArchivePaths( | 970 void OfflinePageModelImpl::CheckMetadataConsistencyForArchivePaths( |
1047 const std::set<base::FilePath>& archive_paths) { | 971 const std::set<base::FilePath>& archive_paths) { |
1048 ExpirePagesMissingArchiveFile(archive_paths); | 972 DeletePagesMissingArchiveFile(archive_paths); |
1049 DeleteOrphanedArchives(archive_paths); | 973 DeleteOrphanedArchives(archive_paths); |
1050 } | 974 } |
1051 | 975 |
1052 void OfflinePageModelImpl::ExpirePagesMissingArchiveFile( | 976 void OfflinePageModelImpl::DeletePagesMissingArchiveFile( |
1053 const std::set<base::FilePath>& archive_paths) { | 977 const std::set<base::FilePath>& archive_paths) { |
1054 std::vector<int64_t> ids_of_pages_missing_archive_file; | 978 std::vector<int64_t> ids_of_pages_missing_archive_file; |
1055 for (const auto& id_page_pair : offline_pages_) { | 979 for (const auto& id_page_pair : offline_pages_) { |
1056 if (archive_paths.count(id_page_pair.second.file_path) == 0UL) | 980 if (archive_paths.count(id_page_pair.second.file_path) == 0UL) |
1057 ids_of_pages_missing_archive_file.push_back(id_page_pair.first); | 981 ids_of_pages_missing_archive_file.push_back(id_page_pair.first); |
1058 } | 982 } |
1059 | 983 |
1060 if (ids_of_pages_missing_archive_file.empty()) | 984 if (ids_of_pages_missing_archive_file.empty()) |
1061 return; | 985 return; |
1062 | 986 |
1063 ExpirePages( | 987 DeletePagesByOfflineId( |
1064 ids_of_pages_missing_archive_file, GetCurrentTime(), | 988 ids_of_pages_missing_archive_file, |
1065 base::Bind(&OfflinePageModelImpl::OnExpirePagesMissingArchiveFileDone, | 989 base::Bind(&OfflinePageModelImpl::OnDeletePagesMissingArchiveFileDone, |
1066 weak_ptr_factory_.GetWeakPtr(), | 990 weak_ptr_factory_.GetWeakPtr(), |
1067 ids_of_pages_missing_archive_file)); | 991 ids_of_pages_missing_archive_file)); |
1068 } | 992 } |
1069 | 993 |
1070 void OfflinePageModelImpl::OnExpirePagesMissingArchiveFileDone( | 994 void OfflinePageModelImpl::OnDeletePagesMissingArchiveFileDone( |
1071 const std::vector<int64_t>& offline_ids, | 995 const std::vector<int64_t>& offline_ids, |
1072 bool success) { | 996 DeletePageResult result) { |
1073 UMA_HISTOGRAM_COUNTS("OfflinePages.Consistency.PagesMissingArchiveFileCount", | 997 UMA_HISTOGRAM_COUNTS("OfflinePages.Consistency.PagesMissingArchiveFileCount", |
1074 static_cast<int32_t>(offline_ids.size())); | 998 static_cast<int32_t>(offline_ids.size())); |
1075 UMA_HISTOGRAM_BOOLEAN( | 999 UMA_HISTOGRAM_ENUMERATION( |
1076 "OfflinePages.Consistency.ExpirePagesMissingArchiveFileResult", success); | 1000 "OfflinePages.Consistency.DeletePagesMissingArchiveFileResult", |
| 1001 static_cast<int>(result), |
| 1002 static_cast<int>(DeletePageResult::RESULT_COUNT)); |
1077 } | 1003 } |
1078 | 1004 |
1079 void OfflinePageModelImpl::DeleteOrphanedArchives( | 1005 void OfflinePageModelImpl::DeleteOrphanedArchives( |
1080 const std::set<base::FilePath>& archive_paths) { | 1006 const std::set<base::FilePath>& archive_paths) { |
1081 // Archives are considered orphaned unless they are pointed to by some pages. | 1007 // Archives are considered orphaned unless they are pointed to by some pages. |
1082 std::set<base::FilePath> orphaned_archive_set(archive_paths); | 1008 std::set<base::FilePath> orphaned_archive_set(archive_paths); |
1083 for (const auto& id_page_pair : offline_pages_) | 1009 for (const auto& id_page_pair : offline_pages_) |
1084 orphaned_archive_set.erase(id_page_pair.second.file_path); | 1010 orphaned_archive_set.erase(id_page_pair.second.file_path); |
1085 | 1011 |
1086 if (orphaned_archive_set.empty()) | 1012 if (orphaned_archive_set.empty()) |
(...skipping 26 matching lines...) Expand all Loading... |
1113 void OfflinePageModelImpl::ClearStorageIfNeeded( | 1039 void OfflinePageModelImpl::ClearStorageIfNeeded( |
1114 const ClearStorageCallback& callback) { | 1040 const ClearStorageCallback& callback) { |
1115 // Create Storage Manager if necessary. | 1041 // Create Storage Manager if necessary. |
1116 if (!storage_manager_) { | 1042 if (!storage_manager_) { |
1117 storage_manager_.reset(new OfflinePageStorageManager( | 1043 storage_manager_.reset(new OfflinePageStorageManager( |
1118 this, GetPolicyController(), archive_manager_.get())); | 1044 this, GetPolicyController(), archive_manager_.get())); |
1119 } | 1045 } |
1120 storage_manager_->ClearPagesIfNeeded(callback); | 1046 storage_manager_->ClearPagesIfNeeded(callback); |
1121 } | 1047 } |
1122 | 1048 |
1123 void OfflinePageModelImpl::OnStorageCleared(size_t expired_page_count, | 1049 void OfflinePageModelImpl::OnStorageCleared(size_t deleted_page_count, |
1124 ClearStorageResult result) { | 1050 ClearStorageResult result) { |
1125 UMA_HISTOGRAM_ENUMERATION("OfflinePages.ClearStorageResult", | 1051 UMA_HISTOGRAM_ENUMERATION("OfflinePages.ClearStorageResult", |
1126 static_cast<int>(result), | 1052 static_cast<int>(result), |
1127 static_cast<int>(ClearStorageResult::RESULT_COUNT)); | 1053 static_cast<int>(ClearStorageResult::RESULT_COUNT)); |
1128 if (expired_page_count > 0) { | 1054 if (deleted_page_count > 0) { |
1129 UMA_HISTOGRAM_COUNTS("OfflinePages.ExpirePage.BatchSize", | 1055 UMA_HISTOGRAM_COUNTS("OfflinePages.ClearStorageBatchSize", |
1130 static_cast<int32_t>(expired_page_count)); | 1056 static_cast<int32_t>(deleted_page_count)); |
1131 } | 1057 } |
1132 } | 1058 } |
1133 | 1059 |
1134 void OfflinePageModelImpl::PostClearStorageIfNeededTask(bool delayed) { | 1060 void OfflinePageModelImpl::PostClearStorageIfNeededTask(bool delayed) { |
1135 base::TimeDelta delay = | 1061 base::TimeDelta delay = |
1136 delayed ? kStorageManagerStartingDelay : base::TimeDelta(); | 1062 delayed ? kStorageManagerStartingDelay : base::TimeDelta(); |
1137 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 1063 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
1138 FROM_HERE, base::Bind(&OfflinePageModelImpl::ClearStorageIfNeeded, | 1064 FROM_HERE, base::Bind(&OfflinePageModelImpl::ClearStorageIfNeeded, |
1139 weak_ptr_factory_.GetWeakPtr(), | 1065 weak_ptr_factory_.GetWeakPtr(), |
1140 base::Bind(&OfflinePageModelImpl::OnStorageCleared, | 1066 base::Bind(&OfflinePageModelImpl::OnStorageCleared, |
(...skipping 14 matching lines...) Expand all Loading... |
1155 } | 1081 } |
1156 | 1082 |
1157 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, task); | 1083 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, task); |
1158 } | 1084 } |
1159 | 1085 |
1160 base::Time OfflinePageModelImpl::GetCurrentTime() const { | 1086 base::Time OfflinePageModelImpl::GetCurrentTime() const { |
1161 return testing_clock_ ? testing_clock_->Now() : base::Time::Now(); | 1087 return testing_clock_ ? testing_clock_->Now() : base::Time::Now(); |
1162 } | 1088 } |
1163 | 1089 |
1164 } // namespace offline_pages | 1090 } // namespace offline_pages |
OLD | NEW |