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-07-07 10:55:53 +0000
committerkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-07 10:55:53 +0000
commitcac86678d0eaf778eac8bb14050533bcf74da686 (patch)
tree9443080890b0548b287fe60b1828cccd3f29c5d2 /webkit/quota/quota_manager.cc
parentadc2e54010d398e86d6d12f9655563f2c71f846c (diff)
downloadchromium_src-cac86678d0eaf778eac8bb14050533bcf74da686.zip
chromium_src-cac86678d0eaf778eac8bb14050533bcf74da686.tar.gz
chromium_src-cac86678d0eaf778eac8bb14050533bcf74da686.tar.bz2
Implement QM::GetOriginsModifiedSince for browser data deleter support
BUG=86308 TEST={QuotaDatabaseTest,QuotaManagerTest}.OriginModifiedSince Review URL: http://codereview.chromium.org/7168019 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@91690 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/quota/quota_manager.cc')
-rw-r--r--webkit/quota/quota_manager.cc173
1 files changed, 128 insertions, 45 deletions
diff --git a/webkit/quota/quota_manager.cc b/webkit/quota/quota_manager.cc
index 027df27..72722c4 100644
--- a/webkit/quota/quota_manager.cc
+++ b/webkit/quota/quota_manager.cc
@@ -485,10 +485,10 @@ class QuotaManager::InitializeTask : public QuotaManager::DatabaseTaskBase {
int64 temporary_storage_quota_;
};
-class QuotaManager::TemporaryGlobalQuotaUpdateTask
+class QuotaManager::UpdateTemporaryGlobalQuotaTask
: public QuotaManager::DatabaseTaskBase {
public:
- TemporaryGlobalQuotaUpdateTask(
+ UpdateTemporaryGlobalQuotaTask(
QuotaManager* manager,
int64 new_quota,
QuotaCallback* callback)
@@ -519,10 +519,10 @@ class QuotaManager::TemporaryGlobalQuotaUpdateTask
scoped_ptr<QuotaCallback> callback_;
};
-class QuotaManager::PersistentHostQuotaQueryTask
+class QuotaManager::GetPersistentHostQuotaTask
: public QuotaManager::DatabaseTaskBase {
public:
- PersistentHostQuotaQueryTask(
+ GetPersistentHostQuotaTask(
QuotaManager* manager,
const std::string& host,
HostQuotaCallback* callback)
@@ -546,10 +546,10 @@ class QuotaManager::PersistentHostQuotaQueryTask
scoped_ptr<HostQuotaCallback> callback_;
};
-class QuotaManager::PersistentHostQuotaUpdateTask
+class QuotaManager::UpdatePersistentHostQuotaTask
: public QuotaManager::DatabaseTaskBase {
public:
- PersistentHostQuotaUpdateTask(
+ UpdatePersistentHostQuotaTask(
QuotaManager* manager,
const std::string& host,
int new_quota,
@@ -633,10 +633,10 @@ class QuotaManager::GetLRUOriginTask
GURL url_;
};
-class QuotaManager::OriginDeletionDatabaseTask
+class QuotaManager::DeleteOriginInfo
: public QuotaManager::DatabaseTaskBase {
public:
- OriginDeletionDatabaseTask(
+ DeleteOriginInfo(
QuotaManager* manager,
const GURL& origin,
StorageType type)
@@ -646,7 +646,7 @@ class QuotaManager::OriginDeletionDatabaseTask
protected:
virtual void RunOnTargetThread() OVERRIDE {
- if (!database()->DeleteOriginLastAccessTime(origin_, type_)) {
+ if (!database()->DeleteOriginInfo(origin_, type_)) {
set_db_disabled(true);
}
}
@@ -657,10 +657,10 @@ class QuotaManager::OriginDeletionDatabaseTask
StorageType type_;
};
-class QuotaManager::TemporaryOriginsRegistrationTask
+class QuotaManager::InitializeTemporaryOriginsInfoTask
: public QuotaManager::DatabaseTaskBase {
public:
- TemporaryOriginsRegistrationTask(
+ InitializeTemporaryOriginsInfoTask(
QuotaManager* manager,
UsageTracker* temporary_usage_tracker)
: DatabaseTaskBase(manager),
@@ -673,9 +673,8 @@ class QuotaManager::TemporaryOriginsRegistrationTask
virtual void RunOnTargetThread() OVERRIDE {
if (!database()->IsOriginDatabaseBootstrapped()) {
// Register existing origins with 0 last time access.
- if (!database()->RegisterOrigins(origins_,
- kStorageTypeTemporary,
- base::Time::FromInternalValue(0))) {
+ if (!database()->RegisterInitialOriginInfo(
+ origins_, kStorageTypeTemporary)) {
set_db_disabled(true);
} else {
has_registered_origins_ = true;
@@ -712,7 +711,7 @@ class QuotaManager::AvailableSpaceQueryTask : public QuotaThreadTask {
}
virtual void Aborted() OVERRIDE {
- callback_->Run(kQuotaErrorAbort, space_);
+ callback_->Run(kQuotaErrorAbort, -1);
}
virtual void Completed() OVERRIDE {
@@ -725,10 +724,10 @@ class QuotaManager::AvailableSpaceQueryTask : public QuotaThreadTask {
scoped_ptr<AvailableSpaceCallback> callback_;
};
-class QuotaManager::OriginAccessRecordDatabaseTask
+class QuotaManager::UpdateAccesTimeTask
: public QuotaManager::DatabaseTaskBase {
public:
- OriginAccessRecordDatabaseTask(
+ UpdateAccesTimeTask(
QuotaManager* manager,
const GURL& origin,
StorageType type,
@@ -752,6 +751,70 @@ class QuotaManager::OriginAccessRecordDatabaseTask
base::Time accessed_time_;
};
+class QuotaManager::UpdateModifiedTimeTask
+ : public QuotaManager::DatabaseTaskBase {
+ public:
+ UpdateModifiedTimeTask(
+ QuotaManager* manager,
+ const GURL& origin,
+ StorageType type,
+ base::Time modified_time)
+ : DatabaseTaskBase(manager),
+ origin_(origin),
+ type_(type),
+ modified_time_(modified_time) {}
+
+ protected:
+ virtual void RunOnTargetThread() OVERRIDE {
+ if (!database()->SetOriginLastModifiedTime(
+ origin_, type_, modified_time_)) {
+ set_db_disabled(true);
+ }
+ }
+ virtual void DatabaseTaskCompleted() OVERRIDE {}
+
+ private:
+ GURL origin_;
+ StorageType type_;
+ base::Time modified_time_;
+};
+
+class QuotaManager::GetModifiedSinceTask
+ : public QuotaManager::DatabaseTaskBase {
+ public:
+ GetModifiedSinceTask(
+ QuotaManager* manager,
+ StorageType type,
+ base::Time modified_since,
+ GetOriginsCallback* callback)
+ : DatabaseTaskBase(manager),
+ type_(type),
+ modified_since_(modified_since),
+ callback_(callback) {}
+
+ protected:
+ virtual void RunOnTargetThread() OVERRIDE {
+ if (!database()->GetOriginsModifiedSince(
+ type_, &origins_, modified_since_)) {
+ set_db_disabled(true);
+ }
+ }
+
+ virtual void DatabaseTaskCompleted() OVERRIDE {
+ callback_->Run(origins_);
+ }
+
+ virtual void Aborted() OVERRIDE {
+ callback_->Run(std::set<GURL>());
+ }
+
+ private:
+ StorageType type_;
+ base::Time modified_since_;
+ std::set<GURL> origins_;
+ scoped_ptr<GetOriginsCallback> callback_;
+};
+
class QuotaManager::DumpQuotaTableTask
: public QuotaManager::DatabaseTaskBase {
private:
@@ -777,7 +840,7 @@ class QuotaManager::DumpQuotaTableTask
}
virtual void Aborted() OVERRIDE {
- callback_->Run(entries_);
+ callback_->Run(TableEntries());
}
virtual void DatabaseTaskCompleted() OVERRIDE {
@@ -794,17 +857,17 @@ class QuotaManager::DumpQuotaTableTask
TableEntries entries_;
};
-class QuotaManager::DumpLastAccessTimeTableTask
+class QuotaManager::DumpOriginInfoTableTask
: public QuotaManager::DatabaseTaskBase {
private:
- typedef QuotaManager::DumpLastAccessTimeTableTask self_type;
- typedef QuotaManager::DumpLastAccessTimeTableCallback Callback;
- typedef QuotaManager::LastAccessTimeTableEntry TableEntry;
- typedef QuotaManager::LastAccessTimeTableEntries TableEntries;
- typedef QuotaDatabase::LastAccessTimeTableCallback TableCallback;
+ typedef QuotaManager::DumpOriginInfoTableTask self_type;
+ typedef QuotaManager::DumpOriginInfoTableCallback Callback;
+ typedef QuotaManager::OriginInfoTableEntry TableEntry;
+ typedef QuotaManager::OriginInfoTableEntries TableEntries;
+ typedef QuotaDatabase::OriginInfoTableCallback TableCallback;
public:
- DumpLastAccessTimeTableTask(
+ DumpOriginInfoTableTask(
QuotaManager* manager,
Callback* callback)
: DatabaseTaskBase(manager),
@@ -812,14 +875,14 @@ class QuotaManager::DumpLastAccessTimeTableTask
}
protected:
virtual void RunOnTargetThread() OVERRIDE {
- if (!database()->DumpLastAccessTimeTable(
+ if (!database()->DumpOriginInfoTable(
new TableCallback(
base::Bind(&self_type::AppendEntry, this))))
set_db_disabled(true);
}
virtual void Aborted() OVERRIDE {
- callback_->Run(entries_);
+ callback_->Run(TableEntries());
}
virtual void DatabaseTaskCompleted() OVERRIDE {
@@ -924,8 +987,8 @@ void QuotaManager::SetTemporaryGlobalQuota(int64 new_quota,
}
if (!db_disabled_) {
- scoped_refptr<TemporaryGlobalQuotaUpdateTask> task(
- new TemporaryGlobalQuotaUpdateTask(this, new_quota, callback));
+ scoped_refptr<UpdateTemporaryGlobalQuotaTask> task(
+ new UpdateTemporaryGlobalQuotaTask(this, new_quota, callback));
task->Start();
} else {
callback->Run(kQuotaErrorInvalidAccess,
@@ -945,8 +1008,8 @@ void QuotaManager::GetPersistentHostQuota(const std::string& host,
callback->Run(kQuotaStatusOk, host, kStorageTypePersistent, 0);
return;
}
- scoped_refptr<PersistentHostQuotaQueryTask> task(
- new PersistentHostQuotaQueryTask(this, host, callback.release()));
+ scoped_refptr<GetPersistentHostQuotaTask> task(
+ new GetPersistentHostQuotaTask(this, host, callback.release()));
task->Start();
}
@@ -967,8 +1030,8 @@ void QuotaManager::SetPersistentHostQuota(const std::string& host,
}
if (!db_disabled_) {
- scoped_refptr<PersistentHostQuotaUpdateTask> task(
- new PersistentHostQuotaUpdateTask(
+ scoped_refptr<UpdatePersistentHostQuotaTask> task(
+ new UpdatePersistentHostQuotaTask(
this, host, new_quota, callback.release()));
task->Start();
} else {
@@ -1003,6 +1066,15 @@ void QuotaManager::GetStatistics(
}
}
+void QuotaManager::GetOriginsModifiedSince(
+ StorageType type,
+ base::Time modified_since,
+ GetOriginsCallback* callback) {
+ LazyInitialize();
+ make_scoped_refptr(new GetModifiedSinceTask(
+ this, type, modified_since, callback))->Start();
+}
+
void QuotaManager::LazyInitialize() {
DCHECK(io_thread_->BelongsToCurrentThread());
if (database_.get()) {
@@ -1041,8 +1113,8 @@ void QuotaManager::NotifyStorageAccessed(
void QuotaManager::NotifyStorageModified(
QuotaClient::ID client_id,
const GURL& origin, StorageType type, int64 delta) {
- LazyInitialize();
- GetUsageTracker(type)->UpdateUsageCache(client_id, origin, delta);
+ NotifyStorageModifiedInternal(client_id, origin, type, delta,
+ base::Time::Now());
}
void QuotaManager::NotifyOriginInUse(const GURL& origin) {
@@ -1116,18 +1188,29 @@ void QuotaManager::NotifyStorageAccessedInternal(
if (db_disabled_)
return;
- scoped_refptr<OriginAccessRecordDatabaseTask> task(
- new OriginAccessRecordDatabaseTask(this, origin, type, accessed_time));
- task->Start();
+ make_scoped_refptr(new UpdateAccesTimeTask(
+ this, origin, type, accessed_time))->Start();
+}
+
+void QuotaManager::NotifyStorageModifiedInternal(
+ QuotaClient::ID client_id,
+ const GURL& origin,
+ StorageType type,
+ int64 delta,
+ base::Time modified_time) {
+ LazyInitialize();
+ GetUsageTracker(type)->UpdateUsageCache(client_id, origin, delta);
+ make_scoped_refptr(new UpdateModifiedTimeTask(
+ this, origin, type, modified_time))->Start();
}
void QuotaManager::DumpQuotaTable(DumpQuotaTableCallback* callback) {
make_scoped_refptr(new DumpQuotaTableTask(this, callback))->Start();
}
-void QuotaManager::DumpLastAccessTimeTable(
- DumpLastAccessTimeTableCallback* callback) {
- make_scoped_refptr(new DumpLastAccessTimeTableTask(this, callback))->Start();
+void QuotaManager::DumpOriginInfoTable(
+ DumpOriginInfoTableCallback* callback) {
+ make_scoped_refptr(new DumpOriginInfoTableTask(this, callback))->Start();
}
@@ -1136,8 +1219,8 @@ void QuotaManager::DeleteOriginFromDatabase(
LazyInitialize();
if (db_disabled_)
return;
- scoped_refptr<OriginDeletionDatabaseTask> task =
- new OriginDeletionDatabaseTask(this, origin, type);
+ scoped_refptr<DeleteOriginInfo> task =
+ new DeleteOriginInfo(this, origin, type);
task->Start();
}
@@ -1273,8 +1356,8 @@ void QuotaManager::DidRunInitialGetTemporaryGlobalUsage(
DCHECK_EQ(type, kStorageTypeTemporary);
// This will call the StartEviction() when initial origin registration
// is completed.
- scoped_refptr<TemporaryOriginsRegistrationTask> task(
- new TemporaryOriginsRegistrationTask(
+ scoped_refptr<InitializeTemporaryOriginsInfoTask> task(
+ new InitializeTemporaryOriginsInfoTask(
this, temporary_usage_tracker_.get()));
task->Start();
}