- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / sync_file_system / drive_backend_v1 / api_util_interface.h
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_V1_API_UTIL_INTERFACE_H_
6 #define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_V1_API_UTIL_INTERFACE_H_
7
8 #include <string>
9
10 #include "base/callback_forward.h"
11 #include "chrome/browser/google_apis/gdata_errorcode.h"
12 #include "chrome/browser/google_apis/gdata_wapi_parser.h"
13
14 class GURL;
15 class Profile;
16
17 namespace base {
18 class Time;
19 }
20
21 namespace google_apis {
22 class DriveUploaderInterface;
23 }
24
25 namespace webkit_blob {
26 class ScopedFile;
27 }
28
29 namespace sync_file_system {
30 namespace drive_backend {
31
32 class APIUtilObserver {
33  public:
34   APIUtilObserver() {}
35   virtual ~APIUtilObserver() {}
36   virtual void OnAuthenticated() = 0;
37   virtual void OnNetworkConnected() = 0;
38
39  private:
40   DISALLOW_COPY_AND_ASSIGN(APIUtilObserver);
41 };
42
43 // The implementation of this class is responsible for talking to the Drive
44 // service to get and put Drive directories, files and metadata.
45 // This class is owned by DriveFileSyncService.
46 class APIUtilInterface {
47  public:
48   typedef base::Callback<void(google_apis::GDataErrorCode error)>
49       GDataErrorCallback;
50   typedef base::Callback<void(google_apis::GDataErrorCode error,
51                               const std::string& file_md5,
52                               int64 file_size,
53                               const base::Time& last_updated,
54                               webkit_blob::ScopedFile downloaded)>
55       DownloadFileCallback;
56   typedef base::Callback<void(google_apis::GDataErrorCode error,
57                               const std::string& resource_id,
58                               const std::string& file_md5)> UploadFileCallback;
59   typedef base::Callback<
60       void(google_apis::GDataErrorCode error, const std::string& resource_id)>
61       ResourceIdCallback;
62   typedef base::Callback<void(google_apis::GDataErrorCode error,
63                               int64 changestamp)> ChangeStampCallback;
64   typedef base::Callback<void(google_apis::GDataErrorCode error,
65                               scoped_ptr<google_apis::ResourceList> feed)>
66       ResourceListCallback;
67   typedef base::Callback<void(google_apis::GDataErrorCode error,
68                               scoped_ptr<google_apis::ResourceEntry> entry)>
69       ResourceEntryCallback;
70
71   APIUtilInterface() {}
72   virtual ~APIUtilInterface() {}
73
74   virtual void AddObserver(APIUtilObserver* observer) = 0;
75   virtual void RemoveObserver(APIUtilObserver* observer) = 0;
76
77   // Fetches Resource ID of the directory where we should place all files to
78   // sync.  Upon completion, invokes |callback|.
79   // If the directory does not exist on the server this also creates
80   // the directory.
81   //
82   // Returns HTTP_SUCCESS if the directory already exists.
83   // Returns HTTP_CREATED if the directory was not found and created.
84   virtual void GetDriveDirectoryForSyncRoot(
85       const ResourceIdCallback& callback) = 0;
86
87   // Fetches Resource ID of the directory for the |origin|.
88   // Upon completion, invokes |callback|.
89   // If the directory does not exist on the server this also creates
90   // the directory.
91   //
92   // Returns HTTP_SUCCESS if the directory already exists.
93   // Returns HTTP_CREATED if the directory was not found and created.
94   virtual void GetDriveDirectoryForOrigin(
95       const std::string& sync_root_resource_id,
96       const GURL& origin,
97       const ResourceIdCallback& callback) = 0;
98
99   // Fetches the largest changestamp for the signed-in account.
100   // Upon completion, invokes |callback|.
101   virtual void GetLargestChangeStamp(const ChangeStampCallback& callback) = 0;
102
103   // Fetches the resource entry for the file identified by |resource_id|.
104   // Upon completion, invokes |callback|.
105   virtual void GetResourceEntry(const std::string& resource_id,
106                                 const ResourceEntryCallback& callback) = 0;
107
108   // Lists files in the directory identified by |resource_id|.
109   // Upon completion, invokes |callback|.
110   // The result may be chunked and may have successive results. The caller needs
111   // to call ContunueListing with the result of GetNextFeedURL to get complete
112   // list of files.
113   virtual void ListFiles(const std::string& directory_resource_id,
114                          const ResourceListCallback& callback) = 0;
115
116   // Lists changes that happened after |start_changestamp|.
117   // Upon completion, invokes |callback|.
118   // The result may be chunked and may have successive results. The caller needs
119   // to call ContunueListing with the result of GetNextFeedURL to get complete
120   // list of changes.
121   virtual void ListChanges(int64 start_changestamp,
122                            const ResourceListCallback& callback) = 0;
123
124   // Fetches the next chunk of ResourceList identified by |next_link|.
125   // Upon completion, invokes |callback|.
126   virtual void ContinueListing(const GURL& next_link,
127                                const ResourceListCallback& callback) = 0;
128
129   // Downloads the file identified by |resource_id| from Drive to
130   // |local_file_path|.
131   // |local_file_md5| represents the hash value of the local file to be updated.
132   // If |local_file_md5| is equal to remote file's value, cancels the download
133   // and invokes |callback| with GDataErrorCode::HTTP_NOT_MODIFIED immediately.
134   // When there is no local file to be updated, |local_file_md5| should be
135   // empty.
136   virtual void DownloadFile(const std::string& resource_id,
137                             const std::string& local_file_md5,
138                             const DownloadFileCallback& callback) = 0;
139
140   // Uploads the new file |local_file_path| with specified |title| into the
141   // directory identified by |directory_resource_id|.
142   // Upon completion, invokes |callback| and returns HTTP_CREATED if the file
143   // is created.
144   virtual void UploadNewFile(const std::string& directory_resource_id,
145                              const base::FilePath& local_file_path,
146                              const std::string& title,
147                              const UploadFileCallback& callback) = 0;
148
149   // Uploads the existing file identified by |local_file_path|.
150   // |remote_file_md5| represents the expected hash value of the file to be
151   // updated on Drive. If |remote_file_md5| is different from the actual value,
152   // cancels the upload and invokes |callback| with
153   // GDataErrorCode::HTTP_CONFLICT immediately.
154   // Returns HTTP_SUCCESS if the file uploaded successfully.
155   virtual void UploadExistingFile(const std::string& resource_id,
156                                   const std::string& remote_file_md5,
157                                   const base::FilePath& local_file_path,
158                                   const UploadFileCallback& callback) = 0;
159
160   // Creates a new directory with specified |title| into the directory
161   // identified by |parent_resource_id|.
162   // Upon completion, invokes |callback| and returns HTTP_CREATED if
163   // the directory is created.
164   virtual void CreateDirectory(const std::string& parent_resource_id,
165                                const std::string& title,
166                                const ResourceIdCallback& callback) = 0;
167
168   // Returns true if the user is authenticated.
169   virtual bool IsAuthenticated() const = 0;
170
171   // Deletes the file identified by |resource_id|.
172   // A directory is considered a file and will cause a recursive delete if
173   // given as the |resource_id|.
174   // TODO(tzik): Rename this function to DeleteResource.
175   //
176   // |remote_file_md5| represents the expected hash value of the file to be
177   // deleted from Drive. If |remote_file_md5| is empty, then it's implied that
178   // the file should be deleted on the remote side regardless. If
179   // |remote_file_md5| is not empty and is different from the actual value,
180   // the deletion operation is canceled and the |callback| with
181   // GDataErrorCode::HTTP_CONFLICT is invoked immediately.
182   virtual void DeleteFile(const std::string& resource_id,
183                           const std::string& remote_file_md5,
184                           const GDataErrorCallback& callback) = 0;
185
186   // Converts |resource_id| to corresponing resource link.
187   virtual GURL ResourceIdToResourceLink(
188       const std::string& resource_id) const = 0;
189
190   // Ensures the sync root directory is not in 'My Drive'. Even if the directory
191   // is in directories other than 'My Drive', it will not be removed from there.
192   virtual void EnsureSyncRootIsNotInMyDrive(
193       const std::string& sync_root_resource_id) = 0;
194
195  private:
196   DISALLOW_COPY_AND_ASSIGN(APIUtilInterface);
197 };
198
199 }  // namespace drive_backend
200 }  // namespace sync_file_system
201
202 #endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_V1_API_UTIL_INTERFACE_H_