Explicitly add python-numpy dependency to install-build-deps.
[chromium-blink-merge.git] / google_apis / drive / drive_api_requests.h
blobf7ff826c1441e0be16ab8dca781c236fa2d4f162
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.
5 #ifndef GOOGLE_APIS_DRIVE_DRIVE_API_REQUESTS_H_
6 #define GOOGLE_APIS_DRIVE_DRIVE_API_REQUESTS_H_
8 #include <string>
10 #include "base/callback_forward.h"
11 #include "base/location.h"
12 #include "base/sequenced_task_runner.h"
13 #include "base/task_runner_util.h"
14 #include "base/time/time.h"
15 #include "base/values.h"
16 #include "google_apis/drive/base_requests.h"
17 #include "google_apis/drive/drive_api_parser.h"
18 #include "google_apis/drive/drive_api_url_generator.h"
19 #include "google_apis/drive/drive_common_callbacks.h"
21 namespace google_apis {
23 // Callback used for requests that the server returns FileResource data
24 // formatted into JSON value.
25 typedef base::Callback<void(GDataErrorCode error,
26 scoped_ptr<FileResource> entry)>
27 FileResourceCallback;
29 // Callback used for requests that the server returns FileList data
30 // formatted into JSON value.
31 typedef base::Callback<void(GDataErrorCode error,
32 scoped_ptr<FileList> entry)> FileListCallback;
34 // Callback used for requests that the server returns ChangeList data
35 // formatted into JSON value.
36 typedef base::Callback<void(GDataErrorCode error,
37 scoped_ptr<ChangeList> entry)> ChangeListCallback;
39 namespace drive {
41 //============================ DriveApiPartialFieldRequest ====================
43 // This is base class of the Drive API related requests. All Drive API requests
44 // support partial request (to improve the performance). The function can be
45 // shared among the Drive API requests.
46 // See also https://developers.google.com/drive/performance
47 class DriveApiPartialFieldRequest : public UrlFetchRequestBase {
48 public:
49 explicit DriveApiPartialFieldRequest(RequestSender* sender);
50 ~DriveApiPartialFieldRequest() override;
52 // Optional parameter.
53 const std::string& fields() const { return fields_; }
54 void set_fields(const std::string& fields) { fields_ = fields; }
56 protected:
57 // UrlFetchRequestBase overrides.
58 GURL GetURL() const override;
60 // Derived classes should override GetURLInternal instead of GetURL()
61 // directly.
62 virtual GURL GetURLInternal() const = 0;
64 private:
65 std::string fields_;
67 DISALLOW_COPY_AND_ASSIGN(DriveApiPartialFieldRequest);
70 //============================ DriveApiDataRequest ===========================
72 // The base class of Drive API related requests that receive a JSON response
73 // representing |DataType|.
74 template<class DataType>
75 class DriveApiDataRequest : public DriveApiPartialFieldRequest {
76 public:
77 typedef base::Callback<void(GDataErrorCode error,
78 scoped_ptr<DataType> data)> Callback;
80 // |callback| is called when the request finishes either by success or by
81 // failure. On success, a JSON Value object is passed. It must not be null.
82 DriveApiDataRequest(RequestSender* sender, const Callback& callback)
83 : DriveApiPartialFieldRequest(sender),
84 callback_(callback),
85 weak_ptr_factory_(this) {
86 DCHECK(!callback_.is_null());
88 virtual ~DriveApiDataRequest() {}
90 protected:
91 // UrlFetchRequestBase overrides.
92 virtual void ProcessURLFetchResults(const net::URLFetcher* source) override {
93 GDataErrorCode error = GetErrorCode();
94 switch (error) {
95 case HTTP_SUCCESS:
96 case HTTP_CREATED:
97 base::PostTaskAndReplyWithResult(
98 blocking_task_runner(),
99 FROM_HERE,
100 base::Bind(&DriveApiDataRequest::Parse, response_writer()->data()),
101 base::Bind(&DriveApiDataRequest::OnDataParsed,
102 weak_ptr_factory_.GetWeakPtr(), error));
103 break;
104 default:
105 RunCallbackOnPrematureFailure(error);
106 OnProcessURLFetchResultsComplete();
107 break;
111 virtual void RunCallbackOnPrematureFailure(GDataErrorCode error) override {
112 callback_.Run(error, scoped_ptr<DataType>());
115 private:
116 // Parses the |json| string by using DataType::CreateFrom.
117 static scoped_ptr<DataType> Parse(const std::string& json) {
118 scoped_ptr<base::Value> value = ParseJson(json);
119 return value ? DataType::CreateFrom(*value) : scoped_ptr<DataType>();
122 // Receives the parsed result and invokes the callback.
123 void OnDataParsed(GDataErrorCode error, scoped_ptr<DataType> value) {
124 if (!value)
125 error = GDATA_PARSE_ERROR;
126 callback_.Run(error, value.Pass());
127 OnProcessURLFetchResultsComplete();
130 const Callback callback_;
132 // Note: This should remain the last member so it'll be destroyed and
133 // invalidate its weak pointers before any other members are destroyed.
134 base::WeakPtrFactory<DriveApiDataRequest> weak_ptr_factory_;
136 DISALLOW_COPY_AND_ASSIGN(DriveApiDataRequest);
139 //=============================== FilesGetRequest =============================
141 // This class performs the request for fetching a file.
142 // This request is mapped to
143 // https://developers.google.com/drive/v2/reference/files/get
144 class FilesGetRequest : public DriveApiDataRequest<FileResource> {
145 public:
146 FilesGetRequest(RequestSender* sender,
147 const DriveApiUrlGenerator& url_generator,
148 const FileResourceCallback& callback);
149 ~FilesGetRequest() override;
151 // Required parameter.
152 const std::string& file_id() const { return file_id_; }
153 void set_file_id(const std::string& file_id) { file_id_ = file_id; }
155 protected:
156 // Overridden from DriveApiDataRequest.
157 GURL GetURLInternal() const override;
159 private:
160 const DriveApiUrlGenerator url_generator_;
161 std::string file_id_;
163 DISALLOW_COPY_AND_ASSIGN(FilesGetRequest);
166 //============================ FilesAuthorizeRequest ===========================
168 // This class performs request for authorizing an app to access a file.
169 // This request is mapped to /drive/v2internal/file/authorize internal endpoint.
170 class FilesAuthorizeRequest : public DriveApiDataRequest<FileResource> {
171 public:
172 FilesAuthorizeRequest(RequestSender* sender,
173 const DriveApiUrlGenerator& url_generator,
174 const FileResourceCallback& callback);
175 ~FilesAuthorizeRequest() override;
177 // Required parameter.
178 const std::string& file_id() const { return file_id_; }
179 void set_file_id(const std::string& file_id) { file_id_ = file_id; }
180 const std::string& app_id() const { return app_id_; }
181 void set_app_id(const std::string& app_id) { app_id_ = app_id; }
183 protected:
184 // Overridden from GetDataRequest.
185 net::URLFetcher::RequestType GetRequestType() const override;
187 // Overridden from DriveApiDataRequest.
188 GURL GetURLInternal() const override;
190 private:
191 const DriveApiUrlGenerator url_generator_;
192 std::string file_id_;
193 std::string app_id_;
195 DISALLOW_COPY_AND_ASSIGN(FilesAuthorizeRequest);
198 //============================ FilesInsertRequest =============================
200 // This class performs the request for creating a resource.
201 // This request is mapped to
202 // https://developers.google.com/drive/v2/reference/files/insert
203 // See also https://developers.google.com/drive/manage-uploads and
204 // https://developers.google.com/drive/folder
205 class FilesInsertRequest : public DriveApiDataRequest<FileResource> {
206 public:
207 FilesInsertRequest(RequestSender* sender,
208 const DriveApiUrlGenerator& url_generator,
209 const FileResourceCallback& callback);
210 ~FilesInsertRequest() override;
212 // Optional request body.
213 const base::Time& last_viewed_by_me_date() const {
214 return last_viewed_by_me_date_;
216 void set_last_viewed_by_me_date(const base::Time& last_viewed_by_me_date) {
217 last_viewed_by_me_date_ = last_viewed_by_me_date;
220 const std::string& mime_type() const { return mime_type_; }
221 void set_mime_type(const std::string& mime_type) {
222 mime_type_ = mime_type;
225 const base::Time& modified_date() const { return modified_date_; }
226 void set_modified_date(const base::Time& modified_date) {
227 modified_date_ = modified_date;
230 const std::vector<std::string>& parents() const { return parents_; }
231 void add_parent(const std::string& parent) { parents_.push_back(parent); }
233 const std::string& title() const { return title_; }
234 void set_title(const std::string& title) { title_ = title; }
236 protected:
237 // Overridden from GetDataRequest.
238 net::URLFetcher::RequestType GetRequestType() const override;
239 bool GetContentData(std::string* upload_content_type,
240 std::string* upload_content) override;
242 // Overridden from DriveApiDataRequest.
243 GURL GetURLInternal() const override;
245 private:
246 const DriveApiUrlGenerator url_generator_;
248 base::Time last_viewed_by_me_date_;
249 std::string mime_type_;
250 base::Time modified_date_;
251 std::vector<std::string> parents_;
252 std::string title_;
254 DISALLOW_COPY_AND_ASSIGN(FilesInsertRequest);
257 //============================== FilesPatchRequest ============================
259 // This class performs the request for patching file metadata.
260 // This request is mapped to
261 // https://developers.google.com/drive/v2/reference/files/patch
262 class FilesPatchRequest : public DriveApiDataRequest<FileResource> {
263 public:
264 FilesPatchRequest(RequestSender* sender,
265 const DriveApiUrlGenerator& url_generator,
266 const FileResourceCallback& callback);
267 ~FilesPatchRequest() override;
269 // Required parameter.
270 const std::string& file_id() const { return file_id_; }
271 void set_file_id(const std::string& file_id) { file_id_ = file_id; }
273 // Optional parameter.
274 bool set_modified_date() const { return set_modified_date_; }
275 void set_set_modified_date(bool set_modified_date) {
276 set_modified_date_ = set_modified_date;
279 bool update_viewed_date() const { return update_viewed_date_; }
280 void set_update_viewed_date(bool update_viewed_date) {
281 update_viewed_date_ = update_viewed_date;
284 // Optional request body.
285 // Note: "Files: patch" accepts any "Files resource" data, but this class
286 // only supports limited members of it for now. We can extend it upon
287 // requirments.
288 const std::string& title() const { return title_; }
289 void set_title(const std::string& title) { title_ = title; }
291 const base::Time& modified_date() const { return modified_date_; }
292 void set_modified_date(const base::Time& modified_date) {
293 modified_date_ = modified_date;
296 const base::Time& last_viewed_by_me_date() const {
297 return last_viewed_by_me_date_;
299 void set_last_viewed_by_me_date(const base::Time& last_viewed_by_me_date) {
300 last_viewed_by_me_date_ = last_viewed_by_me_date;
303 const std::vector<std::string>& parents() const { return parents_; }
304 void add_parent(const std::string& parent) { parents_.push_back(parent); }
306 protected:
307 // Overridden from URLFetchRequestBase.
308 net::URLFetcher::RequestType GetRequestType() const override;
309 std::vector<std::string> GetExtraRequestHeaders() const override;
310 bool GetContentData(std::string* upload_content_type,
311 std::string* upload_content) override;
313 // Overridden from DriveApiDataRequest.
314 GURL GetURLInternal() const override;
316 private:
317 const DriveApiUrlGenerator url_generator_;
319 std::string file_id_;
320 bool set_modified_date_;
321 bool update_viewed_date_;
323 std::string title_;
324 base::Time modified_date_;
325 base::Time last_viewed_by_me_date_;
326 std::vector<std::string> parents_;
328 DISALLOW_COPY_AND_ASSIGN(FilesPatchRequest);
331 //============================= FilesCopyRequest ==============================
333 // This class performs the request for copying a resource.
334 // This request is mapped to
335 // https://developers.google.com/drive/v2/reference/files/copy
336 class FilesCopyRequest : public DriveApiDataRequest<FileResource> {
337 public:
338 // Upon completion, |callback| will be called. |callback| must not be null.
339 FilesCopyRequest(RequestSender* sender,
340 const DriveApiUrlGenerator& url_generator,
341 const FileResourceCallback& callback);
342 ~FilesCopyRequest() override;
344 // Required parameter.
345 const std::string& file_id() const { return file_id_; }
346 void set_file_id(const std::string& file_id) { file_id_ = file_id; }
348 // Optional request body.
349 const std::vector<std::string>& parents() const { return parents_; }
350 void add_parent(const std::string& parent) { parents_.push_back(parent); }
352 const base::Time& modified_date() const { return modified_date_; }
353 void set_modified_date(const base::Time& modified_date) {
354 modified_date_ = modified_date;
357 const std::string& title() const { return title_; }
358 void set_title(const std::string& title) { title_ = title; }
360 protected:
361 // Overridden from URLFetchRequestBase.
362 net::URLFetcher::RequestType GetRequestType() const override;
363 bool GetContentData(std::string* upload_content_type,
364 std::string* upload_content) override;
366 // Overridden from DriveApiDataRequest.
367 GURL GetURLInternal() const override;
369 private:
370 const DriveApiUrlGenerator url_generator_;
372 std::string file_id_;
373 base::Time modified_date_;
374 std::vector<std::string> parents_;
375 std::string title_;
377 DISALLOW_COPY_AND_ASSIGN(FilesCopyRequest);
380 //============================= FilesListRequest =============================
382 // This class performs the request for fetching FileList.
383 // The result may contain only first part of the result. The remaining result
384 // should be able to be fetched by ContinueGetFileListRequest defined below,
385 // or by FilesListRequest with setting page token.
386 // This request is mapped to
387 // https://developers.google.com/drive/v2/reference/files/list
388 class FilesListRequest : public DriveApiDataRequest<FileList> {
389 public:
390 FilesListRequest(RequestSender* sender,
391 const DriveApiUrlGenerator& url_generator,
392 const FileListCallback& callback);
393 ~FilesListRequest() override;
395 // Optional parameter
396 int max_results() const { return max_results_; }
397 void set_max_results(int max_results) { max_results_ = max_results; }
399 const std::string& page_token() const { return page_token_; }
400 void set_page_token(const std::string& page_token) {
401 page_token_ = page_token;
404 const std::string& q() const { return q_; }
405 void set_q(const std::string& q) { q_ = q; }
407 protected:
408 // Overridden from DriveApiDataRequest.
409 GURL GetURLInternal() const override;
411 private:
412 const DriveApiUrlGenerator url_generator_;
413 int max_results_;
414 std::string page_token_;
415 std::string q_;
417 DISALLOW_COPY_AND_ASSIGN(FilesListRequest);
420 //========================= FilesListNextPageRequest ==========================
422 // There are two ways to obtain next pages of "Files: list" result (if paged).
423 // 1) Set pageToken and all params used for the initial request.
424 // 2) Use URL in the nextLink field in the previous response.
425 // This class implements 2)'s request.
426 class FilesListNextPageRequest : public DriveApiDataRequest<FileList> {
427 public:
428 FilesListNextPageRequest(RequestSender* sender,
429 const FileListCallback& callback);
430 ~FilesListNextPageRequest() override;
432 const GURL& next_link() const { return next_link_; }
433 void set_next_link(const GURL& next_link) { next_link_ = next_link; }
435 protected:
436 // Overridden from DriveApiDataRequest.
437 GURL GetURLInternal() const override;
439 private:
440 GURL next_link_;
442 DISALLOW_COPY_AND_ASSIGN(FilesListNextPageRequest);
445 //============================= FilesDeleteRequest =============================
447 // This class performs the request for deleting a resource.
448 // This request is mapped to
449 // https://developers.google.com/drive/v2/reference/files/delete
450 class FilesDeleteRequest : public EntryActionRequest {
451 public:
452 FilesDeleteRequest(RequestSender* sender,
453 const DriveApiUrlGenerator& url_generator,
454 const EntryActionCallback& callback);
455 ~FilesDeleteRequest() override;
457 // Required parameter.
458 const std::string& file_id() const { return file_id_; }
459 void set_file_id(const std::string& file_id) { file_id_ = file_id; }
460 void set_etag(const std::string& etag) { etag_ = etag; }
462 protected:
463 // Overridden from UrlFetchRequestBase.
464 net::URLFetcher::RequestType GetRequestType() const override;
465 GURL GetURL() const override;
466 std::vector<std::string> GetExtraRequestHeaders() const override;
468 private:
469 const DriveApiUrlGenerator url_generator_;
470 std::string file_id_;
471 std::string etag_;
473 DISALLOW_COPY_AND_ASSIGN(FilesDeleteRequest);
476 //============================= FilesTrashRequest ==============================
478 // This class performs the request for trashing a resource.
479 // This request is mapped to
480 // https://developers.google.com/drive/v2/reference/files/trash
481 class FilesTrashRequest : public DriveApiDataRequest<FileResource> {
482 public:
483 FilesTrashRequest(RequestSender* sender,
484 const DriveApiUrlGenerator& url_generator,
485 const FileResourceCallback& callback);
486 ~FilesTrashRequest() override;
488 // Required parameter.
489 const std::string& file_id() const { return file_id_; }
490 void set_file_id(const std::string& file_id) { file_id_ = file_id; }
492 protected:
493 // Overridden from UrlFetchRequestBase.
494 net::URLFetcher::RequestType GetRequestType() const override;
496 // Overridden from DriveApiDataRequest.
497 GURL GetURLInternal() const override;
499 private:
500 const DriveApiUrlGenerator url_generator_;
501 std::string file_id_;
503 DISALLOW_COPY_AND_ASSIGN(FilesTrashRequest);
506 //============================== AboutGetRequest =============================
508 // This class performs the request for fetching About data.
509 // This request is mapped to
510 // https://developers.google.com/drive/v2/reference/about/get
511 class AboutGetRequest : public DriveApiDataRequest<AboutResource> {
512 public:
513 AboutGetRequest(RequestSender* sender,
514 const DriveApiUrlGenerator& url_generator,
515 const AboutResourceCallback& callback);
516 ~AboutGetRequest() override;
518 protected:
519 // Overridden from DriveApiDataRequest.
520 GURL GetURLInternal() const override;
522 private:
523 const DriveApiUrlGenerator url_generator_;
525 DISALLOW_COPY_AND_ASSIGN(AboutGetRequest);
528 //============================ ChangesListRequest ============================
530 // This class performs the request for fetching ChangeList.
531 // The result may contain only first part of the result. The remaining result
532 // should be able to be fetched by ContinueGetFileListRequest defined below.
533 // or by ChangesListRequest with setting page token.
534 // This request is mapped to
535 // https://developers.google.com/drive/v2/reference/changes/list
536 class ChangesListRequest : public DriveApiDataRequest<ChangeList> {
537 public:
538 ChangesListRequest(RequestSender* sender,
539 const DriveApiUrlGenerator& url_generator,
540 const ChangeListCallback& callback);
541 ~ChangesListRequest() override;
543 // Optional parameter
544 bool include_deleted() const { return include_deleted_; }
545 void set_include_deleted(bool include_deleted) {
546 include_deleted_ = include_deleted;
549 int max_results() const { return max_results_; }
550 void set_max_results(int max_results) { max_results_ = max_results; }
552 const std::string& page_token() const { return page_token_; }
553 void set_page_token(const std::string& page_token) {
554 page_token_ = page_token;
557 int64 start_change_id() const { return start_change_id_; }
558 void set_start_change_id(int64 start_change_id) {
559 start_change_id_ = start_change_id;
562 protected:
563 // Overridden from DriveApiDataRequest.
564 GURL GetURLInternal() const override;
566 private:
567 const DriveApiUrlGenerator url_generator_;
568 bool include_deleted_;
569 int max_results_;
570 std::string page_token_;
571 int64 start_change_id_;
573 DISALLOW_COPY_AND_ASSIGN(ChangesListRequest);
576 //======================== ChangesListNextPageRequest =========================
578 // There are two ways to obtain next pages of "Changes: list" result (if paged).
579 // 1) Set pageToken and all params used for the initial request.
580 // 2) Use URL in the nextLink field in the previous response.
581 // This class implements 2)'s request.
582 class ChangesListNextPageRequest : public DriveApiDataRequest<ChangeList> {
583 public:
584 ChangesListNextPageRequest(RequestSender* sender,
585 const ChangeListCallback& callback);
586 ~ChangesListNextPageRequest() override;
588 const GURL& next_link() const { return next_link_; }
589 void set_next_link(const GURL& next_link) { next_link_ = next_link; }
591 protected:
592 // Overridden from DriveApiDataRequest.
593 GURL GetURLInternal() const override;
595 private:
596 GURL next_link_;
598 DISALLOW_COPY_AND_ASSIGN(ChangesListNextPageRequest);
601 //============================= AppsListRequest ============================
603 // This class performs the request for fetching AppList.
604 // This request is mapped to
605 // https://developers.google.com/drive/v2/reference/apps/list
606 class AppsListRequest : public DriveApiDataRequest<AppList> {
607 public:
608 AppsListRequest(RequestSender* sender,
609 const DriveApiUrlGenerator& url_generator,
610 bool use_internal_endpoint,
611 const AppListCallback& callback);
612 ~AppsListRequest() override;
614 protected:
615 // Overridden from DriveApiDataRequest.
616 GURL GetURLInternal() const override;
618 private:
619 const DriveApiUrlGenerator url_generator_;
620 bool use_internal_endpoint_;
622 DISALLOW_COPY_AND_ASSIGN(AppsListRequest);
625 //============================= AppsDeleteRequest ==============================
627 // This class performs the request for deleting a Drive app.
628 // This request is mapped to
629 // https://developers.google.com/drive/v2/reference/files/trash
630 class AppsDeleteRequest : public EntryActionRequest {
631 public:
632 AppsDeleteRequest(RequestSender* sender,
633 const DriveApiUrlGenerator& url_generator,
634 const EntryActionCallback& callback);
635 ~AppsDeleteRequest() override;
637 // Required parameter.
638 const std::string& app_id() const { return app_id_; }
639 void set_app_id(const std::string& app_id) { app_id_ = app_id; }
641 protected:
642 // Overridden from UrlFetchRequestBase.
643 net::URLFetcher::RequestType GetRequestType() const override;
644 GURL GetURL() const override;
646 private:
647 const DriveApiUrlGenerator url_generator_;
648 std::string app_id_;
650 DISALLOW_COPY_AND_ASSIGN(AppsDeleteRequest);
653 //========================== ChildrenInsertRequest ============================
655 // This class performs the request for inserting a resource to a directory.
656 // This request is mapped to
657 // https://developers.google.com/drive/v2/reference/children/insert
658 class ChildrenInsertRequest : public EntryActionRequest {
659 public:
660 ChildrenInsertRequest(RequestSender* sender,
661 const DriveApiUrlGenerator& url_generator,
662 const EntryActionCallback& callback);
663 ~ChildrenInsertRequest() override;
665 // Required parameter.
666 const std::string& folder_id() const { return folder_id_; }
667 void set_folder_id(const std::string& folder_id) {
668 folder_id_ = folder_id;
671 // Required body.
672 const std::string& id() const { return id_; }
673 void set_id(const std::string& id) { id_ = id; }
675 protected:
676 // UrlFetchRequestBase overrides.
677 net::URLFetcher::RequestType GetRequestType() const override;
678 GURL GetURL() const override;
679 bool GetContentData(std::string* upload_content_type,
680 std::string* upload_content) override;
682 private:
683 const DriveApiUrlGenerator url_generator_;
684 std::string folder_id_;
685 std::string id_;
687 DISALLOW_COPY_AND_ASSIGN(ChildrenInsertRequest);
690 //========================== ChildrenDeleteRequest ============================
692 // This class performs the request for removing a resource from a directory.
693 // This request is mapped to
694 // https://developers.google.com/drive/v2/reference/children/delete
695 class ChildrenDeleteRequest : public EntryActionRequest {
696 public:
697 // |callback| must not be null.
698 ChildrenDeleteRequest(RequestSender* sender,
699 const DriveApiUrlGenerator& url_generator,
700 const EntryActionCallback& callback);
701 ~ChildrenDeleteRequest() override;
703 // Required parameter.
704 const std::string& child_id() const { return child_id_; }
705 void set_child_id(const std::string& child_id) {
706 child_id_ = child_id;
709 const std::string& folder_id() const { return folder_id_; }
710 void set_folder_id(const std::string& folder_id) {
711 folder_id_ = folder_id;
714 protected:
715 // UrlFetchRequestBase overrides.
716 net::URLFetcher::RequestType GetRequestType() const override;
717 GURL GetURL() const override;
719 private:
720 const DriveApiUrlGenerator url_generator_;
721 std::string child_id_;
722 std::string folder_id_;
724 DISALLOW_COPY_AND_ASSIGN(ChildrenDeleteRequest);
727 //======================= InitiateUploadNewFileRequest =======================
729 // This class performs the request for initiating the upload of a new file.
730 class InitiateUploadNewFileRequest : public InitiateUploadRequestBase {
731 public:
732 // |parent_resource_id| should be the resource id of the parent directory.
733 // |title| should be set.
734 // See also the comments of InitiateUploadRequestBase for more details
735 // about the other parameters.
736 InitiateUploadNewFileRequest(RequestSender* sender,
737 const DriveApiUrlGenerator& url_generator,
738 const std::string& content_type,
739 int64 content_length,
740 const std::string& parent_resource_id,
741 const std::string& title,
742 const InitiateUploadCallback& callback);
743 ~InitiateUploadNewFileRequest() override;
745 // Optional parameters.
746 const base::Time& modified_date() const { return modified_date_; }
747 void set_modified_date(const base::Time& modified_date) {
748 modified_date_ = modified_date;
750 const base::Time& last_viewed_by_me_date() const {
751 return last_viewed_by_me_date_;
753 void set_last_viewed_by_me_date(const base::Time& last_viewed_by_me_date) {
754 last_viewed_by_me_date_ = last_viewed_by_me_date;
757 protected:
758 // UrlFetchRequestBase overrides.
759 GURL GetURL() const override;
760 net::URLFetcher::RequestType GetRequestType() const override;
761 bool GetContentData(std::string* upload_content_type,
762 std::string* upload_content) override;
764 private:
765 const DriveApiUrlGenerator url_generator_;
766 const std::string parent_resource_id_;
767 const std::string title_;
769 base::Time modified_date_;
770 base::Time last_viewed_by_me_date_;
772 DISALLOW_COPY_AND_ASSIGN(InitiateUploadNewFileRequest);
775 //==================== InitiateUploadExistingFileRequest =====================
777 // This class performs the request for initiating the upload of an existing
778 // file.
779 class InitiateUploadExistingFileRequest : public InitiateUploadRequestBase {
780 public:
781 // |upload_url| should be the upload_url() of the file
782 // (resumable-create-media URL)
783 // |etag| should be set if it is available to detect the upload confliction.
784 // See also the comments of InitiateUploadRequestBase for more details
785 // about the other parameters.
786 InitiateUploadExistingFileRequest(RequestSender* sender,
787 const DriveApiUrlGenerator& url_generator,
788 const std::string& content_type,
789 int64 content_length,
790 const std::string& resource_id,
791 const std::string& etag,
792 const InitiateUploadCallback& callback);
793 ~InitiateUploadExistingFileRequest() override;
795 // Optional parameters.
796 const std::string& parent_resource_id() const { return parent_resource_id_; }
797 void set_parent_resource_id(const std::string& parent_resource_id) {
798 parent_resource_id_ = parent_resource_id;
800 const std::string& title() const { return title_; }
801 void set_title(const std::string& title) { title_ = title; }
802 const base::Time& modified_date() const { return modified_date_; }
803 void set_modified_date(const base::Time& modified_date) {
804 modified_date_ = modified_date;
806 const base::Time& last_viewed_by_me_date() const {
807 return last_viewed_by_me_date_;
809 void set_last_viewed_by_me_date(const base::Time& last_viewed_by_me_date) {
810 last_viewed_by_me_date_ = last_viewed_by_me_date;
813 protected:
814 // UrlFetchRequestBase overrides.
815 GURL GetURL() const override;
816 net::URLFetcher::RequestType GetRequestType() const override;
817 std::vector<std::string> GetExtraRequestHeaders() const override;
818 bool GetContentData(std::string* upload_content_type,
819 std::string* upload_content) override;
821 private:
822 const DriveApiUrlGenerator url_generator_;
823 const std::string resource_id_;
824 const std::string etag_;
826 std::string parent_resource_id_;
827 std::string title_;
828 base::Time modified_date_;
829 base::Time last_viewed_by_me_date_;
831 DISALLOW_COPY_AND_ASSIGN(InitiateUploadExistingFileRequest);
834 // Callback used for ResumeUpload() and GetUploadStatus().
835 typedef base::Callback<void(
836 const UploadRangeResponse& response,
837 scoped_ptr<FileResource> new_resource)> UploadRangeCallback;
839 //============================ ResumeUploadRequest ===========================
841 // Performs the request for resuming the upload of a file.
842 class ResumeUploadRequest : public ResumeUploadRequestBase {
843 public:
844 // See also ResumeUploadRequestBase's comment for parameters meaning.
845 // |callback| must not be null. |progress_callback| may be null.
846 ResumeUploadRequest(RequestSender* sender,
847 const GURL& upload_location,
848 int64 start_position,
849 int64 end_position,
850 int64 content_length,
851 const std::string& content_type,
852 const base::FilePath& local_file_path,
853 const UploadRangeCallback& callback,
854 const ProgressCallback& progress_callback);
855 ~ResumeUploadRequest() override;
857 protected:
858 // UploadRangeRequestBase overrides.
859 void OnRangeRequestComplete(const UploadRangeResponse& response,
860 scoped_ptr<base::Value> value) override;
861 // content::UrlFetcherDelegate overrides.
862 void OnURLFetchUploadProgress(const net::URLFetcher* source,
863 int64 current,
864 int64 total) override;
866 private:
867 const UploadRangeCallback callback_;
868 const ProgressCallback progress_callback_;
870 DISALLOW_COPY_AND_ASSIGN(ResumeUploadRequest);
873 //========================== GetUploadStatusRequest ==========================
875 // Performs the request to fetch the current upload status of a file.
876 class GetUploadStatusRequest : public GetUploadStatusRequestBase {
877 public:
878 // See also GetUploadStatusRequestBase's comment for parameters meaning.
879 // |callback| must not be null.
880 GetUploadStatusRequest(RequestSender* sender,
881 const GURL& upload_url,
882 int64 content_length,
883 const UploadRangeCallback& callback);
884 ~GetUploadStatusRequest() override;
886 protected:
887 // UploadRangeRequestBase overrides.
888 void OnRangeRequestComplete(const UploadRangeResponse& response,
889 scoped_ptr<base::Value> value) override;
891 private:
892 const UploadRangeCallback callback_;
894 DISALLOW_COPY_AND_ASSIGN(GetUploadStatusRequest);
897 //========================== DownloadFileRequest ==========================
899 // This class performs the request for downloading of a specified file.
900 class DownloadFileRequest : public DownloadFileRequestBase {
901 public:
902 // See also DownloadFileRequestBase's comment for parameters meaning.
903 DownloadFileRequest(RequestSender* sender,
904 const DriveApiUrlGenerator& url_generator,
905 const std::string& resource_id,
906 const base::FilePath& output_file_path,
907 const DownloadActionCallback& download_action_callback,
908 const GetContentCallback& get_content_callback,
909 const ProgressCallback& progress_callback);
910 ~DownloadFileRequest() override;
912 DISALLOW_COPY_AND_ASSIGN(DownloadFileRequest);
915 //========================== PermissionsInsertRequest ==========================
917 // Enumeration type for specifying type of permissions.
918 enum PermissionType {
919 PERMISSION_TYPE_ANYONE,
920 PERMISSION_TYPE_DOMAIN,
921 PERMISSION_TYPE_GROUP,
922 PERMISSION_TYPE_USER,
925 // Enumeration type for specifying the role of permissions.
926 enum PermissionRole {
927 PERMISSION_ROLE_OWNER,
928 PERMISSION_ROLE_READER,
929 PERMISSION_ROLE_WRITER,
930 PERMISSION_ROLE_COMMENTER,
933 // This class performs the request for adding permission on a specified file.
934 class PermissionsInsertRequest : public EntryActionRequest {
935 public:
936 // See https://developers.google.com/drive/v2/reference/permissions/insert.
937 PermissionsInsertRequest(RequestSender* sender,
938 const DriveApiUrlGenerator& url_generator,
939 const EntryActionCallback& callback);
940 ~PermissionsInsertRequest() override;
942 void set_id(const std::string& id) { id_ = id; }
943 void set_type(PermissionType type) { type_ = type; }
944 void set_role(PermissionRole role) { role_ = role; }
945 void set_value(const std::string& value) { value_ = value; }
947 // UrlFetchRequestBase overrides.
948 GURL GetURL() const override;
949 net::URLFetcher::RequestType GetRequestType() const override;
950 bool GetContentData(std::string* upload_content_type,
951 std::string* upload_content) override;
953 private:
954 const DriveApiUrlGenerator url_generator_;
955 std::string id_;
956 PermissionType type_;
957 PermissionRole role_;
958 std::string value_;
960 DISALLOW_COPY_AND_ASSIGN(PermissionsInsertRequest);
963 } // namespace drive
964 } // namespace google_apis
966 #endif // GOOGLE_APIS_DRIVE_DRIVE_API_REQUESTS_H_