Chromium Code Reviews| Index: chrome/browser/sync_file_system/drive_backend/remote_to_local_syncer.cc |
| diff --git a/chrome/browser/sync_file_system/drive_backend/remote_to_local_syncer.cc b/chrome/browser/sync_file_system/drive_backend/remote_to_local_syncer.cc |
| index b4c560da1fc7e5a8a4503f3a325274b8bed6dea3..6108db7299f0b38e2e1a78d1844bdfcf8a32cb59 100644 |
| --- a/chrome/browser/sync_file_system/drive_backend/remote_to_local_syncer.cc |
| +++ b/chrome/browser/sync_file_system/drive_backend/remote_to_local_syncer.cc |
| @@ -4,14 +4,34 @@ |
| #include "chrome/browser/sync_file_system/drive_backend/remote_to_local_syncer.h" |
| +#include "base/bind.h" |
| #include "base/callback.h" |
| +#include "base/location.h" |
| #include "base/logging.h" |
| +#include "base/message_loop/message_loop_proxy.h" |
| +#include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" |
| +#include "chrome/browser/sync_file_system/drive_backend/sync_engine_context.h" |
| namespace sync_file_system { |
| namespace drive_backend { |
| -RemoteToLocalSyncer::RemoteToLocalSyncer() { |
| +namespace { |
| + |
| +bool BuildFileSystemURLForTracker( |
| + MetadataDatabase* metadata_database, |
| + int tracker_id, |
| + fileapi::FileSystemURL* url) { |
| NOTIMPLEMENTED(); |
| + return false; |
| +} |
| + |
| +} // namespace |
| + |
| +RemoteToLocalSyncer::RemoteToLocalSyncer(SyncEngineContext* sync_context, |
| + int priorities) |
| + : sync_context_(sync_context), |
| + priorities_(priorities), |
| + weak_ptr_factory_(this) { |
| } |
| RemoteToLocalSyncer::~RemoteToLocalSyncer() { |
| @@ -19,9 +39,73 @@ RemoteToLocalSyncer::~RemoteToLocalSyncer() { |
| } |
| void RemoteToLocalSyncer::Run(const SyncStatusCallback& callback) { |
| + if (priorities_ & PRIORITY_NORMAL) { |
| + if (metadata_database()->GetNormalPriorityDirtyTracker(&dirty_tracker_)) { |
| + ResolveTrivial(callback); |
| + return; |
| + } |
| + } |
| + |
| + if (priorities_ & PRIORITY_LOW) { |
| + if (metadata_database()->GetNormalPriorityDirtyTracker(&dirty_tracker_)) { |
|
kinuko
2013/11/05 13:36:13
GetLowPriorityDirtyTracker?
tzik
2013/11/06 04:56:08
Done.
|
| + ResolveTrivial(callback); |
| + return; |
| + } |
| + } |
| + |
| + base::MessageLoopProxy::current()->PostTask( |
| + FROM_HERE, |
| + base::Bind(callback, SYNC_STATUS_NO_CHANGE_TO_SYNC)); |
| +} |
| + |
| +void RemoteToLocalSyncer::ResolveTrivial(const SyncStatusCallback& callback) { |
| + metadata_database()->ResolveTrivialDirtiness( |
| + dirty_tracker_.tracker_id(), |
| + base::Bind(&RemoteToLocalSyncer::DidResolveTrivial, |
| + weak_ptr_factory_.GetWeakPtr(), callback)); |
| +} |
| + |
| +void RemoteToLocalSyncer::DidResolveTrivial( |
| + const SyncStatusCallback& callback, |
| + SyncStatusCode status) { |
| + if (status == SYNC_STATUS_OK) { |
| + callback.Run(SYNC_STATUS_OK); |
| + return; |
| + } |
| + |
| + DCHECK_EQ(SYNC_STATUS_NO_CHANGE_TO_SYNC, status); |
| + |
| + fileapi::FileSystemURL url; |
| + BuildFileSystemURLForTracker(metadata_database(), |
| + dirty_tracker_.tracker_id(), |
| + &url); |
| + remote_change_processor()->PrepareForProcessRemoteChange( |
| + url, |
| + base::Bind(&RemoteToLocalSyncer::DidPrepare, |
| + weak_ptr_factory_.GetWeakPtr(), |
| + callback)); |
| +} |
| + |
| +void RemoteToLocalSyncer::DidPrepare(const SyncStatusCallback& callback, |
| + SyncStatusCode status, |
| + const SyncFileMetadata& metadata, |
| + const FileChangeList& changes) { |
| NOTIMPLEMENTED(); |
| callback.Run(SYNC_STATUS_FAILED); |
| } |
| +drive::DriveServiceInterface* RemoteToLocalSyncer::drive_service() { |
| + return sync_context_->GetDriveService(); |
| +} |
| + |
| +MetadataDatabase* RemoteToLocalSyncer::metadata_database() { |
| + return sync_context_->GetMetadataDatabase(); |
| +} |
| + |
| +RemoteChangeProcessor* RemoteToLocalSyncer::remote_change_processor() { |
| + DCHECK(sync_context_->GetRemoteChangeProcessor()); |
| + return sync_context_->GetRemoteChangeProcessor(); |
| +} |
| + |
| } // namespace drive_backend |
| } // namespace sync_file_system |