sync_worker.h revision a02191e04bc25c4935f804f2c080ae28663d096d
1// Copyright 2014 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_WORKER_H_ 6#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_WORKER_H_ 7 8#include <set> 9#include <string> 10 11#include "base/memory/scoped_ptr.h" 12#include "base/memory/weak_ptr.h" 13#include "base/observer_list.h" 14#include "chrome/browser/drive/drive_notification_observer.h" 15#include "chrome/browser/drive/drive_service_interface.h" 16#include "chrome/browser/sync_file_system/drive_backend/sync_task_manager.h" 17#include "chrome/browser/sync_file_system/local_change_processor.h" 18#include "chrome/browser/sync_file_system/remote_file_sync_service.h" 19#include "net/base/network_change_notifier.h" 20 21namespace base { 22class SequencedTaskRunner; 23} 24 25namespace drive { 26class DriveServiceInterface; 27class DriveNotificationManager; 28class DriveUploaderInterface; 29} 30 31namespace leveldb { 32class Env; 33} 34 35namespace sync_file_system { 36 37class RemoteChangeProcessor; 38 39namespace drive_backend { 40 41class LocalToRemoteSyncer; 42class MetadataDatabase; 43class RemoteToLocalSyncer; 44class SyncEngine; 45class SyncEngineContext; 46class SyncEngineInitializer; 47 48class SyncWorker : public SyncTaskManager::Client { 49 public: 50 static scoped_ptr<SyncWorker> CreateOnWorker( 51 const base::WeakPtr<drive_backend::SyncEngine>& sync_engine, 52 const base::FilePath& base_dir, 53 scoped_ptr<SyncEngineContext> sync_engine_context, 54 leveldb::Env* env_override); 55 56 virtual ~SyncWorker(); 57 58 void Initialize(); 59 60 // SyncTaskManager::Client overrides 61 virtual void MaybeScheduleNextTask() OVERRIDE; 62 virtual void NotifyLastOperationStatus( 63 SyncStatusCode sync_status, bool used_network) OVERRIDE; 64 65 void RegisterOrigin(const GURL& origin, const SyncStatusCallback& callback); 66 void EnableOrigin(const GURL& origin, const SyncStatusCallback& callback); 67 void DisableOrigin(const GURL& origin, const SyncStatusCallback& callback); 68 void UninstallOrigin( 69 const GURL& origin, 70 RemoteFileSyncService::UninstallFlag flag, 71 const SyncStatusCallback& callback); 72 void ProcessRemoteChange(const SyncFileCallback& callback); 73 void SetRemoteChangeProcessor(RemoteChangeProcessor* processor); 74 RemoteServiceState GetCurrentState() const; 75 void GetOriginStatusMap(RemoteFileSyncService::OriginStatusMap* status_map); 76 scoped_ptr<base::ListValue> DumpFiles(const GURL& origin); 77 scoped_ptr<base::ListValue> DumpDatabase(); 78 void SetSyncEnabled(bool enabled); 79 SyncStatusCode SetDefaultConflictResolutionPolicy( 80 ConflictResolutionPolicy policy); 81 SyncStatusCode SetConflictResolutionPolicy( 82 const GURL& origin, 83 ConflictResolutionPolicy policy); 84 ConflictResolutionPolicy GetDefaultConflictResolutionPolicy() 85 const; 86 ConflictResolutionPolicy GetConflictResolutionPolicy( 87 const GURL& origin) const; 88 89 void ApplyLocalChange( 90 const FileChange& local_change, 91 const base::FilePath& local_path, 92 const SyncFileMetadata& local_metadata, 93 const fileapi::FileSystemURL& url, 94 const SyncStatusCallback& callback); 95 96 void OnNotificationReceived(); 97 98 void OnReadyToSendRequests(const std::string& account_id); 99 void OnRefreshTokenInvalid(); 100 101 void OnNetworkChanged(net::NetworkChangeNotifier::ConnectionType type); 102 103 drive::DriveServiceInterface* GetDriveService(); 104 drive::DriveUploaderInterface* GetDriveUploader(); 105 MetadataDatabase* GetMetadataDatabase(); 106 SyncTaskManager* GetSyncTaskManager(); 107 108 private: 109 friend class DriveBackendSyncTest; 110 friend class SyncEngineTest; 111 112 SyncWorker(const base::WeakPtr<drive_backend::SyncEngine>& sync_engine, 113 const base::FilePath& base_dir, 114 scoped_ptr<SyncEngineContext> sync_engine_context, 115 leveldb::Env* env_override); 116 117 void DoDisableApp(const std::string& app_id, 118 const SyncStatusCallback& callback); 119 void DoEnableApp(const std::string& app_id, 120 const SyncStatusCallback& callback); 121 122 void PostInitializeTask(); 123 void DidInitialize(SyncEngineInitializer* initializer, 124 SyncStatusCode status); 125 void DidProcessRemoteChange(RemoteToLocalSyncer* syncer, 126 const SyncFileCallback& callback, 127 SyncStatusCode status); 128 void DidApplyLocalChange(LocalToRemoteSyncer* syncer, 129 const SyncStatusCallback& callback, 130 SyncStatusCode status); 131 132 void MaybeStartFetchChanges(); 133 void DidResolveConflict(SyncStatusCode status); 134 void DidFetchChanges(SyncStatusCode status); 135 136 void UpdateServiceStateFromSyncStatusCode(SyncStatusCode state, 137 bool used_network); 138 void UpdateServiceState(RemoteServiceState state, 139 const std::string& description); 140 void UpdateRegisteredApps(); 141 142 base::FilePath base_dir_; 143 144 leveldb::Env* env_override_; 145 146 // Sync with SyncEngine. 147 RemoteServiceState service_state_; 148 149 bool should_check_conflict_; 150 bool should_check_remote_change_; 151 bool listing_remote_changes_; 152 base::TimeTicks time_to_check_changes_; 153 154 bool sync_enabled_; 155 ConflictResolutionPolicy default_conflict_resolution_policy_; 156 bool network_available_; 157 158 scoped_ptr<SyncTaskManager> task_manager_; 159 160 scoped_ptr<SyncEngineContext> context_; 161 base::WeakPtr<drive_backend::SyncEngine> sync_engine_; 162 163 base::WeakPtrFactory<SyncWorker> weak_ptr_factory_; 164 DISALLOW_COPY_AND_ASSIGN(SyncWorker); 165}; 166 167} // namespace drive_backend 168} // namespace sync_file_system 169 170#endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_WORKER_H_ 171