summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authordmikurube@chromium.org <dmikurube@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-14 05:48:19 +0000
committerdmikurube@chromium.org <dmikurube@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-14 05:48:19 +0000
commitf55a5abe08a3c74592b06c9464f24bff6fafa57a (patch)
tree3a7971225a9868fdec718bbf1aee9c381454abad /webkit
parent61abf81a22c02e5f79cff6975e1edea83b55ec44 (diff)
downloadchromium_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.cc23
-rw-r--r--webkit/fileapi/quota_file_util_unittest.cc24
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());
}