local_to_remote_syncer.h revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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)
8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <string>
9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/scoped_vector.h"
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/weak_ptr.h"
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/sync_file_system/drive_backend/sync_task.h"
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/sync_file_system/file_change.h"
15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/sync_file_system/sync_action.h"
1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/sync_file_system/sync_callbacks.h"
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/sync_file_system/sync_file_metadata.h"
18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "google_apis/drive/gdata_errorcode.h"
1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace drive {
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class DriveServiceInterface;
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class DriveUploaderInterface;
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace google_apis {
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class ResourceEntry;
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class ResourceList;
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace sync_file_system {
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class RemoteChangeProcessor;
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace drive_backend {
3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class FileTracker;
37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class FolderCreator;
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class MetadataDatabase;
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class SyncEngineContext;
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class LocalToRemoteSyncer : public SequentialSyncTask {
4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public:
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  LocalToRemoteSyncer(SyncEngineContext* sync_context,
44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                      const SyncFileMetadata& local_metadata,
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      const FileChange& local_change,
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      const base::FilePath& local_path,
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      const fileapi::FileSystemURL& url);
4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual ~LocalToRemoteSyncer();
49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual void RunSequential(const SyncStatusCallback& callback) OVERRIDE;
5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  const fileapi::FileSystemURL& url() const { return url_; }
52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  const base::FilePath& target_path() const { return target_path_; }
53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  SyncAction sync_action() const { return sync_action_; }
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool needs_remote_change_listing() const {
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return needs_remote_change_listing_;
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private:
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void SyncCompleted(const SyncStatusCallback& callback,
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                     SyncStatusCode status);
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void HandleConflict(const SyncStatusCallback& callback);
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void HandleExistingRemoteFile(const SyncStatusCallback& callback);
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void DeleteRemoteFile(const SyncStatusCallback& callback);
66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void DidDeleteRemoteFile(const SyncStatusCallback& callback,
67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                           google_apis::GDataErrorCode error);
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void UploadExistingFile(const SyncStatusCallback& callback);
70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void DidGetMD5ForUpload(const SyncStatusCallback& callback,
71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                          const std::string& local_file_md5);
72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void DidUploadExistingFile(const SyncStatusCallback& callback,
73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                             google_apis::GDataErrorCode error,
74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                             const GURL&,
75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                             scoped_ptr<google_apis::ResourceEntry>);
76a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void DidUpdateDatabaseForUploadExistingFile(
77a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      const SyncStatusCallback& callback,
78a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      SyncStatusCode status);
79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void UpdateRemoteMetadata(const std::string& file_id,
80a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                            const SyncStatusCallback& callback);
81a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void DidGetRemoteMetadata(const std::string& file_id,
82a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                            const SyncStatusCallback& callback,
83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                            google_apis::GDataErrorCode error,
84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                            scoped_ptr<google_apis::ResourceEntry> entry);
85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void DidDeleteForUploadNewFile(const SyncStatusCallback& callback,
87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                 SyncStatusCode status);
88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void DidDeleteForCreateFolder(const SyncStatusCallback& callback,
89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                SyncStatusCode status);
90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void UploadNewFile(const SyncStatusCallback& callback);
92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void DidUploadNewFile(const SyncStatusCallback& callback,
93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                        google_apis::GDataErrorCode error,
94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                        const GURL& upload_location,
95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                        scoped_ptr<google_apis::ResourceEntry> entry);
96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void CreateRemoteFolder(const SyncStatusCallback& callback);
98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void DidCreateRemoteFolder(const SyncStatusCallback& callback,
99a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                             const std::string& file_id,
100a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                             SyncStatusCode status);
101a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void DidDetachResourceForCreationConflict(const SyncStatusCallback& callback,
102a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                            google_apis::GDataErrorCode error);
103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
104a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  bool IsContextReady();
105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  drive::DriveServiceInterface* drive_service();
106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  drive::DriveUploaderInterface* drive_uploader();
107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  MetadataDatabase* metadata_database();
108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SyncEngineContext* sync_context_;  // Not owned.
110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  FileChange local_change_;
1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool local_is_missing_;
113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  base::FilePath local_path_;
114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  fileapi::FileSystemURL url_;
115a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  SyncAction sync_action_;
116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_ptr<FileTracker> remote_file_tracker_;
118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_ptr<FileTracker> remote_parent_folder_tracker_;
119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  base::FilePath target_path_;
120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool needs_remote_change_listing_;
1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
123a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  scoped_ptr<FolderCreator> folder_creator_;
124a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  base::WeakPtrFactory<LocalToRemoteSyncer> weak_ptr_factory_;
126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
12758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(LocalToRemoteSyncer);
12858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)};
12958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
13058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // namespace drive_backend
13158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // namespace sync_file_system
13258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
13358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_LOCAL_TO_REMOTE_SYNCER_H_
134