| Index: webkit/browser/fileapi/file_writer_delegate_unittest.cc
|
| diff --git a/webkit/browser/fileapi/file_writer_delegate_unittest.cc b/webkit/browser/fileapi/file_writer_delegate_unittest.cc
|
| index 36eb72be8b5faac571cbf477cc35cdf23fb7a7b6..14f646726f9f49ad13213619243a16b0e41adbdb 100644
|
| --- a/webkit/browser/fileapi/file_writer_delegate_unittest.cc
|
| +++ b/webkit/browser/fileapi/file_writer_delegate_unittest.cc
|
| @@ -33,6 +33,9 @@ namespace {
|
| const GURL kOrigin("http://example.com");
|
| const FileSystemType kFileSystemType = kFileSystemTypeTest;
|
|
|
| +const char kData[] = "The quick brown fox jumps over the lazy dog.\n";
|
| +const int kDataSize = ARRAYSIZE_UNSAFE(kData) - 1;
|
| +
|
| class Result {
|
| public:
|
| Result()
|
| @@ -67,9 +70,6 @@ class Result {
|
| FileWriterDelegate::WriteProgressStatus write_status_;
|
| };
|
|
|
| -const char kData[] = "The quick brown fox jumps over the lazy dog.\n";
|
| -const int kDataSize = ARRAYSIZE_UNSAFE(kData) - 1;
|
| -
|
| } // namespace (anonymous)
|
|
|
| class FileWriterDelegateTest : public PlatformTest {
|
| @@ -123,17 +123,18 @@ class FileWriterDelegateTest : public PlatformTest {
|
| FileWriterDelegate* CreateWriterDelegate(
|
| const char* test_file_path,
|
| int64 offset,
|
| - int64 allowed_growth,
|
| - Result* result) {
|
| + int64 allowed_growth) {
|
| SandboxFileStreamWriter* writer = new SandboxFileStreamWriter(
|
| file_system_context_.get(),
|
| GetFileSystemURL(test_file_path),
|
| offset,
|
| *file_system_context_->GetUpdateObservers(kFileSystemType));
|
| writer->set_default_quota(allowed_growth);
|
| - return new FileWriterDelegate(
|
| - base::Bind(&Result::DidWrite, base::Unretained(result)),
|
| - scoped_ptr<FileStreamWriter>(writer));
|
| + return new FileWriterDelegate(scoped_ptr<FileStreamWriter>(writer));
|
| + }
|
| +
|
| + FileWriterDelegate::DelegateWriteCallback GetWriteCallback(Result* result) {
|
| + return base::Bind(&Result::DidWrite, base::Unretained(result));
|
| }
|
|
|
| // Creates and sets up a FileWriterDelegate for writing the given |blob_url|,
|
| @@ -142,10 +143,8 @@ class FileWriterDelegateTest : public PlatformTest {
|
| const GURL& blob_url,
|
| int64 offset,
|
| int64 allowed_growth) {
|
| - result_.reset(new Result());
|
| file_writer_delegate_.reset(
|
| - CreateWriterDelegate(test_file_path, offset, allowed_growth,
|
| - result_.get()));
|
| + CreateWriterDelegate(test_file_path, offset, allowed_growth));
|
| request_.reset(empty_context_.CreateRequest(
|
| blob_url, file_writer_delegate_.get()));
|
| }
|
| @@ -160,7 +159,6 @@ class FileWriterDelegateTest : public PlatformTest {
|
| net::URLRequestContext empty_context_;
|
| scoped_ptr<FileWriterDelegate> file_writer_delegate_;
|
| scoped_ptr<net::URLRequest> request_;
|
| - scoped_ptr<Result> result_;
|
|
|
| base::ScopedTempDir dir_;
|
|
|
| @@ -259,17 +257,18 @@ TEST_F(FileWriterDelegateTest, WriteSuccessWithoutQuotaLimit) {
|
|
|
| PrepareForWrite("test", kBlobURL, 0, kint64max);
|
|
|
| + Result result;
|
| ASSERT_EQ(0, usage());
|
| - file_writer_delegate_->Start(request_.Pass());
|
| + file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result));
|
| base::MessageLoop::current()->Run();
|
|
|
| - ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status());
|
| + ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status());
|
| file_writer_delegate_.reset();
|
|
|
| ASSERT_EQ(kDataSize, usage());
|
| EXPECT_EQ(GetFileSizeOnDisk("test"), usage());
|
| - EXPECT_EQ(kDataSize, result_->bytes_written());
|
| - EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status());
|
| + EXPECT_EQ(kDataSize, result.bytes_written());
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK, result.status());
|
| }
|
|
|
| TEST_F(FileWriterDelegateTest, WriteSuccessWithJustQuota) {
|
| @@ -278,17 +277,18 @@ TEST_F(FileWriterDelegateTest, WriteSuccessWithJustQuota) {
|
| const int64 kAllowedGrowth = kDataSize;
|
| PrepareForWrite("test", kBlobURL, 0, kAllowedGrowth);
|
|
|
| + Result result;
|
| ASSERT_EQ(0, usage());
|
| - file_writer_delegate_->Start(request_.Pass());
|
| + file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result));
|
| base::MessageLoop::current()->Run();
|
| - ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status());
|
| + ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status());
|
| file_writer_delegate_.reset();
|
|
|
| ASSERT_EQ(kAllowedGrowth, usage());
|
| EXPECT_EQ(GetFileSizeOnDisk("test"), usage());
|
|
|
| - EXPECT_EQ(kAllowedGrowth, result_->bytes_written());
|
| - EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status());
|
| + EXPECT_EQ(kAllowedGrowth, result.bytes_written());
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK, result.status());
|
| }
|
|
|
| TEST_F(FileWriterDelegateTest, DISABLED_WriteFailureByQuota) {
|
| @@ -297,18 +297,19 @@ TEST_F(FileWriterDelegateTest, DISABLED_WriteFailureByQuota) {
|
| const int64 kAllowedGrowth = kDataSize - 1;
|
| PrepareForWrite("test", kBlobURL, 0, kAllowedGrowth);
|
|
|
| + Result result;
|
| ASSERT_EQ(0, usage());
|
| - file_writer_delegate_->Start(request_.Pass());
|
| + file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result));
|
| base::MessageLoop::current()->Run();
|
| - ASSERT_EQ(FileWriterDelegate::ERROR_WRITE_STARTED, result_->write_status());
|
| + ASSERT_EQ(FileWriterDelegate::ERROR_WRITE_STARTED, result.write_status());
|
| file_writer_delegate_.reset();
|
|
|
| ASSERT_EQ(kAllowedGrowth, usage());
|
| EXPECT_EQ(GetFileSizeOnDisk("test"), usage());
|
|
|
| - EXPECT_EQ(kAllowedGrowth, result_->bytes_written());
|
| - EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, result_->status());
|
| - ASSERT_EQ(FileWriterDelegate::ERROR_WRITE_STARTED, result_->write_status());
|
| + EXPECT_EQ(kAllowedGrowth, result.bytes_written());
|
| + EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, result.status());
|
| + ASSERT_EQ(FileWriterDelegate::ERROR_WRITE_STARTED, result.write_status());
|
| }
|
|
|
| TEST_F(FileWriterDelegateTest, WriteZeroBytesSuccessfullyWithZeroQuota) {
|
| @@ -317,24 +318,24 @@ TEST_F(FileWriterDelegateTest, WriteZeroBytesSuccessfullyWithZeroQuota) {
|
| int64 kAllowedGrowth = 0;
|
| PrepareForWrite("test", kBlobURL, 0, kAllowedGrowth);
|
|
|
| + Result result;
|
| ASSERT_EQ(0, usage());
|
| - file_writer_delegate_->Start(request_.Pass());
|
| + file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result));
|
| base::MessageLoop::current()->Run();
|
| - ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status());
|
| + ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status());
|
| file_writer_delegate_.reset();
|
|
|
| ASSERT_EQ(kAllowedGrowth, usage());
|
| EXPECT_EQ(GetFileSizeOnDisk("test"), usage());
|
|
|
| - EXPECT_EQ(kAllowedGrowth, result_->bytes_written());
|
| - EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status());
|
| - ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status());
|
| + EXPECT_EQ(kAllowedGrowth, result.bytes_written());
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK, result.status());
|
| + ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status());
|
| }
|
|
|
| TEST_F(FileWriterDelegateTest, WriteSuccessWithoutQuotaLimitConcurrent) {
|
| scoped_ptr<FileWriterDelegate> file_writer_delegate2;
|
| scoped_ptr<net::URLRequest> request2;
|
| - scoped_ptr<Result> result2;
|
|
|
| bool created = false;
|
| file_util()->EnsureFileExists(NewOperationContext().get(),
|
| @@ -349,32 +350,31 @@ TEST_F(FileWriterDelegateTest, WriteSuccessWithoutQuotaLimitConcurrent) {
|
| PrepareForWrite("test", kBlobURL, 0, kint64max);
|
|
|
| // Credate another FileWriterDelegate for concurrent write.
|
| - result2.reset(new Result());
|
| - file_writer_delegate2.reset(CreateWriterDelegate(
|
| - "test2", 0, kint64max, result2.get()));
|
| + file_writer_delegate2.reset(CreateWriterDelegate("test2", 0, kint64max));
|
| request2.reset(empty_context_.CreateRequest(
|
| kBlobURL2, file_writer_delegate2.get()));
|
|
|
| + Result result, result2;
|
| ASSERT_EQ(0, usage());
|
| - file_writer_delegate_->Start(request_.Pass());
|
| - file_writer_delegate2->Start(request2.Pass());
|
| + file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result));
|
| + file_writer_delegate2->Start(request2.Pass(), GetWriteCallback(&result2));
|
| base::MessageLoop::current()->Run();
|
| - if (result_->write_status() == FileWriterDelegate::SUCCESS_IO_PENDING ||
|
| - result2->write_status() == FileWriterDelegate::SUCCESS_IO_PENDING)
|
| + if (result.write_status() == FileWriterDelegate::SUCCESS_IO_PENDING ||
|
| + result2.write_status() == FileWriterDelegate::SUCCESS_IO_PENDING)
|
| base::MessageLoop::current()->Run();
|
|
|
| - ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status());
|
| - ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result2->write_status());
|
| + ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status());
|
| + ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result2.write_status());
|
| file_writer_delegate_.reset();
|
| file_writer_delegate2.reset();
|
|
|
| ASSERT_EQ(kDataSize * 2, usage());
|
| EXPECT_EQ(GetFileSizeOnDisk("test") + GetFileSizeOnDisk("test2"), usage());
|
|
|
| - EXPECT_EQ(kDataSize, result_->bytes_written());
|
| - EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status());
|
| - EXPECT_EQ(kDataSize, result2->bytes_written());
|
| - EXPECT_EQ(base::PLATFORM_FILE_OK, result2->status());
|
| + EXPECT_EQ(kDataSize, result.bytes_written());
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK, result.status());
|
| + EXPECT_EQ(kDataSize, result2.bytes_written());
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK, result2.status());
|
| }
|
|
|
| TEST_F(FileWriterDelegateTest, WritesWithQuotaAndOffset) {
|
| @@ -387,29 +387,35 @@ TEST_F(FileWriterDelegateTest, WritesWithQuotaAndOffset) {
|
| ASSERT_LT(kDataSize, allowed_growth);
|
| PrepareForWrite("test", kBlobURL, offset, allowed_growth);
|
|
|
| - ASSERT_EQ(0, usage());
|
| - file_writer_delegate_->Start(request_.Pass());
|
| - base::MessageLoop::current()->Run();
|
| - ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status());
|
| - file_writer_delegate_.reset();
|
| + {
|
| + Result result;
|
| + ASSERT_EQ(0, usage());
|
| + file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result));
|
| + base::MessageLoop::current()->Run();
|
| + ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status());
|
| + file_writer_delegate_.reset();
|
|
|
| - ASSERT_EQ(kDataSize, usage());
|
| - EXPECT_EQ(GetFileSizeOnDisk("test"), usage());
|
| - EXPECT_EQ(kDataSize, result_->bytes_written());
|
| - EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status());
|
| + ASSERT_EQ(kDataSize, usage());
|
| + EXPECT_EQ(GetFileSizeOnDisk("test"), usage());
|
| + EXPECT_EQ(kDataSize, result.bytes_written());
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK, result.status());
|
| + }
|
|
|
| // Trying to overwrite kDataSize bytes data while allowed_growth is 20.
|
| offset = 0;
|
| allowed_growth = 20;
|
| PrepareForWrite("test", kBlobURL, offset, allowed_growth);
|
|
|
| - file_writer_delegate_->Start(request_.Pass());
|
| - base::MessageLoop::current()->Run();
|
| - EXPECT_EQ(kDataSize, usage());
|
| - EXPECT_EQ(GetFileSizeOnDisk("test"), usage());
|
| - EXPECT_EQ(kDataSize, result_->bytes_written());
|
| - EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status());
|
| - ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status());
|
| + {
|
| + Result result;
|
| + file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result));
|
| + base::MessageLoop::current()->Run();
|
| + EXPECT_EQ(kDataSize, usage());
|
| + EXPECT_EQ(GetFileSizeOnDisk("test"), usage());
|
| + EXPECT_EQ(kDataSize, result.bytes_written());
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK, result.status());
|
| + ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status());
|
| + }
|
|
|
| // Trying to write kDataSize bytes data from offset 25 while
|
| // allowed_growth is 55.
|
| @@ -417,31 +423,37 @@ TEST_F(FileWriterDelegateTest, WritesWithQuotaAndOffset) {
|
| allowed_growth = 55;
|
| PrepareForWrite("test", kBlobURL, offset, allowed_growth);
|
|
|
| - file_writer_delegate_->Start(request_.Pass());
|
| - base::MessageLoop::current()->Run();
|
| - ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status());
|
| - file_writer_delegate_.reset();
|
| + {
|
| + Result result;
|
| + file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result));
|
| + base::MessageLoop::current()->Run();
|
| + ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status());
|
| + file_writer_delegate_.reset();
|
|
|
| - EXPECT_EQ(offset + kDataSize, usage());
|
| - EXPECT_EQ(GetFileSizeOnDisk("test"), usage());
|
| - EXPECT_EQ(kDataSize, result_->bytes_written());
|
| - EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status());
|
| + EXPECT_EQ(offset + kDataSize, usage());
|
| + EXPECT_EQ(GetFileSizeOnDisk("test"), usage());
|
| + EXPECT_EQ(kDataSize, result.bytes_written());
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK, result.status());
|
| + }
|
|
|
| // Trying to overwrite 45 bytes data while allowed_growth is -20.
|
| offset = 0;
|
| allowed_growth = -20;
|
| PrepareForWrite("test", kBlobURL, offset, allowed_growth);
|
| -
|
| int64 pre_write_usage = GetFileSizeOnDisk("test");
|
| - file_writer_delegate_->Start(request_.Pass());
|
| - base::MessageLoop::current()->Run();
|
| - ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status());
|
| - file_writer_delegate_.reset();
|
|
|
| - EXPECT_EQ(pre_write_usage, usage());
|
| - EXPECT_EQ(GetFileSizeOnDisk("test"), usage());
|
| - EXPECT_EQ(kDataSize, result_->bytes_written());
|
| - EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status());
|
| + {
|
| + Result result;
|
| + file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result));
|
| + base::MessageLoop::current()->Run();
|
| + ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status());
|
| + file_writer_delegate_.reset();
|
| +
|
| + EXPECT_EQ(pre_write_usage, usage());
|
| + EXPECT_EQ(GetFileSizeOnDisk("test"), usage());
|
| + EXPECT_EQ(kDataSize, result.bytes_written());
|
| + EXPECT_EQ(base::PLATFORM_FILE_OK, result.status());
|
| + }
|
|
|
| // Trying to overwrite 45 bytes data with offset pre_write_usage - 20,
|
| // while allowed_growth is 10.
|
| @@ -450,16 +462,18 @@ TEST_F(FileWriterDelegateTest, WritesWithQuotaAndOffset) {
|
| allowed_growth = 10;
|
| PrepareForWrite("test", kBlobURL, offset, allowed_growth);
|
|
|
| - file_writer_delegate_->Start(request_.Pass());
|
| - base::MessageLoop::current()->Run();
|
| - ASSERT_EQ(FileWriterDelegate::ERROR_WRITE_STARTED, result_->write_status());
|
| - file_writer_delegate_.reset();
|
| + {
|
| + Result result;
|
| + file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result));
|
| + base::MessageLoop::current()->Run();
|
| + ASSERT_EQ(FileWriterDelegate::ERROR_WRITE_STARTED, result.write_status());
|
| + file_writer_delegate_.reset();
|
|
|
| - EXPECT_EQ(pre_write_usage + allowed_growth,
|
| - usage());
|
| - EXPECT_EQ(GetFileSizeOnDisk("test"), usage());
|
| - EXPECT_EQ(kOverlap + allowed_growth, result_->bytes_written());
|
| - EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, result_->status());
|
| + EXPECT_EQ(pre_write_usage + allowed_growth, usage());
|
| + EXPECT_EQ(GetFileSizeOnDisk("test"), usage());
|
| + EXPECT_EQ(kOverlap + allowed_growth, result.bytes_written());
|
| + EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, result.status());
|
| + }
|
| }
|
|
|
| } // namespace fileapi
|
|
|