sync_engine.h revision 1e9bf3e0803691d0a228da41fc608347b6db4340
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_SYNC_ENGINE_H_ 6#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_ENGINE_H_ 7 8#include "base/memory/scoped_ptr.h" 9#include "base/memory/weak_ptr.h" 10#include "base/observer_list.h" 11#include "chrome/browser/drive/drive_notification_observer.h" 12#include "chrome/browser/drive/drive_service_interface.h" 13#include "chrome/browser/sync_file_system/drive_backend/sync_engine_context.h" 14#include "chrome/browser/sync_file_system/local_change_processor.h" 15#include "chrome/browser/sync_file_system/remote_file_sync_service.h" 16#include "chrome/browser/sync_file_system/sync_task_manager.h" 17#include "net/base/network_change_notifier.h" 18 19class ExtensionService; 20 21namespace base { 22class SequencedTaskRunner; 23} 24 25namespace drive { 26class DriveAPIService; 27class DriveNotificationManager; 28} 29 30namespace sync_file_system { 31namespace drive_backend { 32 33class LocalToRemoteSyncer; 34class MetadataDatabase; 35class RemoteToLocalSyncer; 36class SyncEngineInitializer; 37 38class SyncEngine : public RemoteFileSyncService, 39 public LocalChangeProcessor, 40 public SyncTaskManager::Client, 41 public drive::DriveNotificationObserver, 42 public drive::DriveServiceObserver, 43 public net::NetworkChangeNotifier::NetworkChangeObserver, 44 public SyncEngineContext { 45 public: 46 typedef Observer SyncServiceObserver; 47 48 SyncEngine(const base::FilePath& base_dir, 49 base::SequencedTaskRunner* task_runner, 50 scoped_ptr<drive::DriveAPIService> drive_service, 51 drive::DriveNotificationManager* notification_manager, 52 ExtensionService* extension_service); 53 virtual ~SyncEngine(); 54 55 void Initialize(); 56 57 // RemoteFileSyncService overrides. 58 virtual void AddServiceObserver(SyncServiceObserver* observer) OVERRIDE; 59 virtual void AddFileStatusObserver(FileStatusObserver* observer) OVERRIDE; 60 virtual void RegisterOrigin( 61 const GURL& origin, 62 const SyncStatusCallback& callback) OVERRIDE; 63 virtual void EnableOrigin( 64 const GURL& origin, 65 const SyncStatusCallback& callback) OVERRIDE; 66 virtual void DisableOrigin( 67 const GURL& origin, 68 const SyncStatusCallback& callback) OVERRIDE; 69 virtual void UninstallOrigin( 70 const GURL& origin, 71 UninstallFlag flag, 72 const SyncStatusCallback& callback) OVERRIDE; 73 virtual void ProcessRemoteChange(const SyncFileCallback& callback) OVERRIDE; 74 virtual void SetRemoteChangeProcessor( 75 RemoteChangeProcessor* processor) OVERRIDE; 76 virtual LocalChangeProcessor* GetLocalChangeProcessor() OVERRIDE; 77 virtual bool IsConflicting(const fileapi::FileSystemURL& url) OVERRIDE; 78 virtual RemoteServiceState GetCurrentState() const OVERRIDE; 79 virtual void GetOriginStatusMap(OriginStatusMap* status_map) OVERRIDE; 80 virtual scoped_ptr<base::ListValue> DumpFiles(const GURL& origin) OVERRIDE; 81 virtual void SetSyncEnabled(bool enabled) OVERRIDE; 82 virtual SyncStatusCode SetConflictResolutionPolicy( 83 ConflictResolutionPolicy policy) OVERRIDE; 84 virtual ConflictResolutionPolicy GetConflictResolutionPolicy() const OVERRIDE; 85 virtual void GetRemoteVersions( 86 const fileapi::FileSystemURL& url, 87 const RemoteVersionsCallback& callback) OVERRIDE; 88 virtual void DownloadRemoteVersion( 89 const fileapi::FileSystemURL& url, 90 const std::string& version_id, 91 const DownloadVersionCallback& callback) OVERRIDE; 92 93 // LocalChangeProcessor overrides. 94 virtual void ApplyLocalChange( 95 const FileChange& change, 96 const base::FilePath& local_file_path, 97 const SyncFileMetadata& local_file_metadata, 98 const fileapi::FileSystemURL& url, 99 const SyncStatusCallback& callback) OVERRIDE; 100 101 // SyncTaskManager::Client overrides. 102 virtual void MaybeScheduleNextTask() OVERRIDE; 103 virtual void NotifyLastOperationStatus(SyncStatusCode sync_status) OVERRIDE; 104 105 // drive::DriveNotificationObserver overrides. 106 virtual void OnNotificationReceived() OVERRIDE; 107 virtual void OnPushNotificationEnabled(bool enabled) OVERRIDE; 108 109 // drive::DriveServiceObserver overrides. 110 virtual void OnReadyToSendRequests() OVERRIDE; 111 virtual void OnRefreshTokenInvalid() OVERRIDE; 112 113 // net::NetworkChangeNotifier::NetworkChangeObserver overrides. 114 virtual void OnNetworkChanged( 115 net::NetworkChangeNotifier::ConnectionType type) OVERRIDE; 116 117 // SyncEngineContext overrides. 118 virtual drive::DriveServiceInterface* GetDriveService() OVERRIDE; 119 virtual MetadataDatabase* GetMetadataDatabase() OVERRIDE; 120 121 private: 122 void DoDisableApp(const std::string& app_id, 123 const SyncStatusCallback& callback); 124 void DoEnableApp(const std::string& app_id, 125 const SyncStatusCallback& callback); 126 127 void DidInitialize(SyncEngineInitializer* initializer, 128 SyncStatusCode status); 129 void DidProcessRemoteChange(RemoteToLocalSyncer* syncer, 130 const SyncFileCallback& callback, 131 SyncStatusCode status); 132 void DidApplyLocalChange(LocalToRemoteSyncer* syncer, 133 const SyncStatusCallback& callback, 134 SyncStatusCode status); 135 void DidFetchChangeList(SyncStatusCallback& callback); 136 137 void MaybeStartFetchChanges(); 138 void UpdateServiceStateFromSyncStatusCode( 139 SyncStatusCode state, 140 const std::string& description); 141 void UpdateServiceState(RemoteServiceState state, 142 const std::string& description); 143 144 base::FilePath base_dir_; 145 base::FilePath temporary_file_dir_; 146 147 scoped_refptr<base::SequencedTaskRunner> task_runner_; 148 149 scoped_ptr<drive::DriveAPIService> drive_service_; 150 scoped_ptr<MetadataDatabase> metadata_database_; 151 152 // These external services are not owned by SyncEngine. 153 // The owner of the SyncEngine is responsible for their lifetime. 154 // I.e. the owner should declare the dependency explicitly by calling 155 // BrowserContextKeyedService::DependsOn(). 156 drive::DriveNotificationManager* notification_manager_; 157 ExtensionService* extension_service_; 158 159 ObserverList<SyncServiceObserver> service_observers_; 160 ObserverList<FileStatusObserver> file_status_observers_; 161 RemoteChangeProcessor* remote_change_processor_; 162 163 RemoteServiceState service_state_; 164 165 bool should_check_remote_change_; 166 base::TimeTicks time_to_check_changes_; 167 168 bool sync_enabled_; 169 ConflictResolutionPolicy conflict_resolution_policy_; 170 bool network_available_; 171 172 scoped_ptr<SyncTaskManager> task_manager_; 173 174 base::WeakPtrFactory<SyncEngine> weak_ptr_factory_; 175 176 DISALLOW_COPY_AND_ASSIGN(SyncEngine); 177}; 178 179} // namespace drive_backend 180} // namespace sync_file_system 181 182#endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_ENGINE_H_ 183