sync_engine.h revision 68043e1e95eeb07d5cae7aca370b26518b0867d6
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/sync_file_system/local_change_processor.h" 13#include "chrome/browser/sync_file_system/remote_file_sync_service.h" 14#include "chrome/browser/sync_file_system/sync_task_manager.h" 15 16class ExtensionService; 17 18namespace base { 19class SequencedTaskRunner; 20} 21 22namespace drive { 23class DriveAPIService; 24class DriveNotificationManager; 25} 26 27namespace sync_file_system { 28namespace drive_backend { 29 30class LocalToRemoteSyncer; 31class MetadataDatabase; 32class RemoteToLocalSyncer; 33class SyncEngineInitializer; 34 35class SyncEngine : public RemoteFileSyncService, 36 public LocalChangeProcessor, 37 public SyncTaskManager::Client, 38 public drive::DriveNotificationObserver { 39 public: 40 typedef Observer SyncServiceObserver; 41 42 SyncEngine(const base::FilePath& base_dir, 43 base::SequencedTaskRunner* task_runner, 44 scoped_ptr<drive::DriveAPIService> drive_api, 45 drive::DriveNotificationManager* notification_manager, 46 ExtensionService* extension_service); 47 virtual ~SyncEngine(); 48 49 void Initialize(); 50 51 // RemoteFileSyncService overrides. 52 virtual void AddServiceObserver(SyncServiceObserver* observer) OVERRIDE; 53 virtual void AddFileStatusObserver(FileStatusObserver* observer) OVERRIDE; 54 virtual void RegisterOrigin( 55 const GURL& origin, 56 const SyncStatusCallback& callback) OVERRIDE; 57 virtual void EnableOrigin( 58 const GURL& origin, 59 const SyncStatusCallback& callback) OVERRIDE; 60 virtual void DisableOrigin( 61 const GURL& origin, 62 const SyncStatusCallback& callback) OVERRIDE; 63 virtual void UninstallOrigin( 64 const GURL& origin, 65 UninstallFlag flag, 66 const SyncStatusCallback& callback) OVERRIDE; 67 virtual void ProcessRemoteChange(const SyncFileCallback& callback) OVERRIDE; 68 virtual void SetRemoteChangeProcessor( 69 RemoteChangeProcessor* processor) OVERRIDE; 70 virtual LocalChangeProcessor* GetLocalChangeProcessor() OVERRIDE; 71 virtual bool IsConflicting(const fileapi::FileSystemURL& url) OVERRIDE; 72 virtual RemoteServiceState GetCurrentState() const OVERRIDE; 73 virtual void GetOriginStatusMap(OriginStatusMap* status_map) OVERRIDE; 74 virtual scoped_ptr<base::ListValue> DumpFiles(const GURL& origin) OVERRIDE; 75 virtual void SetSyncEnabled(bool enabled) OVERRIDE; 76 virtual SyncStatusCode SetConflictResolutionPolicy( 77 ConflictResolutionPolicy policy) OVERRIDE; 78 virtual ConflictResolutionPolicy GetConflictResolutionPolicy() const OVERRIDE; 79 virtual void GetRemoteVersions( 80 const fileapi::FileSystemURL& url, 81 const RemoteVersionsCallback& callback) OVERRIDE; 82 virtual void DownloadRemoteVersion( 83 const fileapi::FileSystemURL& url, 84 const std::string& version_id, 85 const DownloadVersionCallback& callback) OVERRIDE; 86 87 // LocalChangeProcessor overrides. 88 virtual void ApplyLocalChange( 89 const FileChange& change, 90 const base::FilePath& local_file_path, 91 const SyncFileMetadata& local_file_metadata, 92 const fileapi::FileSystemURL& url, 93 const SyncStatusCallback& callback) OVERRIDE; 94 95 // SyncTaskManager::Client overrides. 96 virtual void MaybeScheduleNextTask() OVERRIDE; 97 virtual void NotifyLastOperationStatus(SyncStatusCode sync_status) OVERRIDE; 98 99 // drive::DriveNotificationObserver implementation. 100 virtual void OnNotificationReceived() OVERRIDE; 101 virtual void OnPushNotificationEnabled(bool enabled) OVERRIDE; 102 103 private: 104 void DoRegisterApp(const std::string& app_id, 105 const SyncStatusCallback& callback); 106 void DoDisableApp(const std::string& app_id, 107 const SyncStatusCallback& callback); 108 void DoEnableApp(const std::string& app_id, 109 const SyncStatusCallback& callback); 110 void DoUninstallApp(const std::string& app_id, 111 UninstallFlag flag, 112 const SyncStatusCallback& callback); 113 114 void DidInitialize(SyncEngineInitializer* initializer, 115 SyncStatusCode status); 116 void DidProcessRemoteChange(RemoteToLocalSyncer* syncer, 117 const SyncFileCallback& callback, 118 SyncStatusCode status); 119 void DidApplyLocalChange(LocalToRemoteSyncer* syncer, 120 const SyncStatusCallback& callback, 121 SyncStatusCode status); 122 123 base::FilePath base_dir_; 124 base::FilePath temporary_file_dir_; 125 126 scoped_refptr<base::SequencedTaskRunner> task_runner_; 127 128 scoped_ptr<drive::DriveAPIService> drive_api_; 129 scoped_ptr<MetadataDatabase> metadata_database_; 130 131 // These external services are not owned by SyncEngine. 132 // The owner of the SyncEngine is responsible for their lifetime. 133 // I.e. the owner should declare the dependency explicitly by calling 134 // BrowserContextKeyedService::DependsOn(). 135 drive::DriveNotificationManager* notification_manager_; 136 ExtensionService* extension_service_; 137 138 ObserverList<SyncServiceObserver> service_observers_; 139 ObserverList<FileStatusObserver> file_status_observers_; 140 RemoteChangeProcessor* remote_change_processor_; 141 142 base::WeakPtrFactory<SyncEngine> weak_ptr_factory_; 143 SyncTaskManager task_manager_; 144 145 DISALLOW_COPY_AND_ASSIGN(SyncEngine); 146}; 147 148} // namespace drive_backend 149} // namespace sync_file_system 150 151#endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_ENGINE_H_ 152