Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(945)

Unified Diff: chrome/browser/chromeos/file_system_provider/fake_provided_file_system.cc

Issue 393233002: [fsp] Refactor FakeProvidedFileSystem to be more flexible. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/file_system_provider/fake_provided_file_system.cc
diff --git a/chrome/browser/chromeos/file_system_provider/fake_provided_file_system.cc b/chrome/browser/chromeos/file_system_provider/fake_provided_file_system.cc
index 45a8a0ba4546dd7122d5768acbe53bc23d9f3aab..e07772c176ea139d29fe97fe9221e6e280ff9e40 100644
--- a/chrome/browser/chromeos/file_system_provider/fake_provided_file_system.cc
+++ b/chrome/browser/chromeos/file_system_provider/fake_provided_file_system.cc
@@ -14,38 +14,67 @@ namespace chromeos {
namespace file_system_provider {
namespace {
-// Adds a fake entry to the entry list.
-void AddDirectoryEntry(fileapi::AsyncFileUtil::EntryList* entry_list,
- const std::string& name,
- fileapi::DirectoryEntry::DirectoryEntryType type,
- int64 size,
- std::string last_modified_time_string) {
- base::Time last_modified_time;
- const bool result = base::Time::FromString(last_modified_time_string.c_str(),
- &last_modified_time);
- DCHECK(result);
- entry_list->push_back(
- fileapi::DirectoryEntry(name, type, size, last_modified_time));
-}
-
-} // namespace
-
const char kFakeFileName[] = "hello.txt";
-const char kFakeFilePath[] = "/hello.txt";
const char kFakeFileText[] =
"This is a testing file. Lorem ipsum dolor sit amet est.";
const size_t kFakeFileSize = sizeof(kFakeFileText) - 1u;
const char kFakeFileModificationTime[] = "Fri Apr 25 01:47:53 UTC 2014";
+const char kFakeFileMimeType[] = "text/plain";
+
+} // namespace
+
+const char kFakeFilePath[] = "/hello.txt";
FakeProvidedFileSystem::FakeProvidedFileSystem(
const ProvidedFileSystemInfo& file_system_info)
: file_system_info_(file_system_info),
last_file_handle_(0),
weak_ptr_factory_(this) {
+ AddEntry(
+ base::FilePath::FromUTF8Unsafe("/"), true, "", 0, base::Time(), "", "");
+
+ base::Time modification_time;
+ DCHECK(base::Time::FromString(kFakeFileModificationTime, &modification_time));
+ AddEntry(base::FilePath::FromUTF8Unsafe(kFakeFilePath),
+ false,
+ kFakeFileName,
+ kFakeFileSize,
+ modification_time,
+ kFakeFileMimeType,
+ kFakeFileText);
}
FakeProvidedFileSystem::~FakeProvidedFileSystem() {}
+void FakeProvidedFileSystem::AddEntry(const base::FilePath& entry_path,
+ bool is_directory,
+ const std::string& name,
+ int64 size,
+ base::Time modification_time,
+ std::string mime_type,
+ std::string contents) {
+ DCHECK(entries_.find(entry_path) == entries_.end());
+ EntryMetadata metadata;
+
+ metadata.is_directory = is_directory;
+ metadata.name = name;
+ metadata.size = size;
+ metadata.modification_time = modification_time;
+ metadata.mime_type = mime_type;
+
+ entries_[entry_path] = FakeEntry(metadata, contents);
+}
+
+bool FakeProvidedFileSystem::GetEntry(const base::FilePath& entry_path,
+ FakeEntry* fake_entry) const {
+ Entries::const_iterator entry_it = entries_.find(entry_path);
hirono 2014/07/16 06:30:00 nit: const Entries::const_iterator
mtomasz 2014/07/16 07:29:15 Done.
+ if (entry_it == entries_.end())
+ return false;
+
+ *fake_entry = entry_it->second;
+ return true;
+}
+
void FakeProvidedFileSystem::RequestUnmount(
const fileapi::AsyncFileUtil::StatusCallback& callback) {
base::MessageLoopProxy::current()->PostTask(
@@ -55,103 +84,52 @@ void FakeProvidedFileSystem::RequestUnmount(
void FakeProvidedFileSystem::GetMetadata(
const base::FilePath& entry_path,
const ProvidedFileSystemInterface::GetMetadataCallback& callback) {
- if (entry_path.AsUTF8Unsafe() == "/") {
- EntryMetadata metadata;
- metadata.size = 0;
- metadata.is_directory = true;
- base::Time modification_time;
- const bool result = base::Time::FromString("Thu Apr 24 00:46:52 UTC 2014",
- &modification_time);
- DCHECK(result);
- metadata.modification_time = modification_time;
+ const Entries::const_iterator entry_it = entries_.find(entry_path);
+ if (entry_it == entries_.end()) {
base::MessageLoopProxy::current()->PostTask(
- FROM_HERE, base::Bind(callback, metadata, base::File::FILE_OK));
- return;
- }
-
- if (entry_path.AsUTF8Unsafe() == kFakeFilePath) {
- EntryMetadata metadata;
- metadata.size = kFakeFileSize;
- metadata.is_directory = false;
- base::Time modification_time;
- const bool result =
- base::Time::FromString(kFakeFileModificationTime, &modification_time);
- DCHECK(result);
- metadata.modification_time = modification_time;
- metadata.mime_type = "text/plain";
-
- base::MessageLoopProxy::current()->PostTask(
- FROM_HERE, base::Bind(callback, metadata, base::File::FILE_OK));
+ FROM_HERE,
+ base::Bind(
+ callback, EntryMetadata(), base::File::FILE_ERROR_NOT_FOUND));
return;
}
base::MessageLoopProxy::current()->PostTask(
FROM_HERE,
- base::Bind(callback, EntryMetadata(), base::File::FILE_ERROR_NOT_FOUND));
+ base::Bind(callback, entry_it->second.metadata, base::File::FILE_OK));
}
void FakeProvidedFileSystem::ReadDirectory(
const base::FilePath& directory_path,
const fileapi::AsyncFileUtil::ReadDirectoryCallback& callback) {
- // Return fake contents for the root directory only.
- if (directory_path.AsUTF8Unsafe() != "/") {
- base::MessageLoopProxy::current()->PostTask(
- FROM_HERE,
- base::Bind(callback,
- base::File::FILE_ERROR_NOT_FOUND,
- fileapi::AsyncFileUtil::EntryList(),
- false /* has_more */));
- return;
- }
-
- {
- fileapi::AsyncFileUtil::EntryList entry_list;
- AddDirectoryEntry(&entry_list,
- kFakeFileName,
- fileapi::DirectoryEntry::FILE,
- kFakeFileSize,
- "Thu Apr 24 00:46:52 UTC 2014");
-
- AddDirectoryEntry(&entry_list,
- "world.txt",
- fileapi::DirectoryEntry::FILE,
- 1024 /* size */,
- "Wed Apr 23 00:20:30 UTC 2014");
-
- base::MessageLoopProxy::current()->PostTask(
- FROM_HERE,
- base::Bind(
- callback, base::File::FILE_OK, entry_list, true /* has_more */));
+ fileapi::AsyncFileUtil::EntryList entry_list;
+
+ for (Entries::const_iterator it = entries_.begin(); it != entries_.end();
+ ++it) {
+ const base::FilePath file_path = it->first;
+ if (file_path == directory_path || directory_path.IsParent(file_path)) {
+ const EntryMetadata& metadata = it->second.metadata;
+ entry_list.push_back(fileapi::DirectoryEntry(
+ metadata.name,
+ metadata.is_directory ? fileapi::DirectoryEntry::DIRECTORY
+ : fileapi::DirectoryEntry::FILE,
+ metadata.size,
+ metadata.modification_time));
+ }
}
- {
- fileapi::AsyncFileUtil::EntryList entry_list;
- AddDirectoryEntry(&entry_list,
- "pictures",
- fileapi::DirectoryEntry::DIRECTORY,
- 0 /* size */,
- "Tue May 22 00:40:50 UTC 2014");
-
- base::MessageLoopProxy::current()->PostTask(
- FROM_HERE,
- base::Bind(
- callback, base::File::FILE_OK, entry_list, false /* has_more */));
- }
+ base::MessageLoopProxy::current()->PostTask(
+ FROM_HERE,
+ base::Bind(
+ callback, base::File::FILE_OK, entry_list, false /* has_more */));
}
-void FakeProvidedFileSystem::OpenFile(const base::FilePath& file_path,
+void FakeProvidedFileSystem::OpenFile(const base::FilePath& entry_path,
OpenFileMode mode,
const OpenFileCallback& callback) {
- if (mode == OPEN_FILE_MODE_WRITE) {
- base::MessageLoopProxy::current()->PostTask(
- FROM_HERE,
- base::Bind(callback,
- 0 /* file_handle */,
- base::File::FILE_ERROR_ACCESS_DENIED));
- }
+ const Entries::const_iterator entry_it = entries_.find(entry_path);
- if (file_path.AsUTF8Unsafe() != "/hello.txt") {
+ if (entry_it == entries_.end()) {
base::MessageLoopProxy::current()->PostTask(
FROM_HERE,
base::Bind(
@@ -160,7 +138,7 @@ void FakeProvidedFileSystem::OpenFile(const base::FilePath& file_path,
}
const int file_handle = ++last_file_handle_;
- opened_files_[file_handle] = file_path;
+ opened_files_[file_handle] = entry_path;
base::MessageLoopProxy::current()->PostTask(
FROM_HERE, base::Bind(callback, file_handle, base::File::FILE_OK));
}
@@ -170,6 +148,7 @@ void FakeProvidedFileSystem::CloseFile(
const fileapi::AsyncFileUtil::StatusCallback& callback) {
const OpenedFilesMap::iterator opened_file_it =
opened_files_.find(file_handle);
+
if (opened_file_it == opened_files_.end()) {
base::MessageLoopProxy::current()->PostTask(
FROM_HERE, base::Bind(callback, base::File::FILE_ERROR_NOT_FOUND));
@@ -189,6 +168,7 @@ void FakeProvidedFileSystem::ReadFile(
const ProvidedFileSystemInterface::ReadChunkReceivedCallback& callback) {
const OpenedFilesMap::iterator opened_file_it =
opened_files_.find(file_handle);
+
if (opened_file_it == opened_files_.end() ||
opened_file_it->second.AsUTF8Unsafe() != kFakeFilePath) {
base::MessageLoopProxy::current()->PostTask(
@@ -200,12 +180,24 @@ void FakeProvidedFileSystem::ReadFile(
return;
}
+ const Entries::const_iterator entry_it =
+ entries_.find(opened_file_it->second);
+ if (entry_it == entries_.end()) {
+ base::MessageLoopProxy::current()->PostTask(
+ FROM_HERE,
+ base::Bind(callback,
+ 0 /* chunk_length */,
+ false /* has_more */,
+ base::File::FILE_ERROR_INVALID_OPERATION));
+ return;
+ }
+
// Send the response byte by byte.
- size_t current_offset = static_cast<size_t>(offset);
- size_t current_length = static_cast<size_t>(length);
+ int64 current_offset = offset;
+ int current_length = length;
// Reading behind EOF is fine, it will just return 0 bytes.
- if (current_offset >= kFakeFileSize || !current_length) {
+ if (current_offset >= entry_it->second.metadata.size || !current_length) {
base::MessageLoopProxy::current()->PostTask(
FROM_HERE,
base::Bind(callback,
@@ -214,10 +206,11 @@ void FakeProvidedFileSystem::ReadFile(
base::File::FILE_OK));
}
- while (current_offset < kFakeFileSize && current_length) {
- buffer->data()[current_offset - offset] = kFakeFileText[current_offset];
+ const FakeEntry& entry = entry_it->second;
+ while (current_offset < entry.metadata.size && current_length) {
+ buffer->data()[current_offset - offset] = entry.contents[current_offset];
const bool has_more =
- (current_offset + 1 < kFakeFileSize) && (current_length - 1);
+ (current_offset + 1 < entry.metadata.size) && (current_length - 1);
base::MessageLoopProxy::current()->PostTask(
FROM_HERE,
base::Bind(
@@ -232,6 +225,7 @@ void FakeProvidedFileSystem::CreateDirectory(
bool exclusive,
bool recursive,
const fileapi::AsyncFileUtil::StatusCallback& callback) {
+ // TODO(mtomasz): Implement it once needed.
hirono 2014/07/16 06:30:00 Cannot we use NOTIMPLEMENTED()?
mtomasz 2014/07/16 07:29:15 This is implemented, but the implementation is sup
base::MessageLoopProxy::current()->PostTask(
FROM_HERE, base::Bind(callback, base::File::FILE_OK));
}
@@ -240,6 +234,7 @@ void FakeProvidedFileSystem::DeleteEntry(
const base::FilePath& entry_path,
bool recursive,
const fileapi::AsyncFileUtil::StatusCallback& callback) {
+ // TODO(mtomasz): Implement it once needed.
base::MessageLoopProxy::current()->PostTask(
FROM_HERE, base::Bind(callback, base::File::FILE_OK));
}

Powered by Google App Engine
This is Rietveld 408576698