summaryrefslogtreecommitdiffstats
path: root/webkit/quota
diff options
context:
space:
mode:
authorkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-18 03:21:10 +0000
committerkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-18 03:21:10 +0000
commit50aef1812c0b96126e27bd2d7718df158ef308dd (patch)
tree720f630716ae57ca7fba553b98e73f2e59e1495c /webkit/quota
parent957973753ec4159003ff7930d946b7e89c7e09f3 (diff)
downloadchromium_src-50aef1812c0b96126e27bd2d7718df158ef308dd.zip
chromium_src-50aef1812c0b96126e27bd2d7718df158ef308dd.tar.gz
chromium_src-50aef1812c0b96126e27bd2d7718df158ef308dd.tar.bz2
Added GetAvailableSpace to QuotaManager
BUG=61676 TEST=QuotaManagerTest.GetAvailableSpaceTest Review URL: http://codereview.chromium.org/7014042 Patch from Taiju Tsuiki <tzik@google.com>. git-svn-id: svn://svn.chromium.org/chrome/trunk/src@85720 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/quota')
-rw-r--r--webkit/quota/quota_manager.cc42
-rw-r--r--webkit/quota/quota_manager.h4
-rw-r--r--webkit/quota/quota_manager_unittest.cc18
-rw-r--r--webkit/quota/quota_types.h2
4 files changed, 65 insertions, 1 deletions
diff --git a/webkit/quota/quota_manager.cc b/webkit/quota/quota_manager.cc
index 2782f6d..6bd37bd 100644
--- a/webkit/quota/quota_manager.cc
+++ b/webkit/quota/quota_manager.cc
@@ -4,8 +4,9 @@
#include "webkit/quota/quota_manager.h"
-#include <deque>
#include <algorithm>
+#include <deque>
+#include <set>
#include "base/callback.h"
#include "base/file_path.h"
@@ -570,6 +571,45 @@ void QuotaManager::RequestQuota(
delete callback;
}
+class QuotaManager::AvailableSpaceQueryTask : public QuotaThreadTask {
+ public:
+ AvailableSpaceQueryTask(
+ QuotaManager* manager,
+ scoped_refptr<base::MessageLoopProxy> db_message_loop,
+ const FilePath& profile_path,
+ AvailableSpaceCallback* callback)
+ : QuotaThreadTask(manager, db_message_loop),
+ profile_path_(profile_path),
+ space_(-1),
+ callback_(callback) {}
+ virtual ~AvailableSpaceQueryTask() {}
+
+ protected:
+ virtual void RunOnTargetThread() OVERRIDE {
+ space_ = base::SysInfo::AmountOfFreeDiskSpace(profile_path_);
+ }
+
+ virtual void Aborted() OVERRIDE {
+ callback_->Run(kQuotaErrorAbort, space_);
+ }
+
+ virtual void Completed() OVERRIDE {
+ callback_->Run(kQuotaStatusOk, space_);
+ }
+
+ private:
+ FilePath profile_path_;
+ int64 space_;
+ scoped_ptr<AvailableSpaceCallback> callback_;
+};
+
+
+void QuotaManager::GetAvailableSpace(AvailableSpaceCallback* callback) {
+ scoped_refptr<AvailableSpaceQueryTask> task(
+ new AvailableSpaceQueryTask(this, db_thread_, profile_path_, callback));
+ task->Start();
+}
+
void QuotaManager::GetTemporaryGlobalQuota(QuotaCallback* callback) {
LazyInitialize();
if (temporary_global_quota_ >= 0) {
diff --git a/webkit/quota/quota_manager.h b/webkit/quota/quota_manager.h
index e3375cc..ff199d0 100644
--- a/webkit/quota/quota_manager.h
+++ b/webkit/quota/quota_manager.h
@@ -118,6 +118,8 @@ class QuotaManager : public QuotaTaskObserver,
return origins_in_use_.find(origin) != origins_in_use_.end();
}
+ void GetAvailableSpace(AvailableSpaceCallback* callback);
+
// Called by UI and internal modules.
void GetTemporaryGlobalQuota(QuotaCallback* callback);
void SetTemporaryGlobalQuota(int64 new_quota, QuotaCallback* callback);
@@ -150,6 +152,8 @@ class QuotaManager : public QuotaTaskObserver,
class UsageAndQuotaDispatcherTaskForTemporary;
class UsageAndQuotaDispatcherTaskForPersistent;
+ class AvailableSpaceQueryTask;
+
typedef std::pair<std::string, StorageType> HostAndType;
typedef std::map<HostAndType, UsageAndQuotaDispatcherTask*>
UsageAndQuotaDispatcherTaskMap;
diff --git a/webkit/quota/quota_manager_unittest.cc b/webkit/quota/quota_manager_unittest.cc
index 3c519b4..7d09c3c 100644
--- a/webkit/quota/quota_manager_unittest.cc
+++ b/webkit/quota/quota_manager_unittest.cc
@@ -11,6 +11,7 @@
#include "base/message_loop.h"
#include "base/message_loop_proxy.h"
#include "base/stl_util-inl.h"
+#include "base/sys_info.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebStorageQuotaError.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebStorageQuotaType.h"
@@ -140,6 +141,14 @@ class QuotaManagerTest : public testing::Test {
&QuotaManagerTest::DidDelete));
}
+ void GetAvailableSpace() {
+ quota_status_ = kQuotaStatusUnknown;
+ quota_ = -1;
+ quota_manager_->GetAvailableSpace(
+ callback_factory_.NewCallback(
+ &QuotaManagerTest::DidGetQuota));
+ }
+
void DidGetUsageAndQuota(QuotaStatusCode status, int64 usage, int64 quota) {
quota_status_ = status;
usage_ = usage;
@@ -185,6 +194,7 @@ class QuotaManagerTest : public testing::Test {
QuotaStatusCode status() const { return quota_status_; }
int64 usage() const { return usage_; }
int64 quota() const { return quota_; }
+ FilePath profile_path() const { return data_dir_.path(); }
private:
ScopedTempDir data_dir_;
@@ -718,4 +728,12 @@ TEST_F(QuotaManagerTest, GetUsage_WithDeleteOrigin) {
EXPECT_EQ(predelete_host_pers, usage());
}
+TEST_F(QuotaManagerTest, GetAvailableSpaceTest) {
+ GetAvailableSpace();
+ MessageLoop::current()->RunAllPending();
+ EXPECT_EQ(kQuotaStatusOk, status());
+ EXPECT_LE(0, quota());
+ int64 direct_called = base::SysInfo::AmountOfFreeDiskSpace(profile_path());
+ EXPECT_EQ(direct_called, quota());
+}
} // namespace quota
diff --git a/webkit/quota/quota_types.h b/webkit/quota/quota_types.h
index 7356b70e..ac49bd8 100644
--- a/webkit/quota/quota_types.h
+++ b/webkit/quota/quota_types.h
@@ -43,6 +43,8 @@ typedef Callback2<const std::string& /* host */,
typedef Callback3<QuotaStatusCode,
const std::string& /* host */,
int64>::Type HostQuotaCallback;
+typedef Callback2<QuotaStatusCode,
+ int64>::Type AvailableSpaceCallback;
// Simple template wrapper for a callback queue.
template <typename CallbackType>