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