Home | History | Annotate | Download | only in drive
      1 // Copyright (c) 2012 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_DRIVE_DRIVE_SERVICE_INTERFACE_H_
      6 #define CHROME_BROWSER_DRIVE_DRIVE_SERVICE_INTERFACE_H_
      7 
      8 #include <string>
      9 
     10 #include "google_apis/drive/auth_service_interface.h"
     11 #include "google_apis/drive/base_requests.h"
     12 #include "google_apis/drive/drive_common_callbacks.h"
     13 
     14 namespace base {
     15 class Time;
     16 }
     17 
     18 namespace drive {
     19 
     20 // Function which converts the given resource ID into the desired format.
     21 typedef base::Callback<std::string(
     22     const std::string& resource_id)> ResourceIdCanonicalizer;
     23 
     24 // Observer interface for DriveServiceInterface.
     25 class DriveServiceObserver {
     26  public:
     27   // Triggered when the service gets ready to send requests.
     28   virtual void OnReadyToSendRequests() {}
     29 
     30   // Called when the refresh token was found to be invalid.
     31   virtual void OnRefreshTokenInvalid() {}
     32 
     33  protected:
     34   virtual ~DriveServiceObserver() {}
     35 };
     36 
     37 // This defines an interface for sharing by DriveService and MockDriveService
     38 // so that we can do testing of clients of DriveService.
     39 //
     40 // All functions must be called on UI thread. DriveService is built on top of
     41 // URLFetcher that runs on UI thread.
     42 class DriveServiceInterface {
     43  public:
     44   virtual ~DriveServiceInterface() {}
     45 
     46   // Common service:
     47 
     48   // Initializes the documents service with |account_id|.
     49   virtual void Initialize(const std::string& account_id) = 0;
     50 
     51   // Adds an observer.
     52   virtual void AddObserver(DriveServiceObserver* observer) = 0;
     53 
     54   // Removes an observer.
     55   virtual void RemoveObserver(DriveServiceObserver* observer) = 0;
     56 
     57   // True if ready to send requests.
     58   virtual bool CanSendRequest() const = 0;
     59 
     60   // Returns a function which converts the given resource ID into the desired
     61   // format.
     62   virtual ResourceIdCanonicalizer GetResourceIdCanonicalizer() const = 0;
     63 
     64   // Authentication service:
     65 
     66   // True if OAuth2 access token is retrieved and believed to be fresh.
     67   virtual bool HasAccessToken() const = 0;
     68 
     69   // Gets the cached OAuth2 access token or if empty, then fetches a new one.
     70   virtual void RequestAccessToken(
     71       const google_apis::AuthStatusCallback& callback) = 0;
     72 
     73   // True if OAuth2 refresh token is present.
     74   virtual bool HasRefreshToken() const = 0;
     75 
     76   // Clears OAuth2 access token.
     77   virtual void ClearAccessToken() = 0;
     78 
     79   // Clears OAuth2 refresh token.
     80   virtual void ClearRefreshToken() = 0;
     81 
     82   // Document access:
     83 
     84   // Returns the resource id for the root directory.
     85   virtual std::string GetRootResourceId() const = 0;
     86 
     87   // Fetches a resource list of the account. |callback| will be called upon
     88   // completion.
     89   // If the list is too long, it may be paged. In such a case, a URL to fetch
     90   // remaining results will be included in the returned result. See also
     91   // GetRemainingFileList.
     92   //
     93   // |callback| must not be null.
     94   virtual google_apis::CancelCallback GetAllResourceList(
     95       const google_apis::GetResourceListCallback& callback) = 0;
     96 
     97   // Fetches a resource list in the directory with |directory_resource_id|.
     98   // |callback| will be called upon completion.
     99   // If the list is too long, it may be paged. In such a case, a URL to fetch
    100   // remaining results will be included in the returned result. See also
    101   // GetRemainingFileList.
    102   //
    103   // |directory_resource_id| must not be empty.
    104   // |callback| must not be null.
    105   virtual google_apis::CancelCallback GetResourceListInDirectory(
    106       const std::string& directory_resource_id,
    107       const google_apis::GetResourceListCallback& callback) = 0;
    108 
    109   // Searches the resources for the |search_query| from all the user's
    110   // resources. |callback| will be called upon completion.
    111   // If the list is too long, it may be paged. In such a case, a URL to fetch
    112   // remaining results will be included in the returned result. See also
    113   // GetRemainingFileList.
    114   //
    115   // |search_query| must not be empty.
    116   // |callback| must not be null.
    117   virtual google_apis::CancelCallback Search(
    118       const std::string& search_query,
    119       const google_apis::GetResourceListCallback& callback) = 0;
    120 
    121   // Searches the resources with the |title|.
    122   // |directory_resource_id| is an optional parameter. If it is empty,
    123   // the search target is all the existing resources. Otherwise, it is
    124   // the resources directly under the directory with |directory_resource_id|.
    125   // If the list is too long, it may be paged. In such a case, a URL to fetch
    126   // remaining results will be included in the returned result. See also
    127   // GetRemainingFileList.
    128   //
    129   // |title| must not be empty, and |callback| must not be null.
    130   virtual google_apis::CancelCallback SearchByTitle(
    131       const std::string& title,
    132       const std::string& directory_resource_id,
    133       const google_apis::GetResourceListCallback& callback) = 0;
    134 
    135   // Fetches change list since |start_changestamp|. |callback| will be
    136   // called upon completion.
    137   // If the list is too long, it may be paged. In such a case, a URL to fetch
    138   // remaining results will be included in the returned result. See also
    139   // GetRemainingChangeList.
    140   //
    141   // |callback| must not be null.
    142   virtual google_apis::CancelCallback GetChangeList(
    143       int64 start_changestamp,
    144       const google_apis::GetResourceListCallback& callback) = 0;
    145 
    146   // The result of GetChangeList() and GetAllResourceList() may be paged.
    147   // In such a case, a next link to fetch remaining result is returned.
    148   // The page token can be used for this method. |callback| will be called upon
    149   // completion.
    150   //
    151   // |next_link| must not be empty. |callback| must not be null.
    152   virtual google_apis::CancelCallback GetRemainingChangeList(
    153       const GURL& next_link,
    154       const google_apis::GetResourceListCallback& callback) = 0;
    155 
    156   // The result of GetResourceListInDirectory(), Search() and SearchByTitle()
    157   // may be paged. In such a case, a next link to fetch remaining result is
    158   // returned. The page token can be used for this method. |callback| will be
    159   // called upon completion.
    160   //
    161   // |next_link| must not be empty. |callback| must not be null.
    162   virtual google_apis::CancelCallback GetRemainingFileList(
    163       const GURL& next_link,
    164       const google_apis::GetResourceListCallback& callback) = 0;
    165 
    166   // Fetches single entry metadata from server. The entry's resource id equals
    167   // |resource_id|.
    168   // Upon completion, invokes |callback| with results on the calling thread.
    169   // |callback| must not be null.
    170   virtual google_apis::CancelCallback GetResourceEntry(
    171       const std::string& resource_id,
    172       const google_apis::GetResourceEntryCallback& callback) = 0;
    173 
    174   // Fetches an url for the sharing dialog for a single entry with id
    175   // |resource_id|, to be embedded in a webview or an iframe with origin
    176   // |embed_origin|. The url is returned via |callback| with results on the
    177   // calling thread. |callback| must not be null.
    178   virtual google_apis::CancelCallback GetShareUrl(
    179       const std::string& resource_id,
    180       const GURL& embed_origin,
    181       const google_apis::GetShareUrlCallback& callback) = 0;
    182 
    183   // Gets the about resource information from the server.
    184   // Upon completion, invokes |callback| with results on the calling thread.
    185   // |callback| must not be null.
    186   virtual google_apis::CancelCallback GetAboutResource(
    187       const google_apis::AboutResourceCallback& callback) = 0;
    188 
    189   // Gets the application information from the server.
    190   // Upon completion, invokes |callback| with results on the calling thread.
    191   // |callback| must not be null.
    192   virtual google_apis::CancelCallback GetAppList(
    193       const google_apis::AppListCallback& callback) = 0;
    194 
    195   // Permanently deletes a resource identified by its |resource_id|.
    196   // If |etag| is not empty and did not match, the deletion fails with
    197   // HTTP_PRECONDITION error.
    198   // Upon completion, invokes |callback| with results on the calling thread.
    199   // |callback| must not be null.
    200   virtual google_apis::CancelCallback DeleteResource(
    201       const std::string& resource_id,
    202       const std::string& etag,
    203       const google_apis::EntryActionCallback& callback) = 0;
    204 
    205   // Trashes a resource identified by its |resource_id|.
    206   // Upon completion, invokes |callback| with results on the calling thread.
    207   // |callback| must not be null.
    208   virtual google_apis::CancelCallback TrashResource(
    209       const std::string& resource_id,
    210       const google_apis::EntryActionCallback& callback) = 0;
    211 
    212   // Makes a copy of a resource with |resource_id|.
    213   // The new resource will be put under a directory with |parent_resource_id|,
    214   // and it'll be named |new_title|.
    215   // If |last_modified| is not null, the modified date of the resource on the
    216   // server will be set to the date.
    217   // This request is supported only on DriveAPIService, because GData WAPI
    218   // doesn't support the function unfortunately.
    219   // Upon completion, invokes |callback| with results on the calling thread.
    220   // |callback| must not be null.
    221   virtual google_apis::CancelCallback CopyResource(
    222       const std::string& resource_id,
    223       const std::string& parent_resource_id,
    224       const std::string& new_title,
    225       const base::Time& last_modified,
    226       const google_apis::GetResourceEntryCallback& callback) = 0;
    227 
    228   // Updates a resource with |resource_id| to the directory of
    229   // |parent_resource_id| with renaming to |new_title|.
    230   // If |last_modified| or |last_accessed| is not null, the modified/accessed
    231   // date of the resource on the server will be set to the date.
    232   // This request is supported only on DriveAPIService, because GData WAPI
    233   // doesn't support the function unfortunately.
    234   // Upon completion, invokes |callback| with results on the calling thread.
    235   // |callback| must not be null.
    236   virtual google_apis::CancelCallback UpdateResource(
    237       const std::string& resource_id,
    238       const std::string& parent_resource_id,
    239       const std::string& new_title,
    240       const base::Time& last_modified,
    241       const base::Time& last_viewed_by_me,
    242       const google_apis::GetResourceEntryCallback& callback) = 0;
    243 
    244   // Renames a document or collection identified by its |resource_id|
    245   // to the UTF-8 encoded |new_title|. Upon completion,
    246   // invokes |callback| with results on the calling thread.
    247   // |callback| must not be null.
    248   virtual google_apis::CancelCallback RenameResource(
    249       const std::string& resource_id,
    250       const std::string& new_title,
    251       const google_apis::EntryActionCallback& callback) = 0;
    252 
    253   // Adds a resource (document, file, or collection) identified by its
    254   // |resource_id| to a collection represented by the |parent_resource_id|.
    255   // Upon completion, invokes |callback| with results on the calling thread.
    256   // |callback| must not be null.
    257   virtual google_apis::CancelCallback AddResourceToDirectory(
    258       const std::string& parent_resource_id,
    259       const std::string& resource_id,
    260       const google_apis::EntryActionCallback& callback) = 0;
    261 
    262   // Removes a resource (document, file, collection) identified by its
    263   // |resource_id| from a collection represented by the |parent_resource_id|.
    264   // Upon completion, invokes |callback| with results on the calling thread.
    265   // |callback| must not be null.
    266   virtual google_apis::CancelCallback RemoveResourceFromDirectory(
    267       const std::string& parent_resource_id,
    268       const std::string& resource_id,
    269       const google_apis::EntryActionCallback& callback) = 0;
    270 
    271   // Adds new collection with |directory_title| under parent directory
    272   // identified with |parent_resource_id|. |parent_resource_id| can be the
    273   // value returned by GetRootResourceId to represent the root directory.
    274   // Upon completion, invokes |callback| and passes newly created entry on
    275   // the calling thread.
    276   // This function cannot be named as "CreateDirectory" as it conflicts with
    277   // a macro on Windows.
    278   // |callback| must not be null.
    279   virtual google_apis::CancelCallback AddNewDirectory(
    280       const std::string& parent_resource_id,
    281       const std::string& directory_title,
    282       const google_apis::GetResourceEntryCallback& callback) = 0;
    283 
    284   // Downloads a file with |resourced_id|. The downloaded file will
    285   // be stored at |local_cache_path| location. Upon completion, invokes
    286   // |download_action_callback| with results on the calling thread.
    287   // If |get_content_callback| is not empty,
    288   // URLFetcherDelegate::OnURLFetchDownloadData will be called, which will in
    289   // turn invoke |get_content_callback| on the calling thread.
    290   // If |progress_callback| is not empty, it is invoked periodically when
    291   // the download made some progress.
    292   //
    293   // |download_action_callback| must not be null.
    294   // |get_content_callback| and |progress_callback| may be null.
    295   virtual google_apis::CancelCallback DownloadFile(
    296       const base::FilePath& local_cache_path,
    297       const std::string& resource_id,
    298       const google_apis::DownloadActionCallback& download_action_callback,
    299       const google_apis::GetContentCallback& get_content_callback,
    300       const google_apis::ProgressCallback& progress_callback) = 0;
    301 
    302   // Initiates uploading of a new document/file.
    303   // |content_type| and |content_length| should be the ones of the file to be
    304   // uploaded.
    305   // |callback| must not be null.
    306   virtual google_apis::CancelCallback InitiateUploadNewFile(
    307       const std::string& content_type,
    308       int64 content_length,
    309       const std::string& parent_resource_id,
    310       const std::string& title,
    311       const google_apis::InitiateUploadCallback& callback) = 0;
    312 
    313   // Initiates uploading of an existing document/file.
    314   // |content_type| and |content_length| should be the ones of the file to be
    315   // uploaded.
    316   // |callback| must not be null.
    317   virtual google_apis::CancelCallback InitiateUploadExistingFile(
    318       const std::string& content_type,
    319       int64 content_length,
    320       const std::string& resource_id,
    321       const std::string& etag,
    322       const google_apis::InitiateUploadCallback& callback) = 0;
    323 
    324   // Resumes uploading of a document/file on the calling thread.
    325   // |callback| must not be null. |progress_callback| may be null.
    326   virtual google_apis::CancelCallback ResumeUpload(
    327       const GURL& upload_url,
    328       int64 start_position,
    329       int64 end_position,
    330       int64 content_length,
    331       const std::string& content_type,
    332       const base::FilePath& local_file_path,
    333       const google_apis::UploadRangeCallback& callback,
    334       const google_apis::ProgressCallback& progress_callback) = 0;
    335 
    336   // Gets the current status of the uploading to |upload_url| from the server.
    337   // |drive_file_path| and |content_length| should be set to the same value
    338   // which is used for ResumeUpload.
    339   // |callback| must not be null.
    340   virtual google_apis::CancelCallback GetUploadStatus(
    341       const GURL& upload_url,
    342       int64 content_length,
    343       const google_apis::UploadRangeCallback& callback) = 0;
    344 
    345   // Authorizes a Drive app with the id |app_id| to open the given file.
    346   // Upon completion, invokes |callback| with the link to open the file with
    347   // the provided app. |callback| must not be null.
    348   virtual google_apis::CancelCallback AuthorizeApp(
    349       const std::string& resource_id,
    350       const std::string& app_id,
    351       const google_apis::AuthorizeAppCallback& callback) = 0;
    352 
    353   // This is introduced as a temporary short term solution of the performance
    354   // regression issue on Drive API v2.
    355   //
    356   // This fetches the resource list in a directory by usinig GData WAPI
    357   // regardless of base protocol. In other words, even if we enabels Drive API
    358   // v2, this method uses GData WAPI to fetch the resource list.
    359   //
    360   // |directory_resource_id| must not be empty.
    361   // |callback| must not be null.
    362   virtual google_apis::CancelCallback GetResourceListInDirectoryByWapi(
    363       const std::string& directory_resource_id,
    364       const google_apis::GetResourceListCallback& callback) = 0;
    365 
    366   // GetResourceListInDirectoryByWapi can be paged. This method fetches the
    367   // following pages.
    368   //
    369   // |callback| must not be null.
    370   virtual google_apis::CancelCallback GetRemainingResourceList(
    371       const GURL& next_link,
    372       const google_apis::GetResourceListCallback& callback) = 0;
    373 };
    374 
    375 }  // namespace drive
    376 
    377 #endif  // CHROME_BROWSER_DRIVE_DRIVE_SERVICE_INTERFACE_H_
    378