sync_worker_interface.h revision 5f1c94371a64b3196d4be9466099bb892df9b88e
14dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org// Copyright 2014 The Chromium Authors. All rights reserved.
24dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org// Use of this source code is governed by a BSD-style license that can be
34dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org// found in the LICENSE file.
44dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org
54dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_WORKER_INTERFACE_H_
64dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_WORKER_INTERFACE_H_
74dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org
84dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org#include <string>
94dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org
104dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org#include "base/memory/scoped_ptr.h"
114dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org#include "chrome/browser/sync_file_system/remote_file_sync_service.h"
124dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org#include "chrome/browser/sync_file_system/sync_action.h"
134dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org#include "chrome/browser/sync_file_system/sync_callbacks.h"
144dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org#include "chrome/browser/sync_file_system/sync_direction.h"
154dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org#include "net/base/network_change_notifier.h"
164dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org
174dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.orgclass GURL;
184dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org
194dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.orgnamespace base {
204dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.orgclass FilePath;
214dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.orgclass ListValue;
224dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org}
23a8b71a9a8ec2adbc5e4f8ecbd2b09ebd50d3eb2bjshin@chromium.org
244dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.orgnamespace drive {
254dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.orgclass DriveServiceInterface;
264dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.orgclass DriveUploaderInterface;
274dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org}
284dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org
294dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.orgnamespace fileapi {
304dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.orgclass FileSystemURL;
314dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org}
324dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org
334dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.orgnamespace sync_file_system {
344dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org
354dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.orgclass FileChange;
364dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.orgclass SyncFileMetadata;
374dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org
384dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.orgnamespace drive_backend {
394dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org
404dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.orgclass MetadataDatabase;
414dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.orgclass RemoteChangeProcessorOnWorker;
424dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.orgclass SyncEngineContext;
434dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.orgclass SyncTaskManager;
444dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org
454dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.orgclass SyncWorkerInterface {
464dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org public:
474dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org  class Observer {
484dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org   public:
494dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org    virtual void OnPendingFileListUpdated(int item_count) = 0;
504dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org    virtual void OnFileStatusChanged(const fileapi::FileSystemURL& url,
514dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org                                     SyncFileStatus file_status,
524dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org                                     SyncAction sync_action,
534dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org                                     SyncDirection direction) = 0;
544dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org    virtual void UpdateServiceState(RemoteServiceState state,
554dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org                                    const std::string& description) = 0;
564dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org
574dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org   protected:
584dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org    virtual ~Observer() {}
594dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org  };
604dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org
614dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org  SyncWorkerInterface() {}
624dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org  virtual ~SyncWorkerInterface() {}
634dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org
644dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org  // Initializes SyncWorkerInterface after constructions of some member classes.
654dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org  virtual void Initialize(
664dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org      scoped_ptr<SyncEngineContext> sync_engine_context) = 0;
674dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org
684dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org  // See RemoteFileSyncService for the details.
694dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org  virtual void RegisterOrigin(const GURL& origin,
704dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org                              const SyncStatusCallback& callback) = 0;
714dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org  virtual void EnableOrigin(const GURL& origin,
724dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org                            const SyncStatusCallback& callback) = 0;
734dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org  virtual void DisableOrigin(const GURL& origin,
744dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org                             const SyncStatusCallback& callback) = 0;
754dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org  virtual void UninstallOrigin(
764dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org      const GURL& origin,
774dfa619cf375ebb67b7b9311487d19a4129f742fjshin@chromium.org      RemoteFileSyncService::UninstallFlag flag,
78      const SyncStatusCallback& callback) = 0;
79  virtual void ProcessRemoteChange(const SyncFileCallback& callback) = 0;
80  virtual void SetRemoteChangeProcessor(
81      RemoteChangeProcessorOnWorker* remote_change_processor_on_worker) = 0;
82  virtual RemoteServiceState GetCurrentState() const = 0;
83  virtual void GetOriginStatusMap(
84      const RemoteFileSyncService::StatusMapCallback& callback) = 0;
85  virtual scoped_ptr<base::ListValue> DumpFiles(const GURL& origin) = 0;
86  virtual scoped_ptr<base::ListValue> DumpDatabase() = 0;
87  virtual void SetSyncEnabled(bool enabled) = 0;
88  virtual void PromoteDemotedChanges(const base::Closure& callback) = 0;
89
90  // See LocalChangeProcessor for the details.
91  virtual void ApplyLocalChange(
92      const FileChange& local_change,
93      const base::FilePath& local_path,
94      const SyncFileMetadata& local_metadata,
95      const fileapi::FileSystemURL& url,
96      const SyncStatusCallback& callback) = 0;
97
98  virtual void ActivateService(RemoteServiceState service_state,
99                               const std::string& description) = 0;
100  virtual void DeactivateService(const std::string& description) = 0;
101
102  virtual void DetachFromSequence() = 0;
103
104  virtual void AddObserver(Observer* observer) = 0;
105
106 private:
107  friend class SyncEngineTest;
108
109  DISALLOW_COPY_AND_ASSIGN(SyncWorkerInterface);
110};
111
112}  // namespace drive_backend
113}  // namespace sync_file_system
114
115#endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_WORKER_INTERFACE_H_
116