diff options
author | dmikurube@chromium.org <dmikurube@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-14 05:48:19 +0000 |
---|---|---|
committer | dmikurube@chromium.org <dmikurube@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-14 05:48:19 +0000 |
commit | f55a5abe08a3c74592b06c9464f24bff6fafa57a (patch) | |
tree | 3a7971225a9868fdec718bbf1aee9c381454abad /webkit | |
parent | 61abf81a22c02e5f79cff6975e1edea83b55ec44 (diff) | |
download | chromium_src-f55a5abe08a3c74592b06c9464f24bff6fafa57a.zip chromium_src-f55a5abe08a3c74592b06c9464f24bff6fafa57a.tar.gz chromium_src-f55a5abe08a3c74592b06c9464f24bff6fafa57a.tar.bz2 |
Fix quota unawareness in copying multiple files with CopyDirectory.
BUG=89147
TEST=QuotaFileUtilTest.*
Review URL: http://codereview.chromium.org/7354016
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@92483 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r-- | webkit/fileapi/quota_file_util.cc | 23 | ||||
-rw-r--r-- | webkit/fileapi/quota_file_util_unittest.cc | 24 |
2 files changed, 34 insertions, 13 deletions
diff --git a/webkit/fileapi/quota_file_util.cc b/webkit/fileapi/quota_file_util.cc index 20314e9..93f3522 100644 --- a/webkit/fileapi/quota_file_util.cc +++ b/webkit/fileapi/quota_file_util.cc @@ -48,15 +48,19 @@ bool CanCopy( class ScopedOriginUpdateHelper { public: explicit ScopedOriginUpdateHelper( - FileSystemContext* context, + FileSystemOperationContext* operation_context, const GURL& origin_url, FileSystemType type) - : origin_url_(origin_url), + : operation_context_(operation_context), + origin_url_(origin_url), type_(type) { - DCHECK(context); + DCHECK(operation_context_); + DCHECK(operation_context_->file_system_context()); DCHECK(type != kFileSystemTypeUnknown); - quota_util_ = context->GetQuotaUtil(type_); - quota_manager_proxy_ = context->quota_manager_proxy(); + quota_util_ = + operation_context_->file_system_context()->GetQuotaUtil(type_); + quota_manager_proxy_ = + operation_context_->file_system_context()->quota_manager_proxy(); if (quota_util_) quota_util_->StartUpdateOriginOnFileThread(origin_url_, type_); } @@ -67,12 +71,15 @@ class ScopedOriginUpdateHelper { } void NotifyUpdate(int64 growth) { + operation_context_->set_allowed_bytes_growth( + operation_context_->allowed_bytes_growth() - growth); if (quota_util_) quota_util_->UpdateOriginUsageOnFileThread( quota_manager_proxy_, origin_url_, type_, growth); } private: + FileSystemOperationContext* operation_context_; FileSystemQuotaUtil* quota_util_; QuotaManagerProxy* quota_manager_proxy_; const GURL& origin_url_; @@ -97,7 +104,7 @@ base::PlatformFileError QuotaFileUtil::CopyOrMoveFile( // TODO(kinuko): For cross-filesystem move case we need 2 helpers, one for // src and one for dest. ScopedOriginUpdateHelper helper( - fs_context->file_system_context(), + fs_context, fs_context->dest_origin_url(), fs_context->dest_type()); @@ -135,7 +142,7 @@ base::PlatformFileError QuotaFileUtil::DeleteFile( const FilePath& file_path) { DCHECK(fs_context); ScopedOriginUpdateHelper helper( - fs_context->file_system_context(), + fs_context, fs_context->src_origin_url(), fs_context->src_type()); @@ -160,7 +167,7 @@ base::PlatformFileError QuotaFileUtil::Truncate( int64 length) { int64 allowed_bytes_growth = fs_context->allowed_bytes_growth(); ScopedOriginUpdateHelper helper( - fs_context->file_system_context(), + fs_context, fs_context->src_origin_url(), fs_context->src_type()); diff --git a/webkit/fileapi/quota_file_util_unittest.cc b/webkit/fileapi/quota_file_util_unittest.cc index 72d0919..930026e 100644 --- a/webkit/fileapi/quota_file_util_unittest.cc +++ b/webkit/fileapi/quota_file_util_unittest.cc @@ -208,7 +208,8 @@ TEST_F(QuotaFileUtilTest, CopyFile) { TEST_F(QuotaFileUtilTest, CopyDirectory) { const char *from_dir = "fromdir"; - const char *from_file = "fromdir/fromfile"; + const char *from_file1 = "fromdir/fromfile1"; + const char *from_file2 = "fromdir/fromfile2"; const char *to_dir1 = "todir1"; const char *to_dir2 = "todir2"; bool created; @@ -219,15 +220,27 @@ TEST_F(QuotaFileUtilTest, CopyDirectory) { QuotaFileUtil::GetInstance()->CreateDirectory(context.get(), Path(from_dir), false, false)); - ASSERT_EQ(base::PLATFORM_FILE_OK, EnsureFileExists(from_file, &created)); + ASSERT_EQ(base::PLATFORM_FILE_OK, EnsureFileExists(from_file1, &created)); + ASSERT_TRUE(created); + ASSERT_EQ(base::PLATFORM_FILE_OK, EnsureFileExists(from_file2, &created)); ASSERT_TRUE(created); context.reset(NewContext()); context->set_allowed_bytes_growth(QuotaFileUtil::kNoLimit); ASSERT_EQ(base::PLATFORM_FILE_OK, QuotaFileUtil::GetInstance()->Truncate(context.get(), - Path(from_file), - 1020)); + Path(from_file1), + 520)); + ASSERT_EQ(520, quota_test_helper().GetCachedOriginUsage()); + ASSERT_EQ(quota_test_helper().ComputeCurrentOriginUsage(), + quota_test_helper().GetCachedOriginUsage()); + + context.reset(NewContext()); + context->set_allowed_bytes_growth(QuotaFileUtil::kNoLimit); + ASSERT_EQ(base::PLATFORM_FILE_OK, + QuotaFileUtil::GetInstance()->Truncate(context.get(), + Path(from_file2), + 500)); ASSERT_EQ(1020, quota_test_helper().GetCachedOriginUsage()); ASSERT_EQ(quota_test_helper().ComputeCurrentOriginUsage(), quota_test_helper().GetCachedOriginUsage()); @@ -248,7 +261,8 @@ TEST_F(QuotaFileUtilTest, CopyDirectory) { QuotaFileUtil::GetInstance()->Copy(context.get(), Path(from_dir), Path(to_dir2))); - ASSERT_EQ(2040, quota_test_helper().GetCachedOriginUsage()); + ASSERT_TRUE(2540 == quota_test_helper().GetCachedOriginUsage() || + 2560 == quota_test_helper().GetCachedOriginUsage()); ASSERT_EQ(quota_test_helper().ComputeCurrentOriginUsage(), quota_test_helper().GetCachedOriginUsage()); } |