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" 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/sync_file_system/sync_file_metadata.h" 17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "google_apis/drive/gdata_errorcode.h" 1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace drive { 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class DriveServiceInterface; 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class DriveUploaderInterface; 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace google_apis { 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class FileResource; 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class ResourceList; 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace sync_file_system { 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class RemoteChangeProcessor; 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace drive_backend { 3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass FileDetails; 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: 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch typedef base::Callback<void(scoped_ptr<SyncTaskToken>)> Continuation; 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) LocalToRemoteSyncer(SyncEngineContext* sync_context, 46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const SyncFileMetadata& local_metadata, 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const FileChange& local_change, 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const base::FilePath& local_path, 4903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const storage::FileSystemURL& url); 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual ~LocalToRemoteSyncer(); 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void RunPreflight(scoped_ptr<SyncTaskToken> token) OVERRIDE; 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const storage::FileSystemURL& url() const { return url_; } 54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::FilePath& target_path() const { return target_path_; } 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SyncAction sync_action() const { return sync_action_; } 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool needs_remote_change_listing() const { 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return needs_remote_change_listing_; 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private: 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void MoveToBackground(const Continuation& continuation, 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<SyncTaskToken> token); 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void ContinueAsBackgroundTask(const Continuation& continuation, 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<SyncTaskToken> token); 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void SyncCompleted(scoped_ptr<SyncTaskToken> token, 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SyncStatusCode status); 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void HandleConflict(scoped_ptr<SyncTaskToken> token); 69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void HandleExistingRemoteFile(scoped_ptr<SyncTaskToken> token); 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void UpdateTrackerForReusedFolder(const FileDetails& details, 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<SyncTaskToken> token); 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void DeleteRemoteFile(scoped_ptr<SyncTaskToken> token); 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void DidDeleteRemoteFile(scoped_ptr<SyncTaskToken> token, 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) google_apis::GDataErrorCode error); 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 78f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void UploadExistingFile(scoped_ptr<SyncTaskToken> token); 79f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void DidUploadExistingFile(scoped_ptr<SyncTaskToken> token, 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) google_apis::GDataErrorCode error, 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const GURL&, 8246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<google_apis::FileResource>); 83a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void UpdateRemoteMetadata(const std::string& file_id, 846d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) scoped_ptr<SyncTaskToken> token); 85a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void DidGetRemoteMetadata(const std::string& file_id, 866d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) scoped_ptr<SyncTaskToken> token, 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) google_apis::GDataErrorCode error, 8846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<google_apis::FileResource> entry); 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 90f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void UploadNewFile(scoped_ptr<SyncTaskToken> token); 91f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void DidUploadNewFile(scoped_ptr<SyncTaskToken> token, 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) google_apis::GDataErrorCode error, 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const GURL& upload_location, 9446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<google_apis::FileResource> entry); 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 96f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void CreateRemoteFolder(scoped_ptr<SyncTaskToken> token); 97f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void DidCreateRemoteFolder(scoped_ptr<SyncTaskToken> token, 98a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::string& file_id, 99a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SyncStatusCode status); 100f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void DidDetachResourceForCreationConflict(scoped_ptr<SyncTaskToken> token, 101a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) google_apis::GDataErrorCode error); 102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 103a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool IsContextReady(); 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) drive::DriveServiceInterface* drive_service(); 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) drive::DriveUploaderInterface* drive_uploader(); 106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MetadataDatabase* metadata_database(); 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SyncEngineContext* sync_context_; // Not owned. 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FileChange local_change_; 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool local_is_missing_; 112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::FilePath local_path_; 11303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) storage::FileSystemURL url_; 114a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SyncAction sync_action_; 115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<FileTracker> remote_file_tracker_; 117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<FileTracker> remote_parent_folder_tracker_; 118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::FilePath target_path_; 119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int64 remote_file_change_id_; 120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool retry_on_success_; 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