Commit 00336db6 authored by mtomasz's avatar mtomasz Committed by Commit bot

[fsp] Group arguments for mounting into a struct.

The list of optional arguments is growing. Each new added one, required changes
in tens of places.

To resolve this problem, this CL creates a MountOptions struct. As a result
adding a new optional argument to mounting will not require updating all
callers.

TEST=unit_tests: *FileSystemProvider*
BUG=248427

Review URL: https://codereview.chromium.org/624903002

Cr-Commit-Position: refs/heads/master@{#299434}
parent d5e96783
......@@ -18,6 +18,7 @@
#include "chrome/common/extensions/api/file_system_provider.h"
#include "chrome/common/extensions/api/file_system_provider_internal.h"
using chromeos::file_system_provider::MountOptions;
using chromeos::file_system_provider::ProvidedFileSystemInfo;
using chromeos::file_system_provider::ProvidedFileSystemInterface;
using chromeos::file_system_provider::RequestValue;
......@@ -59,12 +60,14 @@ bool FileSystemProviderMountFunction::RunSync() {
if (!service)
return false;
MountOptions options;
options.file_system_id = params->options.file_system_id;
options.display_name = params->options.display_name;
options.writable = params->options.writable;
options.supports_notify_tag = params->options.supports_notify_tag;
// TODO(mtomasz): Pass more detailed errors, rather than just a bool.
if (!service->MountFileSystem(extension_id(),
params->options.file_system_id,
params->options.display_name,
params->options.writable,
params->options.supports_notify_tag)) {
if (!service->MountFileSystem(extension_id(), options)) {
base::ListValue* const result = new base::ListValue();
result->Append(CreateError(kSecurityErrorName, kMountFailedErrorMessage));
SetResult(result);
......
......@@ -96,12 +96,8 @@ class FileSystemProviderFileStreamReader : public testing::Test {
service->SetFileSystemFactoryForTesting(
base::Bind(&FakeProvidedFileSystem::Create));
const bool result =
service->MountFileSystem(kExtensionId,
kFileSystemId,
"Testing File System",
false /* writable */,
false /* supports_notify_tag */);
const bool result = service->MountFileSystem(
kExtensionId, MountOptions(kFileSystemId, "Testing File System"));
ASSERT_TRUE(result);
FakeProvidedFileSystem* provided_file_system =
static_cast<FakeProvidedFileSystem*>(
......
......@@ -80,12 +80,8 @@ class FileSystemProviderFileStreamWriter : public testing::Test {
service->SetFileSystemFactoryForTesting(
base::Bind(&FakeProvidedFileSystem::Create));
const bool result =
service->MountFileSystem(kExtensionId,
kFileSystemId,
"Testing File System",
false /* writable */,
false /* supports_notify_tag */);
const bool result = service->MountFileSystem(
kExtensionId, MountOptions(kFileSystemId, "Testing File System"));
ASSERT_TRUE(result);
provided_file_system_ = static_cast<FakeProvidedFileSystem*>(
service->GetProvidedFileSystem(kExtensionId, kFileSystemId));
......
......@@ -135,12 +135,8 @@ class FileSystemProviderProviderAsyncFileUtilTest : public testing::Test {
service->SetFileSystemFactoryForTesting(
base::Bind(&FakeProvidedFileSystem::Create));
const bool result =
service->MountFileSystem(kExtensionId,
kFileSystemId,
"Testing File System",
false /* writable */,
false /* supports_notify_tag */);
const bool result = service->MountFileSystem(
kExtensionId, MountOptions(kFileSystemId, "Testing File System"));
ASSERT_TRUE(result);
const ProvidedFileSystemInfo& file_system_info =
service->GetProvidedFileSystem(kExtensionId, kFileSystemId)
......
......@@ -128,11 +128,7 @@ TEST_F(FileSystemProviderMountPathUtilTest, IsFileSystemProviderLocalPath) {
TEST_F(FileSystemProviderMountPathUtilTest, Parser) {
const bool result = file_system_provider_service_->MountFileSystem(
kExtensionId,
kFileSystemId,
kDisplayName,
false /* writable */,
false /* supports_notify_tag */);
kExtensionId, MountOptions(kFileSystemId, kDisplayName));
ASSERT_TRUE(result);
const ProvidedFileSystemInfo file_system_info =
file_system_provider_service_->GetProvidedFileSystem(kExtensionId,
......@@ -156,11 +152,7 @@ TEST_F(FileSystemProviderMountPathUtilTest, Parser) {
TEST_F(FileSystemProviderMountPathUtilTest, Parser_RootPath) {
const bool result = file_system_provider_service_->MountFileSystem(
kExtensionId,
kFileSystemId,
kDisplayName,
false /* writable */,
false /* supports_notify_tag */);
kExtensionId, MountOptions(kFileSystemId, kDisplayName));
ASSERT_TRUE(result);
const ProvidedFileSystemInfo file_system_info =
file_system_provider_service_->GetProvidedFileSystem(kExtensionId,
......@@ -184,10 +176,7 @@ TEST_F(FileSystemProviderMountPathUtilTest, Parser_RootPath) {
TEST_F(FileSystemProviderMountPathUtilTest, Parser_WrongUrl) {
const ProvidedFileSystemInfo file_system_info(
kExtensionId,
kFileSystemId,
kDisplayName,
false /* writable */,
false /* supports_notify_tag */,
MountOptions(kFileSystemId, kDisplayName),
GetMountPath(profile_, kExtensionId, kFileSystemId));
const base::FilePath kFilePath = base::FilePath::FromUTF8Unsafe("/hello");
......@@ -203,11 +192,7 @@ TEST_F(FileSystemProviderMountPathUtilTest, Parser_WrongUrl) {
TEST_F(FileSystemProviderMountPathUtilTest, Parser_IsolatedURL) {
const bool result = file_system_provider_service_->MountFileSystem(
kExtensionId,
kFileSystemId,
kDisplayName,
false /* writable */,
false /* supports_notify_tag */);
kExtensionId, MountOptions(kFileSystemId, kDisplayName));
ASSERT_TRUE(result);
const ProvidedFileSystemInfo file_system_info =
file_system_provider_service_->GetProvidedFileSystem(kExtensionId,
......@@ -253,11 +238,7 @@ TEST_F(FileSystemProviderMountPathUtilTest, Parser_IsolatedURL) {
TEST_F(FileSystemProviderMountPathUtilTest, LocalPathParser) {
const bool result = file_system_provider_service_->MountFileSystem(
kExtensionId,
kFileSystemId,
kDisplayName,
false /* writable */,
false /* supports_notify_tag */);
kExtensionId, MountOptions(kFileSystemId, kDisplayName));
ASSERT_TRUE(result);
const ProvidedFileSystemInfo file_system_info =
file_system_provider_service_->GetProvidedFileSystem(kExtensionId,
......@@ -281,11 +262,7 @@ TEST_F(FileSystemProviderMountPathUtilTest, LocalPathParser) {
TEST_F(FileSystemProviderMountPathUtilTest, LocalPathParser_RootPath) {
const bool result = file_system_provider_service_->MountFileSystem(
kExtensionId,
kFileSystemId,
kDisplayName,
false /* writable */,
false /* supports_notify_tag */);
kExtensionId, MountOptions(kFileSystemId, kDisplayName));
ASSERT_TRUE(result);
const ProvidedFileSystemInfo file_system_info =
file_system_provider_service_->GetProvidedFileSystem(kExtensionId,
......
......@@ -37,13 +37,10 @@ class FileSystemProviderOperationsAbortTest : public testing::Test {
virtual ~FileSystemProviderOperationsAbortTest() {}
virtual void SetUp() override {
file_system_info_ =
ProvidedFileSystemInfo(kExtensionId,
kFileSystemId,
"" /* file_system_name */,
false /* writable */,
false /* supports_notify_tag */,
base::FilePath() /* mount_path */);
file_system_info_ = ProvidedFileSystemInfo(
kExtensionId,
MountOptions(kFileSystemId, "" /* display_name */),
base::FilePath());
}
ProvidedFileSystemInfo file_system_info_;
......
......@@ -36,13 +36,10 @@ class FileSystemProviderOperationsCloseFileTest : public testing::Test {
virtual ~FileSystemProviderOperationsCloseFileTest() {}
virtual void SetUp() override {
file_system_info_ =
ProvidedFileSystemInfo(kExtensionId,
kFileSystemId,
"" /* display_name */,
false /* writable */,
false /* supports_notify_tag */,
base::FilePath() /* mount_path */);
file_system_info_ = ProvidedFileSystemInfo(
kExtensionId,
MountOptions(kFileSystemId, "" /* display_name */),
base::FilePath());
}
ProvidedFileSystemInfo file_system_info_;
......
......@@ -38,13 +38,10 @@ class FileSystemProviderOperationsCopyEntryTest : public testing::Test {
virtual ~FileSystemProviderOperationsCopyEntryTest() {}
virtual void SetUp() override {
MountOptions mount_options(kFileSystemId, "" /* display_name */);
mount_options.writable = true;
file_system_info_ =
ProvidedFileSystemInfo(kExtensionId,
kFileSystemId,
"" /* file_system_name */,
true /* writable */,
false /* supports_notify_tag */,
base::FilePath() /* mount_path */);
ProvidedFileSystemInfo(kExtensionId, mount_options, base::FilePath());
}
ProvidedFileSystemInfo file_system_info_;
......@@ -108,10 +105,7 @@ TEST_F(FileSystemProviderOperationsCopyEntryTest, Execute_ReadOnly) {
const ProvidedFileSystemInfo read_only_file_system_info(
kExtensionId,
kFileSystemId,
"" /* file_system_name */,
false /* writable */,
false /* supports_notify_tag */,
MountOptions(kFileSystemId, "" /* display_name */),
base::FilePath() /* mount_path */);
CopyEntry copy_entry(NULL,
......
......@@ -37,13 +37,10 @@ class FileSystemProviderOperationsCreateDirectoryTest : public testing::Test {
virtual ~FileSystemProviderOperationsCreateDirectoryTest() {}
virtual void SetUp() override {
MountOptions mount_options(kFileSystemId, "" /* display_name */);
mount_options.writable = true;
file_system_info_ =
ProvidedFileSystemInfo(kExtensionId,
kFileSystemId,
"" /* file_system_name */,
true /* writable */,
false /* supports_notify_tag */,
base::FilePath() /* mount_path */);
ProvidedFileSystemInfo(kExtensionId, mount_options, base::FilePath());
}
ProvidedFileSystemInfo file_system_info_;
......@@ -110,10 +107,7 @@ TEST_F(FileSystemProviderOperationsCreateDirectoryTest, Execute_ReadOnly) {
const ProvidedFileSystemInfo read_only_file_system_info(
kExtensionId,
kFileSystemId,
"" /* file_system_name */,
false /* writable */,
false /* supports_notify_tag */,
MountOptions(kFileSystemId, "" /* display_name */),
base::FilePath() /* mount_path */);
CreateDirectory create_directory(
......
......@@ -37,13 +37,10 @@ class FileSystemProviderOperationsCreateFileTest : public testing::Test {
virtual ~FileSystemProviderOperationsCreateFileTest() {}
virtual void SetUp() override {
MountOptions mount_options(kFileSystemId, "" /* display_name */);
mount_options.writable = true;
file_system_info_ =
ProvidedFileSystemInfo(kExtensionId,
kFileSystemId,
"" /* file_system_name */,
true /* writable */,
false /* supports_notify_tag */,
base::FilePath() /* mount_path */);
ProvidedFileSystemInfo(kExtensionId, mount_options, base::FilePath());
}
ProvidedFileSystemInfo file_system_info_;
......@@ -105,10 +102,7 @@ TEST_F(FileSystemProviderOperationsCreateFileTest, Execute_ReadOnly) {
const ProvidedFileSystemInfo read_only_file_system_info(
kExtensionId,
kFileSystemId,
"" /* file_system_name */,
false /* writable */,
false /* supports_notify_tag */,
MountOptions(kFileSystemId, "" /* display_name */),
base::FilePath() /* mount_path */);
CreateFile create_file(NULL,
......
......@@ -37,13 +37,10 @@ class FileSystemProviderOperationsDeleteEntryTest : public testing::Test {
virtual ~FileSystemProviderOperationsDeleteEntryTest() {}
virtual void SetUp() override {
MountOptions mount_options(kFileSystemId, "" /* display_name */);
mount_options.writable = true;
file_system_info_ =
ProvidedFileSystemInfo(kExtensionId,
kFileSystemId,
"" /* file_system_name */,
true /* writable */,
false /* supports_notify_tag */,
base::FilePath() /* mount_path */);
ProvidedFileSystemInfo(kExtensionId, mount_options, base::FilePath());
}
ProvidedFileSystemInfo file_system_info_;
......@@ -108,10 +105,7 @@ TEST_F(FileSystemProviderOperationsDeleteEntryTest, Execute_ReadOnly) {
const ProvidedFileSystemInfo read_only_file_system_info(
kExtensionId,
kFileSystemId,
"" /* file_system_name */,
false /* writable */,
false /* supports_notify_tag */,
MountOptions(kFileSystemId, "" /* display_name */),
base::FilePath() /* mount_path */);
DeleteEntry delete_entry(NULL,
......
......@@ -77,13 +77,10 @@ class FileSystemProviderOperationsGetMetadataTest : public testing::Test {
virtual ~FileSystemProviderOperationsGetMetadataTest() {}
virtual void SetUp() override {
file_system_info_ =
ProvidedFileSystemInfo(kExtensionId,
kFileSystemId,
"" /* display_name */,
false /* writable */,
false /* supports_notify_tag */,
base::FilePath() /* mount_path */);
file_system_info_ = ProvidedFileSystemInfo(
kExtensionId,
MountOptions(kFileSystemId, "" /* display_name */),
base::FilePath());
}
ProvidedFileSystemInfo file_system_info_;
......
......@@ -38,13 +38,10 @@ class FileSystemProviderOperationsMoveEntryTest : public testing::Test {
virtual ~FileSystemProviderOperationsMoveEntryTest() {}
virtual void SetUp() override {
MountOptions mount_options(kFileSystemId, "" /* display_name */);
mount_options.writable = true;
file_system_info_ =
ProvidedFileSystemInfo(kExtensionId,
kFileSystemId,
"" /* file_system_name */,
true /* writable */,
false /* supports_notify_tag */,
base::FilePath() /* mount_path */);
ProvidedFileSystemInfo(kExtensionId, mount_options, base::FilePath());
}
ProvidedFileSystemInfo file_system_info_;
......@@ -108,10 +105,7 @@ TEST_F(FileSystemProviderOperationsMoveEntryTest, Execute_ReadOnly) {
const ProvidedFileSystemInfo read_only_file_system_info(
kExtensionId,
kFileSystemId,
"" /* file_system_name */,
false /* writable */,
false /* supports_notify_tag */,
MountOptions(kFileSystemId, "" /* display_name */),
base::FilePath() /* mount_path */);
MoveEntry move_entry(NULL,
......
......@@ -37,13 +37,10 @@ class FileSystemProviderOperationsObserveDirectoryTest : public testing::Test {
virtual ~FileSystemProviderOperationsObserveDirectoryTest() {}
virtual void SetUp() override {
file_system_info_ =
ProvidedFileSystemInfo(kExtensionId,
kFileSystemId,
"" /* file_system_name */,
false /* writable */,
false /* supports_notify_tag */,
base::FilePath() /* mount_path */);
file_system_info_ = ProvidedFileSystemInfo(
kExtensionId,
MountOptions(kFileSystemId, "" /* display_name */),
base::FilePath());
}
ProvidedFileSystemInfo file_system_info_;
......
......@@ -72,13 +72,10 @@ class FileSystemProviderOperationsOpenFileTest : public testing::Test {
virtual ~FileSystemProviderOperationsOpenFileTest() {}
virtual void SetUp() override {
file_system_info_ =
ProvidedFileSystemInfo(kExtensionId,
kFileSystemId,
"" /* display_name */,
false /* writable */,
false /* supports_notify_tag */,
base::FilePath() /* mount_path */);
file_system_info_ = ProvidedFileSystemInfo(
kExtensionId,
MountOptions(kFileSystemId, "" /* display_name */),
base::FilePath());
}
ProvidedFileSystemInfo file_system_info_;
......@@ -145,10 +142,7 @@ TEST_F(FileSystemProviderOperationsOpenFileTest, Execute_ReadOnly) {
const ProvidedFileSystemInfo read_only_file_system_info(
kExtensionId,
kFileSystemId,
"" /* file_system_name */,
false /* writable */,
false /* supports_notify_tag */,
MountOptions(kFileSystemId, "" /* display_name */),
base::FilePath() /* mount_path */);
// Opening for read on a read-only file system is allowed.
......
......@@ -80,13 +80,10 @@ class FileSystemProviderOperationsReadDirectoryTest : public testing::Test {
virtual ~FileSystemProviderOperationsReadDirectoryTest() {}
virtual void SetUp() override {
file_system_info_ =
ProvidedFileSystemInfo(kExtensionId,
kFileSystemId,
"" /* display_name */,
false /* writable */,
false /* supports_notify_tag */,
base::FilePath() /* mount_path */);
file_system_info_ = ProvidedFileSystemInfo(
kExtensionId,
MountOptions(kFileSystemId, "" /* display_name */),
base::FilePath());
}
ProvidedFileSystemInfo file_system_info_;
......
......@@ -77,13 +77,10 @@ class FileSystemProviderOperationsReadFileTest : public testing::Test {
virtual ~FileSystemProviderOperationsReadFileTest() {}
virtual void SetUp() override {
file_system_info_ =
ProvidedFileSystemInfo(kExtensionId,
kFileSystemId,
"" /* display_name */,
false /* writable */,
false /* supports_notify_tag */,
base::FilePath() /* mount_path */);
file_system_info_ = ProvidedFileSystemInfo(
kExtensionId,
MountOptions(kFileSystemId, "" /* display_name */),
base::FilePath());
io_buffer_ = make_scoped_refptr(new net::IOBuffer(kOffset + kLength));
}
......
......@@ -38,13 +38,10 @@ class FileSystemProviderOperationsTruncateTest : public testing::Test {
virtual ~FileSystemProviderOperationsTruncateTest() {}
virtual void SetUp() override {
MountOptions mount_options(kFileSystemId, "" /* display_name */);
mount_options.writable = true;
file_system_info_ =
ProvidedFileSystemInfo(kExtensionId,
kFileSystemId,
"" /* file_system_name */,
true /* writable */,
false /* supports_notify_tag */,
base::FilePath() /* mount_path */);
ProvidedFileSystemInfo(kExtensionId, mount_options, base::FilePath());
}
ProvidedFileSystemInfo file_system_info_;
......@@ -108,10 +105,7 @@ TEST_F(FileSystemProviderOperationsTruncateTest, Execute_ReadOnly) {
const ProvidedFileSystemInfo read_only_file_system_info(
kExtensionId,
kFileSystemId,
"" /* file_system_name */,
false /* writable */,
false /* supports_notify_tag */,
MountOptions(kFileSystemId, "" /* display_name */),
base::FilePath() /* mount_path */);
Truncate truncate(NULL,
......
......@@ -34,13 +34,10 @@ class FileSystemProviderOperationsUnmountTest : public testing::Test {
virtual ~FileSystemProviderOperationsUnmountTest() {}
virtual void SetUp() override {
file_system_info_ =
ProvidedFileSystemInfo(kExtensionId,
kFileSystemId,
"" /* display_name */,
false /* writable */,
false /* supports_notify_tag */,
base::FilePath() /* mount_path */);
file_system_info_ = ProvidedFileSystemInfo(
kExtensionId,
MountOptions(kFileSystemId, "" /* display_name */),
base::FilePath());
}
ProvidedFileSystemInfo file_system_info_;
......
......@@ -37,13 +37,10 @@ class FileSystemProviderOperationsUnobserveEntryTest : public testing::Test {
virtual ~FileSystemProviderOperationsUnobserveEntryTest() {}
virtual void SetUp() override {
file_system_info_ =
ProvidedFileSystemInfo(kExtensionId,
kFileSystemId,
"" /* file_system_name */,
false /* writable */,
false /* supports_notify_tag */,
base::FilePath() /* mount_path */);
file_system_info_ = ProvidedFileSystemInfo(
kExtensionId,
MountOptions(kFileSystemId, "" /* display_name */),
base::FilePath());
}
ProvidedFileSystemInfo file_system_info_;
......
......@@ -40,13 +40,10 @@ class FileSystemProviderOperationsWriteFileTest : public testing::Test {
virtual ~FileSystemProviderOperationsWriteFileTest() {}
virtual void SetUp() override {
MountOptions mount_options(kFileSystemId, "" /* display_name */);
mount_options.writable = true;
file_system_info_ =
ProvidedFileSystemInfo(kExtensionId,
kFileSystemId,
"" /* display_name */,
true /* writable */,
false /* supports_notify_tag */,
base::FilePath() /* mount_path */);
ProvidedFileSystemInfo(kExtensionId, mount_options, base::FilePath());
io_buffer_ = make_scoped_refptr(new net::StringIOBuffer(kWriteData));
}
......@@ -117,10 +114,7 @@ TEST_F(FileSystemProviderOperationsWriteFileTest, Execute_ReadOnly) {
const ProvidedFileSystemInfo read_only_file_system_info(
kExtensionId,
kFileSystemId,
"" /* file_system_name */,
false /* writable */,
false /* supports_notify_tag */,
MountOptions(kFileSystemId, "" /* display_name */),
base::FilePath() /* mount_path */);
WriteFile write_file(NULL,
......
......@@ -7,20 +7,30 @@
namespace chromeos {
namespace file_system_provider {
ProvidedFileSystemInfo::ProvidedFileSystemInfo() {}
MountOptions::MountOptions() : writable(false), supports_notify_tag(false) {
}
MountOptions::MountOptions(const std::string& file_system_id,
const std::string& display_name)
: file_system_id(file_system_id),
display_name(display_name),
writable(false),
supports_notify_tag(false) {
}
ProvidedFileSystemInfo::ProvidedFileSystemInfo()
: writable_(false), supports_notify_tag_(false) {
}
ProvidedFileSystemInfo::ProvidedFileSystemInfo(
const std::string& extension_id,
const std::string& file_system_id,
const std::string& display_name,
bool writable,
bool supports_notify_tag,
const MountOptions& mount_options,
const base::FilePath& mount_path)
: extension_id_(extension_id),
file_system_id_(file_system_id),
display_name_(display_name),
writable_(writable),
supports_notify_tag_(supports_notify_tag),
file_system_id_(mount_options.file_system_id),
display_name_(mount_options.display_name),
writable_(mount_options.writable),
supports_notify_tag_(mount_options.supports_notify_tag),
mount_path_(mount_path) {
}
......
......@@ -12,15 +12,28 @@
namespace chromeos {
namespace file_system_provider {
// Options for creating the provided file system info.
struct MountOptions {
MountOptions();
// Only mandatory fields.
MountOptions(const std::string& file_system_id,
const std::string& display_name);
std::string extension_id;
std::string file_system_id;
std::string display_name;
bool writable;
bool supports_notify_tag;
};
// Contains information about the provided file system instance.
class ProvidedFileSystemInfo {
public:
ProvidedFileSystemInfo();
ProvidedFileSystemInfo(const std::string& extension_id,
const std::string& file_system_id,
const std::string& display_name,
bool writable,
bool supports_notify_tag,
const MountOptions& mount_options,
const base::FilePath& mount_path);
~ProvidedFileSystemInfo();
......
......@@ -193,13 +193,12 @@ class FileSystemProviderProvidedFileSystemTest : public testing::Test {
profile_.reset(new TestingProfile);
const base::FilePath mount_path =
util::GetMountPath(profile_.get(), kExtensionId, kFileSystemId);
MountOptions mount_options;
mount_options.file_system_id = kFileSystemId;
mount_options.display_name = kDisplayName;
mount_options.supports_notify_tag = true;
file_system_info_.reset(
new ProvidedFileSystemInfo(kExtensionId,
kFileSystemId,
kDisplayName,
false /* writable */,
true /* supports_notify_tag */,
mount_path));
new ProvidedFileSystemInfo(kExtensionId, mount_options, mount_path));
provided_file_system_.reset(
new ProvidedFileSystem(profile_.get(), *file_system_info_.get()));
event_router_.reset(
......
......@@ -101,15 +101,12 @@ void Service::SetFileSystemFactoryForTesting(
}
bool Service::MountFileSystem(const std::string& extension_id,
const std::string& file_system_id,
const std::string& display_name,
bool writable,
bool supports_notify_tag) {
const MountOptions& options) {
DCHECK(thread_checker_.CalledOnValidThread());
// If already exists a file system provided by the same extension with this
// id, then abort.
if (GetProvidedFileSystem(extension_id, file_system_id)) {
if (GetProvidedFileSystem(extension_id, options.file_system_id)) {
FOR_EACH_OBSERVER(Observer,
observers_,
OnProvidedFileSystemMount(ProvidedFileSystemInfo(),
......@@ -134,7 +131,7 @@ bool Service::MountFileSystem(const std::string& extension_id,
// The mount point path and name are unique per system, since they are system
// wide. This is necessary for copying between profiles.
const base::FilePath& mount_path =
util::GetMountPath(profile_, extension_id, file_system_id);
util::GetMountPath(profile_, extension_id, options.file_system_id);
const std::string mount_point_name = mount_path.BaseName().AsUTF8Unsafe();
if (!mount_points->RegisterFileSystem(mount_point_name,
......@@ -157,19 +154,15 @@ bool Service::MountFileSystem(const std::string& extension_id,
// writable = false
// supports_notify_tag = false
// mount_path = /provided/b33f1337-hello_world-5aa5
ProvidedFileSystemInfo file_system_info(extension_id,
file_system_id,
display_name,
writable,
supports_notify_tag,
mount_path);
ProvidedFileSystemInfo file_system_info(extension_id, options, mount_path);
ProvidedFileSystemInterface* file_system =
file_system_factory_.Run(profile_, file_system_info);
DCHECK(file_system);
file_system_map_[FileSystemKey(extension_id, file_system_id)] = file_system;
file_system_map_[FileSystemKey(extension_id, options.file_system_id)] =
file_system;
mount_point_name_to_key_map_[mount_point_name] =
FileSystemKey(extension_id, file_system_id);
FileSystemKey(extension_id, options.file_system_id);
RememberFileSystem(file_system_info);
FOR_EACH_OBSERVER(
......@@ -450,11 +443,12 @@ void Service::RestoreFileSystems(const std::string& extension_id) {
<< "Malformed provided file system information in preferences.";
continue;
}
const bool result = MountFileSystem(extension_id,
file_system_id,
display_name,
writable,
supports_notify_tag);
MountOptions options;
options.file_system_id = file_system_id;
options.display_name = display_name;
options.writable = writable;
options.supports_notify_tag = supports_notify_tag;
const bool result = MountFileSystem(extension_id, options);
if (!result) {
LOG(ERROR) << "Failed to restore a provided file system from "
<< "preferences: " << extension_id << ", " << file_system_id
......
......@@ -48,6 +48,7 @@ class ProvidedFileSystemFactoryInterface;
class ProvidedFileSystemInfo;
class ProvidedFileSystemInterface;
class ServiceFactory;
struct MountOptions;
// Registers preferences to remember registered file systems between reboots.
void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
......@@ -83,10 +84,7 @@ class Service : public KeyedService,
// it is required in order to enable the internal cache. For success, returns
// true, otherwise false.
bool MountFileSystem(const std::string& extension_id,
const std::string& file_system_id,
const std::string& display_name,
bool writable,
bool supports_notify_tag);
const MountOptions& options);
// Unmounts a file system with the specified |file_system_id| for the
// |extension_id|. For success returns true, otherwise false.
......
......@@ -162,11 +162,8 @@ TEST_F(FileSystemProviderServiceTest, MountFileSystem) {
LoggingObserver observer;
service_->AddObserver(&observer);
EXPECT_TRUE(service_->MountFileSystem(kExtensionId,
kFileSystemId,
kDisplayName,
false /* writable */,
false /* supports_notify_tag */));
EXPECT_TRUE(service_->MountFileSystem(
kExtensionId, MountOptions(kFileSystemId, kDisplayName)));
ASSERT_EQ(1u, observer.mounts.size());
EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id());
......@@ -194,11 +191,10 @@ TEST_F(FileSystemProviderServiceTest,
LoggingObserver observer;
service_->AddObserver(&observer);
EXPECT_TRUE(service_->MountFileSystem(kExtensionId,
kFileSystemId,
kDisplayName,
true /* writable */,
true /* supports_notify_tag */));
MountOptions options(kFileSystemId, kDisplayName);
options.writable = true;
options.supports_notify_tag = true;
EXPECT_TRUE(service_->MountFileSystem(kExtensionId, options));
ASSERT_EQ(1u, observer.mounts.size());
EXPECT_TRUE(observer.mounts[0].file_system_info().writable());
......@@ -215,16 +211,10 @@ TEST_F(FileSystemProviderServiceTest, MountFileSystem_UniqueIds) {
LoggingObserver observer;
service_->AddObserver(&observer);
EXPECT_TRUE(service_->MountFileSystem(kExtensionId,
kFileSystemId,
kDisplayName,
false /* writable */,
false /* supports_notify_tag */));
EXPECT_FALSE(service_->MountFileSystem(kExtensionId,
kFileSystemId,
kDisplayName,
false /* writable */,
false /* supports_notify_tag */));
EXPECT_TRUE(service_->MountFileSystem(
kExtensionId, MountOptions(kFileSystemId, kDisplayName)));
EXPECT_FALSE(service_->MountFileSystem(
kExtensionId, MountOptions(kFileSystemId, kDisplayName)));
ASSERT_EQ(2u, observer.mounts.size());
EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error());
......@@ -245,20 +235,14 @@ TEST_F(FileSystemProviderServiceTest, MountFileSystem_StressTest) {
for (size_t i = 0; i < kMaxFileSystems; ++i) {
const std::string file_system_id =
std::string("test-") + base::IntToString(i);
EXPECT_TRUE(service_->MountFileSystem(kExtensionId,
file_system_id,
kDisplayName,
false /* writable */,
false /* supports_notify_tag */));
EXPECT_TRUE(service_->MountFileSystem(
kExtensionId, MountOptions(file_system_id, kDisplayName)));
}
ASSERT_EQ(kMaxFileSystems, observer.mounts.size());
// The next file system is out of limit, and registering it should fail.
EXPECT_FALSE(service_->MountFileSystem(kExtensionId,
kFileSystemId,
kDisplayName,
false /* writable */,
false /* supports_notify_tag */));
EXPECT_FALSE(service_->MountFileSystem(
kExtensionId, MountOptions(kFileSystemId, kDisplayName)));
ASSERT_EQ(kMaxFileSystems + 1, observer.mounts.size());
EXPECT_EQ(base::File::FILE_ERROR_TOO_MANY_OPENED,
......@@ -275,11 +259,8 @@ TEST_F(FileSystemProviderServiceTest, UnmountFileSystem) {
LoggingObserver observer;
service_->AddObserver(&observer);
EXPECT_TRUE(service_->MountFileSystem(kExtensionId,
kFileSystemId,
kDisplayName,
false /* writable */,
false /* supports_notify_tag */));
EXPECT_TRUE(service_->MountFileSystem(
kExtensionId, MountOptions(kFileSystemId, kDisplayName)));
ASSERT_EQ(1u, observer.mounts.size());
EXPECT_TRUE(service_->UnmountFileSystem(
......@@ -303,11 +284,8 @@ TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_OnExtensionUnload) {
LoggingObserver observer;
service_->AddObserver(&observer);
EXPECT_TRUE(service_->MountFileSystem(kExtensionId,
kFileSystemId,
kDisplayName,
false /* writable */,
false /* supports_notify_tag */));
EXPECT_TRUE(service_->MountFileSystem(
kExtensionId, MountOptions(kFileSystemId, kDisplayName)));
ASSERT_EQ(1u, observer.mounts.size());
// Directly call the observer's method.
......@@ -337,11 +315,8 @@ TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_WrongExtensionId) {
const std::string kWrongExtensionId = "helloworldhelloworldhelloworldhe";
EXPECT_TRUE(service_->MountFileSystem(kExtensionId,
kFileSystemId,
kDisplayName,
false /* writable */,
false /* supports_notify_tag */));
EXPECT_TRUE(service_->MountFileSystem(
kExtensionId, MountOptions(kFileSystemId, kDisplayName)));
ASSERT_EQ(1u, observer.mounts.size());
ASSERT_EQ(1u, service_->GetProvidedFileSystemInfoList().size());
......@@ -402,11 +377,10 @@ TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnMount) {
LoggingObserver observer;
service_->AddObserver(&observer);
EXPECT_TRUE(service_->MountFileSystem(kExtensionId,
kFileSystemId,
kDisplayName,
true /* writable */,
true /* supports_notify_tag */));
MountOptions options(kFileSystemId, kDisplayName);
options.writable = true;
options.supports_notify_tag = true;
EXPECT_TRUE(service_->MountFileSystem(kExtensionId, options));
ASSERT_EQ(1u, observer.mounts.size());
TestingPrefServiceSyncable* const pref_service =
......@@ -460,11 +434,8 @@ TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnUnmountOnShutdown) {
ASSERT_TRUE(pref_service);
{
EXPECT_TRUE(service_->MountFileSystem(kExtensionId,
kFileSystemId,
kDisplayName,
false /* writable */,
false /* supports_notify_tag */));
EXPECT_TRUE(service_->MountFileSystem(
kExtensionId, MountOptions(kFileSystemId, kDisplayName)));
ASSERT_EQ(1u, observer.mounts.size());
const base::DictionaryValue* extensions =
......@@ -503,11 +474,8 @@ TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnUnmountByUser) {
ASSERT_TRUE(pref_service);
{
EXPECT_TRUE(service_->MountFileSystem(kExtensionId,
kFileSystemId,
kDisplayName,
false /* writable */,
false /* supports_notify_tag */));
EXPECT_TRUE(service_->MountFileSystem(
kExtensionId, MountOptions(kFileSystemId, kDisplayName)));
ASSERT_EQ(1u, observer.mounts.size());
const base::DictionaryValue* extensions =
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment