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/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" 20 21 namespace google_apis { 22 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; 28 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; 33 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; 38 39 namespace drive { 40 41 //============================ DriveApiPartialFieldRequest ==================== 42 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 virtual ~DriveApiPartialFieldRequest(); 51 52 // Optional parameter. 53 const std::string& fields() const { return fields_; } 54 void set_fields(const std::string& fields) { fields_ = fields; } 55 56 protected: 57 // UrlFetchRequestBase overrides. 58 virtual GURL GetURL() const OVERRIDE; 59 60 // Derived classes should override GetURLInternal instead of GetURL() 61 // directly. 62 virtual GURL GetURLInternal() const = 0; 63 64 private: 65 std::string fields_; 66 67 DISALLOW_COPY_AND_ASSIGN(DriveApiPartialFieldRequest); 68 }; 69 70 //============================ DriveApiDataRequest =========================== 71 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; 79 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()); 87 } 88 virtual ~DriveApiDataRequest() {} 89 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; 108 } 109 } 110 111 virtual void RunCallbackOnPrematureFailure(GDataErrorCode error) OVERRIDE { 112 callback_.Run(error, scoped_ptr<DataType>()); 113 } 114 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>(); 120 } 121 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(); 128 } 129 130 const Callback callback_; 131 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_; 135 136 DISALLOW_COPY_AND_ASSIGN(DriveApiDataRequest); 137 }; 138 139 //=============================== FilesGetRequest ============================= 140 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 virtual ~FilesGetRequest(); 150 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; } 154 155 protected: 156 // Overridden from DriveApiDataRequest. 157 virtual GURL GetURLInternal() const OVERRIDE; 158 159 private: 160 const DriveApiUrlGenerator url_generator_; 161 std::string file_id_; 162 163 DISALLOW_COPY_AND_ASSIGN(FilesGetRequest); 164 }; 165 166 //============================ FilesAuthorizeRequest =========================== 167 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 virtual ~FilesAuthorizeRequest(); 176 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; } 182 183 protected: 184 // Overridden from GetDataRequest. 185 virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE; 186 187 // Overridden from DriveApiDataRequest. 188 virtual GURL GetURLInternal() const OVERRIDE; 189 190 private: 191 const DriveApiUrlGenerator url_generator_; 192 std::string file_id_; 193 std::string app_id_; 194 195 DISALLOW_COPY_AND_ASSIGN(FilesAuthorizeRequest); 196 }; 197 198 //============================ FilesInsertRequest ============================= 199 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 virtual ~FilesInsertRequest(); 211 212 // Optional request body. 213 const base::Time& last_viewed_by_me_date() const { 214 return last_viewed_by_me_date_; 215 } 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; 218 } 219 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; 223 } 224 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; 228 } 229 230 const std::vector<std::string>& parents() const { return parents_; } 231 void add_parent(const std::string& parent) { parents_.push_back(parent); } 232 233 const std::string& title() const { return title_; } 234 void set_title(const std::string& title) { title_ = title; } 235 236 protected: 237 // Overridden from GetDataRequest. 238 virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE; 239 virtual bool GetContentData(std::string* upload_content_type, 240 std::string* upload_content) OVERRIDE; 241 242 // Overridden from DriveApiDataRequest. 243 virtual GURL GetURLInternal() const OVERRIDE; 244 245 private: 246 const DriveApiUrlGenerator url_generator_; 247 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_; 253 254 DISALLOW_COPY_AND_ASSIGN(FilesInsertRequest); 255 }; 256 257 //============================== FilesPatchRequest ============================ 258 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 virtual ~FilesPatchRequest(); 268 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; } 272 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; 277 } 278 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; 282 } 283 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; } 290 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; 294 } 295 296 const base::Time& last_viewed_by_me_date() const { 297 return last_viewed_by_me_date_; 298 } 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; 301 } 302 303 const std::vector<std::string>& parents() const { return parents_; } 304 void add_parent(const std::string& parent) { parents_.push_back(parent); } 305 306 protected: 307 // Overridden from URLFetchRequestBase. 308 virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE; 309 virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE; 310 virtual bool GetContentData(std::string* upload_content_type, 311 std::string* upload_content) OVERRIDE; 312 313 // Overridden from DriveApiDataRequest. 314 virtual GURL GetURLInternal() const OVERRIDE; 315 316 private: 317 const DriveApiUrlGenerator url_generator_; 318 319 std::string file_id_; 320 bool set_modified_date_; 321 bool update_viewed_date_; 322 323 std::string title_; 324 base::Time modified_date_; 325 base::Time last_viewed_by_me_date_; 326 std::vector<std::string> parents_; 327 328 DISALLOW_COPY_AND_ASSIGN(FilesPatchRequest); 329 }; 330 331 //============================= FilesCopyRequest ============================== 332 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 virtual ~FilesCopyRequest(); 343 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; } 347 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); } 351 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; 355 } 356 357 const std::string& title() const { return title_; } 358 void set_title(const std::string& title) { title_ = title; } 359 360 protected: 361 // Overridden from URLFetchRequestBase. 362 virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE; 363 virtual bool GetContentData(std::string* upload_content_type, 364 std::string* upload_content) OVERRIDE; 365 366 // Overridden from DriveApiDataRequest. 367 virtual GURL GetURLInternal() const OVERRIDE; 368 369 private: 370 const DriveApiUrlGenerator url_generator_; 371 372 std::string file_id_; 373 base::Time modified_date_; 374 std::vector<std::string> parents_; 375 std::string title_; 376 377 DISALLOW_COPY_AND_ASSIGN(FilesCopyRequest); 378 }; 379 380 //============================= FilesListRequest ============================= 381 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 virtual ~FilesListRequest(); 394 395 // Optional parameter 396 int max_results() const { return max_results_; } 397 void set_max_results(int max_results) { max_results_ = max_results; } 398 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; 402 } 403 404 const std::string& q() const { return q_; } 405 void set_q(const std::string& q) { q_ = q; } 406 407 protected: 408 // Overridden from DriveApiDataRequest. 409 virtual GURL GetURLInternal() const OVERRIDE; 410 411 private: 412 const DriveApiUrlGenerator url_generator_; 413 int max_results_; 414 std::string page_token_; 415 std::string q_; 416 417 DISALLOW_COPY_AND_ASSIGN(FilesListRequest); 418 }; 419 420 //========================= FilesListNextPageRequest ========================== 421 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 virtual ~FilesListNextPageRequest(); 431 432 const GURL& next_link() const { return next_link_; } 433 void set_next_link(const GURL& next_link) { next_link_ = next_link; } 434 435 protected: 436 // Overridden from DriveApiDataRequest. 437 virtual GURL GetURLInternal() const OVERRIDE; 438 439 private: 440 GURL next_link_; 441 442 DISALLOW_COPY_AND_ASSIGN(FilesListNextPageRequest); 443 }; 444 445 //============================= FilesDeleteRequest ============================= 446 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 virtual ~FilesDeleteRequest(); 456 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; } 461 462 protected: 463 // Overridden from UrlFetchRequestBase. 464 virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE; 465 virtual GURL GetURL() const OVERRIDE; 466 virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE; 467 468 private: 469 const DriveApiUrlGenerator url_generator_; 470 std::string file_id_; 471 std::string etag_; 472 473 DISALLOW_COPY_AND_ASSIGN(FilesDeleteRequest); 474 }; 475 476 //============================= FilesTrashRequest ============================== 477 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 virtual ~FilesTrashRequest(); 487 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; } 491 492 protected: 493 // Overridden from UrlFetchRequestBase. 494 virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE; 495 496 // Overridden from DriveApiDataRequest. 497 virtual GURL GetURLInternal() const OVERRIDE; 498 499 private: 500 const DriveApiUrlGenerator url_generator_; 501 std::string file_id_; 502 503 DISALLOW_COPY_AND_ASSIGN(FilesTrashRequest); 504 }; 505 506 //============================== AboutGetRequest ============================= 507 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 virtual ~AboutGetRequest(); 517 518 protected: 519 // Overridden from DriveApiDataRequest. 520 virtual GURL GetURLInternal() const OVERRIDE; 521 522 private: 523 const DriveApiUrlGenerator url_generator_; 524 525 DISALLOW_COPY_AND_ASSIGN(AboutGetRequest); 526 }; 527 528 //============================ ChangesListRequest ============================ 529 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 virtual ~ChangesListRequest(); 542 543 // Optional parameter 544 bool include_deleted() const { return include_deleted_; } 545 void set_include_deleted(bool include_deleted) { 546 include_deleted_ = include_deleted; 547 } 548 549 int max_results() const { return max_results_; } 550 void set_max_results(int max_results) { max_results_ = max_results; } 551 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; 555 } 556 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; 560 } 561 562 protected: 563 // Overridden from DriveApiDataRequest. 564 virtual GURL GetURLInternal() const OVERRIDE; 565 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_; 572 573 DISALLOW_COPY_AND_ASSIGN(ChangesListRequest); 574 }; 575 576 //======================== ChangesListNextPageRequest ========================= 577 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 virtual ~ChangesListNextPageRequest(); 587 588 const GURL& next_link() const { return next_link_; } 589 void set_next_link(const GURL& next_link) { next_link_ = next_link; } 590 591 protected: 592 // Overridden from DriveApiDataRequest. 593 virtual GURL GetURLInternal() const OVERRIDE; 594 595 private: 596 GURL next_link_; 597 598 DISALLOW_COPY_AND_ASSIGN(ChangesListNextPageRequest); 599 }; 600 601 //============================= AppsListRequest ============================ 602 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 virtual ~AppsListRequest(); 613 614 protected: 615 // Overridden from DriveApiDataRequest. 616 virtual GURL GetURLInternal() const OVERRIDE; 617 618 private: 619 const DriveApiUrlGenerator url_generator_; 620 bool use_internal_endpoint_; 621 622 DISALLOW_COPY_AND_ASSIGN(AppsListRequest); 623 }; 624 625 //============================= AppsDeleteRequest ============================== 626 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 virtual ~AppsDeleteRequest(); 636 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; } 640 641 protected: 642 // Overridden from UrlFetchRequestBase. 643 virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE; 644 virtual GURL GetURL() const OVERRIDE; 645 646 private: 647 const DriveApiUrlGenerator url_generator_; 648 std::string app_id_; 649 650 DISALLOW_COPY_AND_ASSIGN(AppsDeleteRequest); 651 }; 652 653 //========================== ChildrenInsertRequest ============================ 654 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 virtual ~ChildrenInsertRequest(); 664 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; 669 } 670 671 // Required body. 672 const std::string& id() const { return id_; } 673 void set_id(const std::string& id) { id_ = id; } 674 675 protected: 676 // UrlFetchRequestBase overrides. 677 virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE; 678 virtual GURL GetURL() const OVERRIDE; 679 virtual bool GetContentData(std::string* upload_content_type, 680 std::string* upload_content) OVERRIDE; 681 682 private: 683 const DriveApiUrlGenerator url_generator_; 684 std::string folder_id_; 685 std::string id_; 686 687 DISALLOW_COPY_AND_ASSIGN(ChildrenInsertRequest); 688 }; 689 690 //========================== ChildrenDeleteRequest ============================ 691 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 virtual ~ChildrenDeleteRequest(); 702 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; 707 } 708 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; 712 } 713 714 protected: 715 // UrlFetchRequestBase overrides. 716 virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE; 717 virtual GURL GetURL() const OVERRIDE; 718 719 private: 720 const DriveApiUrlGenerator url_generator_; 721 std::string child_id_; 722 std::string folder_id_; 723 724 DISALLOW_COPY_AND_ASSIGN(ChildrenDeleteRequest); 725 }; 726 727 //======================= InitiateUploadNewFileRequest ======================= 728 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 virtual ~InitiateUploadNewFileRequest(); 744 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; 749 } 750 const base::Time& last_viewed_by_me_date() const { 751 return last_viewed_by_me_date_; 752 } 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; 755 } 756 757 protected: 758 // UrlFetchRequestBase overrides. 759 virtual GURL GetURL() const OVERRIDE; 760 virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE; 761 virtual bool GetContentData(std::string* upload_content_type, 762 std::string* upload_content) OVERRIDE; 763 764 private: 765 const DriveApiUrlGenerator url_generator_; 766 const std::string parent_resource_id_; 767 const std::string title_; 768 769 base::Time modified_date_; 770 base::Time last_viewed_by_me_date_; 771 772 DISALLOW_COPY_AND_ASSIGN(InitiateUploadNewFileRequest); 773 }; 774 775 //==================== InitiateUploadExistingFileRequest ===================== 776 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 virtual ~InitiateUploadExistingFileRequest(); 794 795 796 // Optional parameters. 797 const std::string& parent_resource_id() const { return parent_resource_id_; } 798 void set_parent_resource_id(const std::string& parent_resource_id) { 799 parent_resource_id_ = parent_resource_id; 800 } 801 const std::string& title() const { return title_; } 802 void set_title(const std::string& title) { title_ = title; } 803 const base::Time& modified_date() const { return modified_date_; } 804 void set_modified_date(const base::Time& modified_date) { 805 modified_date_ = modified_date; 806 } 807 const base::Time& last_viewed_by_me_date() const { 808 return last_viewed_by_me_date_; 809 } 810 void set_last_viewed_by_me_date(const base::Time& last_viewed_by_me_date) { 811 last_viewed_by_me_date_ = last_viewed_by_me_date; 812 } 813 814 protected: 815 // UrlFetchRequestBase overrides. 816 virtual GURL GetURL() const OVERRIDE; 817 virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE; 818 virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE; 819 virtual bool GetContentData(std::string* upload_content_type, 820 std::string* upload_content) OVERRIDE; 821 822 private: 823 const DriveApiUrlGenerator url_generator_; 824 const std::string resource_id_; 825 const std::string etag_; 826 827 std::string parent_resource_id_; 828 std::string title_; 829 base::Time modified_date_; 830 base::Time last_viewed_by_me_date_; 831 832 DISALLOW_COPY_AND_ASSIGN(InitiateUploadExistingFileRequest); 833 }; 834 835 // Callback used for ResumeUpload() and GetUploadStatus(). 836 typedef base::Callback<void( 837 const UploadRangeResponse& response, 838 scoped_ptr<FileResource> new_resource)> UploadRangeCallback; 839 840 //============================ ResumeUploadRequest =========================== 841 842 // Performs the request for resuming the upload of a file. 843 class ResumeUploadRequest : public ResumeUploadRequestBase { 844 public: 845 // See also ResumeUploadRequestBase's comment for parameters meaning. 846 // |callback| must not be null. |progress_callback| may be null. 847 ResumeUploadRequest(RequestSender* sender, 848 const GURL& upload_location, 849 int64 start_position, 850 int64 end_position, 851 int64 content_length, 852 const std::string& content_type, 853 const base::FilePath& local_file_path, 854 const UploadRangeCallback& callback, 855 const ProgressCallback& progress_callback); 856 virtual ~ResumeUploadRequest(); 857 858 protected: 859 // UploadRangeRequestBase overrides. 860 virtual void OnRangeRequestComplete( 861 const UploadRangeResponse& response, 862 scoped_ptr<base::Value> value) OVERRIDE; 863 // content::UrlFetcherDelegate overrides. 864 virtual void OnURLFetchUploadProgress(const net::URLFetcher* source, 865 int64 current, int64 total) OVERRIDE; 866 867 private: 868 const UploadRangeCallback callback_; 869 const ProgressCallback progress_callback_; 870 871 DISALLOW_COPY_AND_ASSIGN(ResumeUploadRequest); 872 }; 873 874 //========================== GetUploadStatusRequest ========================== 875 876 // Performs the request to fetch the current upload status of a file. 877 class GetUploadStatusRequest : public GetUploadStatusRequestBase { 878 public: 879 // See also GetUploadStatusRequestBase's comment for parameters meaning. 880 // |callback| must not be null. 881 GetUploadStatusRequest(RequestSender* sender, 882 const GURL& upload_url, 883 int64 content_length, 884 const UploadRangeCallback& callback); 885 virtual ~GetUploadStatusRequest(); 886 887 protected: 888 // UploadRangeRequestBase overrides. 889 virtual void OnRangeRequestComplete( 890 const UploadRangeResponse& response, 891 scoped_ptr<base::Value> value) OVERRIDE; 892 893 private: 894 const UploadRangeCallback callback_; 895 896 DISALLOW_COPY_AND_ASSIGN(GetUploadStatusRequest); 897 }; 898 899 //========================== DownloadFileRequest ========================== 900 901 // This class performs the request for downloading of a specified file. 902 class DownloadFileRequest : public DownloadFileRequestBase { 903 public: 904 // See also DownloadFileRequestBase's comment for parameters meaning. 905 DownloadFileRequest(RequestSender* sender, 906 const DriveApiUrlGenerator& url_generator, 907 const std::string& resource_id, 908 const base::FilePath& output_file_path, 909 const DownloadActionCallback& download_action_callback, 910 const GetContentCallback& get_content_callback, 911 const ProgressCallback& progress_callback); 912 virtual ~DownloadFileRequest(); 913 914 DISALLOW_COPY_AND_ASSIGN(DownloadFileRequest); 915 }; 916 917 //========================== PermissionsInsertRequest ========================== 918 919 // Enumeration type for specifying type of permissions. 920 enum PermissionType { 921 PERMISSION_TYPE_ANYONE, 922 PERMISSION_TYPE_DOMAIN, 923 PERMISSION_TYPE_GROUP, 924 PERMISSION_TYPE_USER, 925 }; 926 927 // Enumeration type for specifying the role of permissions. 928 enum PermissionRole { 929 PERMISSION_ROLE_OWNER, 930 PERMISSION_ROLE_READER, 931 PERMISSION_ROLE_WRITER, 932 PERMISSION_ROLE_COMMENTER, 933 }; 934 935 // This class performs the request for adding permission on a specified file. 936 class PermissionsInsertRequest : public EntryActionRequest { 937 public: 938 // See https://developers.google.com/drive/v2/reference/permissions/insert. 939 PermissionsInsertRequest(RequestSender* sender, 940 const DriveApiUrlGenerator& url_generator, 941 const EntryActionCallback& callback); 942 virtual ~PermissionsInsertRequest(); 943 944 void set_id(const std::string& id) { id_ = id; } 945 void set_type(PermissionType type) { type_ = type; } 946 void set_role(PermissionRole role) { role_ = role; } 947 void set_value(const std::string& value) { value_ = value; } 948 949 // UrlFetchRequestBase overrides. 950 virtual GURL GetURL() const OVERRIDE; 951 virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE; 952 virtual bool GetContentData(std::string* upload_content_type, 953 std::string* upload_content) OVERRIDE; 954 955 private: 956 const DriveApiUrlGenerator url_generator_; 957 std::string id_; 958 PermissionType type_; 959 PermissionRole role_; 960 std::string value_; 961 962 DISALLOW_COPY_AND_ASSIGN(PermissionsInsertRequest); 963 }; 964 965 } // namespace drive 966 } // namespace google_apis 967 968 #endif // GOOGLE_APIS_DRIVE_DRIVE_API_REQUESTS_H_ 969