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

Side by Side Diff: content/browser/appcache/appcache_storage_impl.cc

Issue 879393002: Expire appcaches that fail to update for "too long". (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 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 (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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698