| Index: google_apis/drive/base_requests.h
|
| diff --git a/google_apis/drive/base_requests.h b/google_apis/drive/base_requests.h
|
| index d18d0793801071eec13d5ca5f1be6e344bfae730..ac64a54fa979ec8b768e80a89655abc94d1ecb45 100644
|
| --- a/google_apis/drive/base_requests.h
|
| +++ b/google_apis/drive/base_requests.h
|
| @@ -260,25 +260,40 @@ class UrlFetchRequestBase : public AuthenticatedRequestInterface,
|
| DISALLOW_COPY_AND_ASSIGN(UrlFetchRequestBase);
|
| };
|
|
|
| -//============================ BatchableRequestBase ============================
|
| +//============================ BatchableDelegate ============================
|
|
|
| -class BatchableRequestBase : public UrlFetchRequestBase {
|
| +// Delegate to be used by |SingleBatchableDelegateRequest| and
|
| +// |BatchUploadRequest|.
|
| +class BatchableDelegate {
|
| public:
|
| - explicit BatchableRequestBase(RequestSender* sender) :
|
| - UrlFetchRequestBase(sender) {}
|
| + virtual ~BatchableDelegate() {}
|
|
|
| - GURL GetURL() const override = 0;
|
| - net::URLFetcher::RequestType GetRequestType() const override;
|
| - std::vector<std::string> GetExtraRequestHeaders() const override;
|
| - void Prepare(const PrepareCallback& callback) override;
|
| - bool GetContentData(std::string* upload_content_type,
|
| - std::string* upload_content) override;
|
| - void RunCallbackOnPrematureFailure(DriveApiErrorCode code) override = 0;
|
| - virtual void ProcessURLFetchResults(
|
| - DriveApiErrorCode code, const std::string& body) = 0;
|
| -
|
| - private:
|
| - void ProcessURLFetchResults(const net::URLFetcher* source) final;
|
| + // See UrlFetchRequestBase.
|
| + virtual GURL GetURL() const = 0;
|
| + virtual net::URLFetcher::RequestType GetRequestType() const = 0;
|
| + virtual std::vector<std::string> GetExtraRequestHeaders() const = 0;
|
| + virtual void Prepare(const PrepareCallback& callback) = 0;
|
| + virtual bool GetContentData(std::string* upload_content_type,
|
| + std::string* upload_content) = 0;
|
| +
|
| + // Notifies result of the request. Usually, it parses the |code| and
|
| + // |response_body|, then notifies the parsed value to client code of the
|
| + // API. |callback| must be called on completion. The instance must not
|
| + // do anything after calling |callback| since the instance may be deleted in
|
| + // |callback|.
|
| + virtual void NotifyResult(DriveApiErrorCode code,
|
| + const std::string& response_body,
|
| + const base::Closure& callback) = 0;
|
| +
|
| + // Notifies error. Unlike |NotifyResult|, it must report error
|
| + // synchronously. The instance may be deleted just after calling
|
| + // NotifyError.
|
| + virtual void NotifyError(DriveApiErrorCode code) = 0;
|
| +
|
| + // Notifies progress.
|
| + virtual void NotifyUploadProgress(const net::URLFetcher* source,
|
| + int64 current,
|
| + int64 total) = 0;
|
| };
|
|
|
| //============================ EntryActionRequest ============================
|
| @@ -498,7 +513,7 @@ class GetUploadStatusRequestBase : public UploadRangeRequestBase {
|
|
|
| // This class provides base implementation for performing the request for
|
| // uploading a file by multipart body.
|
| -class MultipartUploadRequestBase : public BatchableRequestBase {
|
| +class MultipartUploadRequestBase : public BatchableDelegate {
|
| public:
|
| // Set boundary. Only tests can use this method.
|
| void SetBoundaryForTesting(const std::string& boundary);
|
| @@ -508,7 +523,7 @@ class MultipartUploadRequestBase : public BatchableRequestBase {
|
| // |content_type| and |content_length| should be the attributes of the
|
| // uploading file. Other parameters are optional and can be empty or null
|
| // depending on Upload URL provided by the subclasses.
|
| - MultipartUploadRequestBase(RequestSender* sender,
|
| + MultipartUploadRequestBase(base::SequencedTaskRunner* blocking_task_runner,
|
| const std::string& metadata_json,
|
| const std::string& content_type,
|
| int64 content_length,
|
| @@ -517,21 +532,22 @@ class MultipartUploadRequestBase : public BatchableRequestBase {
|
| const ProgressCallback& progress_callback);
|
| ~MultipartUploadRequestBase() override;
|
|
|
| - // Overridden from UrlFetchRequestBase.
|
| + // BatchableDelegate.
|
| + std::vector<std::string> GetExtraRequestHeaders() const override;
|
| void Prepare(const PrepareCallback& callback) override;
|
| bool GetContentData(std::string* upload_content_type,
|
| std::string* upload_content) override;
|
| - void ProcessURLFetchResults(
|
| - DriveApiErrorCode code, const std::string& body) override;
|
| - void RunCallbackOnPrematureFailure(DriveApiErrorCode code) override;
|
| -
|
| - // content::UrlFetcherDelegate overrides.
|
| - void OnURLFetchUploadProgress(const net::URLFetcher* source,
|
| - int64 current,
|
| - int64 total) override;
|
| -
|
| + void NotifyResult(DriveApiErrorCode code,
|
| + const std::string& body,
|
| + const base::Closure& callback) override;
|
| + void NotifyError(DriveApiErrorCode code) override;
|
| + void NotifyUploadProgress(const net::URLFetcher* source,
|
| + int64 current,
|
| + int64 total) override;
|
| // Parses the response value and invokes |callback_| with |FileResource|.
|
| - void OnDataParsed(DriveApiErrorCode code, scoped_ptr<base::Value> value);
|
| + void OnDataParsed(DriveApiErrorCode code,
|
| + const base::Closure& callback,
|
| + scoped_ptr<base::Value> value);
|
|
|
| private:
|
| // Continues to rest part of |Start| method after determining boundary string
|
| @@ -541,6 +557,7 @@ class MultipartUploadRequestBase : public BatchableRequestBase {
|
| std::string* upload_content_data,
|
| bool result);
|
|
|
| + scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
|
| const std::string metadata_json_;
|
| const std::string content_type_;
|
| const base::FilePath local_path_;
|
| @@ -554,6 +571,8 @@ class MultipartUploadRequestBase : public BatchableRequestBase {
|
| std::string upload_content_type_;
|
| std::string upload_content_data_;
|
|
|
| + base::ThreadChecker thread_checker_;
|
| +
|
| // Note: This should remain the last member so it'll be destroyed and
|
| // invalidate its weak pointers before any other members are destroyed.
|
| base::WeakPtrFactory<MultipartUploadRequestBase> weak_ptr_factory_;
|
|
|