Pin Chrome's shortcut to the Win10 Start menu on install and OS upgrade.
[chromium-blink-merge.git] / chrome / browser / sync_file_system / drive_backend / sync_engine.h
blob720993ea342809d9b73705c45c838d24c51d6d0d
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.
5 #ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_ENGINE_H_
6 #define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_ENGINE_H_
8 #include <set>
9 #include <string>
11 #include "base/memory/scoped_ptr.h"
12 #include "base/memory/weak_ptr.h"
13 #include "base/observer_list.h"
14 #include "chrome/browser/sync_file_system/drive_backend/callback_tracker.h"
15 #include "chrome/browser/sync_file_system/local_change_processor.h"
16 #include "chrome/browser/sync_file_system/remote_file_sync_service.h"
17 #include "chrome/browser/sync_file_system/sync_action.h"
18 #include "chrome/browser/sync_file_system/sync_direction.h"
19 #include "components/drive/drive_notification_observer.h"
20 #include "components/drive/service/drive_service_interface.h"
21 #include "components/signin/core/browser/signin_manager_base.h"
22 #include "net/base/network_change_notifier.h"
24 class ExtensionServiceInterface;
25 class OAuth2TokenService;
27 namespace base {
28 class SequencedTaskRunner;
31 namespace drive {
32 class DriveServiceInterface;
33 class DriveNotificationManager;
34 class DriveUploaderInterface;
37 namespace leveldb {
38 class Env;
41 namespace net {
42 class URLRequestContextGetter;
45 namespace sync_file_system {
47 class RemoteChangeProcessor;
48 class SyncFileSystemTest;
50 namespace drive_backend {
52 class DriveServiceWrapper;
53 class DriveUploaderWrapper;
54 class MetadataDatabase;
55 class RemoteChangeProcessorOnWorker;
56 class RemoteChangeProcessorWrapper;
57 class SyncTaskManager;
58 class SyncWorkerInterface;
60 class SyncEngine : public RemoteFileSyncService,
61 public LocalChangeProcessor,
62 public drive::DriveNotificationObserver,
63 public drive::DriveServiceObserver,
64 public net::NetworkChangeNotifier::NetworkChangeObserver,
65 public SigninManagerBase::Observer {
66 public:
67 typedef RemoteFileSyncService::Observer SyncServiceObserver;
69 class DriveServiceFactory {
70 public:
71 DriveServiceFactory() {}
72 virtual ~DriveServiceFactory() {}
73 virtual scoped_ptr<drive::DriveServiceInterface> CreateDriveService(
74 OAuth2TokenService* oauth2_token_service,
75 net::URLRequestContextGetter* url_request_context_getter,
76 base::SequencedTaskRunner* blocking_task_runner);
78 private:
79 DISALLOW_COPY_AND_ASSIGN(DriveServiceFactory);
82 static scoped_ptr<SyncEngine> CreateForBrowserContext(
83 content::BrowserContext* context,
84 TaskLogger* task_logger);
85 static void AppendDependsOnFactories(
86 std::set<BrowserContextKeyedServiceFactory*>* factories);
88 ~SyncEngine() override;
89 void Reset();
91 // Can be called more than once.
92 void Initialize();
94 void InitializeForTesting(
95 scoped_ptr<drive::DriveServiceInterface> drive_service,
96 scoped_ptr<drive::DriveUploaderInterface> drive_uploader,
97 scoped_ptr<SyncWorkerInterface> sync_worker);
98 void InitializeInternal(
99 scoped_ptr<drive::DriveServiceInterface> drive_service,
100 scoped_ptr<drive::DriveUploaderInterface> drive_uploader,
101 scoped_ptr<SyncWorkerInterface> sync_worker);
103 // RemoteFileSyncService overrides.
104 void AddServiceObserver(SyncServiceObserver* observer) override;
105 void AddFileStatusObserver(FileStatusObserver* observer) override;
106 void RegisterOrigin(const GURL& origin,
107 const SyncStatusCallback& callback) override;
108 void EnableOrigin(const GURL& origin,
109 const SyncStatusCallback& callback) override;
110 void DisableOrigin(const GURL& origin,
111 const SyncStatusCallback& callback) override;
112 void UninstallOrigin(const GURL& origin,
113 UninstallFlag flag,
114 const SyncStatusCallback& callback) override;
115 void ProcessRemoteChange(const SyncFileCallback& callback) override;
116 void SetRemoteChangeProcessor(RemoteChangeProcessor* processor) override;
117 LocalChangeProcessor* GetLocalChangeProcessor() override;
118 RemoteServiceState GetCurrentState() const override;
119 void GetOriginStatusMap(const StatusMapCallback& callback) override;
120 void DumpFiles(const GURL& origin, const ListCallback& callback) override;
121 void DumpDatabase(const ListCallback& callback) override;
122 void SetSyncEnabled(bool enabled) override;
123 void PromoteDemotedChanges(const base::Closure& callback) override;
125 // LocalChangeProcessor overrides.
126 void ApplyLocalChange(const FileChange& local_change,
127 const base::FilePath& local_path,
128 const SyncFileMetadata& local_metadata,
129 const storage::FileSystemURL& url,
130 const SyncStatusCallback& callback) override;
132 // drive::DriveNotificationObserver overrides.
133 void OnNotificationReceived() override;
134 void OnPushNotificationEnabled(bool enabled) override;
136 // drive::DriveServiceObserver overrides.
137 void OnReadyToSendRequests() override;
138 void OnRefreshTokenInvalid() override;
140 // net::NetworkChangeNotifier::NetworkChangeObserver overrides.
141 void OnNetworkChanged(
142 net::NetworkChangeNotifier::ConnectionType type) override;
144 // SigninManagerBase::Observer overrides.
145 void GoogleSigninFailed(const GoogleServiceAuthError& error) override;
146 void GoogleSigninSucceeded(const std::string& account_id,
147 const std::string& username,
148 const std::string& password) override;
149 void GoogleSignedOut(const std::string& account_id,
150 const std::string& username) override;
152 private:
153 class WorkerObserver;
155 friend class DriveBackendSyncTest;
156 friend class SyncEngineTest;
157 friend class sync_file_system::SyncFileSystemTest;
159 SyncEngine(const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner,
160 const scoped_refptr<base::SequencedTaskRunner>& worker_task_runner,
161 const scoped_refptr<base::SequencedTaskRunner>& drive_task_runner,
162 const scoped_refptr<base::SequencedWorkerPool>& worker_pool,
163 const base::FilePath& sync_file_system_dir,
164 TaskLogger* task_logger,
165 drive::DriveNotificationManager* notification_manager,
166 ExtensionServiceInterface* extension_service,
167 SigninManagerBase* signin_manager,
168 OAuth2TokenService* token_service,
169 net::URLRequestContextGetter* request_context,
170 scoped_ptr<DriveServiceFactory> drive_service_factory,
171 leveldb::Env* env_override);
173 // Called by WorkerObserver.
174 void OnPendingFileListUpdated(int item_count);
175 void OnFileStatusChanged(const storage::FileSystemURL& url,
176 SyncFileType file_type,
177 SyncFileStatus file_status,
178 SyncAction sync_action,
179 SyncDirection direction);
180 void UpdateServiceState(RemoteServiceState state,
181 const std::string& description);
183 SyncStatusCallback TrackCallback(const SyncStatusCallback& callback);
185 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
186 scoped_refptr<base::SequencedTaskRunner> worker_task_runner_;
187 scoped_refptr<base::SequencedTaskRunner> drive_task_runner_;
188 scoped_refptr<base::SequencedWorkerPool> worker_pool_;
190 const base::FilePath sync_file_system_dir_;
191 TaskLogger* task_logger_;
193 // These external services are not owned by SyncEngine.
194 // The owner of the SyncEngine is responsible for their lifetime.
195 // I.e. the owner should declare the dependency explicitly by calling
196 // KeyedService::DependsOn().
197 drive::DriveNotificationManager* notification_manager_;
198 ExtensionServiceInterface* extension_service_;
199 SigninManagerBase* signin_manager_;
200 OAuth2TokenService* token_service_;
202 scoped_refptr<net::URLRequestContextGetter> request_context_;
204 scoped_ptr<DriveServiceFactory> drive_service_factory_;
206 scoped_ptr<drive::DriveServiceInterface> drive_service_;
207 scoped_ptr<DriveServiceWrapper> drive_service_wrapper_;
208 scoped_ptr<drive::DriveUploaderInterface> drive_uploader_;
209 scoped_ptr<DriveUploaderWrapper> drive_uploader_wrapper_;
211 RemoteChangeProcessor* remote_change_processor_; // Not owned.
212 scoped_ptr<RemoteChangeProcessorWrapper> remote_change_processor_wrapper_;
213 // Delete this on worker.
214 scoped_ptr<RemoteChangeProcessorOnWorker> remote_change_processor_on_worker_;
216 RemoteServiceState service_state_;
217 bool has_refresh_token_;
218 bool network_available_;
219 bool sync_enabled_;
221 // Delete them on worker.
222 scoped_ptr<WorkerObserver> worker_observer_;
223 scoped_ptr<SyncWorkerInterface> sync_worker_;
225 base::ObserverList<SyncServiceObserver> service_observers_;
226 base::ObserverList<FileStatusObserver> file_status_observers_;
227 leveldb::Env* env_override_;
229 CallbackTracker callback_tracker_;
231 base::WeakPtrFactory<SyncEngine> weak_ptr_factory_;
232 DISALLOW_COPY_AND_ASSIGN(SyncEngine);
235 } // namespace drive_backend
236 } // namespace sync_file_system
238 #endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_ENGINE_H_