local_to_remote_syncer.h revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
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_LOCAL_TO_REMOTE_SYNCER_H_
6#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_LOCAL_TO_REMOTE_SYNCER_H_
7
8#include "base/memory/scoped_ptr.h"
9#include "base/memory/scoped_vector.h"
10#include "base/memory/weak_ptr.h"
11#include "chrome/browser/sync_file_system/file_change.h"
12#include "chrome/browser/sync_file_system/sync_action.h"
13#include "chrome/browser/sync_file_system/sync_callbacks.h"
14#include "chrome/browser/sync_file_system/sync_file_metadata.h"
15#include "chrome/browser/sync_file_system/sync_task.h"
16#include "google_apis/drive/gdata_errorcode.h"
17
18namespace drive {
19class DriveServiceInterface;
20class DriveUploaderInterface;
21}
22
23namespace google_apis {
24class ResourceEntry;
25class ResourceList;
26}
27
28namespace sync_file_system {
29
30class RemoteChangeProcessor;
31
32namespace drive_backend {
33
34class FileTracker;
35class FolderCreator;
36class MetadataDatabase;
37class SyncEngineContext;
38
39class LocalToRemoteSyncer : public SyncTask {
40 public:
41  LocalToRemoteSyncer(SyncEngineContext* sync_context,
42                      const SyncFileMetadata& local_metadata,
43                      const FileChange& local_change,
44                      const base::FilePath& local_path,
45                      const fileapi::FileSystemURL& url);
46  virtual ~LocalToRemoteSyncer();
47  virtual void Run(const SyncStatusCallback& callback) OVERRIDE;
48
49  const fileapi::FileSystemURL& url() const { return url_; }
50  const base::FilePath& target_path() const { return target_path_; }
51  SyncAction sync_action() const { return sync_action_; }
52
53 private:
54  void SyncCompleted(const SyncStatusCallback& callback,
55                     SyncStatusCode status);
56
57  void HandleConflict(const SyncStatusCallback& callback);
58  void HandleExistingRemoteFile(const SyncStatusCallback& callback);
59
60  void DeleteRemoteFile(const SyncStatusCallback& callback);
61  void DidDeleteRemoteFile(const SyncStatusCallback& callback,
62                           google_apis::GDataErrorCode error);
63
64  void UploadExistingFile(const SyncStatusCallback& callback);
65  void DidGetMD5ForUpload(const SyncStatusCallback& callback,
66                          const std::string& local_file_md5);
67  void DidUploadExistingFile(const SyncStatusCallback& callback,
68                             google_apis::GDataErrorCode error,
69                             const GURL&,
70                             scoped_ptr<google_apis::ResourceEntry>);
71  void DidUpdateDatabaseForUploadExistingFile(
72      const SyncStatusCallback& callback,
73      SyncStatusCode status);
74  void UpdateRemoteMetadata(const std::string& file_id,
75                            const SyncStatusCallback& callback);
76  void DidGetRemoteMetadata(const std::string& file_id,
77                            const SyncStatusCallback& callback,
78                            google_apis::GDataErrorCode error,
79                            scoped_ptr<google_apis::ResourceEntry> entry);
80
81  void DidDeleteForUploadNewFile(const SyncStatusCallback& callback,
82                                 SyncStatusCode status);
83  void DidDeleteForCreateFolder(const SyncStatusCallback& callback,
84                                SyncStatusCode status);
85
86  void UploadNewFile(const SyncStatusCallback& callback);
87  void DidUploadNewFile(const SyncStatusCallback& callback,
88                        google_apis::GDataErrorCode error,
89                        const GURL& upload_location,
90                        scoped_ptr<google_apis::ResourceEntry> entry);
91
92  void CreateRemoteFolder(const SyncStatusCallback& callback);
93  void DidCreateRemoteFolder(const SyncStatusCallback& callback,
94                             const std::string& file_id,
95                             SyncStatusCode status);
96  void DidDetachResourceForCreationConflict(const SyncStatusCallback& callback,
97                                            google_apis::GDataErrorCode error);
98
99  bool IsContextReady();
100  drive::DriveServiceInterface* drive_service();
101  drive::DriveUploaderInterface* drive_uploader();
102  MetadataDatabase* metadata_database();
103
104  SyncEngineContext* sync_context_;  // Not owned.
105
106  SyncFileMetadata local_metadata_;
107  FileChange local_change_;
108  base::FilePath local_path_;
109  fileapi::FileSystemURL url_;
110  SyncAction sync_action_;
111
112  scoped_ptr<FileTracker> remote_file_tracker_;
113  scoped_ptr<FileTracker> remote_parent_folder_tracker_;
114  base::FilePath target_path_;
115
116  scoped_ptr<FolderCreator> folder_creator_;
117
118  base::WeakPtrFactory<LocalToRemoteSyncer> weak_ptr_factory_;
119
120  DISALLOW_COPY_AND_ASSIGN(LocalToRemoteSyncer);
121};
122
123}  // namespace drive_backend
124}  // namespace sync_file_system
125
126#endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_LOCAL_TO_REMOTE_SYNCER_H_
127