diff options
author | kinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-20 13:02:53 +0000 |
---|---|---|
committer | kinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-20 13:02:53 +0000 |
commit | 6eea807ff6ac38e61ff3e6721c1c0acaa6f213d2 (patch) | |
tree | 6efc69bc9671dcbbc54d2d72ce493aa2a35d6a60 /webkit/quota/quota_manager.cc | |
parent | 7f9a8e49ef9340c838562c0d4fa0750e8c172d43 (diff) | |
download | chromium_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.cc | 98 |
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(); |