123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332 |
- // Copyright (c) 2012 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef GOOGLE_APIS_DRIVE_DRIVE_API_REQUESTS_H_
- #define GOOGLE_APIS_DRIVE_DRIVE_API_REQUESTS_H_
- #include <stdint.h>
- #include <memory>
- #include <string>
- #include <utility>
- #include <vector>
- #include "base/bind.h"
- #include "base/callback_forward.h"
- #include "base/location.h"
- #include "base/memory/raw_ptr.h"
- #include "base/task/sequenced_task_runner.h"
- #include "base/task/task_runner_util.h"
- #include "base/time/time.h"
- #include "base/values.h"
- #include "google_apis/drive/drive_api_parser.h"
- #include "google_apis/drive/drive_api_url_generator.h"
- #include "google_apis/drive/drive_base_requests.h"
- #include "google_apis/drive/drive_common_callbacks.h"
- #include "services/network/public/mojom/url_response_head.mojom-forward.h"
- namespace google_apis {
- // Callback used for requests that the server returns TeamDrive data
- // formatted into JSON value.
- using TeamDriveListCallback =
- base::OnceCallback<void(ApiErrorCode error,
- std::unique_ptr<TeamDriveList> entry)>;
- // Callback used for requests that the server returns FileList data
- // formatted into JSON value.
- typedef base::OnceCallback<void(ApiErrorCode error,
- std::unique_ptr<FileList> entry)>
- FileListCallback;
- // DEPRECATED: Please use ChangeListOnceCallback instead
- // Callback used for requests that the server returns ChangeList data
- // formatted into JSON value.
- using ChangeListCallback =
- base::OnceCallback<void(ApiErrorCode error,
- std::unique_ptr<ChangeList> entry)>;
- using ChangeListOnceCallback =
- base::OnceCallback<void(ApiErrorCode error,
- std::unique_ptr<ChangeList> entry)>;
- // Callback used for requests that the server returns StartToken data
- // formatted into JSON value.
- using StartPageTokenCallback =
- base::OnceCallback<void(ApiErrorCode error,
- std::unique_ptr<StartPageToken> entry)>;
- namespace drive {
- // Represents a property for a file or a directory.
- // https://developers.google.com/drive/v2/reference/properties
- class Property {
- public:
- Property();
- ~Property();
- // Visibility of the property. Either limited to the same client, or to any.
- enum Visibility { VISIBILITY_PRIVATE, VISIBILITY_PUBLIC };
- // Whether the property is public or private.
- Visibility visibility() const { return visibility_; }
- // Name of the property.
- const std::string& key() const { return key_; }
- // Value of the property.
- const std::string& value() const { return value_; }
- void set_visibility(Visibility visibility) { visibility_ = visibility; }
- void set_key(const std::string& key) { key_ = key; }
- void set_value(const std::string& value) { value_ = value; }
- private:
- Visibility visibility_;
- std::string key_;
- std::string value_;
- };
- // List of properties for a single file or a directory.
- typedef std::vector<Property> Properties;
- // Child response embedded in multipart parent response.
- struct MultipartHttpResponse {
- MultipartHttpResponse();
- ~MultipartHttpResponse();
- ApiErrorCode code = HTTP_SUCCESS;
- std::string body;
- };
- // Splits multipart |response| into |parts|. Each part must be HTTP sub-response
- // of drive batch request. |content_type| is a value of Content-Type response
- // header. Returns true on success.
- bool ParseMultipartResponse(const std::string& content_type,
- const std::string& response,
- std::vector<MultipartHttpResponse>* parts);
- //============================ DriveApiPartialFieldRequest ====================
- // This is base class of the Drive API related requests. All Drive API requests
- // support partial request (to improve the performance). The function can be
- // shared among the Drive API requests.
- // See also https://developers.google.com/drive/performance
- class DriveApiPartialFieldRequest : public DriveUrlFetchRequestBase {
- public:
- explicit DriveApiPartialFieldRequest(RequestSender* sender);
- DriveApiPartialFieldRequest(const DriveApiPartialFieldRequest&) = delete;
- DriveApiPartialFieldRequest& operator=(const DriveApiPartialFieldRequest&) =
- delete;
- ~DriveApiPartialFieldRequest() override;
- // Optional parameter.
- const std::string& fields() const { return fields_; }
- void set_fields(const std::string& fields) { fields_ = fields; }
- protected:
- // UrlFetchRequestBase overrides.
- GURL GetURL() const override;
- // Derived classes should override GetURLInternal instead of GetURL()
- // directly.
- virtual GURL GetURLInternal() const = 0;
- private:
- std::string fields_;
- };
- //============================ DriveApiDataRequest ===========================
- // The base class of Drive API related requests that receive a JSON response
- // representing |DataType|.
- template <class DataType>
- class DriveApiDataRequest : public DriveApiPartialFieldRequest {
- public:
- using Callback = base::OnceCallback<void(ApiErrorCode error,
- std::unique_ptr<DataType> data)>;
- // |callback| is called when the request finishes either by success or by
- // failure. On success, a JSON Value object is passed. It must not be null.
- DriveApiDataRequest(RequestSender* sender, Callback callback)
- : DriveApiPartialFieldRequest(sender), callback_(std::move(callback)) {
- DCHECK(!callback_.is_null());
- }
- DriveApiDataRequest(const DriveApiDataRequest&) = delete;
- DriveApiDataRequest& operator=(const DriveApiDataRequest&) = delete;
- ~DriveApiDataRequest() override {}
- protected:
- // UrlFetchRequestBase overrides.
- void ProcessURLFetchResults(
- const network::mojom::URLResponseHead* response_head,
- base::FilePath response_file,
- std::string response_body) override {
- ApiErrorCode error = GetErrorCode();
- switch (error) {
- case HTTP_SUCCESS:
- case HTTP_CREATED:
- base::PostTaskAndReplyWithResult(
- blocking_task_runner(), FROM_HERE,
- base::BindOnce(&DriveApiDataRequest::Parse,
- std::move(response_body)),
- base::BindOnce(&DriveApiDataRequest::OnDataParsed,
- weak_ptr_factory_.GetWeakPtr(), error));
- break;
- default:
- RunCallbackOnPrematureFailure(error);
- OnProcessURLFetchResultsComplete();
- break;
- }
- }
- void RunCallbackOnPrematureFailure(ApiErrorCode error) override {
- std::move(callback_).Run(error, std::unique_ptr<DataType>());
- }
- private:
- // Parses the |json| string by using DataType::CreateFrom.
- static std::unique_ptr<DataType> Parse(std::string json) {
- std::unique_ptr<base::Value> value = ParseJson(json);
- return value ? DataType::CreateFrom(*value) : std::unique_ptr<DataType>();
- }
- // Receives the parsed result and invokes the callback.
- void OnDataParsed(ApiErrorCode error, std::unique_ptr<DataType> value) {
- if (!value)
- error = PARSE_ERROR;
- std::move(callback_).Run(error, std::move(value));
- OnProcessURLFetchResultsComplete();
- }
- Callback callback_;
- // 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<DriveApiDataRequest> weak_ptr_factory_{this};
- };
- //=============================== FilesGetRequest =============================
- // This class performs the request for fetching a file.
- // This request is mapped to
- // https://developers.google.com/drive/v2/reference/files/get
- class FilesGetRequest : public DriveApiDataRequest<FileResource> {
- public:
- FilesGetRequest(RequestSender* sender,
- const DriveApiUrlGenerator& url_generator,
- FileResourceCallback callback);
- FilesGetRequest(const FilesGetRequest&) = delete;
- FilesGetRequest& operator=(const FilesGetRequest&) = delete;
- ~FilesGetRequest() override;
- // Required parameter.
- const std::string& file_id() const { return file_id_; }
- void set_file_id(const std::string& file_id) { file_id_ = file_id; }
- // Optional parameter.
- const GURL& embed_origin() const { return embed_origin_; }
- void set_embed_origin(const GURL& embed_origin) {
- embed_origin_ = embed_origin;
- }
- protected:
- // Overridden from DriveApiDataRequest.
- GURL GetURLInternal() const override;
- private:
- const DriveApiUrlGenerator url_generator_;
- std::string file_id_;
- GURL embed_origin_;
- };
- //============================ FilesInsertRequest =============================
- // Enumeration type for specifying visibility of files.
- enum FileVisibility {
- FILE_VISIBILITY_DEFAULT,
- FILE_VISIBILITY_PRIVATE,
- };
- // This class performs the request for creating a resource.
- // This request is mapped to
- // https://developers.google.com/drive/v2/reference/files/insert
- // See also https://developers.google.com/drive/manage-uploads and
- // https://developers.google.com/drive/folder
- class FilesInsertRequest : public DriveApiDataRequest<FileResource> {
- public:
- FilesInsertRequest(RequestSender* sender,
- const DriveApiUrlGenerator& url_generator,
- FileResourceCallback callback);
- FilesInsertRequest(const FilesInsertRequest&) = delete;
- FilesInsertRequest& operator=(const FilesInsertRequest&) = delete;
- ~FilesInsertRequest() override;
- // Optional parameter
- void set_visibility(FileVisibility visibility) { visibility_ = visibility; }
- // Optional request body.
- const base::Time& last_viewed_by_me_date() const {
- return last_viewed_by_me_date_;
- }
- void set_last_viewed_by_me_date(const base::Time& last_viewed_by_me_date) {
- last_viewed_by_me_date_ = last_viewed_by_me_date;
- }
- const std::string& mime_type() const { return mime_type_; }
- void set_mime_type(const std::string& mime_type) { mime_type_ = mime_type; }
- const base::Time& modified_date() const { return modified_date_; }
- void set_modified_date(const base::Time& modified_date) {
- modified_date_ = modified_date;
- }
- const std::vector<std::string>& parents() const { return parents_; }
- void add_parent(const std::string& parent) { parents_.push_back(parent); }
- const std::string& title() const { return title_; }
- void set_title(const std::string& title) { title_ = title; }
- const Properties& properties() const { return properties_; }
- void set_properties(const Properties& properties) {
- properties_ = properties;
- }
- protected:
- // Overridden from GetDataRequest.
- std::string GetRequestType() const override;
- bool GetContentData(std::string* upload_content_type,
- std::string* upload_content) override;
- // Overridden from DriveApiDataRequest.
- GURL GetURLInternal() const override;
- private:
- const DriveApiUrlGenerator url_generator_;
- FileVisibility visibility_;
- base::Time last_viewed_by_me_date_;
- std::string mime_type_;
- base::Time modified_date_;
- std::vector<std::string> parents_;
- std::string title_;
- Properties properties_;
- };
- //============================== FilesPatchRequest ============================
- // This class performs the request for patching file metadata.
- // This request is mapped to
- // https://developers.google.com/drive/v2/reference/files/patch
- class FilesPatchRequest : public DriveApiDataRequest<FileResource> {
- public:
- FilesPatchRequest(RequestSender* sender,
- const DriveApiUrlGenerator& url_generator,
- FileResourceCallback callback);
- FilesPatchRequest(const FilesPatchRequest&) = delete;
- FilesPatchRequest& operator=(const FilesPatchRequest&) = delete;
- ~FilesPatchRequest() override;
- // Required parameter.
- const std::string& file_id() const { return file_id_; }
- void set_file_id(const std::string& file_id) { file_id_ = file_id; }
- // Optional parameter.
- bool set_modified_date() const { return set_modified_date_; }
- void set_set_modified_date(bool set_modified_date) {
- set_modified_date_ = set_modified_date;
- }
- bool update_viewed_date() const { return update_viewed_date_; }
- void set_update_viewed_date(bool update_viewed_date) {
- update_viewed_date_ = update_viewed_date;
- }
- // Optional request body.
- // Note: "Files: patch" accepts any "Files resource" data, but this class
- // only supports limited members of it for now. We can extend it upon
- // requirments.
- const std::string& title() const { return title_; }
- void set_title(const std::string& title) { title_ = title; }
- const base::Time& modified_date() const { return modified_date_; }
- void set_modified_date(const base::Time& modified_date) {
- modified_date_ = modified_date;
- }
- const base::Time& last_viewed_by_me_date() const {
- return last_viewed_by_me_date_;
- }
- void set_last_viewed_by_me_date(const base::Time& last_viewed_by_me_date) {
- last_viewed_by_me_date_ = last_viewed_by_me_date;
- }
- const std::vector<std::string>& parents() const { return parents_; }
- void add_parent(const std::string& parent) { parents_.push_back(parent); }
- const Properties& properties() const { return properties_; }
- void set_properties(const Properties& properties) {
- properties_ = properties;
- }
- protected:
- // Overridden from URLFetchRequestBase.
- std::string GetRequestType() const override;
- std::vector<std::string> GetExtraRequestHeaders() const override;
- bool GetContentData(std::string* upload_content_type,
- std::string* upload_content) override;
- // Overridden from DriveApiDataRequest.
- GURL GetURLInternal() const override;
- private:
- const DriveApiUrlGenerator url_generator_;
- std::string file_id_;
- bool set_modified_date_;
- bool update_viewed_date_;
- std::string title_;
- base::Time modified_date_;
- base::Time last_viewed_by_me_date_;
- std::vector<std::string> parents_;
- Properties properties_;
- };
- //============================= FilesCopyRequest ==============================
- // This class performs the request for copying a resource.
- // This request is mapped to
- // https://developers.google.com/drive/v2/reference/files/copy
- class FilesCopyRequest : public DriveApiDataRequest<FileResource> {
- public:
- // Upon completion, |callback| will be called. |callback| must not be null.
- FilesCopyRequest(RequestSender* sender,
- const DriveApiUrlGenerator& url_generator,
- FileResourceCallback callback);
- FilesCopyRequest(const FilesCopyRequest&) = delete;
- FilesCopyRequest& operator=(const FilesCopyRequest&) = delete;
- ~FilesCopyRequest() override;
- // Required parameter.
- const std::string& file_id() const { return file_id_; }
- void set_file_id(const std::string& file_id) { file_id_ = file_id; }
- // Optional parameter
- void set_visibility(FileVisibility visibility) { visibility_ = visibility; }
- // Optional request body.
- const std::vector<std::string>& parents() const { return parents_; }
- void add_parent(const std::string& parent) { parents_.push_back(parent); }
- const base::Time& modified_date() const { return modified_date_; }
- void set_modified_date(const base::Time& modified_date) {
- modified_date_ = modified_date;
- }
- const std::string& title() const { return title_; }
- void set_title(const std::string& title) { title_ = title; }
- protected:
- // Overridden from URLFetchRequestBase.
- std::string GetRequestType() const override;
- bool GetContentData(std::string* upload_content_type,
- std::string* upload_content) override;
- // Overridden from DriveApiDataRequest.
- GURL GetURLInternal() const override;
- private:
- const DriveApiUrlGenerator url_generator_;
- std::string file_id_;
- FileVisibility visibility_;
- base::Time modified_date_;
- std::vector<std::string> parents_;
- std::string title_;
- };
- //========================== TeamDriveListRequest =============================
- // This class performs the request for fetching TeamDrive list.
- // The result may contain only first part of the result. The remaining result
- // should be able to be fetched by another request using this class, by
- // setting the next_page_token from previous call, to page_token.
- // This request is mapped to
- // https://developers.google.com/drive/v2/reference/teamdrives/list
- class TeamDriveListRequest : public DriveApiDataRequest<TeamDriveList> {
- public:
- TeamDriveListRequest(RequestSender* sender,
- const DriveApiUrlGenerator& url_generator,
- TeamDriveListCallback callback);
- TeamDriveListRequest(const TeamDriveListRequest&) = delete;
- TeamDriveListRequest& operator=(const TeamDriveListRequest&) = delete;
- ~TeamDriveListRequest() override;
- // Optional parameter
- int max_results() const { return max_results_; }
- void set_max_results(int max_results) { max_results_ = max_results; }
- const std::string& page_token() const { return page_token_; }
- void set_page_token(const std::string& page_token) {
- page_token_ = page_token;
- }
- protected:
- // Overridden from DriveApiDataRequest.
- GURL GetURLInternal() const override;
- private:
- const DriveApiUrlGenerator url_generator_;
- int max_results_;
- std::string page_token_;
- };
- //========================== StartPageTokenRequest =============================
- // This class performs the request for fetching the start page token.
- // |team_drive_id_| may be empty, in which case the start page token will be
- // returned for the users changes.
- // This request is mapped to
- // https://developers.google.com/drive/v2/reference/changes/getStartPageToken
- class StartPageTokenRequest : public DriveApiDataRequest<StartPageToken> {
- public:
- StartPageTokenRequest(RequestSender* sender,
- const DriveApiUrlGenerator& url_generator,
- StartPageTokenCallback callback);
- StartPageTokenRequest(const StartPageTokenRequest&) = delete;
- StartPageTokenRequest& operator=(const StartPageTokenRequest&) = delete;
- ~StartPageTokenRequest() override;
- // Optional parameter
- const std::string& team_drive_id() const { return team_drive_id_; }
- void set_team_drive_id(const std::string& team_drive_id) {
- team_drive_id_ = team_drive_id;
- }
- protected:
- // Overridden from DriveApiDataRequest.
- GURL GetURLInternal() const override;
- private:
- const DriveApiUrlGenerator url_generator_;
- std::string team_drive_id_;
- };
- //============================= FilesListRequest =============================
- // This class performs the request for fetching FileList.
- // The result may contain only first part of the result. The remaining result
- // should be able to be fetched by ContinueGetFileListRequest defined below,
- // or by FilesListRequest with setting page token.
- // This request is mapped to
- // https://developers.google.com/drive/v2/reference/files/list
- class FilesListRequest : public DriveApiDataRequest<FileList> {
- public:
- FilesListRequest(RequestSender* sender,
- const DriveApiUrlGenerator& url_generator,
- FileListCallback callback);
- FilesListRequest(const FilesListRequest&) = delete;
- FilesListRequest& operator=(const FilesListRequest&) = delete;
- ~FilesListRequest() override;
- // Optional parameter
- int max_results() const { return max_results_; }
- void set_max_results(int max_results) { max_results_ = max_results; }
- const std::string& page_token() const { return page_token_; }
- void set_page_token(const std::string& page_token) {
- page_token_ = page_token;
- }
- FilesListCorpora corpora() const { return corpora_; }
- void set_corpora(FilesListCorpora corpora) { corpora_ = corpora; }
- const std::string& team_drive_id() const { return team_drive_id_; }
- void set_team_drive_id(const std::string& team_drive_id) {
- team_drive_id_ = team_drive_id;
- }
- const std::string& q() const { return q_; }
- void set_q(const std::string& q) { q_ = q; }
- protected:
- // Overridden from DriveApiDataRequest.
- GURL GetURLInternal() const override;
- private:
- const DriveApiUrlGenerator url_generator_;
- int max_results_;
- std::string page_token_;
- FilesListCorpora corpora_;
- std::string team_drive_id_;
- std::string q_;
- };
- //========================= FilesListNextPageRequest ==========================
- // There are two ways to obtain next pages of "Files: list" result (if paged).
- // 1) Set pageToken and all params used for the initial request.
- // 2) Use URL in the nextLink field in the previous response.
- // This class implements 2)'s request.
- class FilesListNextPageRequest : public DriveApiDataRequest<FileList> {
- public:
- FilesListNextPageRequest(RequestSender* sender, FileListCallback callback);
- FilesListNextPageRequest(const FilesListNextPageRequest&) = delete;
- FilesListNextPageRequest& operator=(const FilesListNextPageRequest&) = delete;
- ~FilesListNextPageRequest() override;
- const GURL& next_link() const { return next_link_; }
- void set_next_link(const GURL& next_link) { next_link_ = next_link; }
- protected:
- // Overridden from DriveApiDataRequest.
- GURL GetURLInternal() const override;
- private:
- GURL next_link_;
- };
- //============================= FilesDeleteRequest =============================
- // This class performs the request for deleting a resource.
- // This request is mapped to
- // https://developers.google.com/drive/v2/reference/files/delete
- class FilesDeleteRequest : public EntryActionRequest {
- public:
- FilesDeleteRequest(RequestSender* sender,
- const DriveApiUrlGenerator& url_generator,
- EntryActionCallback callback);
- FilesDeleteRequest(const FilesDeleteRequest&) = delete;
- FilesDeleteRequest& operator=(const FilesDeleteRequest&) = delete;
- ~FilesDeleteRequest() override;
- // Required parameter.
- const std::string& file_id() const { return file_id_; }
- void set_file_id(const std::string& file_id) { file_id_ = file_id; }
- void set_etag(const std::string& etag) { etag_ = etag; }
- protected:
- // Overridden from UrlFetchRequestBase.
- std::string GetRequestType() const override;
- GURL GetURL() const override;
- std::vector<std::string> GetExtraRequestHeaders() const override;
- private:
- const DriveApiUrlGenerator url_generator_;
- std::string file_id_;
- std::string etag_;
- };
- //============================= FilesTrashRequest ==============================
- // This class performs the request for trashing a resource.
- // This request is mapped to
- // https://developers.google.com/drive/v2/reference/files/trash
- class FilesTrashRequest : public DriveApiDataRequest<FileResource> {
- public:
- FilesTrashRequest(RequestSender* sender,
- const DriveApiUrlGenerator& url_generator,
- FileResourceCallback callback);
- FilesTrashRequest(const FilesTrashRequest&) = delete;
- FilesTrashRequest& operator=(const FilesTrashRequest&) = delete;
- ~FilesTrashRequest() override;
- // Required parameter.
- const std::string& file_id() const { return file_id_; }
- void set_file_id(const std::string& file_id) { file_id_ = file_id; }
- protected:
- // Overridden from UrlFetchRequestBase.
- std::string GetRequestType() const override;
- // Overridden from DriveApiDataRequest.
- GURL GetURLInternal() const override;
- private:
- const DriveApiUrlGenerator url_generator_;
- std::string file_id_;
- };
- //============================== AboutGetRequest =============================
- // This class performs the request for fetching About data.
- // This request is mapped to
- // https://developers.google.com/drive/v2/reference/about/get
- class AboutGetRequest : public DriveApiDataRequest<AboutResource> {
- public:
- AboutGetRequest(RequestSender* sender,
- const DriveApiUrlGenerator& url_generator,
- AboutResourceCallback callback);
- AboutGetRequest(const AboutGetRequest&) = delete;
- AboutGetRequest& operator=(const AboutGetRequest&) = delete;
- ~AboutGetRequest() override;
- protected:
- // Overridden from DriveApiDataRequest.
- GURL GetURLInternal() const override;
- private:
- const DriveApiUrlGenerator url_generator_;
- };
- //============================ ChangesListRequest ============================
- // This class performs the request for fetching ChangeList.
- // The result may contain only first part of the result. The remaining result
- // should be able to be fetched by ContinueGetFileListRequest defined below.
- // or by ChangesListRequest with setting page token.
- // This request is mapped to
- // https://developers.google.com/drive/v2/reference/changes/list
- class ChangesListRequest : public DriveApiDataRequest<ChangeList> {
- public:
- ChangesListRequest(RequestSender* sender,
- const DriveApiUrlGenerator& url_generator,
- ChangeListCallback callback);
- ChangesListRequest(const ChangesListRequest&) = delete;
- ChangesListRequest& operator=(const ChangesListRequest&) = delete;
- ~ChangesListRequest() override;
- // Optional parameter
- bool include_deleted() const { return include_deleted_; }
- void set_include_deleted(bool include_deleted) {
- include_deleted_ = include_deleted;
- }
- int max_results() const { return max_results_; }
- void set_max_results(int max_results) { max_results_ = max_results; }
- const std::string& page_token() const { return page_token_; }
- void set_page_token(const std::string& page_token) {
- page_token_ = page_token;
- }
- int64_t start_change_id() const { return start_change_id_; }
- void set_start_change_id(int64_t start_change_id) {
- start_change_id_ = start_change_id;
- }
- const std::string& team_drive_id() const { return team_drive_id_; }
- void set_team_drive_id(const std::string& team_drive_id) {
- team_drive_id_ = team_drive_id;
- }
- protected:
- // Overridden from DriveApiDataRequest.
- GURL GetURLInternal() const override;
- private:
- const DriveApiUrlGenerator url_generator_;
- bool include_deleted_;
- int max_results_;
- std::string page_token_;
- int64_t start_change_id_;
- std::string team_drive_id_;
- };
- //======================== ChangesListNextPageRequest =========================
- // There are two ways to obtain next pages of "Changes: list" result (if paged).
- // 1) Set pageToken and all params used for the initial request.
- // 2) Use URL in the nextLink field in the previous response.
- // This class implements 2)'s request.
- class ChangesListNextPageRequest : public DriveApiDataRequest<ChangeList> {
- public:
- ChangesListNextPageRequest(RequestSender* sender,
- ChangeListCallback callback);
- ChangesListNextPageRequest(const ChangesListNextPageRequest&) = delete;
- ChangesListNextPageRequest& operator=(const ChangesListNextPageRequest&) =
- delete;
- ~ChangesListNextPageRequest() override;
- const GURL& next_link() const { return next_link_; }
- void set_next_link(const GURL& next_link) { next_link_ = next_link; }
- protected:
- // Overridden from DriveApiDataRequest.
- GURL GetURLInternal() const override;
- private:
- GURL next_link_;
- };
- //========================== ChildrenInsertRequest ============================
- // This class performs the request for inserting a resource to a directory.
- // This request is mapped to
- // https://developers.google.com/drive/v2/reference/children/insert
- class ChildrenInsertRequest : public EntryActionRequest {
- public:
- ChildrenInsertRequest(RequestSender* sender,
- const DriveApiUrlGenerator& url_generator,
- EntryActionCallback callback);
- ChildrenInsertRequest(const ChildrenInsertRequest&) = delete;
- ChildrenInsertRequest& operator=(const ChildrenInsertRequest&) = delete;
- ~ChildrenInsertRequest() override;
- // Required parameter.
- const std::string& folder_id() const { return folder_id_; }
- void set_folder_id(const std::string& folder_id) { folder_id_ = folder_id; }
- // Required body.
- const std::string& id() const { return id_; }
- void set_id(const std::string& id) { id_ = id; }
- protected:
- // UrlFetchRequestBase overrides.
- std::string GetRequestType() const override;
- GURL GetURL() const override;
- bool GetContentData(std::string* upload_content_type,
- std::string* upload_content) override;
- private:
- const DriveApiUrlGenerator url_generator_;
- std::string folder_id_;
- std::string id_;
- };
- //========================== ChildrenDeleteRequest ============================
- // This class performs the request for removing a resource from a directory.
- // This request is mapped to
- // https://developers.google.com/drive/v2/reference/children/delete
- class ChildrenDeleteRequest : public EntryActionRequest {
- public:
- // |callback| must not be null.
- ChildrenDeleteRequest(RequestSender* sender,
- const DriveApiUrlGenerator& url_generator,
- EntryActionCallback callback);
- ChildrenDeleteRequest(const ChildrenDeleteRequest&) = delete;
- ChildrenDeleteRequest& operator=(const ChildrenDeleteRequest&) = delete;
- ~ChildrenDeleteRequest() override;
- // Required parameter.
- const std::string& child_id() const { return child_id_; }
- void set_child_id(const std::string& child_id) { child_id_ = child_id; }
- const std::string& folder_id() const { return folder_id_; }
- void set_folder_id(const std::string& folder_id) { folder_id_ = folder_id; }
- protected:
- // UrlFetchRequestBase overrides.
- std::string GetRequestType() const override;
- GURL GetURL() const override;
- private:
- const DriveApiUrlGenerator url_generator_;
- std::string child_id_;
- std::string folder_id_;
- };
- //======================= InitiateUploadNewFileRequest =======================
- // This class performs the request for initiating the upload of a new file.
- class InitiateUploadNewFileRequest : public InitiateUploadRequestBase {
- public:
- // |parent_resource_id| should be the resource id of the parent directory.
- // |title| should be set.
- // See also the comments of InitiateUploadRequestBase for more details
- // about the other parameters.
- InitiateUploadNewFileRequest(RequestSender* sender,
- const DriveApiUrlGenerator& url_generator,
- const std::string& content_type,
- int64_t content_length,
- const std::string& parent_resource_id,
- const std::string& title,
- InitiateUploadCallback callback);
- InitiateUploadNewFileRequest(const InitiateUploadNewFileRequest&) = delete;
- InitiateUploadNewFileRequest& operator=(const InitiateUploadNewFileRequest&) =
- delete;
- ~InitiateUploadNewFileRequest() override;
- // Optional parameters.
- const base::Time& modified_date() const { return modified_date_; }
- void set_modified_date(const base::Time& modified_date) {
- modified_date_ = modified_date;
- }
- const base::Time& last_viewed_by_me_date() const {
- return last_viewed_by_me_date_;
- }
- void set_last_viewed_by_me_date(const base::Time& last_viewed_by_me_date) {
- last_viewed_by_me_date_ = last_viewed_by_me_date;
- }
- const Properties& properties() const { return properties_; }
- void set_properties(const Properties& properties) {
- properties_ = properties;
- }
- protected:
- // UrlFetchRequestBase overrides.
- GURL GetURL() const override;
- std::string GetRequestType() const override;
- bool GetContentData(std::string* upload_content_type,
- std::string* upload_content) override;
- private:
- const DriveApiUrlGenerator url_generator_;
- const std::string parent_resource_id_;
- const std::string title_;
- base::Time modified_date_;
- base::Time last_viewed_by_me_date_;
- Properties properties_;
- };
- //==================== InitiateUploadExistingFileRequest =====================
- // This class performs the request for initiating the upload of an existing
- // file.
- class InitiateUploadExistingFileRequest : public InitiateUploadRequestBase {
- public:
- // |upload_url| should be the upload_url() of the file
- // (resumable-create-media URL)
- // |etag| should be set if it is available to detect the upload confliction.
- // See also the comments of InitiateUploadRequestBase for more details
- // about the other parameters.
- InitiateUploadExistingFileRequest(RequestSender* sender,
- const DriveApiUrlGenerator& url_generator,
- const std::string& content_type,
- int64_t content_length,
- const std::string& resource_id,
- const std::string& etag,
- InitiateUploadCallback callback);
- InitiateUploadExistingFileRequest(const InitiateUploadExistingFileRequest&) =
- delete;
- InitiateUploadExistingFileRequest& operator=(
- const InitiateUploadExistingFileRequest&) = delete;
- ~InitiateUploadExistingFileRequest() override;
- // Optional parameters.
- const std::string& parent_resource_id() const { return parent_resource_id_; }
- void set_parent_resource_id(const std::string& parent_resource_id) {
- parent_resource_id_ = parent_resource_id;
- }
- const std::string& title() const { return title_; }
- void set_title(const std::string& title) { title_ = title; }
- const base::Time& modified_date() const { return modified_date_; }
- void set_modified_date(const base::Time& modified_date) {
- modified_date_ = modified_date;
- }
- const base::Time& last_viewed_by_me_date() const {
- return last_viewed_by_me_date_;
- }
- void set_last_viewed_by_me_date(const base::Time& last_viewed_by_me_date) {
- last_viewed_by_me_date_ = last_viewed_by_me_date;
- }
- const Properties& properties() const { return properties_; }
- void set_properties(const Properties& properties) {
- properties_ = properties;
- }
- protected:
- // UrlFetchRequestBase overrides.
- GURL GetURL() const override;
- std::string GetRequestType() const override;
- std::vector<std::string> GetExtraRequestHeaders() const override;
- bool GetContentData(std::string* upload_content_type,
- std::string* upload_content) override;
- private:
- const DriveApiUrlGenerator url_generator_;
- const std::string resource_id_;
- const std::string etag_;
- std::string parent_resource_id_;
- std::string title_;
- base::Time modified_date_;
- base::Time last_viewed_by_me_date_;
- Properties properties_;
- };
- // Callback used for ResumeUpload() and GetUploadStatus().
- typedef base::OnceCallback<void(const UploadRangeResponse& response,
- std::unique_ptr<FileResource> new_resource)>
- UploadRangeCallback;
- //============================ ResumeUploadRequest ===========================
- // Performs the request for resuming the upload of a file.
- class ResumeUploadRequest : public ResumeUploadRequestBase {
- public:
- // See also ResumeUploadRequestBase's comment for parameters meaning.
- // |callback| must not be null. |progress_callback| may be null.
- ResumeUploadRequest(RequestSender* sender,
- const GURL& upload_location,
- int64_t start_position,
- int64_t end_position,
- int64_t content_length,
- const std::string& content_type,
- const base::FilePath& local_file_path,
- UploadRangeCallback callback,
- ProgressCallback progress_callback);
- ResumeUploadRequest(const ResumeUploadRequest&) = delete;
- ResumeUploadRequest& operator=(const ResumeUploadRequest&) = delete;
- ~ResumeUploadRequest() override;
- protected:
- // UploadRangeRequestBase overrides.
- void OnRangeRequestComplete(const UploadRangeResponse& response,
- std::unique_ptr<base::Value> value) override;
- private:
- UploadRangeCallback callback_;
- };
- //========================== GetUploadStatusRequest ==========================
- // Performs the request to fetch the current upload status of a file.
- class GetUploadStatusRequest : public GetUploadStatusRequestBase {
- public:
- // See also GetUploadStatusRequestBase's comment for parameters meaning.
- // |callback| must not be null.
- GetUploadStatusRequest(RequestSender* sender,
- const GURL& upload_url,
- int64_t content_length,
- UploadRangeCallback callback);
- GetUploadStatusRequest(const GetUploadStatusRequest&) = delete;
- GetUploadStatusRequest& operator=(const GetUploadStatusRequest&) = delete;
- ~GetUploadStatusRequest() override;
- protected:
- // UploadRangeRequestBase overrides.
- void OnRangeRequestComplete(const UploadRangeResponse& response,
- std::unique_ptr<base::Value> value) override;
- private:
- UploadRangeCallback callback_;
- };
- //======================= MultipartUploadNewFileDelegate =======================
- // This class performs the request for initiating the upload of a new file.
- class MultipartUploadNewFileDelegate : public MultipartUploadRequestBase {
- public:
- // |parent_resource_id| should be the resource id of the parent directory.
- // |title| should be set.
- // See also the comments of MultipartUploadRequestBase for more details
- // about the other parameters.
- MultipartUploadNewFileDelegate(base::SequencedTaskRunner* task_runner,
- const std::string& title,
- const std::string& parent_resource_id,
- const std::string& content_type,
- int64_t content_length,
- const base::Time& modified_date,
- const base::Time& last_viewed_by_me_date,
- const base::FilePath& local_file_path,
- const Properties& properties,
- const DriveApiUrlGenerator& url_generator,
- FileResourceCallback callback,
- ProgressCallback progress_callback);
- MultipartUploadNewFileDelegate(const MultipartUploadNewFileDelegate&) =
- delete;
- MultipartUploadNewFileDelegate& operator=(
- const MultipartUploadNewFileDelegate&) = delete;
- ~MultipartUploadNewFileDelegate() override;
- protected:
- // UrlFetchRequestBase overrides.
- GURL GetURL() const override;
- std::string GetRequestType() const override;
- private:
- const bool has_modified_date_;
- const DriveApiUrlGenerator url_generator_;
- };
- //====================== MultipartUploadExistingFileDelegate ===================
- // This class performs the request for initiating the upload of a new file.
- class MultipartUploadExistingFileDelegate : public MultipartUploadRequestBase {
- public:
- // |parent_resource_id| should be the resource id of the parent directory.
- // |title| should be set.
- // See also the comments of MultipartUploadRequestBase for more details
- // about the other parameters.
- MultipartUploadExistingFileDelegate(base::SequencedTaskRunner* task_runner,
- const std::string& title,
- const std::string& resource_id,
- const std::string& parent_resource_id,
- const std::string& content_type,
- int64_t content_length,
- const base::Time& modified_date,
- const base::Time& last_viewed_by_me_date,
- const base::FilePath& local_file_path,
- const std::string& etag,
- const Properties& properties,
- const DriveApiUrlGenerator& url_generator,
- FileResourceCallback callback,
- ProgressCallback progress_callback);
- MultipartUploadExistingFileDelegate(
- const MultipartUploadExistingFileDelegate&) = delete;
- MultipartUploadExistingFileDelegate& operator=(
- const MultipartUploadExistingFileDelegate&) = delete;
- ~MultipartUploadExistingFileDelegate() override;
- protected:
- // UrlFetchRequestBase overrides.
- std::vector<std::string> GetExtraRequestHeaders() const override;
- GURL GetURL() const override;
- std::string GetRequestType() const override;
- private:
- const std::string resource_id_;
- const std::string etag_;
- const bool has_modified_date_;
- const DriveApiUrlGenerator url_generator_;
- };
- //========================== DownloadFileRequest ==========================
- // This class performs the request for downloading of a specified file.
- class DownloadFileRequest : public DownloadFileRequestBase {
- public:
- // See also DownloadFileRequestBase's comment for parameters meaning.
- DownloadFileRequest(RequestSender* sender,
- const DriveApiUrlGenerator& url_generator,
- const std::string& resource_id,
- const base::FilePath& output_file_path,
- DownloadActionCallback download_action_callback,
- const GetContentCallback& get_content_callback,
- ProgressCallback progress_callback);
- DownloadFileRequest(const DownloadFileRequest&) = delete;
- DownloadFileRequest& operator=(const DownloadFileRequest&) = delete;
- ~DownloadFileRequest() override;
- };
- //========================== PermissionsInsertRequest ==========================
- // Enumeration type for specifying type of permissions.
- enum PermissionType {
- PERMISSION_TYPE_ANYONE,
- PERMISSION_TYPE_DOMAIN,
- PERMISSION_TYPE_GROUP,
- PERMISSION_TYPE_USER,
- };
- // Enumeration type for specifying the role of permissions.
- enum PermissionRole {
- PERMISSION_ROLE_OWNER,
- PERMISSION_ROLE_READER,
- PERMISSION_ROLE_WRITER,
- PERMISSION_ROLE_COMMENTER,
- };
- // This class performs the request for adding permission on a specified file.
- class PermissionsInsertRequest : public EntryActionRequest {
- public:
- // See https://developers.google.com/drive/v2/reference/permissions/insert.
- PermissionsInsertRequest(RequestSender* sender,
- const DriveApiUrlGenerator& url_generator,
- EntryActionCallback callback);
- PermissionsInsertRequest(const PermissionsInsertRequest&) = delete;
- PermissionsInsertRequest& operator=(const PermissionsInsertRequest&) = delete;
- ~PermissionsInsertRequest() override;
- void set_id(const std::string& id) { id_ = id; }
- void set_type(PermissionType type) { type_ = type; }
- void set_role(PermissionRole role) { role_ = role; }
- void set_value(const std::string& value) { value_ = value; }
- // UrlFetchRequestBase overrides.
- GURL GetURL() const override;
- std::string GetRequestType() const override;
- bool GetContentData(std::string* upload_content_type,
- std::string* upload_content) override;
- private:
- const DriveApiUrlGenerator url_generator_;
- std::string id_;
- PermissionType type_;
- PermissionRole role_;
- std::string value_;
- };
- //======================= SingleBatchableDelegateRequest =======================
- // Request that is operated by single BatchableDelegate.
- class SingleBatchableDelegateRequest : public DriveUrlFetchRequestBase {
- public:
- SingleBatchableDelegateRequest(RequestSender* sender,
- std::unique_ptr<BatchableDelegate> delegate);
- SingleBatchableDelegateRequest(const SingleBatchableDelegateRequest&) =
- delete;
- SingleBatchableDelegateRequest& operator=(
- const SingleBatchableDelegateRequest&) = delete;
- ~SingleBatchableDelegateRequest() override;
- private:
- GURL GetURL() const override;
- std::string GetRequestType() const override;
- std::vector<std::string> GetExtraRequestHeaders() const override;
- void Prepare(PrepareCallback callback) override;
- bool GetContentData(std::string* upload_content_type,
- std::string* upload_content) override;
- void RunCallbackOnPrematureFailure(ApiErrorCode code) override;
- void ProcessURLFetchResults(
- const network::mojom::URLResponseHead* response_head,
- base::FilePath response_file,
- std::string response_body) override;
- void OnUploadProgress(int64_t current, int64_t total);
- std::unique_ptr<BatchableDelegate> delegate_;
- // 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<SingleBatchableDelegateRequest> weak_ptr_factory_{this};
- };
- //========================== BatchUploadRequest ==========================
- class BatchUploadChildEntry {
- public:
- explicit BatchUploadChildEntry(BatchableDelegate* request);
- BatchUploadChildEntry(const BatchUploadChildEntry&) = delete;
- BatchUploadChildEntry& operator=(const BatchUploadChildEntry&) = delete;
- ~BatchUploadChildEntry();
- std::unique_ptr<BatchableDelegate> request;
- bool prepared;
- int64_t data_offset;
- int64_t data_size;
- };
- class BatchUploadRequest : public DriveUrlFetchRequestBase {
- public:
- BatchUploadRequest(RequestSender* sender,
- const DriveApiUrlGenerator& url_generator);
- BatchUploadRequest(const BatchUploadRequest&) = delete;
- BatchUploadRequest& operator=(const BatchUploadRequest&) = delete;
- ~BatchUploadRequest() override;
- // Adds request to the batch request. The instance takes ownership of
- // |request|.
- void AddRequest(BatchableDelegate* request);
- // Completes building batch upload request, and starts to send the request to
- // server. Must add at least one request before calling |Commit|.
- void Commit();
- // Obtains weak pointer of this.
- base::WeakPtr<BatchUploadRequest> GetWeakPtrAsBatchUploadRequest();
- // Set boundary. Only tests can use this method.
- void SetBoundaryForTesting(const std::string& boundary);
- // Obtains reference to RequestSender that owns the request.
- RequestSender* sender() const { return sender_; }
- // Obtains URLGenerator.
- const DriveApiUrlGenerator& url_generator() const { return url_generator_; }
- // UrlFetchRequestBase overrides.
- void Prepare(PrepareCallback callback) override;
- void Cancel() override;
- GURL GetURL() const override;
- std::string GetRequestType() const override;
- std::vector<std::string> GetExtraRequestHeaders() const override;
- bool GetContentData(std::string* upload_content_type,
- std::string* upload_content) override;
- void ProcessURLFetchResults(
- const network::mojom::URLResponseHead* response_head,
- base::FilePath response_file,
- std::string response_body) override;
- void RunCallbackOnPrematureFailure(ApiErrorCode code) override;
- // Called by UrlFetchRequestBase to report upload progress.
- void OnUploadProgress(int64_t current, int64_t total);
- private:
- typedef void* RequestID;
- // Obtains corresponding child entry of |request_id|. Returns NULL if the
- // entry is not found.
- std::vector<std::unique_ptr<BatchUploadChildEntry>>::iterator GetChildEntry(
- RequestID request_id);
- // Called after child requests' |Prepare| method.
- void OnChildRequestPrepared(RequestID request_id, ApiErrorCode result);
- // Complete |Prepare| if possible.
- void MayCompletePrepare();
- // Process result for each child.
- void ProcessURLFetchResultsForChild(RequestID id, const std::string& body);
- const raw_ptr<RequestSender> sender_;
- const DriveApiUrlGenerator url_generator_;
- std::vector<std::unique_ptr<BatchUploadChildEntry>> child_requests_;
- PrepareCallback prepare_callback_;
- bool committed_;
- // Boundary of multipart body.
- std::string boundary_;
- // Multipart of child requests.
- ContentTypeAndData upload_content_;
- // Last reported progress value.
- int64_t last_progress_value_;
- // 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<BatchUploadRequest> weak_ptr_factory_{this};
- };
- } // namespace drive
- } // namespace google_apis
- #endif // GOOGLE_APIS_DRIVE_DRIVE_API_REQUESTS_H_
|