Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(88)

Side by Side Diff: components/drive/chromeos/change_list_processor.cc

Issue 2799603002: Process TeamDrive change in change list. (Closed)
Patch Set: Handle changes to Team Drive by the same path as files, including deletion. Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/drive/chromeos/change_list_processor.h" 5 #include "components/drive/chromeos/change_list_processor.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
11 #include <vector> 11 #include <vector>
12 12
13 #include "base/metrics/histogram_macros.h" 13 #include "base/metrics/histogram_macros.h"
14 #include "base/strings/string_number_conversions.h" 14 #include "base/strings/string_number_conversions.h"
15 #include "base/synchronization/cancellation_flag.h" 15 #include "base/synchronization/cancellation_flag.h"
16 #include "components/drive/chromeos/resource_metadata.h" 16 #include "components/drive/chromeos/resource_metadata.h"
17 #include "components/drive/drive.pb.h" 17 #include "components/drive/drive.pb.h"
18 #include "components/drive/drive_api_util.h" 18 #include "components/drive/drive_api_util.h"
19 #include "components/drive/file_change.h" 19 #include "components/drive/file_change.h"
20 #include "components/drive/file_system_core_util.h" 20 #include "components/drive/file_system_core_util.h"
21 #include "components/drive/resource_entry_conversion.h" 21 #include "components/drive/resource_entry_conversion.h"
22 #include "google_apis/drive/drive_api_parser.h" 22 #include "google_apis/drive/drive_api_parser.h"
23 #include "google_apis/drive/drive_switches.h"
hashimoto 2017/04/10 11:01:24 No longer needed.
yamaguchi 2017/04/11 07:08:07 Done.
23 24
24 namespace drive { 25 namespace drive {
25 namespace internal { 26 namespace internal {
26 27
27 namespace { 28 namespace {
28 29
29 class ChangeListToEntryMapUMAStats { 30 class ChangeListToEntryMapUMAStats {
30 public: 31 public:
31 ChangeListToEntryMapUMAStats() 32 ChangeListToEntryMapUMAStats()
32 : num_regular_files_(0), 33 : num_regular_files_(0),
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 ChangeList::ChangeList(const google_apis::ChangeList& change_list) 75 ChangeList::ChangeList(const google_apis::ChangeList& change_list)
75 : next_url_(change_list.next_link()), 76 : next_url_(change_list.next_link()),
76 largest_changestamp_(change_list.largest_change_id()) { 77 largest_changestamp_(change_list.largest_change_id()) {
77 const std::vector<std::unique_ptr<google_apis::ChangeResource>>& items = 78 const std::vector<std::unique_ptr<google_apis::ChangeResource>>& items =
78 change_list.items(); 79 change_list.items();
79 entries_.resize(items.size()); 80 entries_.resize(items.size());
80 parent_resource_ids_.resize(items.size()); 81 parent_resource_ids_.resize(items.size());
81 size_t entries_index = 0; 82 size_t entries_index = 0;
82 for (size_t i = 0; i < items.size(); ++i) { 83 for (size_t i = 0; i < items.size(); ++i) {
83 if (ConvertChangeResourceToResourceEntry( 84 if (ConvertChangeResourceToResourceEntry(
84 *items[i], 85 *items[i], &entries_[entries_index],
85 &entries_[entries_index],
86 &parent_resource_ids_[entries_index])) { 86 &parent_resource_ids_[entries_index])) {
87 ++entries_index; 87 ++entries_index;
88 } 88 }
89 } 89 }
90 entries_.resize(entries_index); 90 entries_.resize(entries_index);
91 parent_resource_ids_.resize(entries_index); 91 parent_resource_ids_.resize(entries_index);
92 } 92 }
93 93
94 ChangeList::ChangeList(const google_apis::FileList& file_list) 94 ChangeList::ChangeList(const google_apis::FileList& file_list)
95 : next_url_(file_list.next_link()), 95 : next_url_(file_list.next_link()),
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 } 301 }
302 } 302 }
303 it = it_parent; 303 it = it_parent;
304 } 304 }
305 305
306 // Apply the parent first. 306 // Apply the parent first.
307 std::reverse(entries.begin(), entries.end()); 307 std::reverse(entries.begin(), entries.end());
308 for (size_t i = 0; i < entries.size(); ++i) { 308 for (size_t i = 0; i < entries.size(); ++i) {
309 // Skip root entry in the change list. We don't expect servers to send 309 // Skip root entry in the change list. We don't expect servers to send
310 // root entry, but we should better be defensive (see crbug.com/297259). 310 // root entry, but we should better be defensive (see crbug.com/297259).
311 // TODO(yamaguchi): Apply this defensive logic to root directories of
hashimoto 2017/04/10 11:01:24 Why do you need to do this?
yamaguchi 2017/04/11 07:08:07 According to crbug.com/297259, the root directory
hashimoto 2017/04/11 07:55:14 We are doing this for My Drive root because the sa
312 // every Team Drive as well.
311 ResourceEntryMap::iterator it = entries[i]; 313 ResourceEntryMap::iterator it = entries[i];
312 if (it->first != root.resource_id()) { 314 if (it->first != root.resource_id()) {
313 FileError error = ApplyEntry(it->second); 315 FileError error = ApplyEntry(it->second);
314 if (error != FILE_ERROR_OK) { 316 if (error != FILE_ERROR_OK) {
315 LOG(ERROR) << "ApplyEntry failed: " << FileErrorToString(error) 317 LOG(ERROR) << "ApplyEntry failed: " << FileErrorToString(error)
316 << ", title = " << it->second.title(); 318 << ", title = " << it->second.title();
317 return error; 319 return error;
318 } 320 }
319 } 321 }
320 entry_map_.erase(it); 322 entry_map_.erase(it);
(...skipping 20 matching lines...) Expand all
341 << ", resource_id = " << deleted_resource_ids[i]; 343 << ", resource_id = " << deleted_resource_ids[i];
342 return error; 344 return error;
343 } 345 }
344 } 346 }
345 347
346 return FILE_ERROR_OK; 348 return FILE_ERROR_OK;
347 } 349 }
348 350
349 FileError ChangeListProcessor::ApplyEntry(const ResourceEntry& entry) { 351 FileError ChangeListProcessor::ApplyEntry(const ResourceEntry& entry) {
350 DCHECK(!entry.deleted()); 352 DCHECK(!entry.deleted());
353 DCHECK(!entry.resource_id().empty());
351 DCHECK(parent_resource_id_map_.count(entry.resource_id())); 354 DCHECK(parent_resource_id_map_.count(entry.resource_id()));
352 const std::string& parent_resource_id = 355 const std::string& parent_resource_id =
353 parent_resource_id_map_[entry.resource_id()]; 356 parent_resource_id_map_[entry.resource_id()];
354 357
355 ResourceEntry new_entry(entry); 358 ResourceEntry new_entry(entry);
356 FileError error = SetParentLocalIdOfEntry(resource_metadata_, &new_entry, 359 FileError error = SetParentLocalIdOfEntry(resource_metadata_, &new_entry,
357 parent_resource_id); 360 parent_resource_id);
358 if (error != FILE_ERROR_OK) 361 if (error != FILE_ERROR_OK)
359 return error; 362 return error;
360 363
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 if (!file_path.empty()) { 494 if (!file_path.empty()) {
492 FileChange::ChangeType type = entry.deleted() 495 FileChange::ChangeType type = entry.deleted()
493 ? FileChange::CHANGE_TYPE_DELETE 496 ? FileChange::CHANGE_TYPE_DELETE
494 : FileChange::CHANGE_TYPE_ADD_OR_UPDATE; 497 : FileChange::CHANGE_TYPE_ADD_OR_UPDATE;
495 changed_files_->Update(file_path, entry, type); 498 changed_files_->Update(file_path, entry, type);
496 } 499 }
497 } 500 }
498 501
499 } // namespace internal 502 } // namespace internal
500 } // namespace drive 503 } // namespace drive
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698