local_to_remote_syncer.h revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file. 458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_LOCAL_TO_REMOTE_SYNCER_H_ 658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_LOCAL_TO_REMOTE_SYNCER_H_ 758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <string> 9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/scoped_vector.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/weak_ptr.h" 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/sync_file_system/drive_backend/sync_task.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/sync_file_system/file_change.h" 15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/sync_file_system/sync_action.h" 1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/sync_file_system/sync_callbacks.h" 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/sync_file_system/sync_file_metadata.h" 18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "google_apis/drive/gdata_errorcode.h" 1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace drive { 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class DriveServiceInterface; 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class DriveUploaderInterface; 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace google_apis { 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class FileResource; 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class ResourceList; 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace sync_file_system { 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class RemoteChangeProcessor; 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace drive_backend { 3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class FileTracker; 37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class FolderCreator; 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class MetadataDatabase; 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class SyncEngineContext; 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class LocalToRemoteSyncer : public SyncTask { 4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public: 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) LocalToRemoteSyncer(SyncEngineContext* sync_context, 44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const SyncFileMetadata& local_metadata, 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const FileChange& local_change, 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const base::FilePath& local_path, 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const fileapi::FileSystemURL& url); 4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual ~LocalToRemoteSyncer(); 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void RunPreflight(scoped_ptr<SyncTaskToken> token) OVERRIDE; 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void RunExclusive(scoped_ptr<SyncTaskToken> token); 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const fileapi::FileSystemURL& url() const { return url_; } 53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::FilePath& target_path() const { return target_path_; } 54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SyncAction sync_action() const { return sync_action_; } 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool needs_remote_change_listing() const { 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return needs_remote_change_listing_; 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private: 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void SyncCompleted(scoped_ptr<SyncTaskToken> token, 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SyncStatusCode status); 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void HandleConflict(scoped_ptr<SyncTaskToken> token); 64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void HandleExistingRemoteFile(scoped_ptr<SyncTaskToken> token); 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void DeleteRemoteFile(const SyncStatusCallback& callback); 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void DidDeleteRemoteFile(const SyncStatusCallback& callback, 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) google_apis::GDataErrorCode error); 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void UploadExistingFile(scoped_ptr<SyncTaskToken> token); 71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void DidGetMD5ForUpload(scoped_ptr<SyncTaskToken> token, 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& local_file_md5); 73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void DidUploadExistingFile(scoped_ptr<SyncTaskToken> token, 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) google_apis::GDataErrorCode error, 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const GURL&, 7646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<google_apis::FileResource>); 77a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void DidUpdateDatabaseForUploadExistingFile( 78f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<SyncTaskToken> token, 79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SyncStatusCode status); 80a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void UpdateRemoteMetadata(const std::string& file_id, 81a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const SyncStatusCallback& callback); 82a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void DidGetRemoteMetadata(const std::string& file_id, 83a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const SyncStatusCallback& callback, 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) google_apis::GDataErrorCode error, 8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<google_apis::FileResource> entry); 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 87f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void DidDeleteForUploadNewFile(scoped_ptr<SyncTaskToken> token, 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SyncStatusCode status); 89f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void DidDeleteForCreateFolder(scoped_ptr<SyncTaskToken> token, 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SyncStatusCode status); 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 92f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void UploadNewFile(scoped_ptr<SyncTaskToken> token); 93f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void DidUploadNewFile(scoped_ptr<SyncTaskToken> token, 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) google_apis::GDataErrorCode error, 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const GURL& upload_location, 9646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<google_apis::FileResource> entry); 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 98f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void CreateRemoteFolder(scoped_ptr<SyncTaskToken> token); 99f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void DidCreateRemoteFolder(scoped_ptr<SyncTaskToken> token, 100a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::string& file_id, 101a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SyncStatusCode status); 102f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void DidDetachResourceForCreationConflict(scoped_ptr<SyncTaskToken> token, 103a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) google_apis::GDataErrorCode error); 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 105a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool IsContextReady(); 106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) drive::DriveServiceInterface* drive_service(); 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) drive::DriveUploaderInterface* drive_uploader(); 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MetadataDatabase* metadata_database(); 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SyncEngineContext* sync_context_; // Not owned. 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FileChange local_change_; 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool local_is_missing_; 114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::FilePath local_path_; 115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fileapi::FileSystemURL url_; 116a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SyncAction sync_action_; 117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<FileTracker> remote_file_tracker_; 119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<FileTracker> remote_parent_folder_tracker_; 120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::FilePath target_path_; 121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool needs_remote_change_listing_; 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 124a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scoped_ptr<FolderCreator> folder_creator_; 125a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::WeakPtrFactory<LocalToRemoteSyncer> weak_ptr_factory_; 127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 12858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(LocalToRemoteSyncer); 12958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 13058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 13158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} // namespace drive_backend 13258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} // namespace sync_file_system 13358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 13458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_LOCAL_TO_REMOTE_SYNCER_H_ 135