summaryrefslogtreecommitdiffstats
path: root/storage
diff options
context:
space:
mode:
authorcalamity <calamity@chromium.org>2015-10-20 21:42:46 -0700
committerCommit bot <commit-bot@chromium.org>2015-10-21 04:43:45 +0000
commit8216dbd75d4fe78a7bccdb4b46505f3468f902ce (patch)
tree94b3e794eb7d6ee4dc267dd91cb3b7f8317027a2 /storage
parentfed69992a9de1357f400379e13fa87dbeaae14b4 (diff)
downloadchromium_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.cc81
-rw-r--r--storage/browser/quota/quota_manager.h2
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);