Home | History | Annotate | Download | only in drive_backend
      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_API_UTIL_INTERFACE_H_
      6 #define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_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                               scoped_ptr<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 |feed_url|.
    125   // Upon completion, invokes |callback|.
    126   virtual void ContinueListing(const GURL& feed_url,
    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_API_UTIL_INTERFACE_H_
    203