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

Side by Side Diff: chrome/browser/sync_file_system/drive_backend/metadata_database.cc

Issue 1545283002: Convert Pass()→std::move() in //chrome/browser/ui (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 12 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "chrome/browser/sync_file_system/drive_backend/metadata_database.h" 5 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <stack> 8 #include <stack>
9 #include <utility>
9 10
10 #include "base/bind.h" 11 #include "base/bind.h"
11 #include "base/command_line.h" 12 #include "base/command_line.h"
12 #include "base/files/file_path.h" 13 #include "base/files/file_path.h"
13 #include "base/files/file_util.h" 14 #include "base/files/file_util.h"
14 #include "base/location.h" 15 #include "base/location.h"
15 #include "base/macros.h" 16 #include "base/macros.h"
16 #include "base/memory/scoped_vector.h" 17 #include "base/memory/scoped_vector.h"
17 #include "base/single_thread_task_runner.h" 18 #include "base/single_thread_task_runner.h"
18 #include "base/stl_util.h" 19 #include "base/stl_util.h"
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 int64_t change_id, 117 int64_t change_id,
117 const google_apis::FileResource& resource) { 118 const google_apis::FileResource& resource) {
118 scoped_ptr<FileMetadata> file(new FileMetadata); 119 scoped_ptr<FileMetadata> file(new FileMetadata);
119 file->set_file_id(resource.file_id()); 120 file->set_file_id(resource.file_id());
120 121
121 FileDetails* details = file->mutable_details(); 122 FileDetails* details = file->mutable_details();
122 details->set_change_id(change_id); 123 details->set_change_id(change_id);
123 124
124 if (resource.labels().is_trashed()) { 125 if (resource.labels().is_trashed()) {
125 details->set_missing(true); 126 details->set_missing(true);
126 return file.Pass(); 127 return file;
127 } 128 }
128 129
129 PopulateFileDetailsByFileResource(resource, details); 130 PopulateFileDetailsByFileResource(resource, details);
130 return file.Pass(); 131 return file;
131 } 132 }
132 133
133 scoped_ptr<FileMetadata> CreateFileMetadataFromChangeResource( 134 scoped_ptr<FileMetadata> CreateFileMetadataFromChangeResource(
134 const google_apis::ChangeResource& change) { 135 const google_apis::ChangeResource& change) {
135 scoped_ptr<FileMetadata> file(new FileMetadata); 136 scoped_ptr<FileMetadata> file(new FileMetadata);
136 file->set_file_id(change.file_id()); 137 file->set_file_id(change.file_id());
137 138
138 FileDetails* details = file->mutable_details(); 139 FileDetails* details = file->mutable_details();
139 details->set_change_id(change.change_id()); 140 details->set_change_id(change.change_id());
140 141
141 if (change.is_deleted()) { 142 if (change.is_deleted()) {
142 details->set_missing(true); 143 details->set_missing(true);
143 return file.Pass(); 144 return file;
144 } 145 }
145 146
146 PopulateFileDetailsByFileResource(*change.file(), details); 147 PopulateFileDetailsByFileResource(*change.file(), details);
147 return file.Pass(); 148 return file;
148 } 149 }
149 150
150 scoped_ptr<FileMetadata> CreateDeletedFileMetadata(int64_t change_id, 151 scoped_ptr<FileMetadata> CreateDeletedFileMetadata(int64_t change_id,
151 const std::string& file_id) { 152 const std::string& file_id) {
152 scoped_ptr<FileMetadata> file(new FileMetadata); 153 scoped_ptr<FileMetadata> file(new FileMetadata);
153 file->set_file_id(file_id); 154 file->set_file_id(file_id);
154 155
155 FileDetails* details = file->mutable_details(); 156 FileDetails* details = file->mutable_details();
156 details->set_change_id(change_id); 157 details->set_change_id(change_id);
157 details->set_missing(true); 158 details->set_missing(true);
158 return file.Pass(); 159 return file;
159 } 160 }
160 161
161 scoped_ptr<FileTracker> CreateSyncRootTracker( 162 scoped_ptr<FileTracker> CreateSyncRootTracker(
162 int64_t tracker_id, 163 int64_t tracker_id,
163 const FileMetadata& sync_root_metadata) { 164 const FileMetadata& sync_root_metadata) {
164 scoped_ptr<FileTracker> sync_root_tracker(new FileTracker); 165 scoped_ptr<FileTracker> sync_root_tracker(new FileTracker);
165 sync_root_tracker->set_tracker_id(tracker_id); 166 sync_root_tracker->set_tracker_id(tracker_id);
166 sync_root_tracker->set_file_id(sync_root_metadata.file_id()); 167 sync_root_tracker->set_file_id(sync_root_metadata.file_id());
167 sync_root_tracker->set_parent_tracker_id(0); 168 sync_root_tracker->set_parent_tracker_id(0);
168 sync_root_tracker->set_tracker_kind(TRACKER_KIND_REGULAR); 169 sync_root_tracker->set_tracker_kind(TRACKER_KIND_REGULAR);
169 sync_root_tracker->set_dirty(false); 170 sync_root_tracker->set_dirty(false);
170 sync_root_tracker->set_active(true); 171 sync_root_tracker->set_active(true);
171 sync_root_tracker->set_needs_folder_listing(false); 172 sync_root_tracker->set_needs_folder_listing(false);
172 *sync_root_tracker->mutable_synced_details() = sync_root_metadata.details(); 173 *sync_root_tracker->mutable_synced_details() = sync_root_metadata.details();
173 return sync_root_tracker.Pass(); 174 return sync_root_tracker;
174 } 175 }
175 176
176 scoped_ptr<FileTracker> CreateInitialAppRootTracker( 177 scoped_ptr<FileTracker> CreateInitialAppRootTracker(
177 int64_t tracker_id, 178 int64_t tracker_id,
178 int64_t parent_tracker_id, 179 int64_t parent_tracker_id,
179 const FileMetadata& app_root_metadata) { 180 const FileMetadata& app_root_metadata) {
180 scoped_ptr<FileTracker> app_root_tracker(new FileTracker); 181 scoped_ptr<FileTracker> app_root_tracker(new FileTracker);
181 app_root_tracker->set_tracker_id(tracker_id); 182 app_root_tracker->set_tracker_id(tracker_id);
182 app_root_tracker->set_parent_tracker_id(parent_tracker_id); 183 app_root_tracker->set_parent_tracker_id(parent_tracker_id);
183 app_root_tracker->set_file_id(app_root_metadata.file_id()); 184 app_root_tracker->set_file_id(app_root_metadata.file_id());
184 app_root_tracker->set_tracker_kind(TRACKER_KIND_REGULAR); 185 app_root_tracker->set_tracker_kind(TRACKER_KIND_REGULAR);
185 app_root_tracker->set_dirty(false); 186 app_root_tracker->set_dirty(false);
186 app_root_tracker->set_active(false); 187 app_root_tracker->set_active(false);
187 app_root_tracker->set_needs_folder_listing(false); 188 app_root_tracker->set_needs_folder_listing(false);
188 *app_root_tracker->mutable_synced_details() = app_root_metadata.details(); 189 *app_root_tracker->mutable_synced_details() = app_root_metadata.details();
189 return app_root_tracker.Pass(); 190 return app_root_tracker;
190 } 191 }
191 192
192 scoped_ptr<FileTracker> CloneFileTracker(const FileTracker* obj) { 193 scoped_ptr<FileTracker> CloneFileTracker(const FileTracker* obj) {
193 if (!obj) 194 if (!obj)
194 return nullptr; 195 return nullptr;
195 return scoped_ptr<FileTracker>(new FileTracker(*obj)); 196 return scoped_ptr<FileTracker>(new FileTracker(*obj));
196 } 197 }
197 198
198 // Returns true if |db| has no content. 199 // Returns true if |db| has no content.
199 bool IsDatabaseEmpty(LevelDBWrapper* db) { 200 bool IsDatabaseEmpty(LevelDBWrapper* db) {
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 284
284 void MarkTrackerSetDirty(const TrackerIDSet& trackers, 285 void MarkTrackerSetDirty(const TrackerIDSet& trackers,
285 MetadataDatabaseIndexInterface* index) { 286 MetadataDatabaseIndexInterface* index) {
286 for (TrackerIDSet::const_iterator itr = trackers.begin(); 287 for (TrackerIDSet::const_iterator itr = trackers.begin();
287 itr != trackers.end(); ++itr) { 288 itr != trackers.end(); ++itr) {
288 scoped_ptr<FileTracker> tracker(new FileTracker); 289 scoped_ptr<FileTracker> tracker(new FileTracker);
289 index->GetFileTracker(*itr, tracker.get()); 290 index->GetFileTracker(*itr, tracker.get());
290 if (tracker->dirty()) 291 if (tracker->dirty())
291 continue; 292 continue;
292 tracker->set_dirty(true); 293 tracker->set_dirty(true);
293 index->StoreFileTracker(tracker.Pass()); 294 index->StoreFileTracker(std::move(tracker));
294 } 295 }
295 } 296 }
296 297
297 void MarkTrackersDirtyByPath(int64_t parent_tracker_id, 298 void MarkTrackersDirtyByPath(int64_t parent_tracker_id,
298 const std::string& title, 299 const std::string& title,
299 MetadataDatabaseIndexInterface* index) { 300 MetadataDatabaseIndexInterface* index) {
300 if (parent_tracker_id == kInvalidTrackerID || title.empty()) 301 if (parent_tracker_id == kInvalidTrackerID || title.empty())
301 return; 302 return;
302 MarkTrackerSetDirty( 303 MarkTrackerSetDirty(
303 index->GetFileTrackerIDsByParentAndTitle(parent_tracker_id, title), 304 index->GetFileTrackerIDsByParentAndTitle(parent_tracker_id, title),
(...skipping 11 matching lines...) Expand all
315 stack.push_back(root_tracker_id); 316 stack.push_back(root_tracker_id);
316 while (!stack.empty()) { 317 while (!stack.empty()) {
317 int64_t tracker_id = stack.back(); 318 int64_t tracker_id = stack.back();
318 stack.pop_back(); 319 stack.pop_back();
319 AppendContents(index->GetFileTrackerIDsByParent(tracker_id), &stack); 320 AppendContents(index->GetFileTrackerIDsByParent(tracker_id), &stack);
320 321
321 scoped_ptr<FileTracker> tracker(new FileTracker); 322 scoped_ptr<FileTracker> tracker(new FileTracker);
322 index->GetFileTracker(tracker_id, tracker.get()); 323 index->GetFileTracker(tracker_id, tracker.get());
323 tracker->set_dirty(true); 324 tracker->set_dirty(true);
324 325
325 index->StoreFileTracker(tracker.Pass()); 326 index->StoreFileTracker(std::move(tracker));
326 } 327 }
327 } 328 }
328 329
329 void RemoveAllDescendantTrackers(int64_t root_tracker_id, 330 void RemoveAllDescendantTrackers(int64_t root_tracker_id,
330 MetadataDatabaseIndexInterface* index) { 331 MetadataDatabaseIndexInterface* index) {
331 std::vector<int64_t> pending_trackers; 332 std::vector<int64_t> pending_trackers;
332 AppendContents(index->GetFileTrackerIDsByParent(root_tracker_id), 333 AppendContents(index->GetFileTrackerIDsByParent(root_tracker_id),
333 &pending_trackers); 334 &pending_trackers);
334 335
335 std::vector<int64_t> to_be_removed; 336 std::vector<int64_t> to_be_removed;
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 if (dirtying_options & MARK_ITSELF_DIRTY) { 464 if (dirtying_options & MARK_ITSELF_DIRTY) {
464 tracker->set_dirty(true); 465 tracker->set_dirty(true);
465 tracker->set_needs_folder_listing( 466 tracker->set_needs_folder_listing(
466 tracker->has_synced_details() && 467 tracker->has_synced_details() &&
467 tracker->synced_details().file_kind() == FILE_KIND_FOLDER); 468 tracker->synced_details().file_kind() == FILE_KIND_FOLDER);
468 } else { 469 } else {
469 tracker->set_dirty(false); 470 tracker->set_dirty(false);
470 tracker->set_needs_folder_listing(false); 471 tracker->set_needs_folder_listing(false);
471 } 472 }
472 473
473 index->StoreFileTracker(tracker.Pass()); 474 index->StoreFileTracker(std::move(tracker));
474 } 475 }
475 476
476 void DeactivateFileTracker(int64_t tracker_id, 477 void DeactivateFileTracker(int64_t tracker_id,
477 int dirtying_options, 478 int dirtying_options,
478 MetadataDatabaseIndexInterface* index) { 479 MetadataDatabaseIndexInterface* index) {
479 RemoveAllDescendantTrackers(tracker_id, index); 480 RemoveAllDescendantTrackers(tracker_id, index);
480 481
481 scoped_ptr<FileTracker> tracker(new FileTracker); 482 scoped_ptr<FileTracker> tracker(new FileTracker);
482 index->GetFileTracker(tracker_id, tracker.get()); 483 index->GetFileTracker(tracker_id, tracker.get());
483 484
484 if (dirtying_options & MARK_SAME_FILE_ID_TRACKERS_DIRTY) 485 if (dirtying_options & MARK_SAME_FILE_ID_TRACKERS_DIRTY)
485 MarkTrackersDirtyByFileID(tracker->file_id(), index); 486 MarkTrackersDirtyByFileID(tracker->file_id(), index);
486 if (dirtying_options & MARK_SAME_PATH_TRACKERS_DIRTY) { 487 if (dirtying_options & MARK_SAME_PATH_TRACKERS_DIRTY) {
487 MarkTrackersDirtyByPath(tracker->parent_tracker_id(), 488 MarkTrackersDirtyByPath(tracker->parent_tracker_id(),
488 GetTrackerTitle(*tracker), index); 489 GetTrackerTitle(*tracker), index);
489 } 490 }
490 491
491 tracker->set_dirty(dirtying_options & MARK_ITSELF_DIRTY); 492 tracker->set_dirty(dirtying_options & MARK_ITSELF_DIRTY);
492 tracker->set_active(false); 493 tracker->set_active(false);
493 index->StoreFileTracker(tracker.Pass()); 494 index->StoreFileTracker(std::move(tracker));
494 } 495 }
495 496
496 void RemoveFileTracker(int64_t tracker_id, 497 void RemoveFileTracker(int64_t tracker_id,
497 int dirtying_options, 498 int dirtying_options,
498 MetadataDatabaseIndexInterface* index) { 499 MetadataDatabaseIndexInterface* index) {
499 DCHECK(!(dirtying_options & MARK_ITSELF_DIRTY)); 500 DCHECK(!(dirtying_options & MARK_ITSELF_DIRTY));
500 501
501 FileTracker tracker; 502 FileTracker tracker;
502 if (!index->GetFileTracker(tracker_id, &tracker)) 503 if (!index->GetFileTracker(tracker_id, &tracker))
503 return; 504 return;
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
554 new MetadataDatabase(database_path, 555 new MetadataDatabase(database_path,
555 enable_on_disk_index, 556 enable_on_disk_index,
556 env_override)); 557 env_override));
557 status = metadata_database->Initialize(); 558 status = metadata_database->Initialize();
558 } 559 }
559 560
560 if (status != SYNC_STATUS_OK) 561 if (status != SYNC_STATUS_OK)
561 metadata_database.reset(); 562 metadata_database.reset();
562 563
563 *status_out = status; 564 *status_out = status;
564 return metadata_database.Pass(); 565 return metadata_database;
565 } 566 }
566 567
567 // static 568 // static
568 SyncStatusCode MetadataDatabase::CreateForTesting( 569 SyncStatusCode MetadataDatabase::CreateForTesting(
569 scoped_ptr<LevelDBWrapper> db, 570 scoped_ptr<LevelDBWrapper> db,
570 bool enable_on_disk_index, 571 bool enable_on_disk_index,
571 scoped_ptr<MetadataDatabase>* metadata_database_out) { 572 scoped_ptr<MetadataDatabase>* metadata_database_out) {
572 scoped_ptr<MetadataDatabase> metadata_database( 573 scoped_ptr<MetadataDatabase> metadata_database(
573 new MetadataDatabase(base::FilePath(), 574 new MetadataDatabase(base::FilePath(),
574 enable_on_disk_index, 575 enable_on_disk_index,
575 nullptr)); 576 nullptr));
576 metadata_database->db_ = db.Pass(); 577 metadata_database->db_ = std::move(db);
577 SyncStatusCode status = metadata_database->Initialize(); 578 SyncStatusCode status = metadata_database->Initialize();
578 if (status == SYNC_STATUS_OK) 579 if (status == SYNC_STATUS_OK)
579 *metadata_database_out = metadata_database.Pass(); 580 *metadata_database_out = std::move(metadata_database);
580 return status; 581 return status;
581 } 582 }
582 583
583 MetadataDatabase::~MetadataDatabase() { 584 MetadataDatabase::~MetadataDatabase() {
584 } 585 }
585 586
586 // static 587 // static
587 void MetadataDatabase::ClearDatabase( 588 void MetadataDatabase::ClearDatabase(
588 scoped_ptr<MetadataDatabase> metadata_database) { 589 scoped_ptr<MetadataDatabase> metadata_database) {
589 DCHECK(metadata_database); 590 DCHECK(metadata_database);
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
681 sync_root_tracker_id, tracker.get())) { 682 sync_root_tracker_id, tracker.get())) {
682 return SYNC_DATABASE_ERROR_NOT_FOUND; 683 return SYNC_DATABASE_ERROR_NOT_FOUND;
683 } 684 }
684 685
685 tracker->set_app_id(app_id); 686 tracker->set_app_id(app_id);
686 tracker->set_tracker_kind(TRACKER_KIND_APP_ROOT); 687 tracker->set_tracker_kind(TRACKER_KIND_APP_ROOT);
687 tracker->set_active(true); 688 tracker->set_active(true);
688 tracker->set_needs_folder_listing(true); 689 tracker->set_needs_folder_listing(true);
689 tracker->set_dirty(true); 690 tracker->set_dirty(true);
690 691
691 index_->StoreFileTracker(tracker.Pass()); 692 index_->StoreFileTracker(std::move(tracker));
692 return WriteToDatabase(); 693 return WriteToDatabase();
693 } 694 }
694 695
695 SyncStatusCode MetadataDatabase::DisableApp(const std::string& app_id) { 696 SyncStatusCode MetadataDatabase::DisableApp(const std::string& app_id) {
696 int64_t tracker_id = index_->GetAppRootTracker(app_id); 697 int64_t tracker_id = index_->GetAppRootTracker(app_id);
697 scoped_ptr<FileTracker> tracker(new FileTracker); 698 scoped_ptr<FileTracker> tracker(new FileTracker);
698 if (!index_->GetFileTracker(tracker_id, tracker.get())) { 699 if (!index_->GetFileTracker(tracker_id, tracker.get())) {
699 return SYNC_DATABASE_ERROR_NOT_FOUND; 700 return SYNC_DATABASE_ERROR_NOT_FOUND;
700 } 701 }
701 702
702 if (tracker->tracker_kind() == TRACKER_KIND_DISABLED_APP_ROOT) { 703 if (tracker->tracker_kind() == TRACKER_KIND_DISABLED_APP_ROOT) {
703 return SYNC_STATUS_OK; 704 return SYNC_STATUS_OK;
704 } 705 }
705 706
706 DCHECK_EQ(TRACKER_KIND_APP_ROOT, tracker->tracker_kind()); 707 DCHECK_EQ(TRACKER_KIND_APP_ROOT, tracker->tracker_kind());
707 DCHECK(tracker->active()); 708 DCHECK(tracker->active());
708 709
709 // Keep the app-root tracker active (but change the tracker_kind) so that 710 // Keep the app-root tracker active (but change the tracker_kind) so that
710 // other conflicting trackers won't become active. 711 // other conflicting trackers won't become active.
711 tracker->set_tracker_kind(TRACKER_KIND_DISABLED_APP_ROOT); 712 tracker->set_tracker_kind(TRACKER_KIND_DISABLED_APP_ROOT);
712 713
713 index_->StoreFileTracker(tracker.Pass()); 714 index_->StoreFileTracker(std::move(tracker));
714 return WriteToDatabase(); 715 return WriteToDatabase();
715 } 716 }
716 717
717 SyncStatusCode MetadataDatabase::EnableApp(const std::string& app_id) { 718 SyncStatusCode MetadataDatabase::EnableApp(const std::string& app_id) {
718 int64_t tracker_id = index_->GetAppRootTracker(app_id); 719 int64_t tracker_id = index_->GetAppRootTracker(app_id);
719 scoped_ptr<FileTracker> tracker(new FileTracker); 720 scoped_ptr<FileTracker> tracker(new FileTracker);
720 if (!index_->GetFileTracker(tracker_id, tracker.get())) { 721 if (!index_->GetFileTracker(tracker_id, tracker.get())) {
721 return SYNC_DATABASE_ERROR_NOT_FOUND; 722 return SYNC_DATABASE_ERROR_NOT_FOUND;
722 } 723 }
723 724
724 if (tracker->tracker_kind() == TRACKER_KIND_APP_ROOT) { 725 if (tracker->tracker_kind() == TRACKER_KIND_APP_ROOT) {
725 return SYNC_STATUS_OK; 726 return SYNC_STATUS_OK;
726 } 727 }
727 728
728 DCHECK_EQ(TRACKER_KIND_DISABLED_APP_ROOT, tracker->tracker_kind()); 729 DCHECK_EQ(TRACKER_KIND_DISABLED_APP_ROOT, tracker->tracker_kind());
729 DCHECK(tracker->active()); 730 DCHECK(tracker->active());
730 731
731 tracker->set_tracker_kind(TRACKER_KIND_APP_ROOT); 732 tracker->set_tracker_kind(TRACKER_KIND_APP_ROOT);
732 index_->StoreFileTracker(tracker.Pass()); 733 index_->StoreFileTracker(std::move(tracker));
733 734
734 MarkTrackersDirtyRecursively(tracker_id, index_.get()); 735 MarkTrackersDirtyRecursively(tracker_id, index_.get());
735 return WriteToDatabase(); 736 return WriteToDatabase();
736 } 737 }
737 738
738 SyncStatusCode MetadataDatabase::UnregisterApp(const std::string& app_id) { 739 SyncStatusCode MetadataDatabase::UnregisterApp(const std::string& app_id) {
739 int64_t tracker_id = index_->GetAppRootTracker(app_id); 740 int64_t tracker_id = index_->GetAppRootTracker(app_id);
740 scoped_ptr<FileTracker> tracker(new FileTracker); 741 scoped_ptr<FileTracker> tracker(new FileTracker);
741 if (!index_->GetFileTracker(tracker_id, tracker.get()) || 742 if (!index_->GetFileTracker(tracker_id, tracker.get()) ||
742 tracker->tracker_kind() == TRACKER_KIND_REGULAR) { 743 tracker->tracker_kind() == TRACKER_KIND_REGULAR) {
743 return SYNC_STATUS_OK; 744 return SYNC_STATUS_OK;
744 } 745 }
745 746
746 RemoveAllDescendantTrackers(tracker_id, index_.get()); 747 RemoveAllDescendantTrackers(tracker_id, index_.get());
747 748
748 tracker->clear_app_id(); 749 tracker->clear_app_id();
749 tracker->set_tracker_kind(TRACKER_KIND_REGULAR); 750 tracker->set_tracker_kind(TRACKER_KIND_REGULAR);
750 tracker->set_active(false); 751 tracker->set_active(false);
751 tracker->set_dirty(true); 752 tracker->set_dirty(true);
752 753
753 index_->StoreFileTracker(tracker.Pass()); 754 index_->StoreFileTracker(std::move(tracker));
754 return WriteToDatabase(); 755 return WriteToDatabase();
755 } 756 }
756 757
757 bool MetadataDatabase::FindAppRootTracker(const std::string& app_id, 758 bool MetadataDatabase::FindAppRootTracker(const std::string& app_id,
758 FileTracker* tracker_out) const { 759 FileTracker* tracker_out) const {
759 int64_t app_root_tracker_id = index_->GetAppRootTracker(app_id); 760 int64_t app_root_tracker_id = index_->GetAppRootTracker(app_id);
760 if (!app_root_tracker_id) 761 if (!app_root_tracker_id)
761 return false; 762 return false;
762 763
763 if (tracker_out && 764 if (tracker_out &&
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
893 ScopedVector<google_apis::ChangeResource> changes) { 894 ScopedVector<google_apis::ChangeResource> changes) {
894 DCHECK_LE(index_->GetLargestChangeID(), largest_change_id); 895 DCHECK_LE(index_->GetLargestChangeID(), largest_change_id);
895 896
896 for (size_t i = 0; i < changes.size(); ++i) { 897 for (size_t i = 0; i < changes.size(); ++i) {
897 const google_apis::ChangeResource& change = *changes[i]; 898 const google_apis::ChangeResource& change = *changes[i];
898 if (HasNewerFileMetadata(change.file_id(), change.change_id())) 899 if (HasNewerFileMetadata(change.file_id(), change.change_id()))
899 continue; 900 continue;
900 901
901 scoped_ptr<FileMetadata> metadata( 902 scoped_ptr<FileMetadata> metadata(
902 CreateFileMetadataFromChangeResource(change)); 903 CreateFileMetadataFromChangeResource(change));
903 UpdateByFileMetadata(FROM_HERE, metadata.Pass(), 904 UpdateByFileMetadata(FROM_HERE, std::move(metadata),
904 UPDATE_TRACKER_FOR_UNSYNCED_FILE); 905 UPDATE_TRACKER_FOR_UNSYNCED_FILE);
905 } 906 }
906 907
907 UpdateLargestKnownChangeID(largest_change_id); 908 UpdateLargestKnownChangeID(largest_change_id);
908 index_->SetLargestChangeID(largest_change_id); 909 index_->SetLargestChangeID(largest_change_id);
909 return WriteToDatabase(); 910 return WriteToDatabase();
910 } 911 }
911 912
912 SyncStatusCode MetadataDatabase::UpdateByFileResource( 913 SyncStatusCode MetadataDatabase::UpdateByFileResource(
913 const google_apis::FileResource& resource) { 914 const google_apis::FileResource& resource) {
914 scoped_ptr<FileMetadata> metadata( 915 scoped_ptr<FileMetadata> metadata(
915 CreateFileMetadataFromFileResource( 916 CreateFileMetadataFromFileResource(
916 GetLargestKnownChangeID(), resource)); 917 GetLargestKnownChangeID(), resource));
917 UpdateByFileMetadata(FROM_HERE, metadata.Pass(), 918 UpdateByFileMetadata(FROM_HERE, std::move(metadata),
918 UPDATE_TRACKER_FOR_UNSYNCED_FILE); 919 UPDATE_TRACKER_FOR_UNSYNCED_FILE);
919 return WriteToDatabase(); 920 return WriteToDatabase();
920 } 921 }
921 922
922 SyncStatusCode MetadataDatabase::UpdateByFileResourceList( 923 SyncStatusCode MetadataDatabase::UpdateByFileResourceList(
923 ScopedVector<google_apis::FileResource> resources) { 924 ScopedVector<google_apis::FileResource> resources) {
924 for (size_t i = 0; i < resources.size(); ++i) { 925 for (size_t i = 0; i < resources.size(); ++i) {
925 scoped_ptr<FileMetadata> metadata( 926 scoped_ptr<FileMetadata> metadata(
926 CreateFileMetadataFromFileResource( 927 CreateFileMetadataFromFileResource(
927 GetLargestKnownChangeID(), *resources[i])); 928 GetLargestKnownChangeID(), *resources[i]));
928 UpdateByFileMetadata(FROM_HERE, metadata.Pass(), 929 UpdateByFileMetadata(FROM_HERE, std::move(metadata),
929 UPDATE_TRACKER_FOR_UNSYNCED_FILE); 930 UPDATE_TRACKER_FOR_UNSYNCED_FILE);
930 } 931 }
931 return WriteToDatabase(); 932 return WriteToDatabase();
932 } 933 }
933 934
934 SyncStatusCode MetadataDatabase::UpdateByDeletedRemoteFile( 935 SyncStatusCode MetadataDatabase::UpdateByDeletedRemoteFile(
935 const std::string& file_id) { 936 const std::string& file_id) {
936 scoped_ptr<FileMetadata> metadata( 937 scoped_ptr<FileMetadata> metadata(
937 CreateDeletedFileMetadata(GetLargestKnownChangeID(), file_id)); 938 CreateDeletedFileMetadata(GetLargestKnownChangeID(), file_id));
938 UpdateByFileMetadata(FROM_HERE, metadata.Pass(), 939 UpdateByFileMetadata(FROM_HERE, std::move(metadata),
939 UPDATE_TRACKER_FOR_UNSYNCED_FILE); 940 UPDATE_TRACKER_FOR_UNSYNCED_FILE);
940 return WriteToDatabase(); 941 return WriteToDatabase();
941 } 942 }
942 943
943 SyncStatusCode MetadataDatabase::UpdateByDeletedRemoteFileList( 944 SyncStatusCode MetadataDatabase::UpdateByDeletedRemoteFileList(
944 const FileIDList& file_ids) { 945 const FileIDList& file_ids) {
945 for (FileIDList::const_iterator itr = file_ids.begin(); 946 for (FileIDList::const_iterator itr = file_ids.begin();
946 itr != file_ids.end(); ++itr) { 947 itr != file_ids.end(); ++itr) {
947 scoped_ptr<FileMetadata> metadata( 948 scoped_ptr<FileMetadata> metadata(
948 CreateDeletedFileMetadata(GetLargestKnownChangeID(), *itr)); 949 CreateDeletedFileMetadata(GetLargestKnownChangeID(), *itr));
949 UpdateByFileMetadata(FROM_HERE, metadata.Pass(), 950 UpdateByFileMetadata(FROM_HERE, std::move(metadata),
950 UPDATE_TRACKER_FOR_UNSYNCED_FILE); 951 UPDATE_TRACKER_FOR_UNSYNCED_FILE);
951 } 952 }
952 return WriteToDatabase(); 953 return WriteToDatabase();
953 } 954 }
954 955
955 SyncStatusCode MetadataDatabase::ReplaceActiveTrackerWithNewResource( 956 SyncStatusCode MetadataDatabase::ReplaceActiveTrackerWithNewResource(
956 int64_t parent_tracker_id, 957 int64_t parent_tracker_id,
957 const google_apis::FileResource& resource) { 958 const google_apis::FileResource& resource) {
958 DCHECK(!index_->GetFileMetadata(resource.file_id(), nullptr)); 959 DCHECK(!index_->GetFileMetadata(resource.file_id(), nullptr));
959 DCHECK(index_->GetFileTracker(parent_tracker_id, nullptr)); 960 DCHECK(index_->GetFileTracker(parent_tracker_id, nullptr));
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1018 } 1019 }
1019 children.erase(tracker.file_id()); 1020 children.erase(tracker.file_id());
1020 } 1021 }
1021 1022
1022 for (base::hash_set<std::string>::const_iterator itr = children.begin(); 1023 for (base::hash_set<std::string>::const_iterator itr = children.begin();
1023 itr != children.end(); ++itr) 1024 itr != children.end(); ++itr)
1024 CreateTrackerForParentAndFileID(*folder_tracker, *itr); 1025 CreateTrackerForParentAndFileID(*folder_tracker, *itr);
1025 folder_tracker->set_needs_folder_listing(false); 1026 folder_tracker->set_needs_folder_listing(false);
1026 if (folder_tracker->dirty() && !ShouldKeepDirty(*folder_tracker)) 1027 if (folder_tracker->dirty() && !ShouldKeepDirty(*folder_tracker))
1027 folder_tracker->set_dirty(false); 1028 folder_tracker->set_dirty(false);
1028 index_->StoreFileTracker(folder_tracker.Pass()); 1029 index_->StoreFileTracker(std::move(folder_tracker));
1029 1030
1030 return WriteToDatabase(); 1031 return WriteToDatabase();
1031 } 1032 }
1032 1033
1033 SyncStatusCode MetadataDatabase::UpdateTracker( 1034 SyncStatusCode MetadataDatabase::UpdateTracker(
1034 int64_t tracker_id, 1035 int64_t tracker_id,
1035 const FileDetails& updated_details) { 1036 const FileDetails& updated_details) {
1036 FileTracker tracker; 1037 FileTracker tracker;
1037 if (!index_->GetFileTracker(tracker_id, &tracker)) { 1038 if (!index_->GetFileTracker(tracker_id, &tracker)) {
1038 return SYNC_DATABASE_ERROR_NOT_FOUND; 1039 return SYNC_DATABASE_ERROR_NOT_FOUND;
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
1111 // - There is no active tracker that has the same |parent| and |title|. 1112 // - There is no active tracker that has the same |parent| and |title|.
1112 if (!tracker.active() && CanActivateTracker(tracker)) { 1113 if (!tracker.active() && CanActivateTracker(tracker)) {
1113 updated_tracker->set_active(true); 1114 updated_tracker->set_active(true);
1114 updated_tracker->set_dirty(true); 1115 updated_tracker->set_dirty(true);
1115 updated_tracker->set_needs_folder_listing( 1116 updated_tracker->set_needs_folder_listing(
1116 tracker.synced_details().file_kind() == FILE_KIND_FOLDER); 1117 tracker.synced_details().file_kind() == FILE_KIND_FOLDER);
1117 should_promote = true; 1118 should_promote = true;
1118 } else if (tracker.dirty() && !ShouldKeepDirty(tracker)) { 1119 } else if (tracker.dirty() && !ShouldKeepDirty(tracker)) {
1119 updated_tracker->set_dirty(false); 1120 updated_tracker->set_dirty(false);
1120 } 1121 }
1121 index_->StoreFileTracker(updated_tracker.Pass()); 1122 index_->StoreFileTracker(std::move(updated_tracker));
1122 if (should_promote) 1123 if (should_promote)
1123 index_->PromoteDemotedDirtyTracker(tracker_id); 1124 index_->PromoteDemotedDirtyTracker(tracker_id);
1124 1125
1125 return WriteToDatabase(); 1126 return WriteToDatabase();
1126 } 1127 }
1127 1128
1128 MetadataDatabase::ActivationStatus MetadataDatabase::TryActivateTracker( 1129 MetadataDatabase::ActivationStatus MetadataDatabase::TryActivateTracker(
1129 int64_t parent_tracker_id, 1130 int64_t parent_tracker_id,
1130 const std::string& file_id, 1131 const std::string& file_id,
1131 SyncStatusCode* status_out) { 1132 SyncStatusCode* status_out) {
(...skipping 27 matching lines...) Expand all
1159 index_->GetFileTrackerIDsByParentAndTitle(parent_tracker_id, title); 1160 index_->GetFileTrackerIDsByParentAndTitle(parent_tracker_id, title);
1160 if (same_title_trackers.has_active()) { 1161 if (same_title_trackers.has_active()) {
1161 RemoveAllDescendantTrackers(same_title_trackers.active_tracker(), 1162 RemoveAllDescendantTrackers(same_title_trackers.active_tracker(),
1162 index_.get()); 1163 index_.get());
1163 1164
1164 scoped_ptr<FileTracker> tracker_to_be_deactivated(new FileTracker); 1165 scoped_ptr<FileTracker> tracker_to_be_deactivated(new FileTracker);
1165 if (index_->GetFileTracker(same_title_trackers.active_tracker(), 1166 if (index_->GetFileTracker(same_title_trackers.active_tracker(),
1166 tracker_to_be_deactivated.get())) { 1167 tracker_to_be_deactivated.get())) {
1167 const std::string file_id = tracker_to_be_deactivated->file_id(); 1168 const std::string file_id = tracker_to_be_deactivated->file_id();
1168 tracker_to_be_deactivated->set_active(false); 1169 tracker_to_be_deactivated->set_active(false);
1169 index_->StoreFileTracker(tracker_to_be_deactivated.Pass()); 1170 index_->StoreFileTracker(std::move(tracker_to_be_deactivated));
1170 1171
1171 MarkTrackersDirtyByFileID(file_id, index_.get()); 1172 MarkTrackersDirtyByFileID(file_id, index_.get());
1172 } else { 1173 } else {
1173 NOTREACHED(); 1174 NOTREACHED();
1174 } 1175 }
1175 } 1176 }
1176 } 1177 }
1177 1178
1178 tracker_to_be_activated->set_dirty(false); 1179 tracker_to_be_activated->set_dirty(false);
1179 tracker_to_be_activated->set_active(true); 1180 tracker_to_be_activated->set_active(true);
1180 *tracker_to_be_activated->mutable_synced_details() = metadata.details(); 1181 *tracker_to_be_activated->mutable_synced_details() = metadata.details();
1181 if (tracker_to_be_activated->synced_details().file_kind() == 1182 if (tracker_to_be_activated->synced_details().file_kind() ==
1182 FILE_KIND_FOLDER) { 1183 FILE_KIND_FOLDER) {
1183 tracker_to_be_activated->set_needs_folder_listing(true); 1184 tracker_to_be_activated->set_needs_folder_listing(true);
1184 } 1185 }
1185 tracker_to_be_activated->set_dirty(false); 1186 tracker_to_be_activated->set_dirty(false);
1186 1187
1187 index_->StoreFileTracker(tracker_to_be_activated.Pass()); 1188 index_->StoreFileTracker(std::move(tracker_to_be_activated));
1188 1189
1189 *status_out = WriteToDatabase(); 1190 *status_out = WriteToDatabase();
1190 return ACTIVATION_PENDING; 1191 return ACTIVATION_PENDING;
1191 } 1192 }
1192 1193
1193 void MetadataDatabase::DemoteTracker(int64_t tracker_id) { 1194 void MetadataDatabase::DemoteTracker(int64_t tracker_id) {
1194 index_->DemoteDirtyTracker(tracker_id); 1195 index_->DemoteDirtyTracker(tracker_id);
1195 WriteToDatabase(); 1196 WriteToDatabase();
1196 } 1197 }
1197 1198
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
1295 tracker_ids.insert(*itr); 1296 tracker_ids.insert(*itr);
1296 } 1297 }
1297 1298
1298 for (std::set<int64_t>::iterator itr = tracker_ids.begin(); 1299 for (std::set<int64_t>::iterator itr = tracker_ids.begin();
1299 itr != tracker_ids.end(); ++itr) { 1300 itr != tracker_ids.end(); ++itr) {
1300 scoped_ptr<FileTracker> tracker(new FileTracker); 1301 scoped_ptr<FileTracker> tracker(new FileTracker);
1301 if (!index_->GetFileTracker(*itr, tracker.get()) || 1302 if (!index_->GetFileTracker(*itr, tracker.get()) ||
1302 !CanClearDirty(*tracker)) 1303 !CanClearDirty(*tracker))
1303 continue; 1304 continue;
1304 tracker->set_dirty(false); 1305 tracker->set_dirty(false);
1305 index_->StoreFileTracker(tracker.Pass()); 1306 index_->StoreFileTracker(std::move(tracker));
1306 } 1307 }
1307 1308
1308 return WriteToDatabase(); 1309 return WriteToDatabase();
1309 } 1310 }
1310 1311
1311 MetadataDatabase::MetadataDatabase( 1312 MetadataDatabase::MetadataDatabase(
1312 const base::FilePath& database_path, 1313 const base::FilePath& database_path,
1313 bool enable_on_disk_index, 1314 bool enable_on_disk_index,
1314 leveldb::Env* env_override) 1315 leveldb::Env* env_override)
1315 : database_path_(database_path), 1316 : database_path_(database_path),
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1392 tracker->set_dirty(true); 1393 tracker->set_dirty(true);
1393 tracker->set_active(false); 1394 tracker->set_active(false);
1394 tracker->set_needs_folder_listing(false); 1395 tracker->set_needs_folder_listing(false);
1395 if (details) { 1396 if (details) {
1396 *tracker->mutable_synced_details() = *details; 1397 *tracker->mutable_synced_details() = *details;
1397 if (option == UPDATE_TRACKER_FOR_UNSYNCED_FILE) { 1398 if (option == UPDATE_TRACKER_FOR_UNSYNCED_FILE) {
1398 tracker->mutable_synced_details()->set_missing(true); 1399 tracker->mutable_synced_details()->set_missing(true);
1399 tracker->mutable_synced_details()->clear_md5(); 1400 tracker->mutable_synced_details()->clear_md5();
1400 } 1401 }
1401 } 1402 }
1402 index_->StoreFileTracker(tracker.Pass()); 1403 index_->StoreFileTracker(std::move(tracker));
1403 } 1404 }
1404 1405
1405 void MetadataDatabase::MaybeAddTrackersForNewFile( 1406 void MetadataDatabase::MaybeAddTrackersForNewFile(
1406 const FileMetadata& metadata, 1407 const FileMetadata& metadata,
1407 UpdateOption option) { 1408 UpdateOption option) {
1408 std::set<int64_t> parents_to_exclude; 1409 std::set<int64_t> parents_to_exclude;
1409 TrackerIDSet existing_trackers = 1410 TrackerIDSet existing_trackers =
1410 index_->GetFileTrackerIDsByFileID(metadata.file_id()); 1411 index_->GetFileTrackerIDsByFileID(metadata.file_id());
1411 for (TrackerIDSet::const_iterator itr = existing_trackers.begin(); 1412 for (TrackerIDSet::const_iterator itr = existing_trackers.begin();
1412 itr != existing_trackers.end(); ++itr) { 1413 itr != existing_trackers.end(); ++itr) {
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
1564 << (metadata->details().missing() ? " deleted" : ""); 1565 << (metadata->details().missing() ? " deleted" : "");
1565 1566
1566 std::string file_id = metadata->file_id(); 1567 std::string file_id = metadata->file_id();
1567 if (metadata->details().missing()) 1568 if (metadata->details().missing())
1568 RemoveUnneededTrackersForMissingFile(file_id); 1569 RemoveUnneededTrackersForMissingFile(file_id);
1569 else 1570 else
1570 MaybeAddTrackersForNewFile(*metadata, option); 1571 MaybeAddTrackersForNewFile(*metadata, option);
1571 1572
1572 TrackerIDSet trackers = index_->GetFileTrackerIDsByFileID(file_id); 1573 TrackerIDSet trackers = index_->GetFileTrackerIDsByFileID(file_id);
1573 if (!trackers.empty()) { 1574 if (!trackers.empty()) {
1574 index_->StoreFileMetadata(metadata.Pass()); 1575 index_->StoreFileMetadata(std::move(metadata));
1575 1576
1576 if (option != UPDATE_TRACKER_FOR_SYNCED_FILE) 1577 if (option != UPDATE_TRACKER_FOR_SYNCED_FILE)
1577 MarkTrackerSetDirty(trackers, index_.get()); 1578 MarkTrackerSetDirty(trackers, index_.get());
1578 } 1579 }
1579 } 1580 }
1580 1581
1581 1582
1582 SyncStatusCode MetadataDatabase::WriteToDatabase() { 1583 SyncStatusCode MetadataDatabase::WriteToDatabase() {
1583 return LevelDBStatusToSyncStatusCode(db_->Commit()); 1584 return LevelDBStatusToSyncStatusCode(db_->Commit());
1584 } 1585 }
1585 1586
1586 scoped_ptr<base::ListValue> MetadataDatabase::DumpFiles( 1587 scoped_ptr<base::ListValue> MetadataDatabase::DumpFiles(
1587 const std::string& app_id) { 1588 const std::string& app_id) {
1588 scoped_ptr<base::ListValue> files(new base::ListValue); 1589 scoped_ptr<base::ListValue> files(new base::ListValue);
1589 1590
1590 FileTracker app_root_tracker; 1591 FileTracker app_root_tracker;
1591 if (!FindAppRootTracker(app_id, &app_root_tracker)) 1592 if (!FindAppRootTracker(app_id, &app_root_tracker))
1592 return files.Pass(); 1593 return files;
1593 1594
1594 std::vector<int64_t> stack; 1595 std::vector<int64_t> stack;
1595 AppendContents( 1596 AppendContents(
1596 index_->GetFileTrackerIDsByParent(app_root_tracker.tracker_id()), &stack); 1597 index_->GetFileTrackerIDsByParent(app_root_tracker.tracker_id()), &stack);
1597 while (!stack.empty()) { 1598 while (!stack.empty()) {
1598 int64_t tracker_id = stack.back(); 1599 int64_t tracker_id = stack.back();
1599 stack.pop_back(); 1600 stack.pop_back();
1600 AppendContents(index_->GetFileTrackerIDsByParent(tracker_id), &stack); 1601 AppendContents(index_->GetFileTrackerIDsByParent(tracker_id), &stack);
1601 1602
1602 FileTracker tracker; 1603 FileTracker tracker;
(...skipping 17 matching lines...) Expand all
1620 tracker.synced_details().file_kind() == FILE_KIND_FILE) 1621 tracker.synced_details().file_kind() == FILE_KIND_FILE)
1621 details->SetString("md5", tracker.synced_details().md5()); 1622 details->SetString("md5", tracker.synced_details().md5());
1622 details->SetString("active", tracker.active() ? "true" : "false"); 1623 details->SetString("active", tracker.active() ? "true" : "false");
1623 details->SetString("dirty", tracker.dirty() ? "true" : "false"); 1624 details->SetString("dirty", tracker.dirty() ? "true" : "false");
1624 1625
1625 file->Set("details", details); 1626 file->Set("details", details);
1626 1627
1627 files->Append(file); 1628 files->Append(file);
1628 } 1629 }
1629 1630
1630 return files.Pass(); 1631 return files;
1631 } 1632 }
1632 1633
1633 scoped_ptr<base::ListValue> MetadataDatabase::DumpDatabase() { 1634 scoped_ptr<base::ListValue> MetadataDatabase::DumpDatabase() {
1634 scoped_ptr<base::ListValue> list(new base::ListValue); 1635 scoped_ptr<base::ListValue> list(new base::ListValue);
1635 list->Append(DumpTrackers().release()); 1636 list->Append(DumpTrackers().release());
1636 list->Append(DumpMetadata().release()); 1637 list->Append(DumpMetadata().release());
1637 return list.Pass(); 1638 return list;
1638 } 1639 }
1639 1640
1640 bool MetadataDatabase::HasNewerFileMetadata(const std::string& file_id, 1641 bool MetadataDatabase::HasNewerFileMetadata(const std::string& file_id,
1641 int64_t change_id) { 1642 int64_t change_id) {
1642 FileMetadata metadata; 1643 FileMetadata metadata;
1643 if (!index_->GetFileMetadata(file_id, &metadata)) 1644 if (!index_->GetFileMetadata(file_id, &metadata))
1644 return false; 1645 return false;
1645 DCHECK(metadata.has_details()); 1646 DCHECK(metadata.has_details());
1646 return metadata.details().change_id() >= change_id; 1647 return metadata.details().change_id() >= change_id;
1647 } 1648 }
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1699 const FileDetails& details = tracker.synced_details(); 1700 const FileDetails& details = tracker.synced_details();
1700 dict->SetString("title", details.title()); 1701 dict->SetString("title", details.title());
1701 dict->SetString("kind", FileKindToString(details.file_kind())); 1702 dict->SetString("kind", FileKindToString(details.file_kind()));
1702 dict->SetString("md5", details.md5()); 1703 dict->SetString("md5", details.md5());
1703 dict->SetString("etag", details.etag()); 1704 dict->SetString("etag", details.etag());
1704 dict->SetString("missing", details.missing() ? "true" : "false"); 1705 dict->SetString("missing", details.missing() ? "true" : "false");
1705 dict->SetString("change_id", base::Int64ToString(details.change_id())); 1706 dict->SetString("change_id", base::Int64ToString(details.change_id()));
1706 } 1707 }
1707 trackers->Append(dict); 1708 trackers->Append(dict);
1708 } 1709 }
1709 return trackers.Pass(); 1710 return trackers;
1710 } 1711 }
1711 1712
1712 scoped_ptr<base::ListValue> MetadataDatabase::DumpMetadata() { 1713 scoped_ptr<base::ListValue> MetadataDatabase::DumpMetadata() {
1713 scoped_ptr<base::ListValue> files(new base::ListValue); 1714 scoped_ptr<base::ListValue> files(new base::ListValue);
1714 1715
1715 // Append the first element for metadata. 1716 // Append the first element for metadata.
1716 base::DictionaryValue* metadata = new base::DictionaryValue; 1717 base::DictionaryValue* metadata = new base::DictionaryValue;
1717 const char *fileKeys[] = { 1718 const char *fileKeys[] = {
1718 "file_id", "title", "type", "md5", "etag", "missing", 1719 "file_id", "title", "type", "md5", "etag", "missing",
1719 "change_id", "parents" 1720 "change_id", "parents"
(...skipping 28 matching lines...) Expand all
1748 dict->SetString("missing", details.missing() ? "true" : "false"); 1749 dict->SetString("missing", details.missing() ? "true" : "false");
1749 dict->SetString("change_id", base::Int64ToString(details.change_id())); 1750 dict->SetString("change_id", base::Int64ToString(details.change_id()));
1750 1751
1751 std::vector<std::string> parents; 1752 std::vector<std::string> parents;
1752 for (int i = 0; i < details.parent_folder_ids_size(); ++i) 1753 for (int i = 0; i < details.parent_folder_ids_size(); ++i)
1753 parents.push_back(details.parent_folder_ids(i)); 1754 parents.push_back(details.parent_folder_ids(i));
1754 dict->SetString("parents", base::JoinString(parents, ",")); 1755 dict->SetString("parents", base::JoinString(parents, ","));
1755 } 1756 }
1756 files->Append(dict); 1757 files->Append(dict);
1757 } 1758 }
1758 return files.Pass(); 1759 return files;
1759 } 1760 }
1760 1761
1761 void MetadataDatabase::AttachSyncRoot( 1762 void MetadataDatabase::AttachSyncRoot(
1762 const google_apis::FileResource& sync_root_folder) { 1763 const google_apis::FileResource& sync_root_folder) {
1763 scoped_ptr<FileMetadata> sync_root_metadata = 1764 scoped_ptr<FileMetadata> sync_root_metadata =
1764 CreateFileMetadataFromFileResource( 1765 CreateFileMetadataFromFileResource(
1765 GetLargestKnownChangeID(), sync_root_folder); 1766 GetLargestKnownChangeID(), sync_root_folder);
1766 scoped_ptr<FileTracker> sync_root_tracker = 1767 scoped_ptr<FileTracker> sync_root_tracker =
1767 CreateSyncRootTracker(IncrementTrackerID(), *sync_root_metadata); 1768 CreateSyncRootTracker(IncrementTrackerID(), *sync_root_metadata);
1768 1769
1769 index_->SetSyncRootTrackerID(sync_root_tracker->tracker_id()); 1770 index_->SetSyncRootTrackerID(sync_root_tracker->tracker_id());
1770 index_->StoreFileMetadata(sync_root_metadata.Pass()); 1771 index_->StoreFileMetadata(std::move(sync_root_metadata));
1771 index_->StoreFileTracker(sync_root_tracker.Pass()); 1772 index_->StoreFileTracker(std::move(sync_root_tracker));
1772 } 1773 }
1773 1774
1774 void MetadataDatabase::AttachInitialAppRoot( 1775 void MetadataDatabase::AttachInitialAppRoot(
1775 const google_apis::FileResource& app_root_folder) { 1776 const google_apis::FileResource& app_root_folder) {
1776 scoped_ptr<FileMetadata> app_root_metadata = 1777 scoped_ptr<FileMetadata> app_root_metadata =
1777 CreateFileMetadataFromFileResource( 1778 CreateFileMetadataFromFileResource(
1778 GetLargestKnownChangeID(), app_root_folder); 1779 GetLargestKnownChangeID(), app_root_folder);
1779 scoped_ptr<FileTracker> app_root_tracker = 1780 scoped_ptr<FileTracker> app_root_tracker =
1780 CreateInitialAppRootTracker(IncrementTrackerID(), 1781 CreateInitialAppRootTracker(IncrementTrackerID(),
1781 GetSyncRootTrackerID(), 1782 GetSyncRootTrackerID(),
1782 *app_root_metadata); 1783 *app_root_metadata);
1783 1784
1784 index_->StoreFileMetadata(app_root_metadata.Pass()); 1785 index_->StoreFileMetadata(std::move(app_root_metadata));
1785 index_->StoreFileTracker(app_root_tracker.Pass()); 1786 index_->StoreFileTracker(std::move(app_root_tracker));
1786 } 1787 }
1787 1788
1788 bool MetadataDatabase::CanClearDirty(const FileTracker& tracker) { 1789 bool MetadataDatabase::CanClearDirty(const FileTracker& tracker) {
1789 FileMetadata metadata; 1790 FileMetadata metadata;
1790 if (!index_->GetFileMetadata(tracker.file_id(), &metadata) || 1791 if (!index_->GetFileMetadata(tracker.file_id(), &metadata) ||
1791 !tracker.active() || !tracker.dirty() || 1792 !tracker.active() || !tracker.dirty() ||
1792 !tracker.has_synced_details() || 1793 !tracker.has_synced_details() ||
1793 tracker.needs_folder_listing()) 1794 tracker.needs_folder_listing())
1794 return false; 1795 return false;
1795 1796
(...skipping 13 matching lines...) Expand all
1809 return false; 1810 return false;
1810 1811
1811 if (!parents.empty()) 1812 if (!parents.empty())
1812 return false; 1813 return false;
1813 1814
1814 return true; 1815 return true;
1815 } 1816 }
1816 1817
1817 } // namespace drive_backend 1818 } // namespace drive_backend
1818 } // namespace sync_file_system 1819 } // namespace sync_file_system
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698