Index: chrome/browser/chromeos/drive/file_system/create_directory_operation.cc |
diff --git a/chrome/browser/chromeos/drive/file_system/create_directory_operation.cc b/chrome/browser/chromeos/drive/file_system/create_directory_operation.cc |
index ae45d8387034eb8e612deeef53dba721ade23988..8a84c3cddb2f478b47a88bdeba9d89ff8ee21a7b 100644 |
--- a/chrome/browser/chromeos/drive/file_system/create_directory_operation.cc |
+++ b/chrome/browser/chromeos/drive/file_system/create_directory_operation.cc |
@@ -5,6 +5,7 @@ |
#include "chrome/browser/chromeos/drive/file_system/create_directory_operation.h" |
#include "chrome/browser/chromeos/drive/drive.pb.h" |
+#include "chrome/browser/chromeos/drive/file_change.h" |
#include "chrome/browser/chromeos/drive/file_system/operation_observer.h" |
#include "chrome/browser/chromeos/drive/file_system_util.h" |
#include "chrome/browser/chromeos/drive/resource_metadata.h" |
@@ -17,12 +18,11 @@ namespace file_system { |
namespace { |
-FileError CreateDirectoryRecursively( |
- internal::ResourceMetadata* metadata, |
- const std::string& parent_local_id, |
- const base::FilePath& relative_file_path, |
- std::set<std::string>* updated_local_ids, |
- std::set<base::FilePath>* changed_directories) { |
+FileError CreateDirectoryRecursively(internal::ResourceMetadata* metadata, |
+ const std::string& parent_local_id, |
+ const base::FilePath& relative_file_path, |
+ std::set<std::string>* updated_local_ids, |
+ FileChange* changed_files) { |
// Split the first component and remaining ones of |relative_file_path|. |
std::vector<base::FilePath::StringType> components; |
relative_file_path.GetComponents(&components); |
@@ -52,14 +52,16 @@ FileError CreateDirectoryRecursively( |
return error; |
updated_local_ids->insert(local_id); |
- changed_directories->insert(path.DirName()); |
+ DCHECK(changed_files); |
+ changed_files->Update( |
+ path, FileChange::FILE_TYPE_DIRECTORY, FileChange::ADD_OR_UPDATE); |
if (remaining_path.empty()) // All directories are created successfully. |
return FILE_ERROR_OK; |
// Create descendant directories. |
- return CreateDirectoryRecursively(metadata, local_id, remaining_path, |
- updated_local_ids, changed_directories); |
+ return CreateDirectoryRecursively( |
+ metadata, local_id, remaining_path, updated_local_ids, changed_files); |
} |
FileError UpdateLocalState(internal::ResourceMetadata* metadata, |
@@ -67,7 +69,7 @@ FileError UpdateLocalState(internal::ResourceMetadata* metadata, |
bool is_exclusive, |
bool is_recursive, |
std::set<std::string>* updated_local_ids, |
- std::set<base::FilePath>* changed_directories) { |
+ FileChange* changed_files) { |
// Get the existing deepest entry. |
std::vector<base::FilePath::StringType> components; |
directory_path.GetComponents(&components); |
@@ -108,8 +110,11 @@ FileError UpdateLocalState(internal::ResourceMetadata* metadata, |
// Create directories under the found directory. |
base::FilePath remaining_path; |
existing_deepest_path.AppendRelativePath(directory_path, &remaining_path); |
- return CreateDirectoryRecursively(metadata, entry.local_id(), remaining_path, |
- updated_local_ids, changed_directories); |
+ return CreateDirectoryRecursively(metadata, |
+ entry.local_id(), |
+ remaining_path, |
+ updated_local_ids, |
+ changed_files); |
} |
} // namespace |
@@ -138,26 +143,30 @@ void CreateDirectoryOperation::CreateDirectory( |
DCHECK(!callback.is_null()); |
std::set<std::string>* updated_local_ids = new std::set<std::string>; |
- std::set<base::FilePath>* changed_directories = new std::set<base::FilePath>; |
+ FileChange* changed_files(new FileChange); |
base::PostTaskAndReplyWithResult( |
blocking_task_runner_.get(), |
FROM_HERE, |
base::Bind(&UpdateLocalState, |
- metadata_, directory_path, is_exclusive, is_recursive, |
- updated_local_ids, changed_directories), |
- base::Bind(&CreateDirectoryOperation:: |
- CreateDirectoryAfterUpdateLocalState, |
- weak_ptr_factory_.GetWeakPtr(), |
- callback, |
- base::Owned(updated_local_ids), |
- base::Owned(changed_directories))); |
+ metadata_, |
+ directory_path, |
+ is_exclusive, |
+ is_recursive, |
+ updated_local_ids, |
+ changed_files), |
+ base::Bind( |
+ &CreateDirectoryOperation::CreateDirectoryAfterUpdateLocalState, |
+ weak_ptr_factory_.GetWeakPtr(), |
+ callback, |
+ base::Owned(updated_local_ids), |
+ base::Owned(changed_files))); |
} |
void CreateDirectoryOperation::CreateDirectoryAfterUpdateLocalState( |
- const FileOperationCallback& callback, |
- const std::set<std::string>* updated_local_ids, |
- const std::set<base::FilePath>* changed_directories, |
- FileError error) { |
+ const FileOperationCallback& callback, |
+ const std::set<std::string>* updated_local_ids, |
+ const FileChange* changed_files, |
+ FileError error) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
DCHECK(!callback.is_null()); |
@@ -165,9 +174,7 @@ void CreateDirectoryOperation::CreateDirectoryAfterUpdateLocalState( |
it != updated_local_ids->end(); ++it) |
observer_->OnEntryUpdatedByOperation(*it); |
- for (std::set<base::FilePath>::const_iterator it = |
- changed_directories->begin(); it != changed_directories->end(); ++it) |
- observer_->OnDirectoryChangedByOperation(*it); |
+ observer_->OnFileChangedByOperation(*changed_files); |
callback.Run(error); |
} |