diff options
author | calamity <calamity@chromium.org> | 2015-10-20 21:42:46 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-10-21 04:43:45 +0000 |
commit | 8216dbd75d4fe78a7bccdb4b46505f3468f902ce (patch) | |
tree | 94b3e794eb7d6ee4dc267dd91cb3b7f8317027a2 /storage | |
parent | fed69992a9de1357f400379e13fa87dbeaae14b4 (diff) | |
download | chromium_src-8216dbd75d4fe78a7bccdb4b46505f3468f902ce.zip chromium_src-8216dbd75d4fe78a7bccdb4b46505f3468f902ce.tar.gz chromium_src-8216dbd75d4fe78a7bccdb4b46505f3468f902ce.tar.bz2 |
Exclude in-use origins from storage evictions for all QuotaEvictionPolicies.
This CL adds exceptions to the QuotaEvictionPolicy interface which are
used to prevent in-use origins from being evicted and implements handling
of origin exceptions in the SiteEngagementEvictionPolicy.
BUG=464234
Review URL: https://codereview.chromium.org/1354543002
Cr-Commit-Position: refs/heads/master@{#355236}
Diffstat (limited to 'storage')
-rw-r--r-- | storage/browser/quota/quota_manager.cc | 81 | ||||
-rw-r--r-- | storage/browser/quota/quota_manager.h | 2 |
2 files changed, 42 insertions, 41 deletions
diff --git a/storage/browser/quota/quota_manager.cc b/storage/browser/quota/quota_manager.cc index 3187621..0052f2d 100644 --- a/storage/browser/quota/quota_manager.cc +++ b/storage/browser/quota/quota_manager.cc @@ -145,12 +145,12 @@ bool InitializeOnDBThread(int64* temporary_quota_override, } bool GetLRUOriginOnDBThread(StorageType type, - std::set<GURL>* exceptions, + const std::set<GURL>& exceptions, SpecialStoragePolicy* policy, GURL* url, QuotaDatabase* database) { DCHECK(database); - database->GetLRUOrigin(type, *exceptions, policy, url); + database->GetLRUOrigin(type, exceptions, policy, url); return true; } @@ -1510,6 +1510,36 @@ void QuotaManager::DidGetPersistentGlobalUsageForHistogram( unlimited_origins); } +std::set<GURL> QuotaManager::GetEvictionOriginExceptions() { + std::set<GURL> exceptions; + for (const auto& p : origins_in_use_) { + if (p.second > 0) + exceptions.insert(p.first); + } + + for (const auto& p : origins_in_error_) { + if (p.second > QuotaManager::kThresholdOfErrorsToBeBlacklisted) + exceptions.insert(p.first); + } + + return exceptions; +} + +void QuotaManager::DidGetEvictionOrigin(const GetOriginCallback& callback, + const GURL& origin) { + // Make sure the returned origin is (still) not in the origin_in_use_ set + // and has not been accessed since we posted the task. + if (ContainsKey(origins_in_use_, origin) || + ContainsKey(access_notified_origins_, origin)) { + callback.Run(GURL()); + } else { + callback.Run(origin); + } + access_notified_origins_.clear(); + + is_getting_eviction_origin_ = false; +} + void QuotaManager::GetEvictionOrigin(StorageType type, int64 global_quota, const GetOriginCallback& callback) { @@ -1529,8 +1559,9 @@ void QuotaManager::GetEvictionOrigin(StorageType type, GetUsageTracker(kStorageTypeTemporary)->GetCachedOriginsUsage(&usage_map); temporary_storage_eviction_policy_->GetEvictionOrigin( - special_storage_policy_, usage_map, global_quota, - did_get_origin_callback); + special_storage_policy_, GetEvictionOriginExceptions(), usage_map, + global_quota, did_get_origin_callback); + return; } @@ -1538,13 +1569,6 @@ void QuotaManager::GetEvictionOrigin(StorageType type, GetLRUOrigin(type, did_get_origin_callback); } -void QuotaManager::DidGetEvictionOrigin(const GetOriginCallback& callback, - const GURL& origin) { - callback.Run(origin); - - is_getting_eviction_origin_ = false; -} - void QuotaManager::EvictOriginData(const GURL& origin, StorageType type, const EvictOriginDataCallback& callback) { @@ -1589,31 +1613,12 @@ void QuotaManager::GetLRUOrigin(StorageType type, return; } - // TODO(calamity): make all QuotaEvictionPolicies aware of these exceptions. - std::set<GURL>* exceptions = new std::set<GURL>; - for (std::map<GURL, int>::const_iterator p = origins_in_use_.begin(); - p != origins_in_use_.end(); - ++p) { - if (p->second > 0) - exceptions->insert(p->first); - } - for (std::map<GURL, int>::const_iterator p = origins_in_error_.begin(); - p != origins_in_error_.end(); - ++p) { - if (p->second > QuotaManager::kThresholdOfErrorsToBeBlacklisted) - exceptions->insert(p->first); - } - GURL* url = new GURL; PostTaskAndReplyWithResultForDBThread( FROM_HERE, - base::Bind(&GetLRUOriginOnDBThread, - type, - base::Owned(exceptions), - special_storage_policy_, - base::Unretained(url)), - base::Bind(&QuotaManager::DidGetLRUOrigin, - weak_factory_.GetWeakPtr(), + base::Bind(&GetLRUOriginOnDBThread, type, GetEvictionOriginExceptions(), + special_storage_policy_, base::Unretained(url)), + base::Bind(&QuotaManager::DidGetLRUOrigin, weak_factory_.GetWeakPtr(), base::Owned(url))); } @@ -1671,14 +1676,8 @@ void QuotaManager::DidInitialize(int64* temporary_quota_override, void QuotaManager::DidGetLRUOrigin(const GURL* origin, bool success) { DidDatabaseWork(success); - // Make sure the returned origin is (still) not in the origin_in_use_ set - // and has not been accessed since we posted the task. - if (origins_in_use_.find(*origin) != origins_in_use_.end() || - access_notified_origins_.find(*origin) != access_notified_origins_.end()) - lru_origin_callback_.Run(GURL()); - else - lru_origin_callback_.Run(*origin); - access_notified_origins_.clear(); + + lru_origin_callback_.Run(*origin); lru_origin_callback_.Reset(); } diff --git a/storage/browser/quota/quota_manager.h b/storage/browser/quota/quota_manager.h index 5780cbb..bacf80b 100644 --- a/storage/browser/quota/quota_manager.h +++ b/storage/browser/quota/quota_manager.h @@ -82,6 +82,7 @@ class STORAGE_EXPORT QuotaEvictionPolicy { // are no evictable origins. virtual void GetEvictionOrigin( const scoped_refptr<SpecialStoragePolicy>& special_storage_policy, + const std::set<GURL>& exceptions, const std::map<GURL, int64>& usage_map, int64 global_quota, const GetOriginCallback& callback) = 0; @@ -393,6 +394,7 @@ class STORAGE_EXPORT QuotaManager void DidGetPersistentGlobalUsageForHistogram(int64 usage, int64 unlimited_usage); + std::set<GURL> GetEvictionOriginExceptions(); void DidGetEvictionOrigin(const GetOriginCallback& callback, const GURL& origin); |