OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/browser/appcache/appcache_storage_impl.h" | 5 #include "content/browser/appcache/appcache_storage_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <functional> | 8 #include <functional> |
9 #include <set> | 9 #include <set> |
10 #include <vector> | 10 #include <vector> |
(...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
461 // TODO(michaeln): histogram is fishing for clues to crbug/95101 | 461 // TODO(michaeln): histogram is fishing for clues to crbug/95101 |
462 if (!cache->get()->GetEntry(group_record_.manifest_url)) { | 462 if (!cache->get()->GetEntry(group_record_.manifest_url)) { |
463 AppCacheHistograms::AddMissingManifestDetectedAtCallsite( | 463 AppCacheHistograms::AddMissingManifestDetectedAtCallsite( |
464 AppCacheHistograms::CALLSITE_1); | 464 AppCacheHistograms::CALLSITE_1); |
465 } | 465 } |
466 } else { | 466 } else { |
467 (*group) = new AppCacheGroup( | 467 (*group) = new AppCacheGroup( |
468 storage_, group_record_.manifest_url, | 468 storage_, group_record_.manifest_url, |
469 group_record_.group_id); | 469 group_record_.group_id); |
470 group->get()->set_creation_time(group_record_.creation_time); | 470 group->get()->set_creation_time(group_record_.creation_time); |
| 471 group->get()->set_last_full_update_check_time( |
| 472 group_record_.last_full_update_check_time); |
| 473 group->get()->set_first_evictable_error_time( |
| 474 group_record_.first_evictable_error_time); |
471 group->get()->AddCache(cache->get()); | 475 group->get()->AddCache(cache->get()); |
472 | 476 |
473 // TODO(michaeln): histogram is fishing for clues to crbug/95101 | 477 // TODO(michaeln): histogram is fishing for clues to crbug/95101 |
474 if (!cache->get()->GetEntry(group_record_.manifest_url)) { | 478 if (!cache->get()->GetEntry(group_record_.manifest_url)) { |
475 AppCacheHistograms::AddMissingManifestDetectedAtCallsite( | 479 AppCacheHistograms::AddMissingManifestDetectedAtCallsite( |
476 AppCacheHistograms::CALLSITE_2); | 480 AppCacheHistograms::CALLSITE_2); |
477 } | 481 } |
478 } | 482 } |
479 DCHECK(group->get()->newest_complete_cache() == cache->get()); | 483 DCHECK(group->get()->newest_complete_cache() == cache->get()); |
480 | 484 |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
623 }; | 627 }; |
624 | 628 |
625 AppCacheStorageImpl::StoreGroupAndCacheTask::StoreGroupAndCacheTask( | 629 AppCacheStorageImpl::StoreGroupAndCacheTask::StoreGroupAndCacheTask( |
626 AppCacheStorageImpl* storage, AppCacheGroup* group, AppCache* newest_cache) | 630 AppCacheStorageImpl* storage, AppCacheGroup* group, AppCache* newest_cache) |
627 : StoreOrLoadTask(storage), group_(group), cache_(newest_cache), | 631 : StoreOrLoadTask(storage), group_(group), cache_(newest_cache), |
628 success_(false), would_exceed_quota_(false), | 632 success_(false), would_exceed_quota_(false), |
629 space_available_(-1), new_origin_usage_(-1) { | 633 space_available_(-1), new_origin_usage_(-1) { |
630 group_record_.group_id = group->group_id(); | 634 group_record_.group_id = group->group_id(); |
631 group_record_.manifest_url = group->manifest_url(); | 635 group_record_.manifest_url = group->manifest_url(); |
632 group_record_.origin = group_record_.manifest_url.GetOrigin(); | 636 group_record_.origin = group_record_.manifest_url.GetOrigin(); |
| 637 group_record_.last_full_update_check_time = |
| 638 group->last_full_update_check_time(); |
| 639 group_record_.first_evictable_error_time = |
| 640 group->first_evictable_error_time(); |
633 newest_cache->ToDatabaseRecords( | 641 newest_cache->ToDatabaseRecords( |
634 group, | 642 group, |
635 &cache_record_, &entry_records_, | 643 &cache_record_, &entry_records_, |
636 &intercept_namespace_records_, | 644 &intercept_namespace_records_, |
637 &fallback_namespace_records_, | 645 &fallback_namespace_records_, |
638 &online_whitelist_records_); | 646 &online_whitelist_records_); |
639 } | 647 } |
640 | 648 |
641 void AppCacheStorageImpl::StoreGroupAndCacheTask::GetQuotaThenSchedule() { | 649 void AppCacheStorageImpl::StoreGroupAndCacheTask::GetQuotaThenSchedule() { |
642 storage::QuotaManager* quota_manager = NULL; | 650 storage::QuotaManager* quota_manager = NULL; |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
695 group_record_.last_access_time = base::Time::Now(); | 703 group_record_.last_access_time = base::Time::Now(); |
696 success_ = database_->InsertGroup(&group_record_); | 704 success_ = database_->InsertGroup(&group_record_); |
697 } else { | 705 } else { |
698 DCHECK(group_record_.group_id == existing_group.group_id); | 706 DCHECK(group_record_.group_id == existing_group.group_id); |
699 DCHECK(group_record_.manifest_url == existing_group.manifest_url); | 707 DCHECK(group_record_.manifest_url == existing_group.manifest_url); |
700 DCHECK(group_record_.origin == existing_group.origin); | 708 DCHECK(group_record_.origin == existing_group.origin); |
701 | 709 |
702 database_->UpdateLastAccessTime(group_record_.group_id, | 710 database_->UpdateLastAccessTime(group_record_.group_id, |
703 base::Time::Now()); | 711 base::Time::Now()); |
704 | 712 |
| 713 database_->UpdateEvictionTimes( |
| 714 group_record_.group_id, |
| 715 group_record_.last_full_update_check_time, |
| 716 group_record_.first_evictable_error_time); |
| 717 |
705 AppCacheDatabase::CacheRecord cache; | 718 AppCacheDatabase::CacheRecord cache; |
706 if (database_->FindCacheForGroup(group_record_.group_id, &cache)) { | 719 if (database_->FindCacheForGroup(group_record_.group_id, &cache)) { |
707 // Get the set of response ids in the old cache. | 720 // Get the set of response ids in the old cache. |
708 std::set<int64> existing_response_ids; | 721 std::set<int64> existing_response_ids; |
709 database_->FindResponseIdsForCacheAsSet(cache.cache_id, | 722 database_->FindResponseIdsForCacheAsSet(cache.cache_id, |
710 &existing_response_ids); | 723 &existing_response_ids); |
711 | 724 |
712 // Remove those that remain in the new cache. | 725 // Remove those that remain in the new cache. |
713 std::vector<AppCacheDatabase::EntryRecord>::const_iterator entry_iter = | 726 std::vector<AppCacheDatabase::EntryRecord>::const_iterator entry_iter = |
714 entry_records_.begin(); | 727 entry_records_.begin(); |
(...skipping 631 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1346 tracked_objects::ScopedTracker tracking_profile( | 1359 tracked_objects::ScopedTracker tracking_profile( |
1347 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 1360 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
1348 "AppCacheStorageImpl::CommitLastAccessTimesTask")); | 1361 "AppCacheStorageImpl::CommitLastAccessTimesTask")); |
1349 database_->CommitLazyLastAccessTimes(); | 1362 database_->CommitLazyLastAccessTimes(); |
1350 } | 1363 } |
1351 | 1364 |
1352 protected: | 1365 protected: |
1353 ~CommitLastAccessTimesTask() override {} | 1366 ~CommitLastAccessTimesTask() override {} |
1354 }; | 1367 }; |
1355 | 1368 |
| 1369 // UpdateEvictionTimes ------- |
| 1370 |
| 1371 class AppCacheStorageImpl::UpdateEvictionTimesTask |
| 1372 : public DatabaseTask { |
| 1373 public: |
| 1374 UpdateEvictionTimesTask( |
| 1375 AppCacheStorageImpl* storage, AppCacheGroup* group) |
| 1376 : DatabaseTask(storage), group_id_(group->group_id()), |
| 1377 last_full_update_check_time_(group->last_full_update_check_time()), |
| 1378 first_evictable_error_time_(group->first_evictable_error_time()) { |
| 1379 } |
| 1380 |
| 1381 // DatabaseTask: |
| 1382 void Run() override; |
| 1383 |
| 1384 protected: |
| 1385 ~UpdateEvictionTimesTask() override {} |
| 1386 |
| 1387 private: |
| 1388 int64 group_id_; |
| 1389 base::Time last_full_update_check_time_; |
| 1390 base::Time first_evictable_error_time_; |
| 1391 }; |
| 1392 |
| 1393 void AppCacheStorageImpl::UpdateEvictionTimesTask::Run() { |
| 1394 tracked_objects::ScopedTracker tracking_profile( |
| 1395 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 1396 "AppCacheStorageImpl::UpdateEvictionTimes")); |
| 1397 database_->UpdateEvictionTimes(group_id_, |
| 1398 last_full_update_check_time_, |
| 1399 first_evictable_error_time_); |
| 1400 } |
| 1401 |
1356 // AppCacheStorageImpl --------------------------------------------------- | 1402 // AppCacheStorageImpl --------------------------------------------------- |
1357 | 1403 |
1358 AppCacheStorageImpl::AppCacheStorageImpl(AppCacheServiceImpl* service) | 1404 AppCacheStorageImpl::AppCacheStorageImpl(AppCacheServiceImpl* service) |
1359 : AppCacheStorage(service), | 1405 : AppCacheStorage(service), |
1360 is_incognito_(false), | 1406 is_incognito_(false), |
1361 is_response_deletion_scheduled_(false), | 1407 is_response_deletion_scheduled_(false), |
1362 did_start_deleting_responses_(false), | 1408 did_start_deleting_responses_(false), |
1363 last_deletable_response_rowid_(0), | 1409 last_deletable_response_rowid_(0), |
1364 database_(NULL), | 1410 database_(NULL), |
1365 is_disabled_(false), | 1411 is_disabled_(false), |
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1665 void AppCacheStorageImpl::MakeGroupObsolete(AppCacheGroup* group, | 1711 void AppCacheStorageImpl::MakeGroupObsolete(AppCacheGroup* group, |
1666 Delegate* delegate, | 1712 Delegate* delegate, |
1667 int response_code) { | 1713 int response_code) { |
1668 DCHECK(group && delegate); | 1714 DCHECK(group && delegate); |
1669 scoped_refptr<MakeGroupObsoleteTask> task( | 1715 scoped_refptr<MakeGroupObsoleteTask> task( |
1670 new MakeGroupObsoleteTask(this, group, response_code)); | 1716 new MakeGroupObsoleteTask(this, group, response_code)); |
1671 task->AddDelegate(GetOrCreateDelegateReference(delegate)); | 1717 task->AddDelegate(GetOrCreateDelegateReference(delegate)); |
1672 task->Schedule(); | 1718 task->Schedule(); |
1673 } | 1719 } |
1674 | 1720 |
| 1721 void AppCacheStorageImpl::StoreEvictionTimes(AppCacheGroup* group) { |
| 1722 scoped_refptr<UpdateEvictionTimesTask> task( |
| 1723 new UpdateEvictionTimesTask(this, group)); |
| 1724 task->Schedule(); |
| 1725 } |
| 1726 |
1675 AppCacheResponseReader* AppCacheStorageImpl::CreateResponseReader( | 1727 AppCacheResponseReader* AppCacheStorageImpl::CreateResponseReader( |
1676 const GURL& manifest_url, int64 group_id, int64 response_id) { | 1728 const GURL& manifest_url, int64 group_id, int64 response_id) { |
1677 return new AppCacheResponseReader(response_id, group_id, disk_cache()); | 1729 return new AppCacheResponseReader(response_id, group_id, disk_cache()); |
1678 } | 1730 } |
1679 | 1731 |
1680 AppCacheResponseWriter* AppCacheStorageImpl::CreateResponseWriter( | 1732 AppCacheResponseWriter* AppCacheStorageImpl::CreateResponseWriter( |
1681 const GURL& manifest_url, int64 group_id) { | 1733 const GURL& manifest_url, int64 group_id) { |
1682 return new AppCacheResponseWriter(NewResponseId(), group_id, disk_cache()); | 1734 return new AppCacheResponseWriter(NewResponseId(), group_id, disk_cache()); |
1683 } | 1735 } |
1684 | 1736 |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1921 | 1973 |
1922 void AppCacheStorageImpl::OnLazyCommitTimer() { | 1974 void AppCacheStorageImpl::OnLazyCommitTimer() { |
1923 lazy_commit_timer_.Stop(); | 1975 lazy_commit_timer_.Stop(); |
1924 if (is_disabled()) | 1976 if (is_disabled()) |
1925 return; | 1977 return; |
1926 scoped_refptr<DatabaseTask> task(new CommitLastAccessTimesTask(this)); | 1978 scoped_refptr<DatabaseTask> task(new CommitLastAccessTimesTask(this)); |
1927 task->Schedule(); | 1979 task->Schedule(); |
1928 } | 1980 } |
1929 | 1981 |
1930 } // namespace content | 1982 } // namespace content |
OLD | NEW |