1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// found in the LICENSE file.
4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_WORKER_INTERFACE_H_
6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_WORKER_INTERFACE_H_
7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include <string>
9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/sync_file_system/remote_file_sync_service.h"
12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/sync_file_system/sync_action.h"
13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/sync_file_system/sync_callbacks.h"
14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/sync_file_system/sync_direction.h"
15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "net/base/network_change_notifier.h"
16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class GURL;
18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace base {
20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class FilePath;
21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class ListValue;
22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace drive {
25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class DriveServiceInterface;
26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class DriveUploaderInterface;
27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace storage {
30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class FileSystemURL;
31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace sync_file_system {
34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class FileChange;
36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class SyncFileMetadata;
37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace drive_backend {
39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class MetadataDatabase;
41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class RemoteChangeProcessorOnWorker;
42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class SyncEngineContext;
43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class SyncTaskManager;
44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class SyncWorkerInterface {
46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public:
47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  class Observer {
48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)   public:
49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual void OnPendingFileListUpdated(int item_count) = 0;
5003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    virtual void OnFileStatusChanged(const storage::FileSystemURL& url,
51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                     SyncFileStatus file_status,
52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                     SyncAction sync_action,
53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                     SyncDirection direction) = 0;
54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual void UpdateServiceState(RemoteServiceState state,
55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                    const std::string& description) = 0;
56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)   protected:
58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual ~Observer() {}
59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  };
60f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SyncWorkerInterface() {}
62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual ~SyncWorkerInterface() {}
63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Initializes SyncWorkerInterface after constructions of some member classes.
65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void Initialize(
66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      scoped_ptr<SyncEngineContext> sync_engine_context) = 0;
67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // See RemoteFileSyncService for the details.
69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void RegisterOrigin(const GURL& origin,
70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                              const SyncStatusCallback& callback) = 0;
71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void EnableOrigin(const GURL& origin,
72f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                            const SyncStatusCallback& callback) = 0;
73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void DisableOrigin(const GURL& origin,
74f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                             const SyncStatusCallback& callback) = 0;
75f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void UninstallOrigin(
76f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      const GURL& origin,
77f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      RemoteFileSyncService::UninstallFlag flag,
78f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      const SyncStatusCallback& callback) = 0;
79f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void ProcessRemoteChange(const SyncFileCallback& callback) = 0;
80f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void SetRemoteChangeProcessor(
81f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      RemoteChangeProcessorOnWorker* remote_change_processor_on_worker) = 0;
82f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual RemoteServiceState GetCurrentState() const = 0;
83f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void GetOriginStatusMap(
84f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      const RemoteFileSyncService::StatusMapCallback& callback) = 0;
85f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual scoped_ptr<base::ListValue> DumpFiles(const GURL& origin) = 0;
86f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual scoped_ptr<base::ListValue> DumpDatabase() = 0;
87f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void SetSyncEnabled(bool enabled) = 0;
885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void PromoteDemotedChanges(const base::Closure& callback) = 0;
89f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
90f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // See LocalChangeProcessor for the details.
9103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void ApplyLocalChange(const FileChange& local_change,
9203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                const base::FilePath& local_path,
9303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                const SyncFileMetadata& local_metadata,
9403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                const storage::FileSystemURL& url,
9503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                const SyncStatusCallback& callback) = 0;
96f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void ActivateService(RemoteServiceState service_state,
985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                               const std::string& description) = 0;
995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void DeactivateService(const std::string& description) = 0;
100f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
101f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void DetachFromSequence() = 0;
102f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
103f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void AddObserver(Observer* observer) = 0;
104f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
105f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private:
106f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  friend class SyncEngineTest;
107f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
108f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(SyncWorkerInterface);
109f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)};
110f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
111f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}  // namespace drive_backend
112f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}  // namespace sync_file_system
113f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
114f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_WORKER_INTERFACE_H_
115