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

Unified Diff: chrome/browser/chromeos/gdata/drive_file_system.cc

Issue 10876075: AddEntryToDirectory now takes a FilePath and scoped_ptr<DocumentEntry> (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: hashimoto feedback Created 8 years, 4 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/gdata/drive_file_system.cc
===================================================================
--- chrome/browser/chromeos/gdata/drive_file_system.cc (revision 153316)
+++ chrome/browser/chromeos/gdata/drive_file_system.cc (working copy)
@@ -273,21 +273,6 @@
} // namespace
// DriveFileSystem::CreateDirectoryParams struct implementation.
-struct DriveFileSystem::CreateDirectoryParams {
- CreateDirectoryParams(const FilePath& created_directory_path,
- const FilePath& target_directory_path,
- bool is_exclusive,
- bool is_recursive,
- const FileOperationCallback& callback);
- ~CreateDirectoryParams();
-
- const FilePath created_directory_path;
- const FilePath target_directory_path;
- const bool is_exclusive;
- const bool is_recursive;
- FileOperationCallback callback;
-};
-
DriveFileSystem::CreateDirectoryParams::CreateDirectoryParams(
const FilePath& created_directory_path,
const FilePath& target_directory_path,
@@ -385,22 +370,22 @@
// DriveFileSystem::AddUploadedFileParams implementation.
struct DriveFileSystem::AddUploadedFileParams {
AddUploadedFileParams(UploadMode upload_mode,
- DriveDirectory* parent_dir,
- scoped_ptr<DriveEntry> new_entry,
+ const FilePath& directory_path,
+ scoped_ptr<DocumentEntry> doc_entry,
const FilePath& file_content_path,
DriveCache::FileOperationType cache_operation,
const base::Closure& callback)
: upload_mode(upload_mode),
- parent_dir(parent_dir),
- new_entry(new_entry.Pass()),
+ directory_path(directory_path),
+ doc_entry(doc_entry.Pass()),
file_content_path(file_content_path),
cache_operation(cache_operation),
callback(callback) {
}
UploadMode upload_mode;
- DriveDirectory* parent_dir;
- scoped_ptr<DriveEntry> new_entry;
+ FilePath directory_path;
+ scoped_ptr<DocumentEntry> doc_entry;
FilePath file_content_path;
DriveCache::FileOperationType cache_operation;
base::Closure callback;
@@ -984,10 +969,10 @@
DriveFileError error,
scoped_ptr<DriveEntryProto> entry_proto) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(!callback.is_null());
if (error != DRIVE_FILE_OK) {
- if (!callback.is_null())
- callback.Run(error, file_path);
+ callback.Run(error, file_path);
return;
}
DCHECK(entry_proto.get());
@@ -1342,7 +1327,7 @@
drive_service_->CreateDirectory(
last_parent_dir_url,
first_missing_path.BaseName().value(),
- base::Bind(&DriveFileSystem::OnCreateDirectoryCompleted,
+ base::Bind(&DriveFileSystem::AddNewDirectory,
ui_weak_ptr_,
CreateDirectoryParams(
first_missing_path,
@@ -2181,7 +2166,7 @@
about->quota_bytes_used());
}
-void DriveFileSystem::OnCreateDirectoryCompleted(
+void DriveFileSystem::AddNewDirectory(
const CreateDirectoryParams& params,
GDataErrorCode status,
scoped_ptr<base::Value> data) {
@@ -2191,24 +2176,31 @@
if (error != DRIVE_FILE_OK) {
if (!params.callback.is_null())
params.callback.Run(error);
-
return;
}
- base::DictionaryValue* dict_value = NULL;
- base::Value* created_entry = NULL;
- if (data.get() && data->GetAsDictionary(&dict_value) && dict_value)
- dict_value->Get("entry", &created_entry);
- error = AddNewDirectory(params.created_directory_path.DirName(),
- created_entry);
+ resource_metadata_->AddEntryToDirectory(
+ params.created_directory_path.DirName(),
+ scoped_ptr<DocumentEntry>(DocumentEntry::ExtractAndParse(*data)),
+ base::Bind(&DriveFileSystem::ContinueCreateDirectory,
+ ui_weak_ptr_,
+ params));
+}
+void DriveFileSystem::ContinueCreateDirectory(
+ const CreateDirectoryParams& params,
+ DriveFileError error,
+ const FilePath& moved_file_path) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
if (error != DRIVE_FILE_OK) {
if (!params.callback.is_null())
params.callback.Run(error);
-
return;
}
+ OnDirectoryChanged(moved_file_path.DirName());
+
// Not done yet with recursive directory creation?
if (params.target_directory_path != params.created_directory_path &&
params.is_recursive) {
@@ -2216,10 +2208,7 @@
params.is_exclusive,
params.is_recursive,
params.callback);
- return;
- }
-
- if (!params.callback.is_null()) {
+ } else if (!params.callback.is_null()) {
// Finally done with the create request.
params.callback.Run(DRIVE_FILE_OK);
}
@@ -2379,24 +2368,12 @@
return;
}
- scoped_ptr<DocumentEntry> doc_entry(DocumentEntry::ExtractAndParse(*data));
- if (!doc_entry.get()) {
- callback.Run(DRIVE_FILE_ERROR_FAILED);
- return;
- }
-
- DriveEntry* entry = resource_metadata_->FromDocumentEntry(*doc_entry);
- if (!entry) {
- callback.Run(DRIVE_FILE_ERROR_FAILED);
- return;
- }
-
// |entry| was added in the root directory on the server, so we should
// first add it to |root_| to mirror the state and then move it to the
// destination directory by MoveEntryFromRootDirectory().
resource_metadata_->AddEntryToDirectory(
- resource_metadata_->root(),
- entry,
+ resource_metadata_->root()->GetFilePath(),
+ scoped_ptr<DocumentEntry>(DocumentEntry::ExtractAndParse(*data)),
base::Bind(&DriveFileSystem::MoveEntryFromRootDirectory,
ui_weak_ptr_,
dir_path,
@@ -2569,18 +2546,17 @@
GDataErrorCode status,
const GURL& document_url) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(!callback.is_null());
const DriveFileError error = util::GDataToDriveFileError(status);
if (error != DRIVE_FILE_OK) {
- if (!callback.is_null())
- callback.Run(error, FilePath());
+ callback.Run(error, FilePath());
return;
}
DriveEntry* entry = resource_metadata_->FindEntryByPathSync(file_path);
if (!entry) {
- if (!callback.is_null())
- callback.Run(DRIVE_FILE_ERROR_NOT_FOUND, FilePath());
+ callback.Run(DRIVE_FILE_ERROR_NOT_FOUND, FilePath());
return;
}
@@ -2635,12 +2611,12 @@
DriveFileError error,
const FilePath& moved_file_path) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(!callback.is_null());
if (error == DRIVE_FILE_OK)
OnDirectoryChanged(moved_file_path.DirName());
- if (!callback.is_null())
- callback.Run(error, moved_file_path);
+ callback.Run(error, moved_file_path);
}
void DriveFileSystem::NotifyAndRunFileOperationCallback(
@@ -2698,44 +2674,6 @@
callback.Run(error);
}
-DriveFileError DriveFileSystem::AddNewDirectory(
- const FilePath& directory_path, base::Value* entry_value) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
- if (!entry_value)
- return DRIVE_FILE_ERROR_FAILED;
-
- scoped_ptr<DocumentEntry> doc_entry(DocumentEntry::CreateFrom(*entry_value));
-
- if (!doc_entry.get())
- return DRIVE_FILE_ERROR_FAILED;
-
- // Find parent directory element within the cached file system snapshot.
- DriveEntry* entry = resource_metadata_->FindEntryByPathSync(directory_path);
- if (!entry)
- return DRIVE_FILE_ERROR_FAILED;
-
- // Check if parent is a directory since in theory since this is a callback
- // something could in the meantime have nuked the parent dir and created a
- // file with the exact same name.
- DriveDirectory* parent_dir = entry->AsDriveDirectory();
- if (!parent_dir)
- return DRIVE_FILE_ERROR_FAILED;
-
- DriveEntry* new_entry =
- resource_metadata_->FromDocumentEntry(*doc_entry);
- if (!new_entry)
- return DRIVE_FILE_ERROR_FAILED;
-
- resource_metadata_->AddEntryToDirectory(
- parent_dir,
- new_entry,
- base::Bind(&DriveFileSystem::NotifyAndRunFileMoveCallback,
- ui_weak_ptr_,
- FileMoveCallback()));
- return DRIVE_FILE_OK;
-}
-
DriveFileSystem::FindMissingDirectoryResult
DriveFileSystem::FindFirstMissingParentDirectory(
const FilePath& directory_path,
@@ -2771,7 +2709,7 @@
void DriveFileSystem::AddUploadedFile(
UploadMode upload_mode,
- const FilePath& virtual_dir_path,
+ const FilePath& directory_path,
scoped_ptr<DocumentEntry> entry,
const FilePath& file_content_path,
DriveCache::FileOperationType cache_operation,
@@ -2785,7 +2723,7 @@
base::Bind(&DriveFileSystem::AddUploadedFileOnUIThread,
ui_weak_ptr_,
upload_mode,
- virtual_dir_path,
+ directory_path,
base::Passed(&entry),
file_content_path,
cache_operation,
@@ -2794,44 +2732,22 @@
void DriveFileSystem::AddUploadedFileOnUIThread(
UploadMode upload_mode,
- const FilePath& virtual_dir_path,
- scoped_ptr<DocumentEntry> entry,
+ const FilePath& directory_path,
+ scoped_ptr<DocumentEntry> doc_entry,
const FilePath& file_content_path,
DriveCache::FileOperationType cache_operation,
const base::Closure& callback) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(doc_entry.get());
- // ScopedClosureRunner ensures that the specified callback is always invoked
- // upon return or passed on.
- base::ScopedClosureRunner callback_runner(callback);
-
- if (!entry.get()) {
- NOTREACHED();
- return;
- }
-
- DriveEntry* dir_entry = resource_metadata_->FindEntryByPathSync(
- virtual_dir_path);
- if (!dir_entry)
- return;
-
- DriveDirectory* parent_dir = dir_entry->AsDriveDirectory();
- if (!parent_dir)
- return;
-
- scoped_ptr<DriveEntry> new_entry(
- resource_metadata_->FromDocumentEntry(*entry));
- if (!new_entry.get())
- return;
-
- const std::string& resource_id = new_entry->resource_id();
+ const std::string& resource_id = doc_entry->resource_id();
AddUploadedFileParams* params =
new AddUploadedFileParams(upload_mode,
- parent_dir,
- new_entry.Pass(),
+ directory_path,
+ doc_entry.Pass(),
file_content_path,
cache_operation,
- callback_runner.Release());
+ callback);
const FileMoveCallback file_move_callback =
base::Bind(&DriveFileSystem::ContinueAddUploadedFile,
@@ -2848,23 +2764,22 @@
void DriveFileSystem::ContinueAddUploadedFile(
AddUploadedFileParams* params,
DriveFileError error,
- const FilePath& file_path) {
+ const FilePath& /* file_path */) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK_EQ(DRIVE_FILE_OK, error);
- DCHECK(params->new_entry.get());
- DriveFile* file = params->new_entry->AsDriveFile();
- DCHECK(file);
+ DCHECK(params->doc_entry.get());
- params->resource_id = file->resource_id();
- params->md5 = file->file_md5();
+ params->resource_id = params->doc_entry->resource_id();
+ params->md5 = params->doc_entry->file_md5();
+ DCHECK(!params->resource_id.empty());
+ DCHECK(!params->md5.empty());
+
resource_metadata_->AddEntryToDirectory(
- params->parent_dir,
- params->new_entry.release(),
- base::Bind(&DriveFileSystem::NotifyAndRunFileMoveCallback,
+ params->directory_path,
+ params->doc_entry.Pass(),
+ base::Bind(&DriveFileSystem::AddUploadedFileToCache,
ui_weak_ptr_,
- base::Bind(&DriveFileSystem::AddUploadedFileToCache,
- ui_weak_ptr_,
- base::Owned(params))));
+ base::Owned(params)));
}
void DriveFileSystem::AddUploadedFileToCache(
@@ -2872,7 +2787,18 @@
DriveFileError error,
const FilePath& file_path) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(!params->resource_id.empty());
+ DCHECK(!params->md5.empty());
+ DCHECK(!params->resource_id.empty());
+ DCHECK(!params->callback.is_null());
+ if (error != DRIVE_FILE_OK) {
+ params->callback.Run();
+ return;
+ }
+
+ OnDirectoryChanged(file_path.DirName());
+
if (params->upload_mode == UPLOAD_NEW_FILE) {
// Add the file to the cache if we have uploaded a new file.
cache_->StoreOnUIThread(params->resource_id,

Powered by Google App Engine
This is Rietveld 408576698