diff options
author | kinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-18 03:21:10 +0000 |
---|---|---|
committer | kinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-18 03:21:10 +0000 |
commit | 50aef1812c0b96126e27bd2d7718df158ef308dd (patch) | |
tree | 720f630716ae57ca7fba553b98e73f2e59e1495c /webkit/quota | |
parent | 957973753ec4159003ff7930d946b7e89c7e09f3 (diff) | |
download | chromium_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.cc | 42 | ||||
-rw-r--r-- | webkit/quota/quota_manager.h | 4 | ||||
-rw-r--r-- | webkit/quota/quota_manager_unittest.cc | 18 | ||||
-rw-r--r-- | webkit/quota/quota_types.h | 2 |
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> |