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