#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_system/operation_observer.h"
+#include "chrome/browser/chromeos/drive/file_change.h"
+#include "chrome/browser/chromeos/drive/file_system/operation_delegate.h"
#include "chrome/browser/chromeos/drive/file_system_util.h"
#include "chrome/browser/chromeos/drive/resource_metadata.h"
#include "content/public/browser/browser_thread.h"
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);
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,
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);
// 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
CreateDirectoryOperation::CreateDirectoryOperation(
base::SequencedTaskRunner* blocking_task_runner,
- OperationObserver* observer,
+ OperationDelegate* delegate,
internal::ResourceMetadata* metadata)
: blocking_task_runner_(blocking_task_runner),
- observer_(observer),
+ delegate_(delegate),
metadata_(metadata),
weak_ptr_factory_(this) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
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());
for (std::set<std::string>::const_iterator it = updated_local_ids->begin();
it != updated_local_ids->end(); ++it)
- observer_->OnEntryUpdatedByOperation(*it);
+ delegate_->OnEntryUpdatedByOperation(*it);
- for (std::set<base::FilePath>::const_iterator it =
- changed_directories->begin(); it != changed_directories->end(); ++it)
- observer_->OnDirectoryChangedByOperation(*it);
+ delegate_->OnFileChangedByOperation(*changed_files);
callback.Run(error);
}