local_to_remote_syncer.h revision f2477e01787aa58f445919b809d89e252beef54f
158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file.
458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_LOCAL_TO_REMOTE_SYNCER_H_
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_LOCAL_TO_REMOTE_SYNCER_H_
758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/scoped_vector.h"
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/weak_ptr.h"
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/google_apis/gdata_errorcode.h"
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/sync_file_system/file_change.h"
1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/sync_file_system/sync_callbacks.h"
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/sync_file_system/sync_file_metadata.h"
1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/sync_file_system/sync_task.h"
1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace drive {
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class DriveServiceInterface;
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class DriveUploaderInterface;
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace google_apis {
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class ResourceEntry;
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class ResourceList;
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace sync_file_system {
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class RemoteChangeProcessor;
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace drive_backend {
3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class FileTracker;
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class MetadataDatabase;
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class SyncEngineContext;
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class LocalToRemoteSyncer : public SyncTask {
3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public:
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  LocalToRemoteSyncer(SyncEngineContext* sync_context,
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      const FileChange& local_change,
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      const base::FilePath& local_path,
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      const SyncFileMetadata& local_metadata,
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      const fileapi::FileSystemURL& url);
4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual ~LocalToRemoteSyncer();
4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void Run(const SyncStatusCallback& callback) OVERRIDE;
4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private:
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void SyncCompleted(const SyncStatusCallback& callback,
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                     SyncStatusCode status);
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void HandleMissingRemoteFile(const SyncStatusCallback& callback);
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void HandleConflict(const SyncStatusCallback& callback);
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void HandleExistingRemoteFile(const SyncStatusCallback& callback);
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void HandleMissingParentCase(const SyncStatusCallback& callback);
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void DeleteRemoteFile(const SyncStatusCallback& callback);
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void DidDeleteRemoteFile(const SyncStatusCallback& callback,
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                           google_apis::GDataErrorCode error);
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void UploadExistingFile(const SyncStatusCallback& callback);
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void DidGetMD5ForUpload(const SyncStatusCallback& callback,
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                          const std::string& local_file_md5);
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void DidUploadExistingFile(const SyncStatusCallback& callback,
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                             google_apis::GDataErrorCode error,
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                             const GURL&,
66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                             scoped_ptr<google_apis::ResourceEntry>);
67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void UpdateRemoteMetadata(const SyncStatusCallback& callback);
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void DidGetRemoteMetadata(const SyncStatusCallback& callback,
69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                            int64 change_id,
70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                            google_apis::GDataErrorCode error,
71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                            scoped_ptr<google_apis::ResourceEntry> entry);
72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void DidDeleteForUploadNewFile(const SyncStatusCallback& callback,
74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                 SyncStatusCode status);
75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void DidDeleteForCreateFolder(const SyncStatusCallback& callback,
76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                SyncStatusCode status);
77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void UploadNewFile(const SyncStatusCallback& callback);
79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void DidUploadNewFile(const SyncStatusCallback& callback,
80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                        int64 change_id,
81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                        google_apis::GDataErrorCode error,
82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                        const GURL& upload_location,
83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                        scoped_ptr<google_apis::ResourceEntry> entry);
84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void DidUpdateDatabaseForUpload(const SyncStatusCallback& callback,
85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                  const std::string& file_id,
86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                  SyncStatusCode status);
87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void CreateRemoteFolder(const SyncStatusCallback& callback);
89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void DidCreateRemoteFolder(const SyncStatusCallback& callback,
90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                             google_apis::GDataErrorCode error,
91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                             scoped_ptr<google_apis::ResourceEntry> entry);
92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void DidListFolderForEnsureUniqueness(
93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const SyncStatusCallback& callback,
94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      ScopedVector<google_apis::ResourceEntry> candidates,
95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      google_apis::GDataErrorCode error,
96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      scoped_ptr<google_apis::ResourceList> resource_list);
97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  drive::DriveServiceInterface* drive_service();
99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  drive::DriveUploaderInterface* drive_uploader();
100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  MetadataDatabase* metadata_database();
101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SyncEngineContext* sync_context_;  // Not owned.
103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  FileChange local_change_;
105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  base::FilePath local_path_;
106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SyncFileMetadata local_metadata_;
107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  fileapi::FileSystemURL url_;
108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_ptr<FileTracker> remote_file_tracker_;
110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_ptr<FileTracker> remote_parent_folder_tracker_;
111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  base::FilePath target_path_;
112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  base::WeakPtrFactory<LocalToRemoteSyncer> weak_ptr_factory_;
114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
11558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(LocalToRemoteSyncer);
11658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)};
11758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
11858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // namespace drive_backend
11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // namespace sync_file_system
12058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
12158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_LOCAL_TO_REMOTE_SYNCER_H_
122