sync_engine.h revision 0529e5d033099cbfc42635f6f6183833b09dff6e
14b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Copyright 2013 The Chromium Authors. All rights reserved. 24b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Use of this source code is governed by a BSD-style license that can be 34b6829f0d28990dd645e16386eb226d0f10c8731shiqian// found in the LICENSE file. 44b6829f0d28990dd645e16386eb226d0f10c8731shiqian 54b6829f0d28990dd645e16386eb226d0f10c8731shiqian#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_ENGINE_H_ 64b6829f0d28990dd645e16386eb226d0f10c8731shiqian#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_ENGINE_H_ 74b6829f0d28990dd645e16386eb226d0f10c8731shiqian 84b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include <set> 94b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include <string> 104b6829f0d28990dd645e16386eb226d0f10c8731shiqian 114b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include "base/memory/scoped_ptr.h" 124b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include "base/memory/weak_ptr.h" 134b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include "base/observer_list.h" 144b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include "chrome/browser/drive/drive_notification_observer.h" 154b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include "chrome/browser/drive/drive_service_interface.h" 164b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include "chrome/browser/sync_file_system/local_change_processor.h" 174b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include "chrome/browser/sync_file_system/remote_file_sync_service.h" 184b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include "chrome/browser/sync_file_system/sync_action.h" 194b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include "chrome/browser/sync_file_system/sync_direction.h" 204b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include "net/base/network_change_notifier.h" 214b6829f0d28990dd645e16386eb226d0f10c8731shiqian 224b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass ExtensionServiceInterface; 234b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass SigninManagerBase; 244b6829f0d28990dd645e16386eb226d0f10c8731shiqian 254b6829f0d28990dd645e16386eb226d0f10c8731shiqiannamespace base { 264b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass SequencedTaskRunner; 274b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 284b6829f0d28990dd645e16386eb226d0f10c8731shiqian 294b6829f0d28990dd645e16386eb226d0f10c8731shiqiannamespace drive { 304b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass DriveServiceInterface; 314b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass DriveNotificationManager; 324b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass DriveUploaderInterface; 334b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 344b6829f0d28990dd645e16386eb226d0f10c8731shiqian 354b6829f0d28990dd645e16386eb226d0f10c8731shiqiannamespace leveldb { 364b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass Env; 374b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 384b6829f0d28990dd645e16386eb226d0f10c8731shiqian 394b6829f0d28990dd645e16386eb226d0f10c8731shiqiannamespace sync_file_system { 404b6829f0d28990dd645e16386eb226d0f10c8731shiqian 414b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass RemoteChangeProcessor; 424b6829f0d28990dd645e16386eb226d0f10c8731shiqian 434b6829f0d28990dd645e16386eb226d0f10c8731shiqiannamespace drive_backend { 444b6829f0d28990dd645e16386eb226d0f10c8731shiqian 454b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass LocalToRemoteSyncer; 464b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass MetadataDatabase; 474b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass RemoteToLocalSyncer; 484b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass SyncEngineInitializer; 494b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass SyncTaskManager; 504b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass SyncWorker; 514b6829f0d28990dd645e16386eb226d0f10c8731shiqian 524b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass SyncEngine : public RemoteFileSyncService, 534b6829f0d28990dd645e16386eb226d0f10c8731shiqian public LocalChangeProcessor, 544b6829f0d28990dd645e16386eb226d0f10c8731shiqian public drive::DriveNotificationObserver, 554b6829f0d28990dd645e16386eb226d0f10c8731shiqian public drive::DriveServiceObserver, 564b6829f0d28990dd645e16386eb226d0f10c8731shiqian public net::NetworkChangeNotifier::NetworkChangeObserver { 574b6829f0d28990dd645e16386eb226d0f10c8731shiqian public: 584b6829f0d28990dd645e16386eb226d0f10c8731shiqian typedef Observer SyncServiceObserver; 594b6829f0d28990dd645e16386eb226d0f10c8731shiqian 604b6829f0d28990dd645e16386eb226d0f10c8731shiqian static scoped_ptr<SyncEngine> CreateForBrowserContext( 614b6829f0d28990dd645e16386eb226d0f10c8731shiqian content::BrowserContext* context); 624b6829f0d28990dd645e16386eb226d0f10c8731shiqian static void AppendDependsOnFactories( 634b6829f0d28990dd645e16386eb226d0f10c8731shiqian std::set<BrowserContextKeyedServiceFactory*>* factories); 64e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 654b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual ~SyncEngine(); 664b6829f0d28990dd645e16386eb226d0f10c8731shiqian 674b6829f0d28990dd645e16386eb226d0f10c8731shiqian void Initialize(const base::FilePath& base_dir, 684b6829f0d28990dd645e16386eb226d0f10c8731shiqian base::SequencedTaskRunner* file_task_runner, 69f904a612d9444ab36c07a8e619c113432e046f49vladlosev leveldb::Env* env_override); 704b6829f0d28990dd645e16386eb226d0f10c8731shiqian 71e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian // RemoteFileSyncService overrides. 72e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian virtual void AddServiceObserver(SyncServiceObserver* observer) OVERRIDE; 734b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void AddFileStatusObserver(FileStatusObserver* observer) OVERRIDE; 744b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void RegisterOrigin( 754b6829f0d28990dd645e16386eb226d0f10c8731shiqian const GURL& origin, 764b6829f0d28990dd645e16386eb226d0f10c8731shiqian const SyncStatusCallback& callback) OVERRIDE; 774b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void EnableOrigin( 784b6829f0d28990dd645e16386eb226d0f10c8731shiqian const GURL& origin, 794b6829f0d28990dd645e16386eb226d0f10c8731shiqian const SyncStatusCallback& callback) OVERRIDE; 804b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void DisableOrigin( 814b6829f0d28990dd645e16386eb226d0f10c8731shiqian const GURL& origin, 824b6829f0d28990dd645e16386eb226d0f10c8731shiqian const SyncStatusCallback& callback) OVERRIDE; 834b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void UninstallOrigin( 844b6829f0d28990dd645e16386eb226d0f10c8731shiqian const GURL& origin, 854b6829f0d28990dd645e16386eb226d0f10c8731shiqian UninstallFlag flag, 864b6829f0d28990dd645e16386eb226d0f10c8731shiqian const SyncStatusCallback& callback) OVERRIDE; 874b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void ProcessRemoteChange(const SyncFileCallback& callback) OVERRIDE; 884b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void SetRemoteChangeProcessor( 894b6829f0d28990dd645e16386eb226d0f10c8731shiqian RemoteChangeProcessor* processor) OVERRIDE; 904b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual LocalChangeProcessor* GetLocalChangeProcessor() OVERRIDE; 914b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual bool IsConflicting(const fileapi::FileSystemURL& url) OVERRIDE; 924b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual RemoteServiceState GetCurrentState() const OVERRIDE; 934b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void GetOriginStatusMap(OriginStatusMap* status_map) OVERRIDE; 944b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual scoped_ptr<base::ListValue> DumpFiles(const GURL& origin) OVERRIDE; 954b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual scoped_ptr<base::ListValue> DumpDatabase() OVERRIDE; 964b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void SetSyncEnabled(bool enabled) OVERRIDE; 974b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual SyncStatusCode SetDefaultConflictResolutionPolicy( 984b6829f0d28990dd645e16386eb226d0f10c8731shiqian ConflictResolutionPolicy policy) OVERRIDE; 994b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual SyncStatusCode SetConflictResolutionPolicy( 1004b6829f0d28990dd645e16386eb226d0f10c8731shiqian const GURL& origin, 101e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian ConflictResolutionPolicy policy) OVERRIDE; 1024b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual ConflictResolutionPolicy GetDefaultConflictResolutionPolicy() 1034b6829f0d28990dd645e16386eb226d0f10c8731shiqian const OVERRIDE; 1044b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual ConflictResolutionPolicy GetConflictResolutionPolicy( 105e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian const GURL& origin) const OVERRIDE; 1064b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void GetRemoteVersions( 1074b6829f0d28990dd645e16386eb226d0f10c8731shiqian const fileapi::FileSystemURL& url, 1084b6829f0d28990dd645e16386eb226d0f10c8731shiqian const RemoteVersionsCallback& callback) OVERRIDE; 1094b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void DownloadRemoteVersion( 1104b6829f0d28990dd645e16386eb226d0f10c8731shiqian const fileapi::FileSystemURL& url, 1114b6829f0d28990dd645e16386eb226d0f10c8731shiqian const std::string& version_id, 1124b6829f0d28990dd645e16386eb226d0f10c8731shiqian const DownloadVersionCallback& callback) OVERRIDE; 1134b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void PromoteDemotedChanges() OVERRIDE; 1144b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1154b6829f0d28990dd645e16386eb226d0f10c8731shiqian // LocalChangeProcessor overrides. 1164b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void ApplyLocalChange( 1174b6829f0d28990dd645e16386eb226d0f10c8731shiqian const FileChange& local_change, 1184b6829f0d28990dd645e16386eb226d0f10c8731shiqian const base::FilePath& local_path, 1194b6829f0d28990dd645e16386eb226d0f10c8731shiqian const SyncFileMetadata& local_metadata, 1204b6829f0d28990dd645e16386eb226d0f10c8731shiqian const fileapi::FileSystemURL& url, 1214b6829f0d28990dd645e16386eb226d0f10c8731shiqian const SyncStatusCallback& callback) OVERRIDE; 1224b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1234b6829f0d28990dd645e16386eb226d0f10c8731shiqian // drive::DriveNotificationObserver overrides. 1244b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void OnNotificationReceived() OVERRIDE; 1254b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void OnPushNotificationEnabled(bool enabled) OVERRIDE; 1264b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1274b6829f0d28990dd645e16386eb226d0f10c8731shiqian // drive::DriveServiceObserver overrides. 1284b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void OnReadyToSendRequests() OVERRIDE; 1294b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void OnRefreshTokenInvalid() OVERRIDE; 1304b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1314b6829f0d28990dd645e16386eb226d0f10c8731shiqian // net::NetworkChangeNotifier::NetworkChangeObserver overrides. 1324b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void OnNetworkChanged( 1334b6829f0d28990dd645e16386eb226d0f10c8731shiqian net::NetworkChangeNotifier::ConnectionType type) OVERRIDE; 1344b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1354b6829f0d28990dd645e16386eb226d0f10c8731shiqian drive::DriveServiceInterface* GetDriveService(); 1364b6829f0d28990dd645e16386eb226d0f10c8731shiqian drive::DriveUploaderInterface* GetDriveUploader(); 1374b6829f0d28990dd645e16386eb226d0f10c8731shiqian MetadataDatabase* GetMetadataDatabase(); 1384b6829f0d28990dd645e16386eb226d0f10c8731shiqian SyncTaskManager* GetSyncTaskManagerForTesting(); 1394b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1404b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Notifies update of sync status to each observer. 1414b6829f0d28990dd645e16386eb226d0f10c8731shiqian void UpdateSyncEnabled(bool enabled); 1424b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1434b6829f0d28990dd645e16386eb226d0f10c8731shiqian void OnPendingFileListUpdated(int item_count); 1444b6829f0d28990dd645e16386eb226d0f10c8731shiqian void OnFileStatusChanged(const fileapi::FileSystemURL& url, 1454b6829f0d28990dd645e16386eb226d0f10c8731shiqian SyncFileStatus file_status, 1464b6829f0d28990dd645e16386eb226d0f10c8731shiqian SyncAction sync_action, 1474b6829f0d28990dd645e16386eb226d0f10c8731shiqian SyncDirection direction); 1484b6829f0d28990dd645e16386eb226d0f10c8731shiqian void UpdateServiceState(RemoteServiceState state, 1494b6829f0d28990dd645e16386eb226d0f10c8731shiqian const std::string& description); 1504b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1514b6829f0d28990dd645e16386eb226d0f10c8731shiqian private: 1524b6829f0d28990dd645e16386eb226d0f10c8731shiqian class WorkerObserver; 1534b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1544b6829f0d28990dd645e16386eb226d0f10c8731shiqian friend class DriveBackendSyncTest; 1554b6829f0d28990dd645e16386eb226d0f10c8731shiqian friend class SyncEngineTest; 1564b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1574b6829f0d28990dd645e16386eb226d0f10c8731shiqian SyncEngine(scoped_ptr<drive::DriveServiceInterface> drive_service, 1584b6829f0d28990dd645e16386eb226d0f10c8731shiqian scoped_ptr<drive::DriveUploaderInterface> drive_uploader, 1594b6829f0d28990dd645e16386eb226d0f10c8731shiqian base::SequencedTaskRunner* worker_task_runner, 1604b6829f0d28990dd645e16386eb226d0f10c8731shiqian drive::DriveNotificationManager* notification_manager, 1614b6829f0d28990dd645e16386eb226d0f10c8731shiqian ExtensionServiceInterface* extension_service, 1624b6829f0d28990dd645e16386eb226d0f10c8731shiqian SigninManagerBase* signin_manager); 1634b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1644b6829f0d28990dd645e16386eb226d0f10c8731shiqian void UpdateRegisteredApps(); 1654b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1664b6829f0d28990dd645e16386eb226d0f10c8731shiqian scoped_ptr<drive::DriveServiceInterface> drive_service_; 1674b6829f0d28990dd645e16386eb226d0f10c8731shiqian scoped_ptr<drive::DriveUploaderInterface> drive_uploader_; 1684b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1694b6829f0d28990dd645e16386eb226d0f10c8731shiqian // These external services are not owned by SyncEngine. 1704b6829f0d28990dd645e16386eb226d0f10c8731shiqian // The owner of the SyncEngine is responsible for their lifetime. 1714b6829f0d28990dd645e16386eb226d0f10c8731shiqian // I.e. the owner should declare the dependency explicitly by calling 1724b6829f0d28990dd645e16386eb226d0f10c8731shiqian // KeyedService::DependsOn(). 1734b6829f0d28990dd645e16386eb226d0f10c8731shiqian drive::DriveNotificationManager* notification_manager_; 1744b6829f0d28990dd645e16386eb226d0f10c8731shiqian ExtensionServiceInterface* extension_service_; 1754b6829f0d28990dd645e16386eb226d0f10c8731shiqian SigninManagerBase* signin_manager_; 1764b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1774b6829f0d28990dd645e16386eb226d0f10c8731shiqian ObserverList<SyncServiceObserver> service_observers_; 1784b6829f0d28990dd645e16386eb226d0f10c8731shiqian ObserverList<FileStatusObserver> file_status_observers_; 1794b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1804b6829f0d28990dd645e16386eb226d0f10c8731shiqian scoped_ptr<WorkerObserver> worker_observer_; 1814b6829f0d28990dd645e16386eb226d0f10c8731shiqian scoped_ptr<SyncWorker> sync_worker_; 1824b6829f0d28990dd645e16386eb226d0f10c8731shiqian scoped_refptr<base::SequencedTaskRunner> worker_task_runner_; 1834b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1844b6829f0d28990dd645e16386eb226d0f10c8731shiqian base::WeakPtrFactory<SyncEngine> weak_ptr_factory_; 1854b6829f0d28990dd645e16386eb226d0f10c8731shiqian DISALLOW_COPY_AND_ASSIGN(SyncEngine); 1864b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 1874b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1884b6829f0d28990dd645e16386eb226d0f10c8731shiqian} // namespace drive_backend 1894b6829f0d28990dd645e16386eb226d0f10c8731shiqian} // namespace sync_file_system 1904b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1914b6829f0d28990dd645e16386eb226d0f10c8731shiqian#endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_ENGINE_H_ 1924b6829f0d28990dd645e16386eb226d0f10c8731shiqian