| Index: chrome/browser/chromeos/drive/file_system/remove_operation.cc
|
| diff --git a/chrome/browser/chromeos/drive/file_system/remove_operation.cc b/chrome/browser/chromeos/drive/file_system/remove_operation.cc
|
| index 27904df1c6122e4498781cd1c47e6993c70f9806..d27bdbba274c604d6b139ede6f27cfdb8c276ee8 100644
|
| --- a/chrome/browser/chromeos/drive/file_system/remove_operation.cc
|
| +++ b/chrome/browser/chromeos/drive/file_system/remove_operation.cc
|
| @@ -32,22 +32,26 @@ RemoveOperation::~RemoveOperation() {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| }
|
|
|
| -void RemoveOperation::Remove(const base::FilePath& file_path,
|
| +void RemoveOperation::Remove(const base::FilePath& path,
|
| bool is_recursive,
|
| const FileOperationCallback& callback) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| DCHECK(!callback.is_null());
|
|
|
| - // Get the edit URL of an entry at |file_path|.
|
| + // Get the edit URL of an entry at |path|.
|
| metadata_->GetResourceEntryByPathOnUIThread(
|
| - file_path,
|
| + path,
|
| base::Bind(
|
| &RemoveOperation::RemoveAfterGetResourceEntry,
|
| weak_ptr_factory_.GetWeakPtr(),
|
| + path,
|
| + is_recursive,
|
| callback));
|
| }
|
|
|
| void RemoveOperation::RemoveAfterGetResourceEntry(
|
| + const base::FilePath& path,
|
| + bool is_recursive,
|
| const FileOperationCallback& callback,
|
| FileError error,
|
| scoped_ptr<ResourceEntry> entry) {
|
| @@ -58,7 +62,17 @@ void RemoveOperation::RemoveAfterGetResourceEntry(
|
| callback.Run(error);
|
| return;
|
| }
|
| - DCHECK(entry);
|
| +
|
| + if (entry->file_info().is_directory() && !is_recursive) {
|
| + // Check emptiness of the directory.
|
| + metadata_->ReadDirectoryByPathOnUIThread(
|
| + path,
|
| + base::Bind(&RemoveOperation::RemoveAfterReadDirectory,
|
| + weak_ptr_factory_.GetWeakPtr(),
|
| + entry->resource_id(),
|
| + callback));
|
| + return;
|
| + }
|
|
|
| scheduler_->DeleteResource(
|
| entry->resource_id(),
|
| @@ -68,6 +82,32 @@ void RemoveOperation::RemoveAfterGetResourceEntry(
|
| entry->resource_id()));
|
| }
|
|
|
| +void RemoveOperation::RemoveAfterReadDirectory(
|
| + const std::string& resource_id,
|
| + const FileOperationCallback& callback,
|
| + FileError error,
|
| + scoped_ptr<ResourceEntryVector> entries) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + DCHECK(!callback.is_null());
|
| +
|
| + if (error != FILE_ERROR_OK) {
|
| + callback.Run(error);
|
| + return;
|
| + }
|
| +
|
| + if (!entries->empty()) {
|
| + callback.Run(FILE_ERROR_NOT_EMPTY);
|
| + return;
|
| + }
|
| +
|
| + scheduler_->DeleteResource(
|
| + resource_id,
|
| + base::Bind(&RemoveOperation::RemoveResourceLocally,
|
| + weak_ptr_factory_.GetWeakPtr(),
|
| + callback,
|
| + resource_id));
|
| +}
|
| +
|
| void RemoveOperation::RemoveResourceLocally(
|
| const FileOperationCallback& callback,
|
| const std::string& resource_id,
|
|
|