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

Unified Diff: chrome/browser/chromeos/drive/drive_resource_metadata.cc

Issue 14091012: chromeos: Rewrite DriveResourceMetadata::MoveEntryToDirectory with RefreshEntry (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 8 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
« no previous file with comments | « chrome/browser/chromeos/drive/drive_resource_metadata.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/drive/drive_resource_metadata.cc
diff --git a/chrome/browser/chromeos/drive/drive_resource_metadata.cc b/chrome/browser/chromeos/drive/drive_resource_metadata.cc
index 19e9b8ab0e70cb20c5425a1db4d93afe09631b8f..8571a6e6471168a22358a1fbc9a3137e43f5acfb 100644
--- a/chrome/browser/chromeos/drive/drive_resource_metadata.cc
+++ b/chrome/browser/chromeos/drive/drive_resource_metadata.cc
@@ -51,6 +51,19 @@ bool EnoughDiskSpaceIsAvailableForDBOperation(const base::FilePath& path) {
kRequiredDiskSpaceInMB * (1 << 20);
}
+// Runs |callback| with arguments.
+void RunGetEntryInfoWithFilePathCallback(
+ const GetEntryInfoWithFilePathCallback& callback,
+ base::FilePath* path,
+ scoped_ptr<DriveEntryProto> entry,
+ FileError error) {
+ DCHECK(!callback.is_null());
+
+ if (error != FILE_ERROR_OK)
+ entry.reset();
+ callback.Run(error, *path, entry.Pass());
+}
+
} // namespace
std::string DirectoryFetchInfo::ToString() const {
@@ -113,32 +126,6 @@ struct DriveResourceMetadata::GetEntryInfoResult {
scoped_ptr<DriveEntryProto> entry;
};
-// Struct to hold result values passed to GetEntryInfoWithFilePathCallback.
-struct DriveResourceMetadata::GetEntryInfoWithFilePathResult {
- GetEntryInfoWithFilePathResult(FileError error,
- const base::FilePath& path,
- scoped_ptr<DriveEntryProto> entry)
- : error(error),
- path(path),
- entry(entry.Pass()) {}
-
- explicit GetEntryInfoWithFilePathResult(FileError error)
- : error(error) {}
-
- // Runs GetEntryInfoWithFilePathCallback with the values stored in |result|.
- static void RunCallbackWithResult(
- const GetEntryInfoWithFilePathCallback& callback,
- scoped_ptr<GetEntryInfoWithFilePathResult> result) {
- DCHECK(!callback.is_null());
- DCHECK(result);
- callback.Run(result->error, result->path, result->entry.Pass());
- }
-
- FileError error;
- base::FilePath path;
- scoped_ptr<DriveEntryProto> entry;
-};
-
// Struct to hold result values passed to ReadDirectoryCallback.
struct DriveResourceMetadata::ReadDirectoryResult {
ReadDirectoryResult(FileError error,
@@ -349,14 +336,22 @@ void DriveResourceMetadata::GetEntryInfoByResourceId(
const GetEntryInfoWithFilePathCallback& callback) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(!callback.is_null());
+
+ base::FilePath* file_path = new base::FilePath;
+ scoped_ptr<DriveEntryProto> entry(new DriveEntryProto);
+ DriveEntryProto* entry_ptr = entry.get();
base::PostTaskAndReplyWithResult(
blocking_task_runner_,
FROM_HERE,
base::Bind(&DriveResourceMetadata::GetEntryInfoByResourceIdOnBlockingPool,
base::Unretained(this),
- resource_id),
- base::Bind(&GetEntryInfoWithFilePathResult::RunCallbackWithResult,
- callback));
+ resource_id,
+ file_path,
+ entry_ptr),
+ base::Bind(&RunGetEntryInfoWithFilePathCallback,
+ callback,
+ base::Owned(file_path),
+ base::Passed(&entry)));
}
void DriveResourceMetadata::GetEntryInfoByPath(
@@ -394,14 +389,22 @@ void DriveResourceMetadata::RefreshEntry(
const GetEntryInfoWithFilePathCallback& callback) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(!callback.is_null());
+
+ base::FilePath* file_path = new base::FilePath;
+ scoped_ptr<DriveEntryProto> entry(new DriveEntryProto);
+ DriveEntryProto* entry_ptr = entry.get();
base::PostTaskAndReplyWithResult(
blocking_task_runner_,
FROM_HERE,
base::Bind(&DriveResourceMetadata::RefreshEntryOnBlockingPool,
base::Unretained(this),
- entry_proto),
- base::Bind(&GetEntryInfoWithFilePathResult::RunCallbackWithResult,
- callback));
+ entry_proto,
+ file_path,
+ entry_ptr),
+ base::Bind(&RunGetEntryInfoWithFilePathCallback,
+ callback,
+ base::Owned(file_path),
+ base::Passed(&entry)));
}
void DriveResourceMetadata::RefreshDirectory(
@@ -489,29 +492,17 @@ DriveResourceMetadata::MoveEntryToDirectoryOnBlockingPool(
return FileMoveResult(FILE_ERROR_NO_SPACE);
scoped_ptr<DriveEntryProto> entry = FindEntryByPathSync(file_path);
- if (!entry)
+ scoped_ptr<DriveEntryProto> destination = FindEntryByPathSync(directory_path);
+ if (!entry || !destination)
return FileMoveResult(FILE_ERROR_NOT_FOUND);
+ if (!destination->file_info().is_directory())
+ return FileMoveResult(FILE_ERROR_NOT_A_DIRECTORY);
- // Cannot move an entry without its parent. (i.e. the root)
- if (entry->parent_resource_id().empty())
- return FileMoveResult(FILE_ERROR_INVALID_OPERATION);
+ entry->set_parent_resource_id(destination->resource_id());
- scoped_ptr<DriveEntryProto> destination = FindEntryByPathSync(directory_path);
- base::FilePath moved_file_path;
- FileError error = FILE_ERROR_FAILED;
- if (!destination) {
- error = FILE_ERROR_NOT_FOUND;
- } else if (!destination->file_info().is_directory()) {
- error = FILE_ERROR_NOT_A_DIRECTORY;
- } else {
- DetachEntryFromDirectory(entry->resource_id());
- entry->set_parent_resource_id(destination->resource_id());
- AddEntryToDirectory(*entry);
- moved_file_path = GetFilePath(entry->resource_id());
- error = FILE_ERROR_OK;
- }
- DVLOG(1) << "MoveEntryToDirectory " << moved_file_path.value();
- return FileMoveResult(error, moved_file_path);
+ base::FilePath result_file_path;
+ FileError error = RefreshEntryOnBlockingPool(*entry, &result_file_path, NULL);
+ return FileMoveResult(error, result_file_path);
}
DriveResourceMetadata::FileMoveResult
@@ -535,9 +526,9 @@ DriveResourceMetadata::RenameEntryOnBlockingPool(
return FileMoveResult(FILE_ERROR_EXISTS);
entry->set_title(new_name);
- scoped_ptr<GetEntryInfoWithFilePathResult> result =
- RefreshEntryOnBlockingPool(*entry);
- return FileMoveResult(result->error, result->path);
+ base::FilePath result_file_path;
+ FileError error = RefreshEntryOnBlockingPool(*entry, &result_file_path, NULL);
+ return FileMoveResult(error, result_file_path);
}
DriveResourceMetadata::FileMoveResult
@@ -593,24 +584,23 @@ scoped_ptr<DriveEntryProto> DriveResourceMetadata::FindEntryByPathSync(
return entry.Pass();
}
-scoped_ptr<DriveResourceMetadata::GetEntryInfoWithFilePathResult>
-DriveResourceMetadata::GetEntryInfoByResourceIdOnBlockingPool(
- const std::string& resource_id) {
+FileError DriveResourceMetadata::GetEntryInfoByResourceIdOnBlockingPool(
+ const std::string& resource_id,
+ base::FilePath* out_file_path,
+ DriveEntryProto* out_entry) {
DCHECK(blocking_task_runner_->RunsTasksOnCurrentThread());
DCHECK(!resource_id.empty());
scoped_ptr<DriveEntryProto> entry = storage_->GetEntry(resource_id);
- FileError error = FILE_ERROR_FAILED;
- base::FilePath drive_file_path;
- if (entry) {
- error = FILE_ERROR_OK;
- drive_file_path = GetFilePath(resource_id);
- } else {
- error = FILE_ERROR_NOT_FOUND;
- }
+ if (!entry)
+ return FILE_ERROR_NOT_FOUND;
- return make_scoped_ptr(
- new GetEntryInfoWithFilePathResult(error, drive_file_path, entry.Pass()));
+ if (out_file_path)
+ *out_file_path = GetFilePath(resource_id);
+ if (out_entry)
+ *out_entry = *entry;
+
+ return FILE_ERROR_OK;
}
scoped_ptr<DriveResourceMetadata::GetEntryInfoResult>
@@ -662,50 +652,47 @@ void DriveResourceMetadata::GetEntryInfoPairByPaths(
callback));
}
-scoped_ptr<DriveResourceMetadata::GetEntryInfoWithFilePathResult>
-DriveResourceMetadata::RefreshEntryOnBlockingPool(
- const DriveEntryProto& entry_proto) {
+FileError DriveResourceMetadata::RefreshEntryOnBlockingPool(
+ const DriveEntryProto& entry,
+ base::FilePath* out_file_path,
+ DriveEntryProto* out_entry) {
DCHECK(blocking_task_runner_->RunsTasksOnCurrentThread());
- if (!EnoughDiskSpaceIsAvailableForDBOperation(data_directory_path_)) {
- return make_scoped_ptr(
- new GetEntryInfoWithFilePathResult(FILE_ERROR_NO_SPACE));
- }
+ if (!EnoughDiskSpaceIsAvailableForDBOperation(data_directory_path_))
+ return FILE_ERROR_NO_SPACE;
- scoped_ptr<DriveEntryProto> entry =
- storage_->GetEntry(entry_proto.resource_id());
- if (!entry) {
- return make_scoped_ptr(
- new GetEntryInfoWithFilePathResult(FILE_ERROR_NOT_FOUND));
- }
+ scoped_ptr<DriveEntryProto> old_entry =
+ storage_->GetEntry(entry.resource_id());
+ if (!old_entry)
+ return FILE_ERROR_NOT_FOUND;
- if (entry->parent_resource_id().empty() || // Rejct root.
- entry->file_info().is_directory() != // Reject incompatible input.
- entry_proto.file_info().is_directory()) {
- return make_scoped_ptr(
- new GetEntryInfoWithFilePathResult(FILE_ERROR_INVALID_OPERATION));
- }
+ if (old_entry->parent_resource_id().empty() || // Rejct root.
+ old_entry->file_info().is_directory() != // Reject incompatible input.
+ entry.file_info().is_directory())
+ return FILE_ERROR_INVALID_OPERATION;
// Update data.
scoped_ptr<DriveEntryProto> new_parent =
- GetDirectory(entry_proto.parent_resource_id());
+ GetDirectory(entry.parent_resource_id());
- if (!new_parent) {
- return make_scoped_ptr(
- new GetEntryInfoWithFilePathResult(FILE_ERROR_NOT_FOUND));
- }
+ if (!new_parent)
+ return FILE_ERROR_NOT_FOUND;
// Remove from the old parent and add it to the new parent with the new data.
- DetachEntryFromDirectory(entry->resource_id());
- AddEntryToDirectory(CreateEntryWithProperBaseName(entry_proto));
-
- // Note that base_name is not the same for the new entry and entry_proto.
- scoped_ptr<DriveEntryProto> result_entry_proto =
- storage_->GetEntry(entry->resource_id());
- return make_scoped_ptr(
- new GetEntryInfoWithFilePathResult(FILE_ERROR_OK,
- GetFilePath(entry->resource_id()),
- result_entry_proto.Pass()));
+ DetachEntryFromDirectory(old_entry->resource_id());
+ AddEntryToDirectory(CreateEntryWithProperBaseName(entry));
+
+ if (out_file_path)
+ *out_file_path = GetFilePath(entry.resource_id());
+
+ if (out_entry) {
+ // Note that base_name is not the same for the new entry and entry_proto.
+ scoped_ptr<DriveEntryProto> result_entry_proto =
+ storage_->GetEntry(entry.resource_id());
+ DCHECK(result_entry_proto);
+ *out_entry = *result_entry_proto;
+ }
+ return FILE_ERROR_OK;
}
DriveResourceMetadata::FileMoveResult
« no previous file with comments | « chrome/browser/chromeos/drive/drive_resource_metadata.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698