// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "chrome/browser/chromeos/file_system_provider/fileapi/provider_async_file_util.h"
+
#include <string>
#include <vector>
#include "base/memory/weak_ptr.h"
#include "base/run_loop.h"
#include "chrome/browser/chromeos/file_system_provider/fake_provided_file_system.h"
-#include "chrome/browser/chromeos/file_system_provider/fileapi/provider_async_file_util.h"
#include "chrome/browser/chromeos/file_system_provider/service.h"
#include "chrome/browser/chromeos/file_system_provider/service_factory.h"
#include "chrome/test/base/testing_browser_process.h"
// anything else than just an error.
class EventLogger {
public:
- EventLogger() : weak_ptr_factory_(this) {}
+ EventLogger() {}
virtual ~EventLogger() {}
void OnStatus(base::File::Error error) {
- error_.reset(new base::File::Error(error));
+ result_.reset(new base::File::Error(error));
}
void OnCreateOrOpen(base::File file,
const base::Closure& on_close_callback) {
if (file.IsValid())
- error_.reset(new base::File::Error(base::File::FILE_OK));
+ result_.reset(new base::File::Error(base::File::FILE_OK));
- error_.reset(new base::File::Error(file.error_details()));
+ result_.reset(new base::File::Error(file.error_details()));
}
void OnEnsureFileExists(base::File::Error error, bool created) {
- error_.reset(new base::File::Error(error));
+ result_.reset(new base::File::Error(error));
}
void OnGetFileInfo(base::File::Error error,
const base::File::Info& file_info) {
- error_.reset(new base::File::Error(error));
+ result_.reset(new base::File::Error(error));
}
void OnReadDirectory(base::File::Error error,
const fileapi::AsyncFileUtil::EntryList& file_list,
bool has_more) {
- error_.reset(new base::File::Error(error));
+ result_.reset(new base::File::Error(error));
}
void OnCreateSnapshotFile(
const base::File::Info& file_info,
const base::FilePath& platform_path,
const scoped_refptr<webkit_blob::ShareableFileReference>& file_ref) {
- error_.reset(new base::File::Error(error));
+ result_.reset(new base::File::Error(error));
}
void OnCopyFileProgress(int64 size) {}
- base::WeakPtr<EventLogger> GetWeakPtr() {
- return weak_ptr_factory_.GetWeakPtr();
- }
-
- base::File::Error* error() { return error_.get(); }
+ base::File::Error* result() { return result_.get(); }
private:
- scoped_ptr<base::File::Error> error_;
- base::WeakPtrFactory<EventLogger> weak_ptr_factory_;
-
+ scoped_ptr<base::File::Error> result_;
DISALLOW_COPY_AND_ASSIGN(EventLogger);
};
service->SetFileSystemFactoryForTesting(
base::Bind(&FakeProvidedFileSystem::Create));
- const bool result = service->MountFileSystem(
- kExtensionId, kFileSystemId, "Testing File System");
+ const bool result = service->MountFileSystem(kExtensionId,
+ kFileSystemId,
+ "Testing File System",
+ false /* writable */);
ASSERT_TRUE(result);
const ProvidedFileSystemInfo& file_system_info =
service->GetProvidedFileSystem(kExtensionId, kFileSystemId)
const std::string mount_point_name =
file_system_info.mount_path().BaseName().AsUTF8Unsafe();
- file_url_ = CreateFileSystemURL(
- mount_point_name, base::FilePath::FromUTF8Unsafe("hello/world.txt"));
+ file_url_ =
+ CreateFileSystemURL(mount_point_name,
+ base::FilePath::FromUTF8Unsafe(
+ kFakeFilePath + 1 /* No leading slash. */));
ASSERT_TRUE(file_url_.is_valid());
directory_url_ = CreateFileSystemURL(
mount_point_name, base::FilePath::FromUTF8Unsafe("hello"));
CreateOperationContext(),
file_url_,
base::File::FLAG_CREATE,
- base::Bind(&EventLogger::OnCreateOrOpen, logger.GetWeakPtr()));
+ base::Bind(&EventLogger::OnCreateOrOpen, base::Unretained(&logger)));
- ASSERT_TRUE(logger.error());
- EXPECT_EQ(base::File::FILE_ERROR_ACCESS_DENIED, *logger.error());
+ ASSERT_TRUE(logger.result());
+ EXPECT_EQ(base::File::FILE_ERROR_ACCESS_DENIED, *logger.result());
}
TEST_F(FileSystemProviderProviderAsyncFileUtilTest, CreateOrOpen_CreateAlways) {
CreateOperationContext(),
file_url_,
base::File::FLAG_CREATE_ALWAYS,
- base::Bind(&EventLogger::OnCreateOrOpen, logger.GetWeakPtr()));
+ base::Bind(&EventLogger::OnCreateOrOpen, base::Unretained(&logger)));
- ASSERT_TRUE(logger.error());
- EXPECT_EQ(base::File::FILE_ERROR_ACCESS_DENIED, *logger.error());
+ ASSERT_TRUE(logger.result());
+ EXPECT_EQ(base::File::FILE_ERROR_ACCESS_DENIED, *logger.result());
}
TEST_F(FileSystemProviderProviderAsyncFileUtilTest, CreateOrOpen_OpenAlways) {
CreateOperationContext(),
file_url_,
base::File::FLAG_OPEN_ALWAYS,
- base::Bind(&EventLogger::OnCreateOrOpen, logger.GetWeakPtr()));
+ base::Bind(&EventLogger::OnCreateOrOpen, base::Unretained(&logger)));
- ASSERT_TRUE(logger.error());
- EXPECT_EQ(base::File::FILE_ERROR_ACCESS_DENIED, *logger.error());
+ ASSERT_TRUE(logger.result());
+ EXPECT_EQ(base::File::FILE_ERROR_ACCESS_DENIED, *logger.result());
}
TEST_F(FileSystemProviderProviderAsyncFileUtilTest,
CreateOperationContext(),
file_url_,
base::File::FLAG_OPEN_TRUNCATED,
- base::Bind(&EventLogger::OnCreateOrOpen, logger.GetWeakPtr()));
+ base::Bind(&EventLogger::OnCreateOrOpen, base::Unretained(&logger)));
- ASSERT_TRUE(logger.error());
- EXPECT_EQ(base::File::FILE_ERROR_ACCESS_DENIED, *logger.error());
+ ASSERT_TRUE(logger.result());
+ EXPECT_EQ(base::File::FILE_ERROR_ACCESS_DENIED, *logger.result());
}
TEST_F(FileSystemProviderProviderAsyncFileUtilTest, CreateOrOpen_Open) {
CreateOperationContext(),
file_url_,
base::File::FLAG_OPEN,
- base::Bind(&EventLogger::OnCreateOrOpen, logger.GetWeakPtr()));
+ base::Bind(&EventLogger::OnCreateOrOpen, base::Unretained(&logger)));
- ASSERT_TRUE(logger.error());
- EXPECT_EQ(base::File::FILE_ERROR_INVALID_OPERATION, *logger.error());
+ ASSERT_TRUE(logger.result());
+ EXPECT_EQ(base::File::FILE_ERROR_INVALID_OPERATION, *logger.result());
}
TEST_F(FileSystemProviderProviderAsyncFileUtilTest, EnsureFileExists) {
async_file_util_->EnsureFileExists(
CreateOperationContext(),
file_url_,
- base::Bind(&EventLogger::OnEnsureFileExists, logger.GetWeakPtr()));
+ base::Bind(&EventLogger::OnEnsureFileExists, base::Unretained(&logger)));
+ base::RunLoop().RunUntilIdle();
- ASSERT_TRUE(logger.error());
- EXPECT_EQ(base::File::FILE_ERROR_ACCESS_DENIED, *logger.error());
+ ASSERT_TRUE(logger.result());
+ EXPECT_EQ(base::File::FILE_OK, *logger.result());
}
TEST_F(FileSystemProviderProviderAsyncFileUtilTest, CreateDirectory) {
directory_url_,
false, // exclusive
false, // recursive
- base::Bind(&EventLogger::OnStatus, logger.GetWeakPtr()));
+ base::Bind(&EventLogger::OnStatus, base::Unretained(&logger)));
+ base::RunLoop().RunUntilIdle();
- ASSERT_TRUE(logger.error());
- EXPECT_EQ(base::File::FILE_ERROR_ACCESS_DENIED, *logger.error());
+ ASSERT_TRUE(logger.result());
+ EXPECT_EQ(base::File::FILE_OK, *logger.result());
}
TEST_F(FileSystemProviderProviderAsyncFileUtilTest, GetFileInfo) {
async_file_util_->GetFileInfo(
CreateOperationContext(),
root_url_,
- base::Bind(&EventLogger::OnGetFileInfo, logger.GetWeakPtr()));
+ base::Bind(&EventLogger::OnGetFileInfo, base::Unretained(&logger)));
base::RunLoop().RunUntilIdle();
- ASSERT_TRUE(logger.error());
- EXPECT_EQ(base::File::FILE_OK, *logger.error());
+ ASSERT_TRUE(logger.result());
+ EXPECT_EQ(base::File::FILE_OK, *logger.result());
}
TEST_F(FileSystemProviderProviderAsyncFileUtilTest, ReadDirectory) {
async_file_util_->ReadDirectory(
CreateOperationContext(),
root_url_,
- base::Bind(&EventLogger::OnReadDirectory, logger.GetWeakPtr()));
+ base::Bind(&EventLogger::OnReadDirectory, base::Unretained(&logger)));
base::RunLoop().RunUntilIdle();
- ASSERT_TRUE(logger.error());
- EXPECT_EQ(base::File::FILE_OK, *logger.error());
+ ASSERT_TRUE(logger.result());
+ EXPECT_EQ(base::File::FILE_OK, *logger.result());
}
TEST_F(FileSystemProviderProviderAsyncFileUtilTest, Touch) {
EventLogger logger;
- async_file_util_->CreateDirectory(
+ async_file_util_->Touch(
CreateOperationContext(),
file_url_,
- false, // exclusive
- false, // recursive
- base::Bind(&EventLogger::OnStatus, logger.GetWeakPtr()));
+ base::Time(), // last_modified_time
+ base::Time(), // last_access_time
+ base::Bind(&EventLogger::OnStatus, base::Unretained(&logger)));
- ASSERT_TRUE(logger.error());
- EXPECT_EQ(base::File::FILE_ERROR_ACCESS_DENIED, *logger.error());
+ ASSERT_TRUE(logger.result());
+ EXPECT_EQ(base::File::FILE_ERROR_ACCESS_DENIED, *logger.result());
}
TEST_F(FileSystemProviderProviderAsyncFileUtilTest, Truncate) {
CreateOperationContext(),
file_url_,
0, // length
- base::Bind(&EventLogger::OnStatus, logger.GetWeakPtr()));
+ base::Bind(&EventLogger::OnStatus, base::Unretained(&logger)));
+ base::RunLoop().RunUntilIdle();
- ASSERT_TRUE(logger.error());
- EXPECT_EQ(base::File::FILE_ERROR_ACCESS_DENIED, *logger.error());
+ ASSERT_TRUE(logger.result());
+ EXPECT_EQ(base::File::FILE_OK, *logger.result());
}
TEST_F(FileSystemProviderProviderAsyncFileUtilTest, CopyFileLocal) {
file_url_, // src_url
file_url_, // dst_url
fileapi::FileSystemOperation::OPTION_NONE,
- base::Bind(&EventLogger::OnCopyFileProgress, logger.GetWeakPtr()),
- base::Bind(&EventLogger::OnStatus, logger.GetWeakPtr()));
+ base::Bind(&EventLogger::OnCopyFileProgress, base::Unretained(&logger)),
+ base::Bind(&EventLogger::OnStatus, base::Unretained(&logger)));
+ base::RunLoop().RunUntilIdle();
- ASSERT_TRUE(logger.error());
- EXPECT_EQ(base::File::FILE_ERROR_ACCESS_DENIED, *logger.error());
+ ASSERT_TRUE(logger.result());
+ EXPECT_EQ(base::File::FILE_OK, *logger.result());
}
TEST_F(FileSystemProviderProviderAsyncFileUtilTest, MoveFileLocal) {
file_url_, // src_url
file_url_, // dst_url
fileapi::FileSystemOperation::OPTION_NONE,
- base::Bind(&EventLogger::OnStatus, logger.GetWeakPtr()));
+ base::Bind(&EventLogger::OnStatus, base::Unretained(&logger)));
+ base::RunLoop().RunUntilIdle();
- ASSERT_TRUE(logger.error());
- EXPECT_EQ(base::File::FILE_ERROR_ACCESS_DENIED, *logger.error());
+ ASSERT_TRUE(logger.result());
+ EXPECT_EQ(base::File::FILE_OK, *logger.result());
}
TEST_F(FileSystemProviderProviderAsyncFileUtilTest, CopyInForeignFile) {
CreateOperationContext(),
base::FilePath(), // src_file_path
file_url_, // dst_url
- base::Bind(&EventLogger::OnStatus, logger.GetWeakPtr()));
+ base::Bind(&EventLogger::OnStatus, base::Unretained(&logger)));
- ASSERT_TRUE(logger.error());
- EXPECT_EQ(base::File::FILE_ERROR_ACCESS_DENIED, *logger.error());
+ ASSERT_TRUE(logger.result());
+ EXPECT_EQ(base::File::FILE_ERROR_ACCESS_DENIED, *logger.result());
}
TEST_F(FileSystemProviderProviderAsyncFileUtilTest, DeleteFile) {
async_file_util_->DeleteFile(
CreateOperationContext(),
file_url_,
- base::Bind(&EventLogger::OnStatus, logger.GetWeakPtr()));
+ base::Bind(&EventLogger::OnStatus, base::Unretained(&logger)));
+ base::RunLoop().RunUntilIdle();
- ASSERT_TRUE(logger.error());
- EXPECT_EQ(base::File::FILE_ERROR_ACCESS_DENIED, *logger.error());
+ ASSERT_TRUE(logger.result());
+ EXPECT_EQ(base::File::FILE_OK, *logger.result());
}
TEST_F(FileSystemProviderProviderAsyncFileUtilTest, DeleteDirectory) {
async_file_util_->DeleteDirectory(
CreateOperationContext(),
directory_url_,
- base::Bind(&EventLogger::OnStatus, logger.GetWeakPtr()));
+ base::Bind(&EventLogger::OnStatus, base::Unretained(&logger)));
+ base::RunLoop().RunUntilIdle();
- ASSERT_TRUE(logger.error());
- EXPECT_EQ(base::File::FILE_ERROR_ACCESS_DENIED, *logger.error());
+ ASSERT_TRUE(logger.result());
+ EXPECT_EQ(base::File::FILE_OK, *logger.result());
}
TEST_F(FileSystemProviderProviderAsyncFileUtilTest, DeleteRecursively) {
async_file_util_->DeleteRecursively(
CreateOperationContext(),
directory_url_,
- base::Bind(&EventLogger::OnStatus, logger.GetWeakPtr()));
+ base::Bind(&EventLogger::OnStatus, base::Unretained(&logger)));
+ base::RunLoop().RunUntilIdle();
- ASSERT_TRUE(logger.error());
- EXPECT_EQ(base::File::FILE_ERROR_ACCESS_DENIED, *logger.error());
+ ASSERT_TRUE(logger.result());
+ EXPECT_EQ(base::File::FILE_OK, *logger.result());
}
TEST_F(FileSystemProviderProviderAsyncFileUtilTest, CreateSnapshotFile) {
async_file_util_->CreateSnapshotFile(
CreateOperationContext(),
file_url_,
- base::Bind(&EventLogger::OnCreateSnapshotFile, logger.GetWeakPtr()));
+ base::Bind(&EventLogger::OnCreateSnapshotFile,
+ base::Unretained(&logger)));
- ASSERT_TRUE(logger.error());
- EXPECT_EQ(base::File::FILE_ERROR_INVALID_OPERATION, *logger.error());
+ ASSERT_TRUE(logger.result());
+ EXPECT_EQ(base::File::FILE_ERROR_INVALID_OPERATION, *logger.result());
}
} // namespace file_system_provider