Index: chrome/browser/sync_file_system/drive_backend/metadata_database.cc |
diff --git a/chrome/browser/sync_file_system/drive_backend/metadata_database.cc b/chrome/browser/sync_file_system/drive_backend/metadata_database.cc |
index 1524cbdfbcc49d969d68147f8163b80e4b5aa61f..d635f1701108436eab2c0015ff6c0486f69701e8 100644 |
--- a/chrome/browser/sync_file_system/drive_backend/metadata_database.cc |
+++ b/chrome/browser/sync_file_system/drive_backend/metadata_database.cc |
@@ -8,7 +8,6 @@ |
#include <stack> |
#include "base/bind.h" |
-#include "base/callback.h" |
#include "base/command_line.h" |
#include "base/files/file_path.h" |
#include "base/files/file_util.h" |
@@ -48,8 +47,6 @@ namespace { |
// Command line flag to disable on-disk indexing. |
const char kDisableMetadataDatabaseOnDisk[] = "disable-syncfs-on-disk-indexing"; |
-void EmptyStatusCallback(SyncStatusCode status) {} |
- |
std::string FileKindToString(FileKind file_kind) { |
switch (file_kind) { |
case FILE_KIND_UNSUPPORTED: |
@@ -520,10 +517,10 @@ void RemoveFileTracker(int64 tracker_id, |
} // namespace |
// static |
-void MetadataDatabase::Create( |
+scoped_ptr<MetadataDatabase> MetadataDatabase::Create( |
const base::FilePath& database_path, |
leveldb::Env* env_override, |
- const CreateCallback& callback) { |
+ SyncStatusCode* status_out) { |
bool enable_on_disk_index = !CommandLine::ForCurrentProcess()->HasSwitch( |
kDisableMetadataDatabaseOnDisk); |
scoped_ptr<MetadataDatabase> metadata_database( |
@@ -547,7 +544,8 @@ void MetadataDatabase::Create( |
if (status != SYNC_STATUS_OK) |
metadata_database.reset(); |
- callback.Run(status, metadata_database.Pass()); |
+ *status_out = status; |
+ return metadata_database.Pass(); |
} |
// static |
@@ -602,11 +600,10 @@ bool MetadataDatabase::HasSyncRoot() const { |
return index_->GetSyncRootTrackerID() != kInvalidTrackerID; |
} |
-void MetadataDatabase::PopulateInitialData( |
+SyncStatusCode MetadataDatabase::PopulateInitialData( |
int64 largest_change_id, |
const google_apis::FileResource& sync_root_folder, |
- const ScopedVector<google_apis::FileResource>& app_root_folders, |
- const SyncStatusCallback& callback) { |
+ const ScopedVector<google_apis::FileResource>& app_root_folders) { |
index_->SetLargestChangeID(largest_change_id); |
UpdateLargestKnownChangeID(largest_change_id); |
@@ -614,7 +611,7 @@ void MetadataDatabase::PopulateInitialData( |
for (size_t i = 0; i < app_root_folders.size(); ++i) |
AttachInitialAppRoot(*app_root_folders[i]); |
- WriteToDatabase(callback); |
+ return WriteToDatabase(); |
} |
bool MetadataDatabase::IsAppEnabled(const std::string& app_id) const { |
@@ -628,42 +625,36 @@ bool MetadataDatabase::IsAppEnabled(const std::string& app_id) const { |
return tracker.tracker_kind() == TRACKER_KIND_APP_ROOT; |
} |
-void MetadataDatabase::RegisterApp(const std::string& app_id, |
- const std::string& folder_id, |
- const SyncStatusCallback& callback) { |
+SyncStatusCode MetadataDatabase::RegisterApp(const std::string& app_id, |
+ const std::string& folder_id) { |
if (index_->GetAppRootTracker(app_id)) { |
// The app-root is already registered. |
- callback.Run(SYNC_STATUS_OK); |
- return; |
+ return SYNC_STATUS_OK; |
} |
TrackerIDSet trackers = index_->GetFileTrackerIDsByFileID(folder_id); |
if (trackers.empty()) { |
- callback.Run(SYNC_DATABASE_ERROR_NOT_FOUND); |
- return; |
+ return SYNC_DATABASE_ERROR_NOT_FOUND; |
} |
if (trackers.has_active()) { |
// The folder is tracked by another tracker. |
util::Log(logging::LOG_WARNING, FROM_HERE, |
"Failed to register App for %s", app_id.c_str()); |
- callback.Run(SYNC_STATUS_HAS_CONFLICT); |
- return; |
+ return SYNC_STATUS_HAS_CONFLICT; |
} |
int64 sync_root_tracker_id = index_->GetSyncRootTrackerID(); |
if (!sync_root_tracker_id) { |
util::Log(logging::LOG_WARNING, FROM_HERE, |
"Sync-root needs to be set up before registering app-root"); |
- callback.Run(SYNC_DATABASE_ERROR_NOT_FOUND); |
- return; |
+ return SYNC_DATABASE_ERROR_NOT_FOUND; |
} |
scoped_ptr<FileTracker> tracker(new FileTracker); |
if (!FilterFileTrackersByParent(index_.get(), trackers, |
sync_root_tracker_id, tracker.get())) { |
- callback.Run(SYNC_DATABASE_ERROR_NOT_FOUND); |
- return; |
+ return SYNC_DATABASE_ERROR_NOT_FOUND; |
} |
tracker->set_app_id(app_id); |
@@ -673,21 +664,18 @@ void MetadataDatabase::RegisterApp(const std::string& app_id, |
tracker->set_dirty(true); |
index_->StoreFileTracker(tracker.Pass()); |
- WriteToDatabase(callback); |
+ return WriteToDatabase(); |
} |
-void MetadataDatabase::DisableApp(const std::string& app_id, |
- const SyncStatusCallback& callback) { |
+SyncStatusCode MetadataDatabase::DisableApp(const std::string& app_id) { |
int64 tracker_id = index_->GetAppRootTracker(app_id); |
scoped_ptr<FileTracker> tracker(new FileTracker); |
if (!index_->GetFileTracker(tracker_id, tracker.get())) { |
- callback.Run(SYNC_DATABASE_ERROR_NOT_FOUND); |
- return; |
+ return SYNC_DATABASE_ERROR_NOT_FOUND; |
} |
if (tracker->tracker_kind() == TRACKER_KIND_DISABLED_APP_ROOT) { |
- callback.Run(SYNC_STATUS_OK); |
- return; |
+ return SYNC_STATUS_OK; |
} |
DCHECK_EQ(TRACKER_KIND_APP_ROOT, tracker->tracker_kind()); |
@@ -698,21 +686,18 @@ void MetadataDatabase::DisableApp(const std::string& app_id, |
tracker->set_tracker_kind(TRACKER_KIND_DISABLED_APP_ROOT); |
index_->StoreFileTracker(tracker.Pass()); |
- WriteToDatabase(callback); |
+ return WriteToDatabase(); |
} |
-void MetadataDatabase::EnableApp(const std::string& app_id, |
- const SyncStatusCallback& callback) { |
+SyncStatusCode MetadataDatabase::EnableApp(const std::string& app_id) { |
int64 tracker_id = index_->GetAppRootTracker(app_id); |
scoped_ptr<FileTracker> tracker(new FileTracker); |
if (!index_->GetFileTracker(tracker_id, tracker.get())) { |
- callback.Run(SYNC_DATABASE_ERROR_NOT_FOUND); |
- return; |
+ return SYNC_DATABASE_ERROR_NOT_FOUND; |
} |
if (tracker->tracker_kind() == TRACKER_KIND_APP_ROOT) { |
- callback.Run(SYNC_STATUS_OK); |
- return; |
+ return SYNC_STATUS_OK; |
} |
DCHECK_EQ(TRACKER_KIND_DISABLED_APP_ROOT, tracker->tracker_kind()); |
@@ -722,17 +707,15 @@ void MetadataDatabase::EnableApp(const std::string& app_id, |
index_->StoreFileTracker(tracker.Pass()); |
MarkTrackersDirtyRecursively(tracker_id, index_.get()); |
- WriteToDatabase(callback); |
+ return WriteToDatabase(); |
} |
-void MetadataDatabase::UnregisterApp(const std::string& app_id, |
- const SyncStatusCallback& callback) { |
+SyncStatusCode MetadataDatabase::UnregisterApp(const std::string& app_id) { |
int64 tracker_id = index_->GetAppRootTracker(app_id); |
scoped_ptr<FileTracker> tracker(new FileTracker); |
if (!index_->GetFileTracker(tracker_id, tracker.get()) || |
tracker->tracker_kind() == TRACKER_KIND_REGULAR) { |
- callback.Run(SYNC_STATUS_OK); |
- return; |
+ return SYNC_STATUS_OK; |
} |
RemoveAllDescendantTrackers(tracker_id, index_.get()); |
@@ -743,7 +726,7 @@ void MetadataDatabase::UnregisterApp(const std::string& app_id, |
tracker->set_dirty(true); |
index_->StoreFileTracker(tracker.Pass()); |
- WriteToDatabase(callback); |
+ return WriteToDatabase(); |
} |
bool MetadataDatabase::FindAppRootTracker(const std::string& app_id, |
@@ -880,10 +863,9 @@ bool MetadataDatabase::FindNearestActiveAncestor( |
return true; |
} |
-void MetadataDatabase::UpdateByChangeList( |
+SyncStatusCode MetadataDatabase::UpdateByChangeList( |
int64 largest_change_id, |
- ScopedVector<google_apis::ChangeResource> changes, |
- const SyncStatusCallback& callback) { |
+ ScopedVector<google_apis::ChangeResource> changes) { |
DCHECK_LE(index_->GetLargestChangeID(), largest_change_id); |
for (size_t i = 0; i < changes.size(); ++i) { |
@@ -899,23 +881,21 @@ void MetadataDatabase::UpdateByChangeList( |
UpdateLargestKnownChangeID(largest_change_id); |
index_->SetLargestChangeID(largest_change_id); |
- WriteToDatabase(callback); |
+ return WriteToDatabase(); |
} |
-void MetadataDatabase::UpdateByFileResource( |
- const google_apis::FileResource& resource, |
- const SyncStatusCallback& callback) { |
+SyncStatusCode MetadataDatabase::UpdateByFileResource( |
+ const google_apis::FileResource& resource) { |
scoped_ptr<FileMetadata> metadata( |
CreateFileMetadataFromFileResource( |
GetLargestKnownChangeID(), resource)); |
UpdateByFileMetadata(FROM_HERE, metadata.Pass(), |
UPDATE_TRACKER_FOR_UNSYNCED_FILE); |
- WriteToDatabase(callback); |
+ return WriteToDatabase(); |
} |
-void MetadataDatabase::UpdateByFileResourceList( |
- ScopedVector<google_apis::FileResource> resources, |
- const SyncStatusCallback& callback) { |
+SyncStatusCode MetadataDatabase::UpdateByFileResourceList( |
+ ScopedVector<google_apis::FileResource> resources) { |
for (size_t i = 0; i < resources.size(); ++i) { |
scoped_ptr<FileMetadata> metadata( |
CreateFileMetadataFromFileResource( |
@@ -923,22 +903,20 @@ void MetadataDatabase::UpdateByFileResourceList( |
UpdateByFileMetadata(FROM_HERE, metadata.Pass(), |
UPDATE_TRACKER_FOR_UNSYNCED_FILE); |
} |
- WriteToDatabase(callback); |
+ return WriteToDatabase(); |
} |
-void MetadataDatabase::UpdateByDeletedRemoteFile( |
- const std::string& file_id, |
- const SyncStatusCallback& callback) { |
+SyncStatusCode MetadataDatabase::UpdateByDeletedRemoteFile( |
+ const std::string& file_id) { |
scoped_ptr<FileMetadata> metadata( |
CreateDeletedFileMetadata(GetLargestKnownChangeID(), file_id)); |
UpdateByFileMetadata(FROM_HERE, metadata.Pass(), |
UPDATE_TRACKER_FOR_UNSYNCED_FILE); |
- WriteToDatabase(callback); |
+ return WriteToDatabase(); |
} |
-void MetadataDatabase::UpdateByDeletedRemoteFileList( |
- const FileIDList& file_ids, |
- const SyncStatusCallback& callback) { |
+SyncStatusCode MetadataDatabase::UpdateByDeletedRemoteFileList( |
+ const FileIDList& file_ids) { |
for (FileIDList::const_iterator itr = file_ids.begin(); |
itr != file_ids.end(); ++itr) { |
scoped_ptr<FileMetadata> metadata( |
@@ -946,13 +924,12 @@ void MetadataDatabase::UpdateByDeletedRemoteFileList( |
UpdateByFileMetadata(FROM_HERE, metadata.Pass(), |
UPDATE_TRACKER_FOR_UNSYNCED_FILE); |
} |
- WriteToDatabase(callback); |
+ return WriteToDatabase(); |
} |
-void MetadataDatabase::ReplaceActiveTrackerWithNewResource( |
+SyncStatusCode MetadataDatabase::ReplaceActiveTrackerWithNewResource( |
int64 parent_tracker_id, |
- const google_apis::FileResource& resource, |
- const SyncStatusCallback& callback) { |
+ const google_apis::FileResource& resource) { |
DCHECK(!index_->GetFileMetadata(resource.file_id(), NULL)); |
DCHECK(index_->GetFileTracker(parent_tracker_id, NULL)); |
@@ -971,8 +948,7 @@ void MetadataDatabase::ReplaceActiveTrackerWithNewResource( |
if (!FilterFileTrackersByFileID(index_.get(), same_path_trackers, |
resource.file_id(), &to_be_activated)) { |
NOTREACHED(); |
- callback.Run(SYNC_STATUS_FAILED); |
- return; |
+ return SYNC_STATUS_FAILED; |
} |
int64 tracker_id = to_be_activated.tracker_id(); |
@@ -984,27 +960,24 @@ void MetadataDatabase::ReplaceActiveTrackerWithNewResource( |
} |
ActivateFileTracker(tracker_id, MARK_NOTHING_DIRTY, index_.get()); |
- WriteToDatabase(callback); |
+ return WriteToDatabase(); |
} |
-void MetadataDatabase::PopulateFolderByChildList( |
+SyncStatusCode MetadataDatabase::PopulateFolderByChildList( |
const std::string& folder_id, |
- const FileIDList& child_file_ids, |
- const SyncStatusCallback& callback) { |
+ const FileIDList& child_file_ids) { |
TrackerIDSet trackers = index_->GetFileTrackerIDsByFileID(folder_id); |
if (!trackers.has_active()) { |
// It's OK that there is no folder to populate its children. |
// Inactive folders should ignore their contents updates. |
- callback.Run(SYNC_STATUS_OK); |
- return; |
+ return SYNC_STATUS_OK; |
} |
scoped_ptr<FileTracker> folder_tracker(new FileTracker); |
if (!index_->GetFileTracker(trackers.active_tracker(), |
folder_tracker.get())) { |
NOTREACHED(); |
- callback.Run(SYNC_STATUS_FAILED); |
- return; |
+ return SYNC_STATUS_FAILED; |
} |
base::hash_set<std::string> children(child_file_ids.begin(), |
@@ -1029,16 +1002,15 @@ void MetadataDatabase::PopulateFolderByChildList( |
folder_tracker->set_dirty(false); |
index_->StoreFileTracker(folder_tracker.Pass()); |
- WriteToDatabase(callback); |
+ return WriteToDatabase(); |
} |
-void MetadataDatabase::UpdateTracker(int64 tracker_id, |
- const FileDetails& updated_details, |
- const SyncStatusCallback& callback) { |
+SyncStatusCode MetadataDatabase::UpdateTracker( |
+ int64 tracker_id, |
+ const FileDetails& updated_details) { |
FileTracker tracker; |
if (!index_->GetFileTracker(tracker_id, &tracker)) { |
- callback.Run(SYNC_DATABASE_ERROR_NOT_FOUND); |
- return; |
+ return SYNC_DATABASE_ERROR_NOT_FOUND; |
} |
// Check if the tracker is to be deleted. |
@@ -1052,8 +1024,7 @@ void MetadataDatabase::UpdateTracker(int64 tracker_id, |
MARK_SAME_FILE_ID_TRACKERS_DIRTY | |
MARK_SAME_PATH_TRACKERS_DIRTY, |
index_.get()); |
- WriteToDatabase(callback); |
- return; |
+ return WriteToDatabase(); |
} |
} |
@@ -1074,8 +1045,7 @@ void MetadataDatabase::UpdateTracker(int64 tracker_id, |
RemoveFileTracker(tracker.tracker_id(), |
MARK_SAME_PATH_TRACKERS_DIRTY, |
index_.get()); |
- WriteToDatabase(callback); |
- return; |
+ return WriteToDatabase(); |
} |
if (tracker.has_synced_details()) { |
@@ -1085,8 +1055,7 @@ void MetadataDatabase::UpdateTracker(int64 tracker_id, |
RemoveFileTracker(tracker.tracker_id(), |
MARK_SAME_FILE_ID_TRACKERS_DIRTY, |
index_.get()); |
- WriteToDatabase(callback); |
- return; |
+ return WriteToDatabase(); |
} |
} else { |
// Check if any other tracker exists has the same parent, title and |
@@ -1102,8 +1071,7 @@ void MetadataDatabase::UpdateTracker(int64 tracker_id, |
RemoveFileTracker(tracker.tracker_id(), |
MARK_NOTHING_DIRTY, |
index_.get()); |
- WriteToDatabase(callback); |
- return; |
+ return WriteToDatabase(); |
} |
} |
} |
@@ -1129,17 +1097,17 @@ void MetadataDatabase::UpdateTracker(int64 tracker_id, |
if (should_promote) |
index_->PromoteDemotedDirtyTracker(tracker_id); |
- WriteToDatabase(callback); |
+ return WriteToDatabase(); |
} |
MetadataDatabase::ActivationStatus MetadataDatabase::TryActivateTracker( |
int64 parent_tracker_id, |
const std::string& file_id, |
- const SyncStatusCallback& callback) { |
+ SyncStatusCode* status_out) { |
FileMetadata metadata; |
if (!index_->GetFileMetadata(file_id, &metadata)) { |
NOTREACHED(); |
- callback.Run(SYNC_STATUS_FAILED); |
+ *status_out = SYNC_STATUS_FAILED; |
return ACTIVATION_PENDING; |
} |
std::string title = metadata.details().title(); |
@@ -1193,24 +1161,24 @@ MetadataDatabase::ActivationStatus MetadataDatabase::TryActivateTracker( |
index_->StoreFileTracker(tracker_to_be_activated.Pass()); |
- WriteToDatabase(callback); |
+ *status_out = WriteToDatabase(); |
return ACTIVATION_PENDING; |
} |
void MetadataDatabase::DemoteTracker(int64 tracker_id) { |
index_->DemoteDirtyTracker(tracker_id); |
- WriteToDatabase(base::Bind(&EmptyStatusCallback)); |
+ WriteToDatabase(); |
} |
bool MetadataDatabase::PromoteDemotedTrackers() { |
bool promoted = index_->PromoteDemotedDirtyTrackers(); |
- WriteToDatabase(base::Bind(&EmptyStatusCallback)); |
+ WriteToDatabase(); |
return promoted; |
} |
void MetadataDatabase::PromoteDemotedTracker(int64 tracker_id) { |
index_->PromoteDemotedDirtyTracker(tracker_id); |
- WriteToDatabase(base::Bind(&EmptyStatusCallback)); |
+ WriteToDatabase(); |
} |
bool MetadataDatabase::GetDirtyTracker( |
@@ -1291,9 +1259,8 @@ void MetadataDatabase::GetRegisteredAppIDs(std::vector<std::string>* app_ids) { |
*app_ids = index_->GetRegisteredAppIDs(); |
} |
-void MetadataDatabase::SweepDirtyTrackers( |
- const std::vector<std::string>& file_ids, |
- const SyncStatusCallback& callback) { |
+SyncStatusCode MetadataDatabase::SweepDirtyTrackers( |
+ const std::vector<std::string>& file_ids) { |
std::set<int64> tracker_ids; |
for (size_t i = 0; i < file_ids.size(); ++i) { |
TrackerIDSet trackers_for_file_id = |
@@ -1313,7 +1280,7 @@ void MetadataDatabase::SweepDirtyTrackers( |
index_->StoreFileTracker(tracker.Pass()); |
} |
- WriteToDatabase(callback); |
+ return WriteToDatabase(); |
} |
MetadataDatabase::MetadataDatabase( |
@@ -1586,9 +1553,9 @@ void MetadataDatabase::UpdateByFileMetadata( |
} |
} |
-void MetadataDatabase::WriteToDatabase(const SyncStatusCallback& callback) { |
- leveldb::Status status = db_->Commit(); |
- callback.Run(LevelDBStatusToSyncStatusCode(status)); |
+ |
+SyncStatusCode MetadataDatabase::WriteToDatabase() { |
+ return LevelDBStatusToSyncStatusCode(db_->Commit()); |
} |
scoped_ptr<base::ListValue> MetadataDatabase::DumpFiles( |