• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
fields()52   const std::string& fields() const { return fields_; }
set_fields(const std::string & 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.
file_id()82   const std::string& file_id() const { return file_id_; }
set_file_id(const std::string & 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 //============================ FilesInsertRequest =============================
97 
98 // This class performs the request for creating a resource.
99 // This request is mapped to
100 // https://developers.google.com/drive/v2/reference/files/insert
101 // See also https://developers.google.com/drive/manage-uploads and
102 // https://developers.google.com/drive/folder
103 class FilesInsertRequest : public DriveApiDataRequest {
104  public:
105   FilesInsertRequest(RequestSender* sender,
106                      const DriveApiUrlGenerator& url_generator,
107                      const FileResourceCallback& callback);
108   virtual ~FilesInsertRequest();
109 
110   // Optional request body.
mime_type()111   const std::string& mime_type() const { return mime_type_; }
set_mime_type(const std::string & mime_type)112   void set_mime_type(const std::string& mime_type) {
113     mime_type_ = mime_type;
114   }
115 
parents()116   const std::vector<std::string>& parents() const { return parents_; }
add_parent(const std::string & parent)117   void add_parent(const std::string& parent) { parents_.push_back(parent); }
118 
title()119   const std::string& title() const { return title_; }
set_title(const std::string & title)120   void set_title(const std::string& title) { title_ = title; }
121 
122  protected:
123   // Overridden from GetDataRequest.
124   virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
125   virtual bool GetContentData(std::string* upload_content_type,
126                               std::string* upload_content) OVERRIDE;
127 
128   // Overridden from DriveApiDataRequest.
129   virtual GURL GetURLInternal() const OVERRIDE;
130 
131  private:
132   const DriveApiUrlGenerator url_generator_;
133 
134   std::string mime_type_;
135   std::vector<std::string> parents_;
136   std::string title_;
137 
138   DISALLOW_COPY_AND_ASSIGN(FilesInsertRequest);
139 };
140 
141 //============================== FilesPatchRequest ============================
142 
143 // This class performs the request for patching file metadata.
144 // This request is mapped to
145 // https://developers.google.com/drive/v2/reference/files/patch
146 class FilesPatchRequest : public DriveApiDataRequest {
147  public:
148   FilesPatchRequest(RequestSender* sender,
149                     const DriveApiUrlGenerator& url_generator,
150                     const FileResourceCallback& callback);
151   virtual ~FilesPatchRequest();
152 
153   // Required parameter.
file_id()154   const std::string& file_id() const { return file_id_; }
set_file_id(const std::string & file_id)155   void set_file_id(const std::string& file_id) { file_id_ = file_id; }
156 
157   // Optional parameter.
set_modified_date()158   bool set_modified_date() const { return set_modified_date_; }
set_set_modified_date(bool set_modified_date)159   void set_set_modified_date(bool set_modified_date) {
160     set_modified_date_ = set_modified_date;
161   }
162 
update_viewed_date()163   bool update_viewed_date() const { return update_viewed_date_; }
set_update_viewed_date(bool update_viewed_date)164   void set_update_viewed_date(bool update_viewed_date) {
165     update_viewed_date_ = update_viewed_date;
166   }
167 
168   // Optional request body.
169   // Note: "Files: patch" accepts any "Files resource" data, but this class
170   // only supports limited members of it for now. We can extend it upon
171   // requirments.
title()172   const std::string& title() const { return title_; }
set_title(const std::string & title)173   void set_title(const std::string& title) { title_ = title; }
174 
modified_date()175   const base::Time& modified_date() const { return modified_date_; }
set_modified_date(const base::Time & modified_date)176   void set_modified_date(const base::Time& modified_date) {
177     modified_date_ = modified_date;
178   }
179 
last_viewed_by_me_date()180   const base::Time& last_viewed_by_me_date() const {
181     return last_viewed_by_me_date_;
182   }
set_last_viewed_by_me_date(const base::Time & last_viewed_by_me_date)183   void set_last_viewed_by_me_date(const base::Time& last_viewed_by_me_date) {
184     last_viewed_by_me_date_ = last_viewed_by_me_date;
185   }
186 
parents()187   const std::vector<std::string>& parents() const { return parents_; }
add_parent(const std::string & parent)188   void add_parent(const std::string& parent) { parents_.push_back(parent); }
189 
190  protected:
191   // Overridden from URLFetchRequestBase.
192   virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
193   virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE;
194   virtual bool GetContentData(std::string* upload_content_type,
195                               std::string* upload_content) OVERRIDE;
196 
197   // Overridden from DriveApiDataRequest.
198   virtual GURL GetURLInternal() const OVERRIDE;
199 
200  private:
201   const DriveApiUrlGenerator url_generator_;
202 
203   std::string file_id_;
204   bool set_modified_date_;
205   bool update_viewed_date_;
206 
207   std::string title_;
208   base::Time modified_date_;
209   base::Time last_viewed_by_me_date_;
210   std::vector<std::string> parents_;
211 
212   DISALLOW_COPY_AND_ASSIGN(FilesPatchRequest);
213 };
214 
215 //============================= FilesCopyRequest ==============================
216 
217 // This class performs the request for copying a resource.
218 // This request is mapped to
219 // https://developers.google.com/drive/v2/reference/files/copy
220 class FilesCopyRequest : public DriveApiDataRequest {
221  public:
222   // Upon completion, |callback| will be called. |callback| must not be null.
223   FilesCopyRequest(RequestSender* sender,
224                    const DriveApiUrlGenerator& url_generator,
225                    const FileResourceCallback& callback);
226   virtual ~FilesCopyRequest();
227 
228   // Required parameter.
file_id()229   const std::string& file_id() const { return file_id_; }
set_file_id(const std::string & file_id)230   void set_file_id(const std::string& file_id) { file_id_ = file_id; }
231 
232   // Optional request body.
parents()233   const std::vector<std::string>& parents() const { return parents_; }
add_parent(const std::string & parent)234   void add_parent(const std::string& parent) { parents_.push_back(parent); }
235 
modified_date()236   const base::Time& modified_date() const { return modified_date_; }
set_modified_date(const base::Time & modified_date)237   void set_modified_date(const base::Time& modified_date) {
238     modified_date_ = modified_date;
239   }
240 
title()241   const std::string& title() const { return title_; }
set_title(const std::string & title)242   void set_title(const std::string& title) { title_ = title; }
243 
244  protected:
245   // Overridden from URLFetchRequestBase.
246   virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
247   virtual bool GetContentData(std::string* upload_content_type,
248                               std::string* upload_content) OVERRIDE;
249 
250   // Overridden from DriveApiDataRequest.
251   virtual GURL GetURLInternal() const OVERRIDE;
252 
253  private:
254   const DriveApiUrlGenerator url_generator_;
255 
256   std::string file_id_;
257   base::Time modified_date_;
258   std::vector<std::string> parents_;
259   std::string title_;
260 
261   DISALLOW_COPY_AND_ASSIGN(FilesCopyRequest);
262 };
263 
264 //============================= FilesListRequest =============================
265 
266 // This class performs the request for fetching FileList.
267 // The result may contain only first part of the result. The remaining result
268 // should be able to be fetched by ContinueGetFileListRequest defined below,
269 // or by FilesListRequest with setting page token.
270 // This request is mapped to
271 // https://developers.google.com/drive/v2/reference/files/list
272 class FilesListRequest : public DriveApiDataRequest {
273  public:
274   FilesListRequest(RequestSender* sender,
275                    const DriveApiUrlGenerator& url_generator,
276                    const FileListCallback& callback);
277   virtual ~FilesListRequest();
278 
279   // Optional parameter
max_results()280   int max_results() const { return max_results_; }
set_max_results(int max_results)281   void set_max_results(int max_results) { max_results_ = max_results; }
282 
page_token()283   const std::string& page_token() const { return page_token_; }
set_page_token(const std::string & page_token)284   void set_page_token(const std::string& page_token) {
285     page_token_ = page_token;
286   }
287 
q()288   const std::string& q() const { return q_; }
set_q(const std::string & q)289   void set_q(const std::string& q) { q_ = q; }
290 
291  protected:
292   // Overridden from DriveApiDataRequest.
293   virtual GURL GetURLInternal() const OVERRIDE;
294 
295  private:
296   const DriveApiUrlGenerator url_generator_;
297   int max_results_;
298   std::string page_token_;
299   std::string q_;
300 
301   DISALLOW_COPY_AND_ASSIGN(FilesListRequest);
302 };
303 
304 //========================= FilesListNextPageRequest ==========================
305 
306 // There are two ways to obtain next pages of "Files: list" result (if paged).
307 // 1) Set pageToken and all params used for the initial request.
308 // 2) Use URL in the nextLink field in the previous response.
309 // This class implements 2)'s request.
310 class FilesListNextPageRequest : public DriveApiDataRequest {
311  public:
312   FilesListNextPageRequest(RequestSender* sender,
313                            const FileListCallback& callback);
314   virtual ~FilesListNextPageRequest();
315 
next_link()316   const GURL& next_link() const { return next_link_; }
set_next_link(const GURL & next_link)317   void set_next_link(const GURL& next_link) { next_link_ = next_link; }
318 
319  protected:
320   // Overridden from DriveApiDataRequest.
321   virtual GURL GetURLInternal() const OVERRIDE;
322 
323  private:
324   GURL next_link_;
325 
326   DISALLOW_COPY_AND_ASSIGN(FilesListNextPageRequest);
327 };
328 
329 //============================= FilesDeleteRequest =============================
330 
331 // This class performs the request for deleting a resource.
332 // This request is mapped to
333 // https://developers.google.com/drive/v2/reference/files/delete
334 class FilesDeleteRequest : public EntryActionRequest {
335  public:
336   FilesDeleteRequest(RequestSender* sender,
337                      const DriveApiUrlGenerator& url_generator,
338                      const EntryActionCallback& callback);
339   virtual ~FilesDeleteRequest();
340 
341   // Required parameter.
file_id()342   const std::string& file_id() const { return file_id_; }
set_file_id(const std::string & file_id)343   void set_file_id(const std::string& file_id) { file_id_ = file_id; }
set_etag(const std::string & etag)344   void set_etag(const std::string& etag) { etag_ = etag; }
345 
346  protected:
347   // Overridden from UrlFetchRequestBase.
348   virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
349   virtual GURL GetURL() const OVERRIDE;
350   virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE;
351 
352  private:
353   const DriveApiUrlGenerator url_generator_;
354   std::string file_id_;
355   std::string etag_;
356 
357   DISALLOW_COPY_AND_ASSIGN(FilesDeleteRequest);
358 };
359 
360 //============================= FilesTrashRequest ==============================
361 
362 // This class performs the request for trashing a resource.
363 // This request is mapped to
364 // https://developers.google.com/drive/v2/reference/files/trash
365 class FilesTrashRequest : public DriveApiDataRequest {
366  public:
367   FilesTrashRequest(RequestSender* sender,
368                     const DriveApiUrlGenerator& url_generator,
369                     const FileResourceCallback& callback);
370   virtual ~FilesTrashRequest();
371 
372   // Required parameter.
file_id()373   const std::string& file_id() const { return file_id_; }
set_file_id(const std::string & file_id)374   void set_file_id(const std::string& file_id) { file_id_ = file_id; }
375 
376  protected:
377   // Overridden from UrlFetchRequestBase.
378   virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
379 
380   // Overridden from DriveApiDataRequest.
381   virtual GURL GetURLInternal() const OVERRIDE;
382 
383  private:
384   const DriveApiUrlGenerator url_generator_;
385   std::string file_id_;
386 
387   DISALLOW_COPY_AND_ASSIGN(FilesTrashRequest);
388 };
389 
390 //============================== AboutGetRequest =============================
391 
392 // This class performs the request for fetching About data.
393 // This request is mapped to
394 // https://developers.google.com/drive/v2/reference/about/get
395 class AboutGetRequest : public DriveApiDataRequest {
396  public:
397   AboutGetRequest(RequestSender* sender,
398                   const DriveApiUrlGenerator& url_generator,
399                   const AboutResourceCallback& callback);
400   virtual ~AboutGetRequest();
401 
402  protected:
403   // Overridden from DriveApiDataRequest.
404   virtual GURL GetURLInternal() const OVERRIDE;
405 
406  private:
407   const DriveApiUrlGenerator url_generator_;
408 
409   DISALLOW_COPY_AND_ASSIGN(AboutGetRequest);
410 };
411 
412 //============================ ChangesListRequest ============================
413 
414 // This class performs the request for fetching ChangeList.
415 // The result may contain only first part of the result. The remaining result
416 // should be able to be fetched by ContinueGetFileListRequest defined below.
417 // or by ChangesListRequest with setting page token.
418 // This request is mapped to
419 // https://developers.google.com/drive/v2/reference/changes/list
420 class ChangesListRequest : public DriveApiDataRequest {
421  public:
422   ChangesListRequest(RequestSender* sender,
423                      const DriveApiUrlGenerator& url_generator,
424                      const ChangeListCallback& callback);
425   virtual ~ChangesListRequest();
426 
427   // Optional parameter
include_deleted()428   bool include_deleted() const { return include_deleted_; }
set_include_deleted(bool include_deleted)429   void set_include_deleted(bool include_deleted) {
430     include_deleted_ = include_deleted;
431   }
432 
max_results()433   int max_results() const { return max_results_; }
set_max_results(int max_results)434   void set_max_results(int max_results) { max_results_ = max_results; }
435 
page_token()436   const std::string& page_token() const { return page_token_; }
set_page_token(const std::string & page_token)437   void set_page_token(const std::string& page_token) {
438     page_token_ = page_token;
439   }
440 
start_change_id()441   int64 start_change_id() const { return start_change_id_; }
set_start_change_id(int64 start_change_id)442   void set_start_change_id(int64 start_change_id) {
443     start_change_id_ = start_change_id;
444   }
445 
446  protected:
447   // Overridden from DriveApiDataRequest.
448   virtual GURL GetURLInternal() const OVERRIDE;
449 
450  private:
451   const DriveApiUrlGenerator url_generator_;
452   bool include_deleted_;
453   int max_results_;
454   std::string page_token_;
455   int64 start_change_id_;
456 
457   DISALLOW_COPY_AND_ASSIGN(ChangesListRequest);
458 };
459 
460 //======================== ChangesListNextPageRequest =========================
461 
462 // There are two ways to obtain next pages of "Changes: list" result (if paged).
463 // 1) Set pageToken and all params used for the initial request.
464 // 2) Use URL in the nextLink field in the previous response.
465 // This class implements 2)'s request.
466 class ChangesListNextPageRequest : public DriveApiDataRequest {
467  public:
468   ChangesListNextPageRequest(RequestSender* sender,
469                              const ChangeListCallback& callback);
470   virtual ~ChangesListNextPageRequest();
471 
next_link()472   const GURL& next_link() const { return next_link_; }
set_next_link(const GURL & next_link)473   void set_next_link(const GURL& next_link) { next_link_ = next_link; }
474 
475  protected:
476   // Overridden from DriveApiDataRequest.
477   virtual GURL GetURLInternal() const OVERRIDE;
478 
479  private:
480   GURL next_link_;
481 
482   DISALLOW_COPY_AND_ASSIGN(ChangesListNextPageRequest);
483 };
484 
485 //============================= AppsListRequest ============================
486 
487 // This class performs the request for fetching AppList.
488 // This request is mapped to
489 // https://developers.google.com/drive/v2/reference/apps/list
490 class AppsListRequest : public DriveApiDataRequest {
491  public:
492   AppsListRequest(RequestSender* sender,
493                   const DriveApiUrlGenerator& url_generator,
494                   const AppListCallback& callback);
495   virtual ~AppsListRequest();
496 
497  protected:
498   // Overridden from DriveApiDataRequest.
499   virtual GURL GetURLInternal() const OVERRIDE;
500 
501  private:
502   const DriveApiUrlGenerator url_generator_;
503 
504   DISALLOW_COPY_AND_ASSIGN(AppsListRequest);
505 };
506 
507 //========================== ChildrenInsertRequest ============================
508 
509 // This class performs the request for inserting a resource to a directory.
510 // This request is mapped to
511 // https://developers.google.com/drive/v2/reference/children/insert
512 class ChildrenInsertRequest : public EntryActionRequest {
513  public:
514   ChildrenInsertRequest(RequestSender* sender,
515                         const DriveApiUrlGenerator& url_generator,
516                         const EntryActionCallback& callback);
517   virtual ~ChildrenInsertRequest();
518 
519   // Required parameter.
folder_id()520   const std::string& folder_id() const { return folder_id_; }
set_folder_id(const std::string & folder_id)521   void set_folder_id(const std::string& folder_id) {
522     folder_id_ = folder_id;
523   }
524 
525   // Required body.
id()526   const std::string& id() const { return id_; }
set_id(const std::string & id)527   void set_id(const std::string& id) { id_ = id; }
528 
529  protected:
530   // UrlFetchRequestBase overrides.
531   virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
532   virtual GURL GetURL() const OVERRIDE;
533   virtual bool GetContentData(std::string* upload_content_type,
534                               std::string* upload_content) OVERRIDE;
535 
536  private:
537   const DriveApiUrlGenerator url_generator_;
538   std::string folder_id_;
539   std::string id_;
540 
541   DISALLOW_COPY_AND_ASSIGN(ChildrenInsertRequest);
542 };
543 
544 //========================== ChildrenDeleteRequest ============================
545 
546 // This class performs the request for removing a resource from a directory.
547 // This request is mapped to
548 // https://developers.google.com/drive/v2/reference/children/delete
549 class ChildrenDeleteRequest : public EntryActionRequest {
550  public:
551   // |callback| must not be null.
552   ChildrenDeleteRequest(RequestSender* sender,
553                         const DriveApiUrlGenerator& url_generator,
554                         const EntryActionCallback& callback);
555   virtual ~ChildrenDeleteRequest();
556 
557   // Required parameter.
child_id()558   const std::string& child_id() const { return child_id_; }
set_child_id(const std::string & child_id)559   void set_child_id(const std::string& child_id) {
560     child_id_ = child_id;
561   }
562 
folder_id()563   const std::string& folder_id() const { return folder_id_; }
set_folder_id(const std::string & folder_id)564   void set_folder_id(const std::string& folder_id) {
565     folder_id_ = folder_id;
566   }
567 
568  protected:
569   // UrlFetchRequestBase overrides.
570   virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
571   virtual GURL GetURL() const OVERRIDE;
572 
573  private:
574   const DriveApiUrlGenerator url_generator_;
575   std::string child_id_;
576   std::string folder_id_;
577 
578   DISALLOW_COPY_AND_ASSIGN(ChildrenDeleteRequest);
579 };
580 
581 //======================= InitiateUploadNewFileRequest =======================
582 
583 // This class performs the request for initiating the upload of a new file.
584 class InitiateUploadNewFileRequest : public InitiateUploadRequestBase {
585  public:
586   // |parent_resource_id| should be the resource id of the parent directory.
587   // |title| should be set.
588   // See also the comments of InitiateUploadRequestBase for more details
589   // about the other parameters.
590   InitiateUploadNewFileRequest(RequestSender* sender,
591                                const DriveApiUrlGenerator& url_generator,
592                                const std::string& content_type,
593                                int64 content_length,
594                                const std::string& parent_resource_id,
595                                const std::string& title,
596                                const InitiateUploadCallback& callback);
597   virtual ~InitiateUploadNewFileRequest();
598 
599  protected:
600   // UrlFetchRequestBase overrides.
601   virtual GURL GetURL() const OVERRIDE;
602   virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
603   virtual bool GetContentData(std::string* upload_content_type,
604                               std::string* upload_content) OVERRIDE;
605 
606  private:
607   const DriveApiUrlGenerator url_generator_;
608   const std::string parent_resource_id_;
609   const std::string title_;
610 
611   DISALLOW_COPY_AND_ASSIGN(InitiateUploadNewFileRequest);
612 };
613 
614 //==================== InitiateUploadExistingFileRequest =====================
615 
616 // This class performs the request for initiating the upload of an existing
617 // file.
618 class InitiateUploadExistingFileRequest : public InitiateUploadRequestBase {
619  public:
620   // |upload_url| should be the upload_url() of the file
621   //    (resumable-create-media URL)
622   // |etag| should be set if it is available to detect the upload confliction.
623   // See also the comments of InitiateUploadRequestBase for more details
624   // about the other parameters.
625   InitiateUploadExistingFileRequest(RequestSender* sender,
626                                     const DriveApiUrlGenerator& url_generator,
627                                     const std::string& content_type,
628                                     int64 content_length,
629                                     const std::string& resource_id,
630                                     const std::string& etag,
631                                     const InitiateUploadCallback& callback);
632   virtual ~InitiateUploadExistingFileRequest();
633 
634  protected:
635   // UrlFetchRequestBase overrides.
636   virtual GURL GetURL() const OVERRIDE;
637   virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
638   virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE;
639 
640  private:
641   const DriveApiUrlGenerator url_generator_;
642   const std::string resource_id_;
643   const std::string etag_;
644 
645   DISALLOW_COPY_AND_ASSIGN(InitiateUploadExistingFileRequest);
646 };
647 
648 // Callback used for ResumeUpload() and GetUploadStatus().
649 typedef base::Callback<void(
650     const UploadRangeResponse& response,
651     scoped_ptr<FileResource> new_resource)> UploadRangeCallback;
652 
653 //============================ ResumeUploadRequest ===========================
654 
655 // Performs the request for resuming the upload of a file.
656 class ResumeUploadRequest : public ResumeUploadRequestBase {
657  public:
658   // See also ResumeUploadRequestBase's comment for parameters meaning.
659   // |callback| must not be null. |progress_callback| may be null.
660   ResumeUploadRequest(RequestSender* sender,
661                       const GURL& upload_location,
662                       int64 start_position,
663                       int64 end_position,
664                       int64 content_length,
665                       const std::string& content_type,
666                       const base::FilePath& local_file_path,
667                       const UploadRangeCallback& callback,
668                       const ProgressCallback& progress_callback);
669   virtual ~ResumeUploadRequest();
670 
671  protected:
672   // UploadRangeRequestBase overrides.
673   virtual void OnRangeRequestComplete(
674       const UploadRangeResponse& response,
675       scoped_ptr<base::Value> value) OVERRIDE;
676   // content::UrlFetcherDelegate overrides.
677   virtual void OnURLFetchUploadProgress(const net::URLFetcher* source,
678                                         int64 current, int64 total) OVERRIDE;
679 
680  private:
681   const UploadRangeCallback callback_;
682   const ProgressCallback progress_callback_;
683 
684   DISALLOW_COPY_AND_ASSIGN(ResumeUploadRequest);
685 };
686 
687 //========================== GetUploadStatusRequest ==========================
688 
689 // Performs the request to fetch the current upload status of a file.
690 class GetUploadStatusRequest : public GetUploadStatusRequestBase {
691  public:
692   // See also GetUploadStatusRequestBase's comment for parameters meaning.
693   // |callback| must not be null.
694   GetUploadStatusRequest(RequestSender* sender,
695                          const GURL& upload_url,
696                          int64 content_length,
697                          const UploadRangeCallback& callback);
698   virtual ~GetUploadStatusRequest();
699 
700  protected:
701   // UploadRangeRequestBase overrides.
702   virtual void OnRangeRequestComplete(
703       const UploadRangeResponse& response,
704       scoped_ptr<base::Value> value) OVERRIDE;
705 
706  private:
707   const UploadRangeCallback callback_;
708 
709   DISALLOW_COPY_AND_ASSIGN(GetUploadStatusRequest);
710 };
711 
712 //========================== DownloadFileRequest ==========================
713 
714 // This class performs the request for downloading of a specified file.
715 class DownloadFileRequest : public DownloadFileRequestBase {
716  public:
717   // See also DownloadFileRequestBase's comment for parameters meaning.
718   DownloadFileRequest(RequestSender* sender,
719                       const DriveApiUrlGenerator& url_generator,
720                       const std::string& resource_id,
721                       const base::FilePath& output_file_path,
722                       const DownloadActionCallback& download_action_callback,
723                       const GetContentCallback& get_content_callback,
724                       const ProgressCallback& progress_callback);
725   virtual ~DownloadFileRequest();
726 
727   DISALLOW_COPY_AND_ASSIGN(DownloadFileRequest);
728 };
729 
730 }  // namespace drive
731 }  // namespace google_apis
732 
733 #endif  // GOOGLE_APIS_DRIVE_DRIVE_API_REQUESTS_H_
734