summaryrefslogtreecommitdiffstats
path: root/webkit/quota/quota_manager.cc
diff options
context:
space:
mode:
authorkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-20 13:02:53 +0000
committerkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-20 13:02:53 +0000
commit6eea807ff6ac38e61ff3e6721c1c0acaa6f213d2 (patch)
tree6efc69bc9671dcbbc54d2d72ce493aa2a35d6a60 /webkit/quota/quota_manager.cc
parent7f9a8e49ef9340c838562c0d4fa0750e8c172d43 (diff)
downloadchromium_src-6eea807ff6ac38e61ff3e6721c1c0acaa6f213d2.zip
chromium_src-6eea807ff6ac38e61ff3e6721c1c0acaa6f213d2.tar.gz
chromium_src-6eea807ff6ac38e61ff3e6721c1c0acaa6f213d2.tar.bz2
Implement NotifyStorageAccessed
BUG=61676 TEST=to be added Review URL: http://codereview.chromium.org/7011033 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@86075 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/quota/quota_manager.cc')
-rw-r--r--webkit/quota/quota_manager.cc98
1 files changed, 65 insertions, 33 deletions
diff --git a/webkit/quota/quota_manager.cc b/webkit/quota/quota_manager.cc
index 2d24e0b..7714a36 100644
--- a/webkit/quota/quota_manager.cc
+++ b/webkit/quota/quota_manager.cc
@@ -592,6 +592,33 @@ class QuotaManager::AvailableSpaceQueryTask : public QuotaThreadTask {
scoped_ptr<AvailableSpaceCallback> callback_;
};
+class QuotaManager::OriginAccessRecordDatabaseTask
+ : public QuotaManager::DatabaseTaskBase {
+ public:
+ OriginAccessRecordDatabaseTask(
+ QuotaManager* manager,
+ QuotaDatabase* database,
+ scoped_refptr<base::MessageLoopProxy> db_message_loop,
+ const GURL& origin,
+ StorageType type)
+ : DatabaseTaskBase(manager, database, db_message_loop),
+ origin_(origin),
+ type_(type) {}
+
+ protected:
+ virtual void RunOnTargetThread() OVERRIDE {
+ if (!database()->SetOriginLastAccessTime(
+ origin_, type_, base::Time::Now())) {
+ set_db_disabled(true);
+ }
+ }
+ virtual void DatabaseTaskCompleted() OVERRIDE {}
+
+ private:
+ GURL origin_;
+ StorageType type_;
+};
+
// QuotaManager ---------------------------------------------------------------
QuotaManager::QuotaManager(bool is_incognito,
@@ -654,38 +681,6 @@ void QuotaManager::RequestQuota(
delete callback;
}
-void QuotaManager::NotifyStorageAccessed(
- QuotaClient::ID client_id,
- const GURL& origin, StorageType type) {
- if (type == kStorageTypeTemporary && lru_origin_callback_.get()) {
- // Record the accessed origins while GetLRUOrigin task is runing
- // to filter out them from eviction.
- access_notified_origins_.insert(origin);
- }
-
- // TODO(michaeln): write me
-}
-
-void QuotaManager::NotifyStorageModified(
- QuotaClient::ID client_id,
- const GURL& origin, StorageType type, int64 delta) {
- LazyInitialize();
- GetUsageTracker(type)->UpdateUsageCache(client_id, origin, delta);
-}
-
-void QuotaManager::NotifyOriginInUse(const GURL& origin) {
- DCHECK(io_thread_->BelongsToCurrentThread());
- origins_in_use_[origin]++;
-}
-
-void QuotaManager::NotifyOriginNoLongerInUse(const GURL& origin) {
- DCHECK(io_thread_->BelongsToCurrentThread());
- DCHECK(IsOriginInUse(origin));
- int& count = origins_in_use_[origin];
- if (--count == 0)
- origins_in_use_.erase(origin);
-}
-
void QuotaManager::GetAvailableSpace(AvailableSpaceCallback* callback) {
scoped_refptr<AvailableSpaceQueryTask> task(
new AvailableSpaceQueryTask(this, db_thread_, profile_path_, callback));
@@ -796,6 +791,44 @@ void QuotaManager::RegisterClient(QuotaClient* client) {
clients_.push_back(client);
}
+void QuotaManager::NotifyStorageAccessed(
+ QuotaClient::ID client_id,
+ const GURL& origin, StorageType type) {
+ LazyInitialize();
+ if (type == kStorageTypeTemporary && lru_origin_callback_.get()) {
+ // Record the accessed origins while GetLRUOrigin task is runing
+ // to filter out them from eviction.
+ access_notified_origins_.insert(origin);
+ }
+
+ if (db_disabled_)
+ return;
+ scoped_refptr<OriginAccessRecordDatabaseTask> task(
+ new OriginAccessRecordDatabaseTask(
+ this, database_.get(), db_thread_, origin, type));
+ task->Start();
+}
+
+void QuotaManager::NotifyStorageModified(
+ QuotaClient::ID client_id,
+ const GURL& origin, StorageType type, int64 delta) {
+ LazyInitialize();
+ GetUsageTracker(type)->UpdateUsageCache(client_id, origin, delta);
+}
+
+void QuotaManager::NotifyOriginInUse(const GURL& origin) {
+ DCHECK(io_thread_->BelongsToCurrentThread());
+ origins_in_use_[origin]++;
+}
+
+void QuotaManager::NotifyOriginNoLongerInUse(const GURL& origin) {
+ DCHECK(io_thread_->BelongsToCurrentThread());
+ DCHECK(IsOriginInUse(origin));
+ int& count = origins_in_use_[origin];
+ if (--count == 0)
+ origins_in_use_.erase(origin);
+}
+
UsageTracker* QuotaManager::GetUsageTracker(StorageType type) const {
switch (type) {
case kStorageTypeTemporary:
@@ -826,7 +859,6 @@ void QuotaManager::GetCachedOrigins(
}
}
-// TODO(kinuko): add test for this.
void QuotaManager::DeleteOriginFromDatabase(
const GURL& origin, StorageType type) {
LazyInitialize();