| 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);
|
| }
|
|
|