1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef GOOGLE_APIS_DRIVE_DRIVE_API_REQUESTS_H_ 6 #define GOOGLE_APIS_DRIVE_DRIVE_API_REQUESTS_H_ 7 8 #include <string> 9 10 #include "base/callback_forward.h" 11 #include "base/time/time.h" 12 #include "google_apis/drive/base_requests.h" 13 #include "google_apis/drive/drive_api_url_generator.h" 14 #include "google_apis/drive/drive_common_callbacks.h" 15 16 namespace google_apis { 17 18 class ChangeList; 19 class FileResource; 20 class FileList; 21 22 // Callback used for requests that the server returns FileResource data 23 // formatted into JSON value. 24 typedef base::Callback<void(GDataErrorCode error, 25 scoped_ptr<FileResource> entry)> 26 FileResourceCallback; 27 28 // Callback used for requests that the server returns FileList data 29 // formatted into JSON value. 30 typedef base::Callback<void(GDataErrorCode error, 31 scoped_ptr<FileList> entry)> FileListCallback; 32 33 // Callback used for requests that the server returns ChangeList data 34 // formatted into JSON value. 35 typedef base::Callback<void(GDataErrorCode error, 36 scoped_ptr<ChangeList> entry)> ChangeListCallback; 37 38 namespace drive { 39 40 //============================ DriveApiDataRequest =========================== 41 42 // This is base class of the Drive API related requests. All Drive API requests 43 // support partial request (to improve the performance). The function can be 44 // shared among the Drive API requests. 45 // See also https://developers.google.com/drive/performance 46 class DriveApiDataRequest : public GetDataRequest { 47 public: 48 DriveApiDataRequest(RequestSender* sender, const GetDataCallback& callback); 49 virtual ~DriveApiDataRequest(); 50 51 // Optional parameter. 52 const std::string& fields() const { return fields_; } 53 void set_fields(const std::string& fields) { fields_ = fields; } 54 55 protected: 56 // Overridden from GetDataRequest. 57 virtual GURL GetURL() const OVERRIDE; 58 59 // Derived classes should override GetURLInternal instead of GetURL() 60 // directly. 61 virtual GURL GetURLInternal() const = 0; 62 63 private: 64 std::string fields_; 65 66 DISALLOW_COPY_AND_ASSIGN(DriveApiDataRequest); 67 }; 68 69 //=============================== FilesGetRequest ============================= 70 71 // This class performs the request for fetching a file. 72 // This request is mapped to 73 // https://developers.google.com/drive/v2/reference/files/get 74 class FilesGetRequest : public DriveApiDataRequest { 75 public: 76 FilesGetRequest(RequestSender* sender, 77 const DriveApiUrlGenerator& url_generator, 78 const FileResourceCallback& callback); 79 virtual ~FilesGetRequest(); 80 81 // Required parameter. 82 const std::string& file_id() const { return file_id_; } 83 void set_file_id(const std::string& file_id) { file_id_ = file_id; } 84 85 protected: 86 // Overridden from DriveApiDataRequest. 87 virtual GURL GetURLInternal() const OVERRIDE; 88 89 private: 90 const DriveApiUrlGenerator url_generator_; 91 std::string file_id_; 92 93 DISALLOW_COPY_AND_ASSIGN(FilesGetRequest); 94 }; 95 96 //============================ 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. 111 const std::string& mime_type() const { return mime_type_; } 112 void set_mime_type(const std::string& mime_type) { 113 mime_type_ = mime_type; 114 } 115 116 const std::vector<std::string>& parents() const { return parents_; } 117 void add_parent(const std::string& parent) { parents_.push_back(parent); } 118 119 const std::string& title() const { return 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. 154 const std::string& file_id() const { return file_id_; } 155 void set_file_id(const std::string& file_id) { file_id_ = file_id; } 156 157 // Optional parameter. 158 bool set_modified_date() const { return set_modified_date_; } 159 void set_set_modified_date(bool set_modified_date) { 160 set_modified_date_ = set_modified_date; 161 } 162 163 bool update_viewed_date() const { return 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. 172 const std::string& title() const { return title_; } 173 void set_title(const std::string& title) { title_ = title; } 174 175 const base::Time& modified_date() const { return modified_date_; } 176 void set_modified_date(const base::Time& modified_date) { 177 modified_date_ = modified_date; 178 } 179 180 const base::Time& last_viewed_by_me_date() const { 181 return last_viewed_by_me_date_; 182 } 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 187 const std::vector<std::string>& parents() const { return parents_; } 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. 229 const std::string& file_id() const { return file_id_; } 230 void set_file_id(const std::string& file_id) { file_id_ = file_id; } 231 232 // Optional request body. 233 const std::vector<std::string>& parents() const { return parents_; } 234 void add_parent(const std::string& parent) { parents_.push_back(parent); } 235 236 const base::Time& modified_date() const { return modified_date_; } 237 void set_modified_date(const base::Time& modified_date) { 238 modified_date_ = modified_date; 239 } 240 241 const std::string& title() const { return 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 280 int max_results() const { return max_results_; } 281 void set_max_results(int max_results) { max_results_ = max_results; } 282 283 const std::string& page_token() const { return page_token_; } 284 void set_page_token(const std::string& page_token) { 285 page_token_ = page_token; 286 } 287 288 const std::string& q() const { return 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 316 const GURL& next_link() const { return 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. 342 const std::string& file_id() const { return file_id_; } 343 void set_file_id(const std::string& file_id) { file_id_ = file_id; } 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. 373 const std::string& file_id() const { return 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 428 bool include_deleted() const { return include_deleted_; } 429 void set_include_deleted(bool include_deleted) { 430 include_deleted_ = include_deleted; 431 } 432 433 int max_results() const { return max_results_; } 434 void set_max_results(int max_results) { max_results_ = max_results; } 435 436 const std::string& page_token() const { return page_token_; } 437 void set_page_token(const std::string& page_token) { 438 page_token_ = page_token; 439 } 440 441 int64 start_change_id() const { return 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 472 const GURL& next_link() const { return 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. 520 const std::string& folder_id() const { return folder_id_; } 521 void set_folder_id(const std::string& folder_id) { 522 folder_id_ = folder_id; 523 } 524 525 // Required body. 526 const std::string& id() const { return 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. 558 const std::string& child_id() const { return child_id_; } 559 void set_child_id(const std::string& child_id) { 560 child_id_ = child_id; 561 } 562 563 const std::string& folder_id() const { return 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