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 GOOGLE_APIS_DRIVE_DRIVE_API_REQUESTS_H_
      6 #define GOOGLE_APIS_DRIVE_DRIVE_API_REQUESTS_H_
      7 
      8 #include <string>
      9 
     10 #include "base/callback_forward.h"
     11 #include "base/time/time.h"
     12 #include "google_apis/drive/base_requests.h"
     13 #include "google_apis/drive/drive_api_url_generator.h"
     14 #include "google_apis/drive/drive_common_callbacks.h"
     15 
     16 namespace google_apis {
     17 
     18 class ChangeList;
     19 class FileResource;
     20 class FileList;
     21 
     22 // Callback used for requests that the server returns FileResource data
     23 // formatted into JSON value.
     24 typedef base::Callback<void(GDataErrorCode error,
     25                             scoped_ptr<FileResource> entry)>
     26     FileResourceCallback;
     27 
     28 // Callback used for requests that the server returns FileList data
     29 // formatted into JSON value.
     30 typedef base::Callback<void(GDataErrorCode error,
     31                             scoped_ptr<FileList> entry)> FileListCallback;
     32 
     33 // Callback used for requests that the server returns ChangeList data
     34 // formatted into JSON value.
     35 typedef base::Callback<void(GDataErrorCode error,
     36                             scoped_ptr<ChangeList> entry)> ChangeListCallback;
     37 
     38 namespace drive {
     39 
     40 //============================ DriveApiDataRequest ===========================
     41 
     42 // This is base class of the Drive API related requests. All Drive API requests
     43 // support partial request (to improve the performance). The function can be
     44 // shared among the Drive API requests.
     45 // See also https://developers.google.com/drive/performance
     46 class DriveApiDataRequest : public GetDataRequest {
     47  public:
     48   DriveApiDataRequest(RequestSender* sender, const GetDataCallback& callback);
     49   virtual ~DriveApiDataRequest();
     50 
     51   // Optional parameter.
     52   const std::string& fields() const { return fields_; }
     53   void set_fields(const std::string& fields) { fields_ = fields; }
     54 
     55  protected:
     56   // Overridden from GetDataRequest.
     57   virtual GURL GetURL() const OVERRIDE;
     58 
     59   // Derived classes should override GetURLInternal instead of GetURL()
     60   // directly.
     61   virtual GURL GetURLInternal() const = 0;
     62 
     63  private:
     64   std::string fields_;
     65 
     66   DISALLOW_COPY_AND_ASSIGN(DriveApiDataRequest);
     67 };
     68 
     69 //=============================== FilesGetRequest =============================
     70 
     71 // This class performs the request for fetching a file.
     72 // This request is mapped to
     73 // https://developers.google.com/drive/v2/reference/files/get
     74 class FilesGetRequest : public DriveApiDataRequest {
     75  public:
     76   FilesGetRequest(RequestSender* sender,
     77                   const DriveApiUrlGenerator& url_generator,
     78                   const FileResourceCallback& callback);
     79   virtual ~FilesGetRequest();
     80 
     81   // Required parameter.
     82   const std::string& file_id() const { return file_id_; }
     83   void set_file_id(const std::string& file_id) { file_id_ = file_id; }
     84 
     85  protected:
     86   // Overridden from DriveApiDataRequest.
     87   virtual GURL GetURLInternal() const OVERRIDE;
     88 
     89  private:
     90   const DriveApiUrlGenerator url_generator_;
     91   std::string file_id_;
     92 
     93   DISALLOW_COPY_AND_ASSIGN(FilesGetRequest);
     94 };
     95 
     96 //============================ FilesAuthorizeRequest ===========================
     97 
     98 // This class performs request for authorizing an app to access a file.
     99 // This request is mapped to /drive/v2internal/file/authorize internal endpoint.
    100 class FilesAuthorizeRequest : public DriveApiDataRequest {
    101  public:
    102   FilesAuthorizeRequest(RequestSender* sender,
    103                         const DriveApiUrlGenerator& url_generator,
    104                         const FileResourceCallback& callback);
    105   virtual ~FilesAuthorizeRequest();
    106 
    107   // Required parameter.
    108   const std::string& file_id() const { return file_id_; }
    109   void set_file_id(const std::string& file_id) { file_id_ = file_id; }
    110   const std::string& app_id() const { return app_id_; }
    111   void set_app_id(const std::string& app_id) { app_id_ = app_id; }
    112 
    113  protected:
    114   // Overridden from GetDataRequest.
    115   virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
    116 
    117   // Overridden from DriveApiDataRequest.
    118   virtual GURL GetURLInternal() const OVERRIDE;
    119 
    120  private:
    121   const DriveApiUrlGenerator url_generator_;
    122   std::string file_id_;
    123   std::string app_id_;
    124 
    125   DISALLOW_COPY_AND_ASSIGN(FilesAuthorizeRequest);
    126 };
    127 
    128 //============================ FilesInsertRequest =============================
    129 
    130 // This class performs the request for creating a resource.
    131 // This request is mapped to
    132 // https://developers.google.com/drive/v2/reference/files/insert
    133 // See also https://developers.google.com/drive/manage-uploads and
    134 // https://developers.google.com/drive/folder
    135 class FilesInsertRequest : public DriveApiDataRequest {
    136  public:
    137   FilesInsertRequest(RequestSender* sender,
    138                      const DriveApiUrlGenerator& url_generator,
    139                      const FileResourceCallback& callback);
    140   virtual ~FilesInsertRequest();
    141 
    142   // Optional request body.
    143   const base::Time& last_viewed_by_me_date() const {
    144     return last_viewed_by_me_date_;
    145   }
    146   void set_last_viewed_by_me_date(const base::Time& last_viewed_by_me_date) {
    147     last_viewed_by_me_date_ = last_viewed_by_me_date;
    148   }
    149 
    150   const std::string& mime_type() const { return mime_type_; }
    151   void set_mime_type(const std::string& mime_type) {
    152     mime_type_ = mime_type;
    153   }
    154 
    155   const base::Time& modified_date() const { return modified_date_; }
    156   void set_modified_date(const base::Time& modified_date) {
    157     modified_date_ = modified_date;
    158   }
    159 
    160   const std::vector<std::string>& parents() const { return parents_; }
    161   void add_parent(const std::string& parent) { parents_.push_back(parent); }
    162 
    163   const std::string& title() const { return title_; }
    164   void set_title(const std::string& title) { title_ = title; }
    165 
    166  protected:
    167   // Overridden from GetDataRequest.
    168   virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
    169   virtual bool GetContentData(std::string* upload_content_type,
    170                               std::string* upload_content) OVERRIDE;
    171 
    172   // Overridden from DriveApiDataRequest.
    173   virtual GURL GetURLInternal() const OVERRIDE;
    174 
    175  private:
    176   const DriveApiUrlGenerator url_generator_;
    177 
    178   base::Time last_viewed_by_me_date_;
    179   std::string mime_type_;
    180   base::Time modified_date_;
    181   std::vector<std::string> parents_;
    182   std::string title_;
    183 
    184   DISALLOW_COPY_AND_ASSIGN(FilesInsertRequest);
    185 };
    186 
    187 //============================== FilesPatchRequest ============================
    188 
    189 // This class performs the request for patching file metadata.
    190 // This request is mapped to
    191 // https://developers.google.com/drive/v2/reference/files/patch
    192 class FilesPatchRequest : public DriveApiDataRequest {
    193  public:
    194   FilesPatchRequest(RequestSender* sender,
    195                     const DriveApiUrlGenerator& url_generator,
    196                     const FileResourceCallback& callback);
    197   virtual ~FilesPatchRequest();
    198 
    199   // Required parameter.
    200   const std::string& file_id() const { return file_id_; }
    201   void set_file_id(const std::string& file_id) { file_id_ = file_id; }
    202 
    203   // Optional parameter.
    204   bool set_modified_date() const { return set_modified_date_; }
    205   void set_set_modified_date(bool set_modified_date) {
    206     set_modified_date_ = set_modified_date;
    207   }
    208 
    209   bool update_viewed_date() const { return update_viewed_date_; }
    210   void set_update_viewed_date(bool update_viewed_date) {
    211     update_viewed_date_ = update_viewed_date;
    212   }
    213 
    214   // Optional request body.
    215   // Note: "Files: patch" accepts any "Files resource" data, but this class
    216   // only supports limited members of it for now. We can extend it upon
    217   // requirments.
    218   const std::string& title() const { return title_; }
    219   void set_title(const std::string& title) { title_ = title; }
    220 
    221   const base::Time& modified_date() const { return modified_date_; }
    222   void set_modified_date(const base::Time& modified_date) {
    223     modified_date_ = modified_date;
    224   }
    225 
    226   const base::Time& last_viewed_by_me_date() const {
    227     return last_viewed_by_me_date_;
    228   }
    229   void set_last_viewed_by_me_date(const base::Time& last_viewed_by_me_date) {
    230     last_viewed_by_me_date_ = last_viewed_by_me_date;
    231   }
    232 
    233   const std::vector<std::string>& parents() const { return parents_; }
    234   void add_parent(const std::string& parent) { parents_.push_back(parent); }
    235 
    236  protected:
    237   // Overridden from URLFetchRequestBase.
    238   virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
    239   virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE;
    240   virtual bool GetContentData(std::string* upload_content_type,
    241                               std::string* upload_content) OVERRIDE;
    242 
    243   // Overridden from DriveApiDataRequest.
    244   virtual GURL GetURLInternal() const OVERRIDE;
    245 
    246  private:
    247   const DriveApiUrlGenerator url_generator_;
    248 
    249   std::string file_id_;
    250   bool set_modified_date_;
    251   bool update_viewed_date_;
    252 
    253   std::string title_;
    254   base::Time modified_date_;
    255   base::Time last_viewed_by_me_date_;
    256   std::vector<std::string> parents_;
    257 
    258   DISALLOW_COPY_AND_ASSIGN(FilesPatchRequest);
    259 };
    260 
    261 //============================= FilesCopyRequest ==============================
    262 
    263 // This class performs the request for copying a resource.
    264 // This request is mapped to
    265 // https://developers.google.com/drive/v2/reference/files/copy
    266 class FilesCopyRequest : public DriveApiDataRequest {
    267  public:
    268   // Upon completion, |callback| will be called. |callback| must not be null.
    269   FilesCopyRequest(RequestSender* sender,
    270                    const DriveApiUrlGenerator& url_generator,
    271                    const FileResourceCallback& callback);
    272   virtual ~FilesCopyRequest();
    273 
    274   // Required parameter.
    275   const std::string& file_id() const { return file_id_; }
    276   void set_file_id(const std::string& file_id) { file_id_ = file_id; }
    277 
    278   // Optional request body.
    279   const std::vector<std::string>& parents() const { return parents_; }
    280   void add_parent(const std::string& parent) { parents_.push_back(parent); }
    281 
    282   const base::Time& modified_date() const { return modified_date_; }
    283   void set_modified_date(const base::Time& modified_date) {
    284     modified_date_ = modified_date;
    285   }
    286 
    287   const std::string& title() const { return title_; }
    288   void set_title(const std::string& title) { title_ = title; }
    289 
    290  protected:
    291   // Overridden from URLFetchRequestBase.
    292   virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
    293   virtual bool GetContentData(std::string* upload_content_type,
    294                               std::string* upload_content) OVERRIDE;
    295 
    296   // Overridden from DriveApiDataRequest.
    297   virtual GURL GetURLInternal() const OVERRIDE;
    298 
    299  private:
    300   const DriveApiUrlGenerator url_generator_;
    301 
    302   std::string file_id_;
    303   base::Time modified_date_;
    304   std::vector<std::string> parents_;
    305   std::string title_;
    306 
    307   DISALLOW_COPY_AND_ASSIGN(FilesCopyRequest);
    308 };
    309 
    310 //============================= FilesListRequest =============================
    311 
    312 // This class performs the request for fetching FileList.
    313 // The result may contain only first part of the result. The remaining result
    314 // should be able to be fetched by ContinueGetFileListRequest defined below,
    315 // or by FilesListRequest with setting page token.
    316 // This request is mapped to
    317 // https://developers.google.com/drive/v2/reference/files/list
    318 class FilesListRequest : public DriveApiDataRequest {
    319  public:
    320   FilesListRequest(RequestSender* sender,
    321                    const DriveApiUrlGenerator& url_generator,
    322                    const FileListCallback& callback);
    323   virtual ~FilesListRequest();
    324 
    325   // Optional parameter
    326   int max_results() const { return max_results_; }
    327   void set_max_results(int max_results) { max_results_ = max_results; }
    328 
    329   const std::string& page_token() const { return page_token_; }
    330   void set_page_token(const std::string& page_token) {
    331     page_token_ = page_token;
    332   }
    333 
    334   const std::string& q() const { return q_; }
    335   void set_q(const std::string& q) { q_ = q; }
    336 
    337  protected:
    338   // Overridden from DriveApiDataRequest.
    339   virtual GURL GetURLInternal() const OVERRIDE;
    340 
    341  private:
    342   const DriveApiUrlGenerator url_generator_;
    343   int max_results_;
    344   std::string page_token_;
    345   std::string q_;
    346 
    347   DISALLOW_COPY_AND_ASSIGN(FilesListRequest);
    348 };
    349 
    350 //========================= FilesListNextPageRequest ==========================
    351 
    352 // There are two ways to obtain next pages of "Files: list" result (if paged).
    353 // 1) Set pageToken and all params used for the initial request.
    354 // 2) Use URL in the nextLink field in the previous response.
    355 // This class implements 2)'s request.
    356 class FilesListNextPageRequest : public DriveApiDataRequest {
    357  public:
    358   FilesListNextPageRequest(RequestSender* sender,
    359                            const FileListCallback& callback);
    360   virtual ~FilesListNextPageRequest();
    361 
    362   const GURL& next_link() const { return next_link_; }
    363   void set_next_link(const GURL& next_link) { next_link_ = next_link; }
    364 
    365  protected:
    366   // Overridden from DriveApiDataRequest.
    367   virtual GURL GetURLInternal() const OVERRIDE;
    368 
    369  private:
    370   GURL next_link_;
    371 
    372   DISALLOW_COPY_AND_ASSIGN(FilesListNextPageRequest);
    373 };
    374 
    375 //============================= FilesDeleteRequest =============================
    376 
    377 // This class performs the request for deleting a resource.
    378 // This request is mapped to
    379 // https://developers.google.com/drive/v2/reference/files/delete
    380 class FilesDeleteRequest : public EntryActionRequest {
    381  public:
    382   FilesDeleteRequest(RequestSender* sender,
    383                      const DriveApiUrlGenerator& url_generator,
    384                      const EntryActionCallback& callback);
    385   virtual ~FilesDeleteRequest();
    386 
    387   // Required parameter.
    388   const std::string& file_id() const { return file_id_; }
    389   void set_file_id(const std::string& file_id) { file_id_ = file_id; }
    390   void set_etag(const std::string& etag) { etag_ = etag; }
    391 
    392  protected:
    393   // Overridden from UrlFetchRequestBase.
    394   virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
    395   virtual GURL GetURL() const OVERRIDE;
    396   virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE;
    397 
    398  private:
    399   const DriveApiUrlGenerator url_generator_;
    400   std::string file_id_;
    401   std::string etag_;
    402 
    403   DISALLOW_COPY_AND_ASSIGN(FilesDeleteRequest);
    404 };
    405 
    406 //============================= FilesTrashRequest ==============================
    407 
    408 // This class performs the request for trashing a resource.
    409 // This request is mapped to
    410 // https://developers.google.com/drive/v2/reference/files/trash
    411 class FilesTrashRequest : public DriveApiDataRequest {
    412  public:
    413   FilesTrashRequest(RequestSender* sender,
    414                     const DriveApiUrlGenerator& url_generator,
    415                     const FileResourceCallback& callback);
    416   virtual ~FilesTrashRequest();
    417 
    418   // Required parameter.
    419   const std::string& file_id() const { return file_id_; }
    420   void set_file_id(const std::string& file_id) { file_id_ = file_id; }
    421 
    422  protected:
    423   // Overridden from UrlFetchRequestBase.
    424   virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
    425 
    426   // Overridden from DriveApiDataRequest.
    427   virtual GURL GetURLInternal() const OVERRIDE;
    428 
    429  private:
    430   const DriveApiUrlGenerator url_generator_;
    431   std::string file_id_;
    432 
    433   DISALLOW_COPY_AND_ASSIGN(FilesTrashRequest);
    434 };
    435 
    436 //============================== AboutGetRequest =============================
    437 
    438 // This class performs the request for fetching About data.
    439 // This request is mapped to
    440 // https://developers.google.com/drive/v2/reference/about/get
    441 class AboutGetRequest : public DriveApiDataRequest {
    442  public:
    443   AboutGetRequest(RequestSender* sender,
    444                   const DriveApiUrlGenerator& url_generator,
    445                   const AboutResourceCallback& callback);
    446   virtual ~AboutGetRequest();
    447 
    448  protected:
    449   // Overridden from DriveApiDataRequest.
    450   virtual GURL GetURLInternal() const OVERRIDE;
    451 
    452  private:
    453   const DriveApiUrlGenerator url_generator_;
    454 
    455   DISALLOW_COPY_AND_ASSIGN(AboutGetRequest);
    456 };
    457 
    458 //============================ ChangesListRequest ============================
    459 
    460 // This class performs the request for fetching ChangeList.
    461 // The result may contain only first part of the result. The remaining result
    462 // should be able to be fetched by ContinueGetFileListRequest defined below.
    463 // or by ChangesListRequest with setting page token.
    464 // This request is mapped to
    465 // https://developers.google.com/drive/v2/reference/changes/list
    466 class ChangesListRequest : public DriveApiDataRequest {
    467  public:
    468   ChangesListRequest(RequestSender* sender,
    469                      const DriveApiUrlGenerator& url_generator,
    470                      const ChangeListCallback& callback);
    471   virtual ~ChangesListRequest();
    472 
    473   // Optional parameter
    474   bool include_deleted() const { return include_deleted_; }
    475   void set_include_deleted(bool include_deleted) {
    476     include_deleted_ = include_deleted;
    477   }
    478 
    479   int max_results() const { return max_results_; }
    480   void set_max_results(int max_results) { max_results_ = max_results; }
    481 
    482   const std::string& page_token() const { return page_token_; }
    483   void set_page_token(const std::string& page_token) {
    484     page_token_ = page_token;
    485   }
    486 
    487   int64 start_change_id() const { return start_change_id_; }
    488   void set_start_change_id(int64 start_change_id) {
    489     start_change_id_ = start_change_id;
    490   }
    491 
    492  protected:
    493   // Overridden from DriveApiDataRequest.
    494   virtual GURL GetURLInternal() const OVERRIDE;
    495 
    496  private:
    497   const DriveApiUrlGenerator url_generator_;
    498   bool include_deleted_;
    499   int max_results_;
    500   std::string page_token_;
    501   int64 start_change_id_;
    502 
    503   DISALLOW_COPY_AND_ASSIGN(ChangesListRequest);
    504 };
    505 
    506 //======================== ChangesListNextPageRequest =========================
    507 
    508 // There are two ways to obtain next pages of "Changes: list" result (if paged).
    509 // 1) Set pageToken and all params used for the initial request.
    510 // 2) Use URL in the nextLink field in the previous response.
    511 // This class implements 2)'s request.
    512 class ChangesListNextPageRequest : public DriveApiDataRequest {
    513  public:
    514   ChangesListNextPageRequest(RequestSender* sender,
    515                              const ChangeListCallback& callback);
    516   virtual ~ChangesListNextPageRequest();
    517 
    518   const GURL& next_link() const { return next_link_; }
    519   void set_next_link(const GURL& next_link) { next_link_ = next_link; }
    520 
    521  protected:
    522   // Overridden from DriveApiDataRequest.
    523   virtual GURL GetURLInternal() const OVERRIDE;
    524 
    525  private:
    526   GURL next_link_;
    527 
    528   DISALLOW_COPY_AND_ASSIGN(ChangesListNextPageRequest);
    529 };
    530 
    531 //============================= AppsListRequest ============================
    532 
    533 // This class performs the request for fetching AppList.
    534 // This request is mapped to
    535 // https://developers.google.com/drive/v2/reference/apps/list
    536 class AppsListRequest : public DriveApiDataRequest {
    537  public:
    538   AppsListRequest(RequestSender* sender,
    539                   const DriveApiUrlGenerator& url_generator,
    540                   bool use_internal_endpoint,
    541                   const AppListCallback& callback);
    542   virtual ~AppsListRequest();
    543 
    544  protected:
    545   // Overridden from DriveApiDataRequest.
    546   virtual GURL GetURLInternal() const OVERRIDE;
    547 
    548  private:
    549   const DriveApiUrlGenerator url_generator_;
    550   bool use_internal_endpoint_;
    551 
    552   DISALLOW_COPY_AND_ASSIGN(AppsListRequest);
    553 };
    554 
    555 //============================= AppsDeleteRequest ==============================
    556 
    557 // This class performs the request for deleting a Drive app.
    558 // This request is mapped to
    559 // https://developers.google.com/drive/v2/reference/files/trash
    560 class AppsDeleteRequest : public EntryActionRequest {
    561  public:
    562   AppsDeleteRequest(RequestSender* sender,
    563                     const DriveApiUrlGenerator& url_generator,
    564                     const EntryActionCallback& callback);
    565   virtual ~AppsDeleteRequest();
    566 
    567   // Required parameter.
    568   const std::string& app_id() const { return app_id_; }
    569   void set_app_id(const std::string& app_id) { app_id_ = app_id; }
    570 
    571  protected:
    572   // Overridden from UrlFetchRequestBase.
    573   virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
    574   virtual GURL GetURL() const OVERRIDE;
    575 
    576  private:
    577   const DriveApiUrlGenerator url_generator_;
    578   std::string app_id_;
    579 
    580   DISALLOW_COPY_AND_ASSIGN(AppsDeleteRequest);
    581 };
    582 
    583 //========================== ChildrenInsertRequest ============================
    584 
    585 // This class performs the request for inserting a resource to a directory.
    586 // This request is mapped to
    587 // https://developers.google.com/drive/v2/reference/children/insert
    588 class ChildrenInsertRequest : public EntryActionRequest {
    589  public:
    590   ChildrenInsertRequest(RequestSender* sender,
    591                         const DriveApiUrlGenerator& url_generator,
    592                         const EntryActionCallback& callback);
    593   virtual ~ChildrenInsertRequest();
    594 
    595   // Required parameter.
    596   const std::string& folder_id() const { return folder_id_; }
    597   void set_folder_id(const std::string& folder_id) {
    598     folder_id_ = folder_id;
    599   }
    600 
    601   // Required body.
    602   const std::string& id() const { return id_; }
    603   void set_id(const std::string& id) { id_ = id; }
    604 
    605  protected:
    606   // UrlFetchRequestBase overrides.
    607   virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
    608   virtual GURL GetURL() const OVERRIDE;
    609   virtual bool GetContentData(std::string* upload_content_type,
    610                               std::string* upload_content) OVERRIDE;
    611 
    612  private:
    613   const DriveApiUrlGenerator url_generator_;
    614   std::string folder_id_;
    615   std::string id_;
    616 
    617   DISALLOW_COPY_AND_ASSIGN(ChildrenInsertRequest);
    618 };
    619 
    620 //========================== ChildrenDeleteRequest ============================
    621 
    622 // This class performs the request for removing a resource from a directory.
    623 // This request is mapped to
    624 // https://developers.google.com/drive/v2/reference/children/delete
    625 class ChildrenDeleteRequest : public EntryActionRequest {
    626  public:
    627   // |callback| must not be null.
    628   ChildrenDeleteRequest(RequestSender* sender,
    629                         const DriveApiUrlGenerator& url_generator,
    630                         const EntryActionCallback& callback);
    631   virtual ~ChildrenDeleteRequest();
    632 
    633   // Required parameter.
    634   const std::string& child_id() const { return child_id_; }
    635   void set_child_id(const std::string& child_id) {
    636     child_id_ = child_id;
    637   }
    638 
    639   const std::string& folder_id() const { return folder_id_; }
    640   void set_folder_id(const std::string& folder_id) {
    641     folder_id_ = folder_id;
    642   }
    643 
    644  protected:
    645   // UrlFetchRequestBase overrides.
    646   virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
    647   virtual GURL GetURL() const OVERRIDE;
    648 
    649  private:
    650   const DriveApiUrlGenerator url_generator_;
    651   std::string child_id_;
    652   std::string folder_id_;
    653 
    654   DISALLOW_COPY_AND_ASSIGN(ChildrenDeleteRequest);
    655 };
    656 
    657 //======================= InitiateUploadNewFileRequest =======================
    658 
    659 // This class performs the request for initiating the upload of a new file.
    660 class InitiateUploadNewFileRequest : public InitiateUploadRequestBase {
    661  public:
    662   // |parent_resource_id| should be the resource id of the parent directory.
    663   // |title| should be set.
    664   // See also the comments of InitiateUploadRequestBase for more details
    665   // about the other parameters.
    666   InitiateUploadNewFileRequest(RequestSender* sender,
    667                                const DriveApiUrlGenerator& url_generator,
    668                                const std::string& content_type,
    669                                int64 content_length,
    670                                const std::string& parent_resource_id,
    671                                const std::string& title,
    672                                const InitiateUploadCallback& callback);
    673   virtual ~InitiateUploadNewFileRequest();
    674 
    675   // Optional parameters.
    676   const base::Time& modified_date() const { return modified_date_; }
    677   void set_modified_date(const base::Time& modified_date) {
    678     modified_date_ = modified_date;
    679   }
    680   const base::Time& last_viewed_by_me_date() const {
    681     return last_viewed_by_me_date_;
    682   }
    683   void set_last_viewed_by_me_date(const base::Time& last_viewed_by_me_date) {
    684     last_viewed_by_me_date_ = last_viewed_by_me_date;
    685   }
    686 
    687  protected:
    688   // UrlFetchRequestBase overrides.
    689   virtual GURL GetURL() const OVERRIDE;
    690   virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
    691   virtual bool GetContentData(std::string* upload_content_type,
    692                               std::string* upload_content) OVERRIDE;
    693 
    694  private:
    695   const DriveApiUrlGenerator url_generator_;
    696   const std::string parent_resource_id_;
    697   const std::string title_;
    698 
    699   base::Time modified_date_;
    700   base::Time last_viewed_by_me_date_;
    701 
    702   DISALLOW_COPY_AND_ASSIGN(InitiateUploadNewFileRequest);
    703 };
    704 
    705 //==================== InitiateUploadExistingFileRequest =====================
    706 
    707 // This class performs the request for initiating the upload of an existing
    708 // file.
    709 class InitiateUploadExistingFileRequest : public InitiateUploadRequestBase {
    710  public:
    711   // |upload_url| should be the upload_url() of the file
    712   //    (resumable-create-media URL)
    713   // |etag| should be set if it is available to detect the upload confliction.
    714   // See also the comments of InitiateUploadRequestBase for more details
    715   // about the other parameters.
    716   InitiateUploadExistingFileRequest(RequestSender* sender,
    717                                     const DriveApiUrlGenerator& url_generator,
    718                                     const std::string& content_type,
    719                                     int64 content_length,
    720                                     const std::string& resource_id,
    721                                     const std::string& etag,
    722                                     const InitiateUploadCallback& callback);
    723   virtual ~InitiateUploadExistingFileRequest();
    724 
    725 
    726   // Optional parameters.
    727   const std::string& parent_resource_id() const { return parent_resource_id_; }
    728   void set_parent_resource_id(const std::string& parent_resource_id) {
    729     parent_resource_id_ = parent_resource_id;
    730   }
    731   const std::string& title() const { return title_; }
    732   void set_title(const std::string& title) { title_ = title; }
    733   const base::Time& modified_date() const { return modified_date_; }
    734   void set_modified_date(const base::Time& modified_date) {
    735     modified_date_ = modified_date;
    736   }
    737   const base::Time& last_viewed_by_me_date() const {
    738     return last_viewed_by_me_date_;
    739   }
    740   void set_last_viewed_by_me_date(const base::Time& last_viewed_by_me_date) {
    741     last_viewed_by_me_date_ = last_viewed_by_me_date;
    742   }
    743 
    744  protected:
    745   // UrlFetchRequestBase overrides.
    746   virtual GURL GetURL() const OVERRIDE;
    747   virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
    748   virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE;
    749   virtual bool GetContentData(std::string* upload_content_type,
    750                               std::string* upload_content) OVERRIDE;
    751 
    752  private:
    753   const DriveApiUrlGenerator url_generator_;
    754   const std::string resource_id_;
    755   const std::string etag_;
    756 
    757   std::string parent_resource_id_;
    758   std::string title_;
    759   base::Time modified_date_;
    760   base::Time last_viewed_by_me_date_;
    761 
    762   DISALLOW_COPY_AND_ASSIGN(InitiateUploadExistingFileRequest);
    763 };
    764 
    765 // Callback used for ResumeUpload() and GetUploadStatus().
    766 typedef base::Callback<void(
    767     const UploadRangeResponse& response,
    768     scoped_ptr<FileResource> new_resource)> UploadRangeCallback;
    769 
    770 //============================ ResumeUploadRequest ===========================
    771 
    772 // Performs the request for resuming the upload of a file.
    773 class ResumeUploadRequest : public ResumeUploadRequestBase {
    774  public:
    775   // See also ResumeUploadRequestBase's comment for parameters meaning.
    776   // |callback| must not be null. |progress_callback| may be null.
    777   ResumeUploadRequest(RequestSender* sender,
    778                       const GURL& upload_location,
    779                       int64 start_position,
    780                       int64 end_position,
    781                       int64 content_length,
    782                       const std::string& content_type,
    783                       const base::FilePath& local_file_path,
    784                       const UploadRangeCallback& callback,
    785                       const ProgressCallback& progress_callback);
    786   virtual ~ResumeUploadRequest();
    787 
    788  protected:
    789   // UploadRangeRequestBase overrides.
    790   virtual void OnRangeRequestComplete(
    791       const UploadRangeResponse& response,
    792       scoped_ptr<base::Value> value) OVERRIDE;
    793   // content::UrlFetcherDelegate overrides.
    794   virtual void OnURLFetchUploadProgress(const net::URLFetcher* source,
    795                                         int64 current, int64 total) OVERRIDE;
    796 
    797  private:
    798   const UploadRangeCallback callback_;
    799   const ProgressCallback progress_callback_;
    800 
    801   DISALLOW_COPY_AND_ASSIGN(ResumeUploadRequest);
    802 };
    803 
    804 //========================== GetUploadStatusRequest ==========================
    805 
    806 // Performs the request to fetch the current upload status of a file.
    807 class GetUploadStatusRequest : public GetUploadStatusRequestBase {
    808  public:
    809   // See also GetUploadStatusRequestBase's comment for parameters meaning.
    810   // |callback| must not be null.
    811   GetUploadStatusRequest(RequestSender* sender,
    812                          const GURL& upload_url,
    813                          int64 content_length,
    814                          const UploadRangeCallback& callback);
    815   virtual ~GetUploadStatusRequest();
    816 
    817  protected:
    818   // UploadRangeRequestBase overrides.
    819   virtual void OnRangeRequestComplete(
    820       const UploadRangeResponse& response,
    821       scoped_ptr<base::Value> value) OVERRIDE;
    822 
    823  private:
    824   const UploadRangeCallback callback_;
    825 
    826   DISALLOW_COPY_AND_ASSIGN(GetUploadStatusRequest);
    827 };
    828 
    829 //========================== DownloadFileRequest ==========================
    830 
    831 // This class performs the request for downloading of a specified file.
    832 class DownloadFileRequest : public DownloadFileRequestBase {
    833  public:
    834   // See also DownloadFileRequestBase's comment for parameters meaning.
    835   DownloadFileRequest(RequestSender* sender,
    836                       const DriveApiUrlGenerator& url_generator,
    837                       const std::string& resource_id,
    838                       const base::FilePath& output_file_path,
    839                       const DownloadActionCallback& download_action_callback,
    840                       const GetContentCallback& get_content_callback,
    841                       const ProgressCallback& progress_callback);
    842   virtual ~DownloadFileRequest();
    843 
    844   DISALLOW_COPY_AND_ASSIGN(DownloadFileRequest);
    845 };
    846 
    847 //========================== PermissionsInsertRequest ==========================
    848 
    849 // Enumeration type for specifying type of permissions.
    850 enum PermissionType {
    851   PERMISSION_TYPE_ANYONE,
    852   PERMISSION_TYPE_DOMAIN,
    853   PERMISSION_TYPE_GROUP,
    854   PERMISSION_TYPE_USER,
    855 };
    856 
    857 // Enumeration type for specifying the role of permissions.
    858 enum PermissionRole {
    859   PERMISSION_ROLE_OWNER,
    860   PERMISSION_ROLE_READER,
    861   PERMISSION_ROLE_WRITER,
    862   PERMISSION_ROLE_COMMENTER,
    863 };
    864 
    865 // This class performs the request for adding permission on a specified file.
    866 class PermissionsInsertRequest : public EntryActionRequest {
    867  public:
    868   // See https://developers.google.com/drive/v2/reference/permissions/insert.
    869   PermissionsInsertRequest(RequestSender* sender,
    870                            const DriveApiUrlGenerator& url_generator,
    871                            const EntryActionCallback& callback);
    872   virtual ~PermissionsInsertRequest();
    873 
    874   void set_id(const std::string& id) { id_ = id; }
    875   void set_type(PermissionType type) { type_ = type; }
    876   void set_role(PermissionRole role) { role_ = role; }
    877   void set_value(const std::string& value) { value_ = value; }
    878 
    879   // UrlFetchRequestBase overrides.
    880   virtual GURL GetURL() const OVERRIDE;
    881   virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
    882   virtual bool GetContentData(std::string* upload_content_type,
    883                               std::string* upload_content) OVERRIDE;
    884 
    885  private:
    886   const DriveApiUrlGenerator url_generator_;
    887   std::string id_;
    888   PermissionType type_;
    889   PermissionRole role_;
    890   std::string value_;
    891 
    892   DISALLOW_COPY_AND_ASSIGN(PermissionsInsertRequest);
    893 };
    894 
    895 }  // namespace drive
    896 }  // namespace google_apis
    897 
    898 #endif  // GOOGLE_APIS_DRIVE_DRIVE_API_REQUESTS_H_
    899