Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / drive / change_list_processor.cc
index 7cba1fd..40c2ea1 100644 (file)
@@ -7,11 +7,12 @@
 #include "base/metrics/histogram.h"
 #include "base/strings/string_number_conversions.h"
 #include "chrome/browser/chromeos/drive/drive.pb.h"
+#include "chrome/browser/chromeos/drive/file_change.h"
 #include "chrome/browser/chromeos/drive/file_system_util.h"
 #include "chrome/browser/chromeos/drive/resource_entry_conversion.h"
 #include "chrome/browser/chromeos/drive/resource_metadata.h"
+#include "chrome/browser/drive/drive_api_util.h"
 #include "google_apis/drive/drive_api_parser.h"
-#include "google_apis/drive/gdata_wapi_parser.h"
 
 namespace drive {
 namespace internal {
@@ -72,17 +73,37 @@ std::string DirectoryFetchInfo::ToString() const {
 
 ChangeList::ChangeList() {}
 
-ChangeList::ChangeList(const google_apis::ResourceList& resource_list)
-    : largest_changestamp_(resource_list.largest_changestamp()) {
-  resource_list.GetNextFeedURL(&next_url_);
+ChangeList::ChangeList(const google_apis::ChangeList& change_list)
+    : next_url_(change_list.next_link()),
+      largest_changestamp_(change_list.largest_change_id()) {
+  const ScopedVector<google_apis::ChangeResource>& items = change_list.items();
+  entries_.resize(items.size());
+  parent_resource_ids_.resize(items.size());
+  size_t entries_index = 0;
+  for (size_t i = 0; i < items.size(); ++i) {
+    if (ConvertChangeResourceToResourceEntry(
+            *items[i],
+            &entries_[entries_index],
+            &parent_resource_ids_[entries_index])) {
+      ++entries_index;
+    }
+  }
+  entries_.resize(entries_index);
+  parent_resource_ids_.resize(entries_index);
+}
 
-  entries_.resize(resource_list.entries().size());
-  parent_resource_ids_.resize(resource_list.entries().size());
+ChangeList::ChangeList(const google_apis::FileList& file_list)
+    : next_url_(file_list.next_link()),
+      largest_changestamp_(0) {
+  const ScopedVector<google_apis::FileResource>& items = file_list.items();
+  entries_.resize(items.size());
+  parent_resource_ids_.resize(items.size());
   size_t entries_index = 0;
-  for (size_t i = 0; i < resource_list.entries().size(); ++i) {
-    if (ConvertToResourceEntry(*resource_list.entries()[i],
-                               &entries_[entries_index],
-                               &parent_resource_ids_[entries_index])) {
+  for (size_t i = 0; i < items.size(); ++i) {
+    if (ConvertFileResourceToResourceEntry(
+            *items[i],
+            &entries_[entries_index],
+            &parent_resource_ids_[entries_index])) {
       ++entries_index;
     }
   }
@@ -93,7 +114,7 @@ ChangeList::ChangeList(const google_apis::ResourceList& resource_list)
 ChangeList::~ChangeList() {}
 
 ChangeListProcessor::ChangeListProcessor(ResourceMetadata* resource_metadata)
-  : resource_metadata_(resource_metadata) {
+    : resource_metadata_(resource_metadata), changed_files_(new FileChange) {
 }
 
 ChangeListProcessor::~ChangeListProcessor() {
@@ -354,8 +375,7 @@ FileError ChangeListProcessor::ApplyEntry(const ResourceEntry& entry) {
               new_entry.directory_specific_info().changestamp());
           error = resource_metadata_->RefreshEntry(new_entry);
         }
-        DVLOG(1) << "Change was discarded for: "
-                 << resource_metadata_->GetFilePath(local_id).value();
+        DVLOG(1) << "Change was discarded for: " << entry.resource_id();
       }
       break;
     case FILE_ERROR_NOT_FOUND: {  // Adding a new entry.
@@ -458,24 +478,12 @@ void ChangeListProcessor::UpdateChangedDirs(const ResourceEntry& entry) {
   base::FilePath file_path;
   if (resource_metadata_->GetIdByResourceId(
           entry.resource_id(), &local_id) == FILE_ERROR_OK)
-    file_path = resource_metadata_->GetFilePath(local_id);
+    resource_metadata_->GetFilePath(local_id, &file_path);
 
   if (!file_path.empty()) {
-    // Notify parent.
-    changed_dirs_.insert(file_path.DirName());
-
-    if (entry.file_info().is_directory()) {
-      // Notify self if entry is a directory.
-      changed_dirs_.insert(file_path);
-
-      // Notify all descendants if it is a directory deletion.
-      if (entry.deleted()) {
-        std::set<base::FilePath> sub_directories;
-        resource_metadata_->GetSubDirectoriesRecursively(local_id,
-                                                         &sub_directories);
-        changed_dirs_.insert(sub_directories.begin(), sub_directories.end());
-      }
-    }
+    FileChange::ChangeType type =
+        entry.deleted() ? FileChange::DELETE : FileChange::ADD_OR_UPDATE;
+    changed_files_->Update(file_path, entry, type);
   }
 }