local_to_remote_syncer.h revision 6d86b77056ed63eb6871182f42a9fd5f07550f90
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 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_LOCAL_TO_REMOTE_SYNCER_H_ 6#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_LOCAL_TO_REMOTE_SYNCER_H_ 7 8#include <string> 9 10#include "base/memory/scoped_ptr.h" 11#include "base/memory/scoped_vector.h" 12#include "base/memory/weak_ptr.h" 13#include "chrome/browser/sync_file_system/drive_backend/sync_task.h" 14#include "chrome/browser/sync_file_system/file_change.h" 15#include "chrome/browser/sync_file_system/sync_action.h" 16#include "chrome/browser/sync_file_system/sync_callbacks.h" 17#include "chrome/browser/sync_file_system/sync_file_metadata.h" 18#include "google_apis/drive/gdata_errorcode.h" 19 20namespace drive { 21class DriveServiceInterface; 22class DriveUploaderInterface; 23} 24 25namespace google_apis { 26class FileResource; 27class ResourceList; 28} 29 30namespace sync_file_system { 31 32class RemoteChangeProcessor; 33 34namespace drive_backend { 35 36class FileTracker; 37class FolderCreator; 38class MetadataDatabase; 39class SyncEngineContext; 40 41class LocalToRemoteSyncer : public SyncTask { 42 public: 43 LocalToRemoteSyncer(SyncEngineContext* sync_context, 44 const SyncFileMetadata& local_metadata, 45 const FileChange& local_change, 46 const base::FilePath& local_path, 47 const fileapi::FileSystemURL& url); 48 virtual ~LocalToRemoteSyncer(); 49 virtual void RunPreflight(scoped_ptr<SyncTaskToken> token) OVERRIDE; 50 void RunExclusive(scoped_ptr<SyncTaskToken> token); 51 52 const fileapi::FileSystemURL& url() const { return url_; } 53 const base::FilePath& target_path() const { return target_path_; } 54 SyncAction sync_action() const { return sync_action_; } 55 bool needs_remote_change_listing() const { 56 return needs_remote_change_listing_; 57 } 58 59 private: 60 void SyncCompleted(scoped_ptr<SyncTaskToken> token, 61 SyncStatusCode status); 62 63 void HandleConflict(scoped_ptr<SyncTaskToken> token); 64 void HandleExistingRemoteFile(scoped_ptr<SyncTaskToken> token); 65 66 void DeleteRemoteFile(const SyncStatusCallback& callback); 67 void DidDeleteRemoteFile(const SyncStatusCallback& callback, 68 google_apis::GDataErrorCode error); 69 70 void UploadExistingFile(scoped_ptr<SyncTaskToken> token); 71 void DidGetMD5ForUpload(scoped_ptr<SyncTaskToken> token, 72 const std::string& local_file_md5); 73 void DidUploadExistingFile(scoped_ptr<SyncTaskToken> token, 74 google_apis::GDataErrorCode error, 75 const GURL&, 76 scoped_ptr<google_apis::FileResource>); 77 void DidUpdateDatabaseForUploadExistingFile( 78 scoped_ptr<SyncTaskToken> token, 79 SyncStatusCode status); 80 void UpdateRemoteMetadata(const std::string& file_id, 81 scoped_ptr<SyncTaskToken> token); 82 void DidGetRemoteMetadata(const std::string& file_id, 83 scoped_ptr<SyncTaskToken> token, 84 google_apis::GDataErrorCode error, 85 scoped_ptr<google_apis::FileResource> entry); 86 87 void UploadNewFile(scoped_ptr<SyncTaskToken> token); 88 void DidUploadNewFile(scoped_ptr<SyncTaskToken> token, 89 google_apis::GDataErrorCode error, 90 const GURL& upload_location, 91 scoped_ptr<google_apis::FileResource> entry); 92 93 void CreateRemoteFolder(scoped_ptr<SyncTaskToken> token); 94 void DidCreateRemoteFolder(scoped_ptr<SyncTaskToken> token, 95 const std::string& file_id, 96 SyncStatusCode status); 97 void DidDetachResourceForCreationConflict(scoped_ptr<SyncTaskToken> token, 98 google_apis::GDataErrorCode error); 99 100 bool IsContextReady(); 101 drive::DriveServiceInterface* drive_service(); 102 drive::DriveUploaderInterface* drive_uploader(); 103 MetadataDatabase* metadata_database(); 104 105 void CompleteWithRetryStatus(scoped_ptr<SyncTaskToken> token, 106 SyncStatusCode status); 107 108 SyncEngineContext* sync_context_; // Not owned. 109 110 FileChange local_change_; 111 bool local_is_missing_; 112 base::FilePath local_path_; 113 fileapi::FileSystemURL url_; 114 SyncAction sync_action_; 115 116 scoped_ptr<FileTracker> remote_file_tracker_; 117 scoped_ptr<FileTracker> remote_parent_folder_tracker_; 118 base::FilePath target_path_; 119 120 bool needs_remote_change_listing_; 121 122 scoped_ptr<FolderCreator> folder_creator_; 123 124 base::WeakPtrFactory<LocalToRemoteSyncer> weak_ptr_factory_; 125 126 DISALLOW_COPY_AND_ASSIGN(LocalToRemoteSyncer); 127}; 128 129} // namespace drive_backend 130} // namespace sync_file_system 131 132#endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_LOCAL_TO_REMOTE_SYNCER_H_ 133