| OLD | NEW |
| 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 <stdint.h> | 7 #include <stdint.h> |
| 8 #include <utility> |
| 8 | 9 |
| 9 #include "base/bind.h" | 10 #include "base/bind.h" |
| 10 #include "base/files/scoped_temp_dir.h" | 11 #include "base/files/scoped_temp_dir.h" |
| 11 #include "base/macros.h" | 12 #include "base/macros.h" |
| 12 #include "base/message_loop/message_loop.h" | 13 #include "base/message_loop/message_loop.h" |
| 13 #include "base/strings/string_number_conversions.h" | 14 #include "base/strings/string_number_conversions.h" |
| 14 #include "base/thread_task_runner_handle.h" | 15 #include "base/thread_task_runner_handle.h" |
| 15 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.
h" | 16 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.
h" |
| 16 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_test_util.
h" | 17 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_test_util.
h" |
| 17 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_util.h" | 18 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_util.h" |
| (...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 options.env = in_memory_env_.get(); | 266 options.env = in_memory_env_.get(); |
| 266 leveldb::Status status = | 267 leveldb::Status status = |
| 267 leveldb::DB::Open(options, database_dir_.path().AsUTF8Unsafe(), &db); | 268 leveldb::DB::Open(options, database_dir_.path().AsUTF8Unsafe(), &db); |
| 268 EXPECT_TRUE(status.ok()); | 269 EXPECT_TRUE(status.ok()); |
| 269 | 270 |
| 270 scoped_ptr<LevelDBWrapper> wrapper(new LevelDBWrapper(make_scoped_ptr(db))); | 271 scoped_ptr<LevelDBWrapper> wrapper(new LevelDBWrapper(make_scoped_ptr(db))); |
| 271 | 272 |
| 272 wrapper->Put(kDatabaseVersionKey, base::Int64ToString(3)); | 273 wrapper->Put(kDatabaseVersionKey, base::Int64ToString(3)); |
| 273 SetUpServiceMetadata(wrapper.get()); | 274 SetUpServiceMetadata(wrapper.get()); |
| 274 | 275 |
| 275 return wrapper.Pass(); | 276 return wrapper; |
| 276 } | 277 } |
| 277 | 278 |
| 278 void SetUpServiceMetadata(LevelDBWrapper* db) { | 279 void SetUpServiceMetadata(LevelDBWrapper* db) { |
| 279 ServiceMetadata service_metadata; | 280 ServiceMetadata service_metadata; |
| 280 service_metadata.set_largest_change_id(kInitialChangeID); | 281 service_metadata.set_largest_change_id(kInitialChangeID); |
| 281 service_metadata.set_sync_root_tracker_id(kSyncRootTrackerID); | 282 service_metadata.set_sync_root_tracker_id(kSyncRootTrackerID); |
| 282 service_metadata.set_next_tracker_id(next_tracker_id_); | 283 service_metadata.set_next_tracker_id(next_tracker_id_); |
| 283 PutServiceMetadataToDB(service_metadata, db); | 284 PutServiceMetadataToDB(service_metadata, db); |
| 284 EXPECT_TRUE(db->Commit().ok()); | 285 EXPECT_TRUE(db->Commit().ok()); |
| 285 } | 286 } |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 398 } else { | 399 } else { |
| 399 file_resource->set_mime_type("application/vnd.google-apps.document"); | 400 file_resource->set_mime_type("application/vnd.google-apps.document"); |
| 400 } | 401 } |
| 401 file_resource->set_md5_checksum(file.details().md5()); | 402 file_resource->set_md5_checksum(file.details().md5()); |
| 402 file_resource->set_etag(file.details().etag()); | 403 file_resource->set_etag(file.details().etag()); |
| 403 file_resource->set_created_date(base::Time::FromInternalValue( | 404 file_resource->set_created_date(base::Time::FromInternalValue( |
| 404 file.details().creation_time())); | 405 file.details().creation_time())); |
| 405 file_resource->set_modified_date(base::Time::FromInternalValue( | 406 file_resource->set_modified_date(base::Time::FromInternalValue( |
| 406 file.details().modification_time())); | 407 file.details().modification_time())); |
| 407 | 408 |
| 408 return file_resource.Pass(); | 409 return file_resource; |
| 409 } | 410 } |
| 410 | 411 |
| 411 scoped_ptr<google_apis::ChangeResource> CreateChangeResourceFromMetadata( | 412 scoped_ptr<google_apis::ChangeResource> CreateChangeResourceFromMetadata( |
| 412 const FileMetadata& file) { | 413 const FileMetadata& file) { |
| 413 scoped_ptr<google_apis::ChangeResource> change( | 414 scoped_ptr<google_apis::ChangeResource> change( |
| 414 new google_apis::ChangeResource); | 415 new google_apis::ChangeResource); |
| 415 change->set_change_id(file.details().change_id()); | 416 change->set_change_id(file.details().change_id()); |
| 416 change->set_file_id(file.file_id()); | 417 change->set_file_id(file.file_id()); |
| 417 change->set_deleted(file.details().missing()); | 418 change->set_deleted(file.details().missing()); |
| 418 if (change->is_deleted()) | 419 if (change->is_deleted()) |
| 419 return change.Pass(); | 420 return change; |
| 420 | 421 |
| 421 change->set_file(CreateFileResourceFromMetadata(file)); | 422 change->set_file(CreateFileResourceFromMetadata(file)); |
| 422 return change.Pass(); | 423 return change; |
| 423 } | 424 } |
| 424 | 425 |
| 425 void ApplyRenameChangeToMetadata(const std::string& new_title, | 426 void ApplyRenameChangeToMetadata(const std::string& new_title, |
| 426 FileMetadata* file) { | 427 FileMetadata* file) { |
| 427 FileDetails* details = file->mutable_details(); | 428 FileDetails* details = file->mutable_details(); |
| 428 details->set_title(new_title); | 429 details->set_title(new_title); |
| 429 details->set_change_id(++current_change_id_); | 430 details->set_change_id(++current_change_id_); |
| 430 } | 431 } |
| 431 | 432 |
| 432 void ApplyReorganizeChangeToMetadata(const std::string& new_parent, | 433 void ApplyReorganizeChangeToMetadata(const std::string& new_parent, |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 509 itr1->Next(), itr2->Next()) { | 510 itr1->Next(), itr2->Next()) { |
| 510 EXPECT_EQ(itr1->key().ToString(), itr2->key().ToString()); | 511 EXPECT_EQ(itr1->key().ToString(), itr2->key().ToString()); |
| 511 EXPECT_EQ(itr1->value().ToString(), itr2->value().ToString()); | 512 EXPECT_EQ(itr1->value().ToString(), itr2->value().ToString()); |
| 512 } | 513 } |
| 513 EXPECT_TRUE(!itr1->Valid()); | 514 EXPECT_TRUE(!itr1->Valid()); |
| 514 EXPECT_TRUE(!itr2->Valid()); | 515 EXPECT_TRUE(!itr2->Valid()); |
| 515 } | 516 } |
| 516 | 517 |
| 517 void VerifyReloadConsistency() { | 518 void VerifyReloadConsistency() { |
| 518 scoped_ptr<MetadataDatabase> metadata_database_2; | 519 scoped_ptr<MetadataDatabase> metadata_database_2; |
| 519 ASSERT_EQ(SYNC_STATUS_OK, | 520 ASSERT_EQ(SYNC_STATUS_OK, MetadataDatabase::CreateForTesting( |
| 520 MetadataDatabase::CreateForTesting( | 521 std::move(metadata_database_->db_), |
| 521 metadata_database_->db_.Pass(), | 522 metadata_database_->enable_on_disk_index_, |
| 522 metadata_database_->enable_on_disk_index_, | 523 &metadata_database_2)); |
| 523 &metadata_database_2)); | 524 metadata_database_->db_ = std::move(metadata_database_2->db_); |
| 524 metadata_database_->db_ = metadata_database_2->db_.Pass(); | |
| 525 | 525 |
| 526 MetadataDatabaseIndexInterface* index1 = metadata_database_->index_.get(); | 526 MetadataDatabaseIndexInterface* index1 = metadata_database_->index_.get(); |
| 527 MetadataDatabaseIndexInterface* index2 = metadata_database_2->index_.get(); | 527 MetadataDatabaseIndexInterface* index2 = metadata_database_2->index_.get(); |
| 528 if (GetParam()) { | 528 if (GetParam()) { |
| 529 VerifyReloadConsistencyForOnDisk( | 529 VerifyReloadConsistencyForOnDisk( |
| 530 static_cast<MetadataDatabaseIndexOnDisk*>(index1), | 530 static_cast<MetadataDatabaseIndexOnDisk*>(index1), |
| 531 static_cast<MetadataDatabaseIndexOnDisk*>(index2)); | 531 static_cast<MetadataDatabaseIndexOnDisk*>(index2)); |
| 532 } else { | 532 } else { |
| 533 VerifyReloadConsistencyForOnMemory( | 533 VerifyReloadConsistencyForOnMemory( |
| 534 static_cast<MetadataDatabaseIndex*>(index1), | 534 static_cast<MetadataDatabaseIndex*>(index1), |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 567 SyncStatusCode EnableApp(const std::string& app_id) { | 567 SyncStatusCode EnableApp(const std::string& app_id) { |
| 568 return metadata_database_->EnableApp(app_id); | 568 return metadata_database_->EnableApp(app_id); |
| 569 } | 569 } |
| 570 | 570 |
| 571 SyncStatusCode UnregisterApp(const std::string& app_id) { | 571 SyncStatusCode UnregisterApp(const std::string& app_id) { |
| 572 return metadata_database_->UnregisterApp(app_id); | 572 return metadata_database_->UnregisterApp(app_id); |
| 573 } | 573 } |
| 574 | 574 |
| 575 SyncStatusCode UpdateByChangeList( | 575 SyncStatusCode UpdateByChangeList( |
| 576 ScopedVector<google_apis::ChangeResource> changes) { | 576 ScopedVector<google_apis::ChangeResource> changes) { |
| 577 return metadata_database_->UpdateByChangeList( | 577 return metadata_database_->UpdateByChangeList(current_change_id_, |
| 578 current_change_id_, changes.Pass()); | 578 std::move(changes)); |
| 579 } | 579 } |
| 580 | 580 |
| 581 SyncStatusCode PopulateFolder(const std::string& folder_id, | 581 SyncStatusCode PopulateFolder(const std::string& folder_id, |
| 582 const FileIDList& listed_children) { | 582 const FileIDList& listed_children) { |
| 583 return metadata_database_->PopulateFolderByChildList( | 583 return metadata_database_->PopulateFolderByChildList( |
| 584 folder_id, listed_children); | 584 folder_id, listed_children); |
| 585 } | 585 } |
| 586 | 586 |
| 587 SyncStatusCode UpdateTracker(const FileTracker& tracker) { | 587 SyncStatusCode UpdateTracker(const FileTracker& tracker) { |
| 588 return metadata_database_->UpdateTracker( | 588 return metadata_database_->UpdateTracker( |
| (...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 906 PushToChangeList( | 906 PushToChangeList( |
| 907 CreateChangeResourceFromMetadata(renamed_file.metadata), &changes); | 907 CreateChangeResourceFromMetadata(renamed_file.metadata), &changes); |
| 908 PushToChangeList( | 908 PushToChangeList( |
| 909 CreateChangeResourceFromMetadata(reorganized_file.metadata), &changes); | 909 CreateChangeResourceFromMetadata(reorganized_file.metadata), &changes); |
| 910 PushToChangeList( | 910 PushToChangeList( |
| 911 CreateChangeResourceFromMetadata(updated_file.metadata), &changes); | 911 CreateChangeResourceFromMetadata(updated_file.metadata), &changes); |
| 912 PushToChangeList( | 912 PushToChangeList( |
| 913 CreateChangeResourceFromMetadata(noop_file.metadata), &changes); | 913 CreateChangeResourceFromMetadata(noop_file.metadata), &changes); |
| 914 PushToChangeList( | 914 PushToChangeList( |
| 915 CreateChangeResourceFromMetadata(new_file.metadata), &changes); | 915 CreateChangeResourceFromMetadata(new_file.metadata), &changes); |
| 916 EXPECT_EQ(SYNC_STATUS_OK, UpdateByChangeList(changes.Pass())); | 916 EXPECT_EQ(SYNC_STATUS_OK, UpdateByChangeList(std::move(changes))); |
| 917 | 917 |
| 918 renamed_file.tracker.set_dirty(true); | 918 renamed_file.tracker.set_dirty(true); |
| 919 reorganized_file.tracker.set_dirty(true); | 919 reorganized_file.tracker.set_dirty(true); |
| 920 updated_file.tracker.set_dirty(true); | 920 updated_file.tracker.set_dirty(true); |
| 921 noop_file.tracker.set_dirty(true); | 921 noop_file.tracker.set_dirty(true); |
| 922 new_file.tracker.mutable_synced_details()->set_missing(true); | 922 new_file.tracker.mutable_synced_details()->set_missing(true); |
| 923 new_file.tracker.mutable_synced_details()->clear_md5(); | 923 new_file.tracker.mutable_synced_details()->clear_md5(); |
| 924 new_file.tracker.set_active(false); | 924 new_file.tracker.set_active(false); |
| 925 new_file.tracker.set_dirty(true); | 925 new_file.tracker.set_dirty(true); |
| 926 ResetTrackerID(&new_file.tracker); | 926 ResetTrackerID(&new_file.tracker); |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1152 EXPECT_TRUE(file->HasKey("details")); | 1152 EXPECT_TRUE(file->HasKey("details")); |
| 1153 | 1153 |
| 1154 ASSERT_TRUE(files->GetDictionary(1, &file)); | 1154 ASSERT_TRUE(files->GetDictionary(1, &file)); |
| 1155 EXPECT_TRUE(file->GetString("title", &str) && str == "file_0"); | 1155 EXPECT_TRUE(file->GetString("title", &str) && str == "file_0"); |
| 1156 EXPECT_TRUE(file->GetString("type", &str) && str == "file"); | 1156 EXPECT_TRUE(file->GetString("type", &str) && str == "file"); |
| 1157 EXPECT_TRUE(file->HasKey("details")); | 1157 EXPECT_TRUE(file->HasKey("details")); |
| 1158 } | 1158 } |
| 1159 | 1159 |
| 1160 } // namespace drive_backend | 1160 } // namespace drive_backend |
| 1161 } // namespace sync_file_system | 1161 } // namespace sync_file_system |
| OLD | NEW |