Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / drive / file_system / create_directory_operation.cc
index ae45d83..71f2854 100644 (file)
@@ -5,7 +5,8 @@
 #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"
@@ -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,18 +110,21 @@ 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
 
 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));
@@ -138,36 +143,38 @@ 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());
 
   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);
 }