local_to_remote_syncer.h revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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 { 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class ResourceEntry; 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) 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class LocalToRemoteSyncer : public SequentialSyncTask { 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(); 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void RunSequential(const SyncStatusCallback& callback) OVERRIDE; 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const fileapi::FileSystemURL& url() const { return url_; } 52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::FilePath& target_path() const { return target_path_; } 53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SyncAction sync_action() const { return sync_action_; } 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool needs_remote_change_listing() const { 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return needs_remote_change_listing_; 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private: 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void SyncCompleted(const SyncStatusCallback& callback, 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SyncStatusCode status); 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void HandleConflict(const SyncStatusCallback& callback); 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void HandleExistingRemoteFile(const SyncStatusCallback& callback); 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void DeleteRemoteFile(const SyncStatusCallback& callback); 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void DidDeleteRemoteFile(const SyncStatusCallback& callback, 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) google_apis::GDataErrorCode error); 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void UploadExistingFile(const SyncStatusCallback& callback); 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void DidGetMD5ForUpload(const SyncStatusCallback& callback, 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& local_file_md5); 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void DidUploadExistingFile(const SyncStatusCallback& callback, 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) google_apis::GDataErrorCode error, 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const GURL&, 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<google_apis::ResourceEntry>); 76a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void DidUpdateDatabaseForUploadExistingFile( 77a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const SyncStatusCallback& callback, 78a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SyncStatusCode status); 79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void UpdateRemoteMetadata(const std::string& file_id, 80a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const SyncStatusCallback& callback); 81a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void DidGetRemoteMetadata(const std::string& file_id, 82a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const SyncStatusCallback& callback, 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) google_apis::GDataErrorCode error, 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<google_apis::ResourceEntry> entry); 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void DidDeleteForUploadNewFile(const SyncStatusCallback& callback, 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SyncStatusCode status); 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void DidDeleteForCreateFolder(const SyncStatusCallback& callback, 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SyncStatusCode status); 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void UploadNewFile(const SyncStatusCallback& callback); 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void DidUploadNewFile(const SyncStatusCallback& callback, 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) google_apis::GDataErrorCode error, 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const GURL& upload_location, 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<google_apis::ResourceEntry> entry); 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void CreateRemoteFolder(const SyncStatusCallback& callback); 98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void DidCreateRemoteFolder(const SyncStatusCallback& callback, 99a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::string& file_id, 100a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SyncStatusCode status); 101a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void DidDetachResourceForCreationConflict(const SyncStatusCallback& callback, 102a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) google_apis::GDataErrorCode error); 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 104a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool IsContextReady(); 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) drive::DriveServiceInterface* drive_service(); 106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) drive::DriveUploaderInterface* drive_uploader(); 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MetadataDatabase* metadata_database(); 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SyncEngineContext* sync_context_; // Not owned. 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FileChange local_change_; 1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool local_is_missing_; 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::FilePath local_path_; 114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fileapi::FileSystemURL url_; 115a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SyncAction sync_action_; 116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<FileTracker> remote_file_tracker_; 118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<FileTracker> remote_parent_folder_tracker_; 119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::FilePath target_path_; 120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool needs_remote_change_listing_; 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 123a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scoped_ptr<FolderCreator> folder_creator_; 124a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::WeakPtrFactory<LocalToRemoteSyncer> weak_ptr_factory_; 126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 12758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(LocalToRemoteSyncer); 12858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 12958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 13058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} // namespace drive_backend 13158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} // namespace sync_file_system 13258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 13358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_LOCAL_TO_REMOTE_SYNCER_H_ 134