local_to_remote_syncer.h revision f2477e01787aa58f445919b809d89e252beef54f
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) 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/scoped_vector.h" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/weak_ptr.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/google_apis/gdata_errorcode.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/sync_file_system/file_change.h" 1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/sync_file_system/sync_callbacks.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/sync_file_system/sync_file_metadata.h" 1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/sync_file_system/sync_task.h" 1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace drive { 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class DriveServiceInterface; 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class DriveUploaderInterface; 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace google_apis { 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class ResourceEntry; 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class ResourceList; 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace sync_file_system { 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class RemoteChangeProcessor; 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace drive_backend { 3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class FileTracker; 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class MetadataDatabase; 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class SyncEngineContext; 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class LocalToRemoteSyncer : public SyncTask { 3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public: 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) LocalToRemoteSyncer(SyncEngineContext* sync_context, 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const FileChange& local_change, 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const base::FilePath& local_path, 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const SyncFileMetadata& local_metadata, 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const fileapi::FileSystemURL& url); 4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual ~LocalToRemoteSyncer(); 4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void Run(const SyncStatusCallback& callback) OVERRIDE; 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private: 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void SyncCompleted(const SyncStatusCallback& callback, 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SyncStatusCode status); 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void HandleMissingRemoteFile(const SyncStatusCallback& callback); 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void HandleConflict(const SyncStatusCallback& callback); 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void HandleExistingRemoteFile(const SyncStatusCallback& callback); 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void HandleMissingParentCase(const SyncStatusCallback& callback); 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void DeleteRemoteFile(const SyncStatusCallback& callback); 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void DidDeleteRemoteFile(const SyncStatusCallback& callback, 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) google_apis::GDataErrorCode error); 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void UploadExistingFile(const SyncStatusCallback& callback); 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void DidGetMD5ForUpload(const SyncStatusCallback& callback, 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& local_file_md5); 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void DidUploadExistingFile(const SyncStatusCallback& callback, 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) google_apis::GDataErrorCode error, 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const GURL&, 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<google_apis::ResourceEntry>); 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void UpdateRemoteMetadata(const SyncStatusCallback& callback); 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void DidGetRemoteMetadata(const SyncStatusCallback& callback, 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int64 change_id, 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) google_apis::GDataErrorCode error, 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<google_apis::ResourceEntry> entry); 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void DidDeleteForUploadNewFile(const SyncStatusCallback& callback, 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SyncStatusCode status); 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void DidDeleteForCreateFolder(const SyncStatusCallback& callback, 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SyncStatusCode status); 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void UploadNewFile(const SyncStatusCallback& callback); 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void DidUploadNewFile(const SyncStatusCallback& callback, 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int64 change_id, 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) google_apis::GDataErrorCode error, 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const GURL& upload_location, 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<google_apis::ResourceEntry> entry); 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void DidUpdateDatabaseForUpload(const SyncStatusCallback& callback, 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& file_id, 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SyncStatusCode status); 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void CreateRemoteFolder(const SyncStatusCallback& callback); 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void DidCreateRemoteFolder(const SyncStatusCallback& callback, 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) google_apis::GDataErrorCode error, 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<google_apis::ResourceEntry> entry); 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void DidListFolderForEnsureUniqueness( 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const SyncStatusCallback& callback, 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ScopedVector<google_apis::ResourceEntry> candidates, 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) google_apis::GDataErrorCode error, 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<google_apis::ResourceList> resource_list); 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) drive::DriveServiceInterface* drive_service(); 99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) drive::DriveUploaderInterface* drive_uploader(); 100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MetadataDatabase* metadata_database(); 101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SyncEngineContext* sync_context_; // Not owned. 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FileChange local_change_; 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::FilePath local_path_; 106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SyncFileMetadata local_metadata_; 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fileapi::FileSystemURL url_; 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<FileTracker> remote_file_tracker_; 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<FileTracker> remote_parent_folder_tracker_; 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::FilePath target_path_; 112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::WeakPtrFactory<LocalToRemoteSyncer> weak_ptr_factory_; 114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 11558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(LocalToRemoteSyncer); 11658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 11758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 11858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} // namespace drive_backend 11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} // namespace sync_file_system 12058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 12158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_LOCAL_TO_REMOTE_SYNCER_H_ 122