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

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, 5 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 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
« no previous file with comments | « content/browser/appcache/appcache_storage_impl.h ('k') | content/browser/appcache/appcache_update_job.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698