| Index: webkit/fileapi/async_file_test_helper.cc
|
| diff --git a/webkit/fileapi/async_file_test_helper.cc b/webkit/fileapi/async_file_test_helper.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6c778da9bdc554c5b61e89de8f6a511a2985b7b8
|
| --- /dev/null
|
| +++ b/webkit/fileapi/async_file_test_helper.cc
|
| @@ -0,0 +1,229 @@
|
| +// Copyright (c) 2013 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "base/bind.h"
|
| +#include "base/run_loop.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include "webkit/fileapi/async_file_test_helper.h"
|
| +#include "webkit/fileapi/file_system_context.h"
|
| +#include "webkit/fileapi/file_system_mount_point_provider.h"
|
| +#include "webkit/fileapi/file_system_url.h"
|
| +#include "webkit/fileapi/file_system_util.h"
|
| +#include "webkit/quota/quota_manager.h"
|
| +
|
| +namespace fileapi {
|
| +
|
| +namespace {
|
| +
|
| +typedef FileSystemOperation::FileEntryList FileEntryList;
|
| +
|
| +void AssignAndQuit(base::RunLoop* run_loop,
|
| + base::PlatformFileError* result_out,
|
| + base::PlatformFileError result) {
|
| + *result_out = result;
|
| + run_loop->Quit();
|
| +}
|
| +
|
| +base::Callback<void(base::PlatformFileError)>
|
| +AssignAndQuitCallback(base::RunLoop* run_loop,
|
| + base::PlatformFileError* result) {
|
| + return base::Bind(&AssignAndQuit, run_loop, base::Unretained(result));
|
| +}
|
| +
|
| +void GetMetadataCallback(base::RunLoop* run_loop,
|
| + base::PlatformFileError* result_out,
|
| + base::PlatformFileInfo* file_info_out,
|
| + base::PlatformFileError result,
|
| + const base::PlatformFileInfo& file_info,
|
| + const base::FilePath& /* platform_path */) {
|
| + *result_out = result;
|
| + *file_info_out = file_info;
|
| + run_loop->Quit();
|
| +}
|
| +
|
| +void ReadDirectoryCallback(base::RunLoop* run_loop,
|
| + base::PlatformFileError* result_out,
|
| + FileEntryList* entries_out,
|
| + base::PlatformFileError result,
|
| + const FileEntryList& entries,
|
| + bool has_more) {
|
| + *result_out = result;
|
| + *entries_out = entries;
|
| + if (result != base::PLATFORM_FILE_OK || !has_more)
|
| + run_loop->Quit();
|
| +}
|
| +
|
| +void DidGetUsageAndQuota(quota::QuotaStatusCode* status_out,
|
| + int64* usage_out,
|
| + int64* quota_out,
|
| + quota::QuotaStatusCode status,
|
| + int64 usage,
|
| + int64 quota) {
|
| + if (status_out)
|
| + *status_out = status;
|
| + if (usage_out)
|
| + *usage_out = usage;
|
| + if (quota_out)
|
| + *quota_out = quota;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +const int64 AsyncFileTestHelper::kDontCheckSize = -1;
|
| +
|
| +base::PlatformFileError AsyncFileTestHelper::Copy(
|
| + FileSystemContext* context,
|
| + const FileSystemURL& src,
|
| + const FileSystemURL& dest) {
|
| + DCHECK(context);
|
| + FileSystemOperation* operation =
|
| + context->CreateFileSystemOperation(dest, NULL);
|
| + EXPECT_TRUE(operation != NULL);
|
| + base::PlatformFileError result = base::PLATFORM_FILE_ERROR_FAILED;
|
| + base::RunLoop run_loop;
|
| + operation->Copy(src, dest, AssignAndQuitCallback(&run_loop, &result));
|
| + run_loop.Run();
|
| + return result;
|
| +}
|
| +
|
| +base::PlatformFileError AsyncFileTestHelper::Move(
|
| + FileSystemContext* context,
|
| + const FileSystemURL& src,
|
| + const FileSystemURL& dest) {
|
| + FileSystemOperation* operation =
|
| + context->CreateFileSystemOperation(dest, NULL);
|
| + EXPECT_TRUE(operation != NULL);
|
| + base::PlatformFileError result = base::PLATFORM_FILE_ERROR_FAILED;
|
| + base::RunLoop run_loop;
|
| + operation->Move(src, dest, AssignAndQuitCallback(&run_loop, &result));
|
| + run_loop.Run();
|
| + return result;
|
| +}
|
| +
|
| +base::PlatformFileError AsyncFileTestHelper::Remove(
|
| + FileSystemContext* context,
|
| + const FileSystemURL& url,
|
| + bool recursive) {
|
| + FileSystemOperation* operation =
|
| + context->CreateFileSystemOperation(url, NULL);
|
| + EXPECT_TRUE(operation != NULL);
|
| + base::PlatformFileError result = base::PLATFORM_FILE_ERROR_FAILED;
|
| + base::RunLoop run_loop;
|
| + operation->Remove(url, recursive, AssignAndQuitCallback(&run_loop, &result));
|
| + run_loop.Run();
|
| + return result;
|
| +}
|
| +
|
| +base::PlatformFileError AsyncFileTestHelper::ReadDirectory(
|
| + FileSystemContext* context,
|
| + const FileSystemURL& url,
|
| + FileEntryList* entries) {
|
| + DCHECK(entries);
|
| + entries->clear();
|
| + base::PlatformFileError result = base::PLATFORM_FILE_ERROR_FAILED;
|
| + FileSystemOperation* operation =
|
| + context->CreateFileSystemOperation(url, NULL);
|
| + EXPECT_TRUE(operation != NULL);
|
| + base::RunLoop run_loop;
|
| + operation->ReadDirectory(
|
| + url, base::Bind(&ReadDirectoryCallback, &run_loop, &result, entries));
|
| + run_loop.Run();
|
| + return result;
|
| +}
|
| +
|
| +base::PlatformFileError AsyncFileTestHelper::CreateDirectory(
|
| + FileSystemContext* context,
|
| + const FileSystemURL& url) {
|
| + FileSystemOperation* operation =
|
| + context->CreateFileSystemOperation(url, NULL);
|
| + EXPECT_TRUE(operation != NULL);
|
| + base::PlatformFileError result = base::PLATFORM_FILE_ERROR_FAILED;
|
| + base::RunLoop run_loop;
|
| + operation->CreateDirectory(url,
|
| + false /* exclusive */,
|
| + false /* recursive */,
|
| + AssignAndQuitCallback(&run_loop, &result));
|
| + run_loop.Run();
|
| + return result;
|
| +}
|
| +
|
| +base::PlatformFileError AsyncFileTestHelper::CreateFile(
|
| + FileSystemContext* context,
|
| + const FileSystemURL& url) {
|
| + FileSystemOperation* operation =
|
| + context->CreateFileSystemOperation(url, NULL);
|
| + EXPECT_TRUE(operation != NULL);
|
| + base::RunLoop run_loop;
|
| + base::PlatformFileError result = base::PLATFORM_FILE_ERROR_FAILED;
|
| + operation->CreateFile(url, false /* exclusive */,
|
| + AssignAndQuitCallback(&run_loop, &result));
|
| + run_loop.Run();
|
| + return result;
|
| +}
|
| +
|
| +base::PlatformFileError AsyncFileTestHelper::TruncateFile(
|
| + FileSystemContext* context,
|
| + const FileSystemURL& url,
|
| + size_t size) {
|
| + FileSystemOperation* operation =
|
| + context->CreateFileSystemOperation(url, NULL);
|
| + EXPECT_TRUE(operation != NULL);
|
| + base::RunLoop run_loop;
|
| + base::PlatformFileError result = base::PLATFORM_FILE_ERROR_FAILED;
|
| + operation->Truncate(url, size,
|
| + AssignAndQuitCallback(&run_loop, &result));
|
| + run_loop.Run();
|
| + return result;
|
| +}
|
| +
|
| +base::PlatformFileError AsyncFileTestHelper::GetMetadata(
|
| + FileSystemContext* context,
|
| + const FileSystemURL& url,
|
| + base::PlatformFileInfo* file_info) {
|
| + base::PlatformFileError result = base::PLATFORM_FILE_ERROR_FAILED;
|
| + base::RunLoop run_loop;
|
| + FileSystemOperation* operation =
|
| + context->CreateFileSystemOperation(url, NULL);
|
| + EXPECT_TRUE(operation != NULL);
|
| + operation->GetMetadata(url, base::Bind(&GetMetadataCallback,
|
| + &run_loop, &result, file_info));
|
| + run_loop.Run();
|
| + return result;
|
| +}
|
| +
|
| +bool AsyncFileTestHelper::FileExists(
|
| + FileSystemContext* context,
|
| + const FileSystemURL& url,
|
| + int64 expected_size) {
|
| + base::PlatformFileInfo file_info;
|
| + base::PlatformFileError result = GetMetadata(context, url, &file_info);
|
| + if (result != base::PLATFORM_FILE_OK || file_info.is_directory)
|
| + return false;
|
| + return expected_size == kDontCheckSize || file_info.size == expected_size;
|
| +}
|
| +
|
| +bool AsyncFileTestHelper::DirectoryExists(
|
| + FileSystemContext* context,
|
| + const FileSystemURL& url) {
|
| + base::PlatformFileInfo file_info;
|
| + base::PlatformFileError result = GetMetadata(context, url, &file_info);
|
| + return (result == base::PLATFORM_FILE_OK) && file_info.is_directory;
|
| +}
|
| +
|
| +quota::QuotaStatusCode AsyncFileTestHelper::GetUsageAndQuota(
|
| + quota::QuotaManager* quota_manager,
|
| + const GURL& origin,
|
| + FileSystemType type,
|
| + int64* usage,
|
| + int64* quota) {
|
| + quota::QuotaStatusCode status = quota::kQuotaStatusUnknown;
|
| + quota_manager->GetUsageAndQuota(
|
| + origin,
|
| + FileSystemTypeToQuotaStorageType(type),
|
| + base::Bind(&DidGetUsageAndQuota, &status, usage, quota));
|
| + MessageLoop::current()->RunUntilIdle();
|
| + return status;
|
| +}
|
| +
|
| +} // namespace fileapi
|
|
|