sync_engine.h revision e5d81f57cb97b3b6b7fccc9c5610d21eb81db09d
18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// Copyright 2013 The Chromium Authors. All rights reserved.
28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// Use of this source code is governed by a BSD-style license that can be
38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// found in the LICENSE file.
48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_ENGINE_H_
6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_ENGINE_H_
78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include <set>
98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include <string>
10df5a7e4c5c64890c2425bb47d665bbce4992b676Dmitry Shmidt
118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "base/memory/scoped_ptr.h"
128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "base/memory/weak_ptr.h"
138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "base/observer_list.h"
148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "chrome/browser/drive/drive_notification_observer.h"
158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "chrome/browser/drive/drive_service_interface.h"
168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "chrome/browser/sync_file_system/drive_backend/sync_engine_context.h"
1750b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt#include "chrome/browser/sync_file_system/drive_backend/sync_task_manager.h"
1850b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt#include "chrome/browser/sync_file_system/local_change_processor.h"
1950b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt#include "chrome/browser/sync_file_system/remote_file_sync_service.h"
2050b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt#include "net/base/network_change_notifier.h"
2150b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt
2250b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidtclass ExtensionServiceInterface;
2350b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidtclass SigninManagerBase;
2450b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt
25c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidtnamespace base {
26c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidtclass SequencedTaskRunner;
27c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt}
28c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt
2950b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidtnamespace drive {
3050b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidtclass DriveServiceInterface;
3150b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidtclass DriveNotificationManager;
328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtnamespace leveldb {
358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtclass Env;
368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtnamespace sync_file_system {
398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtnamespace drive_backend {
408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtclass LocalToRemoteSyncer;
428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtclass MetadataDatabase;
438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtclass RemoteToLocalSyncer;
448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtclass SyncEngineInitializer;
45fa3fc4a1ac08ad14272301c7f6f01b362997c3e4Dmitry Shmidt
468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtclass SyncEngine : public RemoteFileSyncService,
478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt                   public LocalChangeProcessor,
488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt                   public drive::DriveNotificationObserver,
498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt                   public drive::DriveServiceObserver,
508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt                   public net::NetworkChangeNotifier::NetworkChangeObserver {
518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt public:
528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  typedef Observer SyncServiceObserver;
538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  class TaskManagerClient : public SyncTaskManager::Client,
558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt                            public base::SupportsWeakPtr<TaskManagerClient> {
568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt   public:
578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt    TaskManagerClient(const base::WeakPtr<SyncEngine>& sync_engine,
588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt                      base::SequencedTaskRunner* task_runner);
598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt    virtual ~TaskManagerClient();
608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt    // SyncTaskManager::Client overrides
628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt    virtual void MaybeScheduleNextTask() OVERRIDE;
638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt    virtual void NotifyLastOperationStatus(
6450b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt        SyncStatusCode sync_status, bool used_network) OVERRIDE;
6550b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt
6650b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt   private:
678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt    base::WeakPtr<SyncEngine> sync_engine_;
6850b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt    scoped_refptr<base::SequencedTaskRunner> task_runner_;
698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt    DISALLOW_COPY_AND_ASSIGN(TaskManagerClient);
718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  };
728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  static scoped_ptr<SyncEngine> CreateForBrowserContext(
74c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt      content::BrowserContext* context);
75c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt  static void AppendDependsOnFactories(
76c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt      std::set<BrowserContextKeyedServiceFactory*>* factories);
77c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt
78c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt  virtual ~SyncEngine();
79c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt
80c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt  void Initialize();
8150b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt
8250b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt  // RemoteFileSyncService overrides.
8350b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt  virtual void AddServiceObserver(SyncServiceObserver* observer) OVERRIDE;
8450b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt  virtual void AddFileStatusObserver(FileStatusObserver* observer) OVERRIDE;
8550b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt  virtual void RegisterOrigin(
8650b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt      const GURL& origin,
8750b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt      const SyncStatusCallback& callback) OVERRIDE;
888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void EnableOrigin(
898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      const GURL& origin,
908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      const SyncStatusCallback& callback) OVERRIDE;
918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void DisableOrigin(
928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      const GURL& origin,
938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      const SyncStatusCallback& callback) OVERRIDE;
948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void UninstallOrigin(
958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      const GURL& origin,
968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      UninstallFlag flag,
978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      const SyncStatusCallback& callback) OVERRIDE;
988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void ProcessRemoteChange(const SyncFileCallback& callback) OVERRIDE;
998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void SetRemoteChangeProcessor(
1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      RemoteChangeProcessor* processor) OVERRIDE;
1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual LocalChangeProcessor* GetLocalChangeProcessor() OVERRIDE;
1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual bool IsConflicting(const fileapi::FileSystemURL& url) OVERRIDE;
1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual RemoteServiceState GetCurrentState() const OVERRIDE;
1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void GetOriginStatusMap(OriginStatusMap* status_map) OVERRIDE;
1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual scoped_ptr<base::ListValue> DumpFiles(const GURL& origin) OVERRIDE;
1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual scoped_ptr<base::ListValue> DumpDatabase() OVERRIDE;
1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void SetSyncEnabled(bool enabled) OVERRIDE;
1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual SyncStatusCode SetDefaultConflictResolutionPolicy(
1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      ConflictResolutionPolicy policy) OVERRIDE;
1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual SyncStatusCode SetConflictResolutionPolicy(
1118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      const GURL& origin,
1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      ConflictResolutionPolicy policy) OVERRIDE;
1138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual ConflictResolutionPolicy GetDefaultConflictResolutionPolicy()
1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      const OVERRIDE;
1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual ConflictResolutionPolicy GetConflictResolutionPolicy(
1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      const GURL& origin) const OVERRIDE;
1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void GetRemoteVersions(
1188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      const fileapi::FileSystemURL& url,
1198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      const RemoteVersionsCallback& callback) OVERRIDE;
1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void DownloadRemoteVersion(
1218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      const fileapi::FileSystemURL& url,
1228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      const std::string& version_id,
1238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      const DownloadVersionCallback& callback) OVERRIDE;
1248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void PromoteDemotedChanges() OVERRIDE;
1258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  // LocalChangeProcessor overrides.
1278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void ApplyLocalChange(
1288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      const FileChange& local_change,
1298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      const base::FilePath& local_path,
1308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      const SyncFileMetadata& local_metadata,
1318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      const fileapi::FileSystemURL& url,
1328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      const SyncStatusCallback& callback) OVERRIDE;
1338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  // drive::DriveNotificationObserver overrides.
1358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void OnNotificationReceived() OVERRIDE;
1368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void OnPushNotificationEnabled(bool enabled) OVERRIDE;
1378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  // drive::DriveServiceObserver overrides.
1398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void OnReadyToSendRequests() OVERRIDE;
1408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void OnRefreshTokenInvalid() OVERRIDE;
1418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  // net::NetworkChangeNotifier::NetworkChangeObserver overrides.
1438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void OnNetworkChanged(
1448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      net::NetworkChangeNotifier::ConnectionType type) OVERRIDE;
1458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  drive::DriveServiceInterface* GetDriveService();
1478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  drive::DriveUploaderInterface* GetDriveUploader();
1488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  MetadataDatabase* GetMetadataDatabase();
1498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt private:
1518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  friend class DriveBackendSyncTest;
15250b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt  friend class SyncEngineTest;
15350b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt
15450b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt  SyncEngine(const base::FilePath& base_dir,
15550b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt             base::SequencedTaskRunner* task_runner,
15650b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt             scoped_ptr<drive::DriveServiceInterface> drive_service,
15750b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt             scoped_ptr<drive::DriveUploaderInterface> drive_uploader,
15850b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt             drive::DriveNotificationManager* notification_manager,
15950b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt             ExtensionServiceInterface* extension_service,
16050b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt             SigninManagerBase* signin_manager,
16150b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt             leveldb::Env* env_override);
16250b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt
1638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  void DoDisableApp(const std::string& app_id,
1648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt                    const SyncStatusCallback& callback);
1658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  void DoEnableApp(const std::string& app_id,
1668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt                   const SyncStatusCallback& callback);
1678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  void PostInitializeTask();
1698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  void DidInitialize(SyncEngineInitializer* initializer,
1708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt                     SyncStatusCode status);
1718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  void DidProcessRemoteChange(RemoteToLocalSyncer* syncer,
1728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt                              const SyncFileCallback& callback,
1738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt                              SyncStatusCode status);
17450b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt  void DidApplyLocalChange(LocalToRemoteSyncer* syncer,
17550b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt                           const SyncStatusCallback& callback,
17650b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt                           SyncStatusCode status);
17750b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt
17850b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt  void MaybeStartFetchChanges();
1798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  void DidResolveConflict(SyncStatusCode status);
180c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt  void DidFetchChanges(SyncStatusCode status);
181c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt
182c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt  void UpdateServiceStateFromSyncStatusCode(SyncStatusCode state,
183c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt                                            bool used_network);
184c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt  void UpdateServiceState(RemoteServiceState state,
185c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt                          const std::string& description);
1868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  void UpdateRegisteredApps();
1878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  void MaybeScheduleNextTask();
1898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  void NotifyLastOperationStatus(SyncStatusCode sync_status, bool used_network);
190c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt
191c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt  base::FilePath base_dir_;
192c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt  base::FilePath temporary_file_dir_;
19361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt
19461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt  leveldb::Env* env_override_;
195c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt
196c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt  // These external services are not owned by SyncEngine.
197c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt  // The owner of the SyncEngine is responsible for their lifetime.
198c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt  // I.e. the owner should declare the dependency explicitly by calling
199c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt  // KeyedService::DependsOn().
200c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt  drive::DriveNotificationManager* notification_manager_;
201c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt  ExtensionServiceInterface* extension_service_;
202c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt  SigninManagerBase* signin_manager_;
203c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt
204c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt  ObserverList<SyncServiceObserver> service_observers_;
20561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt  ObserverList<FileStatusObserver> file_status_observers_;
20661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt
207c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt  RemoteServiceState service_state_;
208c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt
209c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt  bool should_check_conflict_;
210c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt  bool should_check_remote_change_;
211c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt  bool listing_remote_changes_;
212c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt  base::TimeTicks time_to_check_changes_;
213c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt
21450b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt  bool sync_enabled_;
21550b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt  ConflictResolutionPolicy default_conflict_resolution_policy_;
21650b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt  bool network_available_;
21750b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt
21850b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt  scoped_ptr<SyncTaskManager> task_manager_;
21950b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt
22050b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt  scoped_ptr<SyncEngineContext> context_;
22150b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt  scoped_ptr<TaskManagerClient> task_manager_client_;
22250b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt
22350b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt  base::WeakPtrFactory<SyncEngine> weak_ptr_factory_;
22450b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt  DISALLOW_COPY_AND_ASSIGN(SyncEngine);
22550b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt};
22650b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt
22750b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt}  // namespace drive_backend
22850b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt}  // namespace sync_file_system
22950b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt
23050b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt#endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_ENGINE_H_
23150b691dc36a8075e8f594e8bea93cb524fa6b1d2Dmitry Shmidt