Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(226)

Side by Side Diff: google_apis/drive/base_requests.h

Issue 1132693006: Drive API: Simplify lifetime management of child requests in BatchUploadRequest. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Improve comment. Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/drive/drive_api_service.cc ('k') | google_apis/drive/base_requests.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 // 4 //
5 // This file provides base classes used to issue HTTP requests for Google 5 // This file provides base classes used to issue HTTP requests for Google
6 // APIs. 6 // APIs.
7 7
8 #ifndef GOOGLE_APIS_DRIVE_BASE_REQUESTS_H_ 8 #ifndef GOOGLE_APIS_DRIVE_BASE_REQUESTS_H_
9 #define GOOGLE_APIS_DRIVE_BASE_REQUESTS_H_ 9 #define GOOGLE_APIS_DRIVE_BASE_REQUESTS_H_
10 10
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 253
254 base::ThreadChecker thread_checker_; 254 base::ThreadChecker thread_checker_;
255 255
256 // Note: This should remain the last member so it'll be destroyed and 256 // Note: This should remain the last member so it'll be destroyed and
257 // invalidate its weak pointers before any other members are destroyed. 257 // invalidate its weak pointers before any other members are destroyed.
258 base::WeakPtrFactory<UrlFetchRequestBase> weak_ptr_factory_; 258 base::WeakPtrFactory<UrlFetchRequestBase> weak_ptr_factory_;
259 259
260 DISALLOW_COPY_AND_ASSIGN(UrlFetchRequestBase); 260 DISALLOW_COPY_AND_ASSIGN(UrlFetchRequestBase);
261 }; 261 };
262 262
263 //============================ BatchableRequestBase ============================ 263 //============================ BatchableDelegate ============================
264 264
265 class BatchableRequestBase : public UrlFetchRequestBase { 265 // Delegate to be used by |SingleBatchableDelegateRequest| and
266 // |BatchUploadRequest|.
267 class BatchableDelegate {
266 public: 268 public:
267 explicit BatchableRequestBase(RequestSender* sender) : 269 virtual ~BatchableDelegate() {}
268 UrlFetchRequestBase(sender) {}
269 270
270 GURL GetURL() const override = 0; 271 // See UrlFetchRequestBase.
271 net::URLFetcher::RequestType GetRequestType() const override; 272 virtual GURL GetURL() const = 0;
272 std::vector<std::string> GetExtraRequestHeaders() const override; 273 virtual net::URLFetcher::RequestType GetRequestType() const = 0;
273 void Prepare(const PrepareCallback& callback) override; 274 virtual std::vector<std::string> GetExtraRequestHeaders() const = 0;
274 bool GetContentData(std::string* upload_content_type, 275 virtual void Prepare(const PrepareCallback& callback) = 0;
275 std::string* upload_content) override; 276 virtual bool GetContentData(std::string* upload_content_type,
276 void RunCallbackOnPrematureFailure(DriveApiErrorCode code) override = 0; 277 std::string* upload_content) = 0;
277 virtual void ProcessURLFetchResults(
278 DriveApiErrorCode code, const std::string& body) = 0;
279 278
280 private: 279 // Notifies result of the request. Usually, it parses the |code| and
281 void ProcessURLFetchResults(const net::URLFetcher* source) final; 280 // |response_body|, then notifies the parsed value to client code of the
281 // API. |callback| must be called on completion. The instance must not
282 // do anything after calling |callback| since the instance may be deleted in
283 // |callback|.
284 virtual void NotifyResult(DriveApiErrorCode code,
285 const std::string& response_body,
286 const base::Closure& callback) = 0;
287
288 // Notifies error. Unlike |NotifyResult|, it must report error
289 // synchronously. The instance may be deleted just after calling
290 // NotifyError.
291 virtual void NotifyError(DriveApiErrorCode code) = 0;
292
293 // Notifies progress.
294 virtual void NotifyUploadProgress(const net::URLFetcher* source,
295 int64 current,
296 int64 total) = 0;
282 }; 297 };
283 298
284 //============================ EntryActionRequest ============================ 299 //============================ EntryActionRequest ============================
285 300
286 // Callback type for requests that return only error status, like: Delete/Move. 301 // Callback type for requests that return only error status, like: Delete/Move.
287 typedef base::Callback<void(DriveApiErrorCode error)> EntryActionCallback; 302 typedef base::Callback<void(DriveApiErrorCode error)> EntryActionCallback;
288 303
289 // This class performs a simple action over a given entry (document/file). 304 // This class performs a simple action over a given entry (document/file).
290 // It is meant to be used for requests that return no JSON blobs. 305 // It is meant to be used for requests that return no JSON blobs.
291 class EntryActionRequest : public UrlFetchRequestBase { 306 class EntryActionRequest : public UrlFetchRequestBase {
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 private: 506 private:
492 const int64 content_length_; 507 const int64 content_length_;
493 508
494 DISALLOW_COPY_AND_ASSIGN(GetUploadStatusRequestBase); 509 DISALLOW_COPY_AND_ASSIGN(GetUploadStatusRequestBase);
495 }; 510 };
496 511
497 //=========================== MultipartUploadRequestBase======================= 512 //=========================== MultipartUploadRequestBase=======================
498 513
499 // This class provides base implementation for performing the request for 514 // This class provides base implementation for performing the request for
500 // uploading a file by multipart body. 515 // uploading a file by multipart body.
501 class MultipartUploadRequestBase : public BatchableRequestBase { 516 class MultipartUploadRequestBase : public BatchableDelegate {
502 public: 517 public:
503 // Set boundary. Only tests can use this method. 518 // Set boundary. Only tests can use this method.
504 void SetBoundaryForTesting(const std::string& boundary); 519 void SetBoundaryForTesting(const std::string& boundary);
505 520
506 protected: 521 protected:
507 // |callback| will be called with the file resource.upload URL. 522 // |callback| will be called with the file resource.upload URL.
508 // |content_type| and |content_length| should be the attributes of the 523 // |content_type| and |content_length| should be the attributes of the
509 // uploading file. Other parameters are optional and can be empty or null 524 // uploading file. Other parameters are optional and can be empty or null
510 // depending on Upload URL provided by the subclasses. 525 // depending on Upload URL provided by the subclasses.
511 MultipartUploadRequestBase(RequestSender* sender, 526 MultipartUploadRequestBase(base::SequencedTaskRunner* blocking_task_runner,
512 const std::string& metadata_json, 527 const std::string& metadata_json,
513 const std::string& content_type, 528 const std::string& content_type,
514 int64 content_length, 529 int64 content_length,
515 const base::FilePath& local_file_path, 530 const base::FilePath& local_file_path,
516 const FileResourceCallback& callback, 531 const FileResourceCallback& callback,
517 const ProgressCallback& progress_callback); 532 const ProgressCallback& progress_callback);
518 ~MultipartUploadRequestBase() override; 533 ~MultipartUploadRequestBase() override;
519 534
520 // Overridden from UrlFetchRequestBase. 535 // BatchableDelegate.
536 std::vector<std::string> GetExtraRequestHeaders() const override;
521 void Prepare(const PrepareCallback& callback) override; 537 void Prepare(const PrepareCallback& callback) override;
522 bool GetContentData(std::string* upload_content_type, 538 bool GetContentData(std::string* upload_content_type,
523 std::string* upload_content) override; 539 std::string* upload_content) override;
524 void ProcessURLFetchResults( 540 void NotifyResult(DriveApiErrorCode code,
525 DriveApiErrorCode code, const std::string& body) override; 541 const std::string& body,
526 void RunCallbackOnPrematureFailure(DriveApiErrorCode code) override; 542 const base::Closure& callback) override;
527 543 void NotifyError(DriveApiErrorCode code) override;
528 // content::UrlFetcherDelegate overrides. 544 void NotifyUploadProgress(const net::URLFetcher* source,
529 void OnURLFetchUploadProgress(const net::URLFetcher* source, 545 int64 current,
530 int64 current, 546 int64 total) override;
531 int64 total) override;
532
533 // Parses the response value and invokes |callback_| with |FileResource|. 547 // Parses the response value and invokes |callback_| with |FileResource|.
534 void OnDataParsed(DriveApiErrorCode code, scoped_ptr<base::Value> value); 548 void OnDataParsed(DriveApiErrorCode code,
549 const base::Closure& callback,
550 scoped_ptr<base::Value> value);
535 551
536 private: 552 private:
537 // Continues to rest part of |Start| method after determining boundary string 553 // Continues to rest part of |Start| method after determining boundary string
538 // of multipart/related. 554 // of multipart/related.
539 void OnPrepareUploadContent(const PrepareCallback& callback, 555 void OnPrepareUploadContent(const PrepareCallback& callback,
540 std::string* upload_content_type, 556 std::string* upload_content_type,
541 std::string* upload_content_data, 557 std::string* upload_content_data,
542 bool result); 558 bool result);
543 559
560 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
544 const std::string metadata_json_; 561 const std::string metadata_json_;
545 const std::string content_type_; 562 const std::string content_type_;
546 const base::FilePath local_path_; 563 const base::FilePath local_path_;
547 const FileResourceCallback callback_; 564 const FileResourceCallback callback_;
548 const ProgressCallback progress_callback_; 565 const ProgressCallback progress_callback_;
549 566
550 // Boundary of multipart body. 567 // Boundary of multipart body.
551 std::string boundary_; 568 std::string boundary_;
552 569
553 // Upload content of multipart body. 570 // Upload content of multipart body.
554 std::string upload_content_type_; 571 std::string upload_content_type_;
555 std::string upload_content_data_; 572 std::string upload_content_data_;
556 573
574 base::ThreadChecker thread_checker_;
575
557 // Note: This should remain the last member so it'll be destroyed and 576 // Note: This should remain the last member so it'll be destroyed and
558 // invalidate its weak pointers before any other members are destroyed. 577 // invalidate its weak pointers before any other members are destroyed.
559 base::WeakPtrFactory<MultipartUploadRequestBase> weak_ptr_factory_; 578 base::WeakPtrFactory<MultipartUploadRequestBase> weak_ptr_factory_;
560 579
561 DISALLOW_COPY_AND_ASSIGN(MultipartUploadRequestBase); 580 DISALLOW_COPY_AND_ASSIGN(MultipartUploadRequestBase);
562 }; 581 };
563 582
564 //============================ DownloadFileRequest =========================== 583 //============================ DownloadFileRequest ===========================
565 584
566 // Callback type for receiving the completion of DownloadFileRequest. 585 // Callback type for receiving the completion of DownloadFileRequest.
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
616 const ProgressCallback progress_callback_; 635 const ProgressCallback progress_callback_;
617 const GURL download_url_; 636 const GURL download_url_;
618 const base::FilePath output_file_path_; 637 const base::FilePath output_file_path_;
619 638
620 DISALLOW_COPY_AND_ASSIGN(DownloadFileRequestBase); 639 DISALLOW_COPY_AND_ASSIGN(DownloadFileRequestBase);
621 }; 640 };
622 641
623 } // namespace google_apis 642 } // namespace google_apis
624 643
625 #endif // GOOGLE_APIS_DRIVE_BASE_REQUESTS_H_ 644 #endif // GOOGLE_APIS_DRIVE_BASE_REQUESTS_H_
OLDNEW
« no previous file with comments | « chrome/browser/drive/drive_api_service.cc ('k') | google_apis/drive/base_requests.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698