gdata_wapi_requests.h revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
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_GDATA_WAPI_REQUESTS_H_ 6#define GOOGLE_APIS_DRIVE_GDATA_WAPI_REQUESTS_H_ 7 8#include <string> 9#include <vector> 10 11#include "google_apis/drive/base_requests.h" 12#include "google_apis/drive/drive_common_callbacks.h" 13#include "google_apis/drive/gdata_wapi_url_generator.h" 14 15namespace google_apis { 16 17class AccountMetadata; 18class GDataWapiUrlGenerator; 19class ResourceEntry; 20 21//============================ GetResourceListRequest ======================== 22 23// This class performs the request for fetching a resource list. 24class GetResourceListRequest : public GetDataRequest { 25 public: 26 // override_url: 27 // If empty, a hard-coded base URL of the WAPI server is used to fetch 28 // the first page of the feed. This parameter is used for fetching 2nd 29 // page and onward. 30 // 31 // start_changestamp: 32 // This parameter specifies the starting point of a delta feed or 0 if a 33 // full feed is necessary. 34 // 35 // search_string: 36 // If non-empty, fetches a list of resources that match the search 37 // string. 38 // 39 // directory_resource_id: 40 // If non-empty, fetches a list of resources in a particular directory. 41 // 42 // callback: 43 // Called once the feed is fetched. Must not be null. 44 GetResourceListRequest(RequestSender* sender, 45 const GDataWapiUrlGenerator& url_generator, 46 const GURL& override_url, 47 int64 start_changestamp, 48 const std::string& search_string, 49 const std::string& directory_resource_id, 50 const GetResourceListCallback& callback); 51 virtual ~GetResourceListRequest(); 52 53 protected: 54 // UrlFetchRequestBase overrides. 55 virtual GURL GetURL() const OVERRIDE; 56 57 private: 58 const GDataWapiUrlGenerator url_generator_; 59 const GURL override_url_; 60 const int64 start_changestamp_; 61 const std::string search_string_; 62 const std::string directory_resource_id_; 63 64 DISALLOW_COPY_AND_ASSIGN(GetResourceListRequest); 65}; 66 67//============================ SearchByTitleRequest ========================== 68 69// This class performs the request for searching resources by title. 70class SearchByTitleRequest : public GetDataRequest { 71 public: 72 // title: the search query. 73 // 74 // directory_resource_id: If given (non-empty), the search target is 75 // directly under the directory with the |directory_resource_id|. 76 // If empty, the search target is all the existing resources. 77 // 78 // callback: 79 // Called once the feed is fetched. Must not be null. 80 SearchByTitleRequest(RequestSender* sender, 81 const GDataWapiUrlGenerator& url_generator, 82 const std::string& title, 83 const std::string& directory_resource_id, 84 const GetResourceListCallback& callback); 85 virtual ~SearchByTitleRequest(); 86 87 protected: 88 // UrlFetchRequestBase overrides. 89 virtual GURL GetURL() const OVERRIDE; 90 91 private: 92 const GDataWapiUrlGenerator url_generator_; 93 const std::string title_; 94 const std::string directory_resource_id_; 95 96 DISALLOW_COPY_AND_ASSIGN(SearchByTitleRequest); 97}; 98 99//========================= GetResourceEntryRequest ========================== 100 101// This class performs the request for fetching a single resource entry. 102class GetResourceEntryRequest : public GetDataRequest { 103 public: 104 // |callback| must not be null. 105 GetResourceEntryRequest(RequestSender* sender, 106 const GDataWapiUrlGenerator& url_generator, 107 const std::string& resource_id, 108 const GURL& embed_origin, 109 const GetDataCallback& callback); 110 virtual ~GetResourceEntryRequest(); 111 112 protected: 113 // UrlFetchRequestBase overrides. 114 virtual GURL GetURL() const OVERRIDE; 115 116 private: 117 const GDataWapiUrlGenerator url_generator_; 118 // Resource id of the requested entry. 119 const std::string resource_id_; 120 // Embed origin for an url to the sharing dialog. Can be empty. 121 const GURL& embed_origin_; 122 123 DISALLOW_COPY_AND_ASSIGN(GetResourceEntryRequest); 124}; 125 126//========================= GetAccountMetadataRequest ======================== 127 128// Callback used for GetAccountMetadata(). 129typedef base::Callback<void(GDataErrorCode error, 130 scoped_ptr<AccountMetadata> account_metadata)> 131 GetAccountMetadataCallback; 132 133// This class performs the request for fetching account metadata. 134class GetAccountMetadataRequest : public GetDataRequest { 135 public: 136 // If |include_installed_apps| is set to true, the result should include 137 // the list of installed third party applications. 138 // |callback| must not be null. 139 GetAccountMetadataRequest(RequestSender* sender, 140 const GDataWapiUrlGenerator& url_generator, 141 const GetAccountMetadataCallback& callback, 142 bool include_installed_apps); 143 virtual ~GetAccountMetadataRequest(); 144 145 protected: 146 // UrlFetchRequestBase overrides. 147 virtual GURL GetURL() const OVERRIDE; 148 149 private: 150 const GDataWapiUrlGenerator url_generator_; 151 const bool include_installed_apps_; 152 153 DISALLOW_COPY_AND_ASSIGN(GetAccountMetadataRequest); 154}; 155 156//=========================== DeleteResourceRequest ========================== 157 158// This class performs the request for deleting a resource. 159// 160// In WAPI, "gd:deleted" means that the resource was put in the trash, and 161// "docs:removed" means its permanently gone. Since what the class does is to 162// put the resource into trash, we have chosen "Delete" in the name, even though 163// we are preferring the term "Remove" in drive/google_api code. 164class DeleteResourceRequest : public EntryActionRequest { 165 public: 166 // |callback| must not be null. 167 DeleteResourceRequest(RequestSender* sender, 168 const GDataWapiUrlGenerator& url_generator, 169 const EntryActionCallback& callback, 170 const std::string& resource_id, 171 const std::string& etag); 172 virtual ~DeleteResourceRequest(); 173 174 protected: 175 // UrlFetchRequestBase overrides. 176 virtual GURL GetURL() const OVERRIDE; 177 virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE; 178 virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE; 179 180 private: 181 const GDataWapiUrlGenerator url_generator_; 182 const std::string resource_id_; 183 const std::string etag_; 184 185 DISALLOW_COPY_AND_ASSIGN(DeleteResourceRequest); 186}; 187 188//========================== CreateDirectoryRequest ========================== 189 190// This class performs the request for creating a directory. 191class CreateDirectoryRequest : public GetDataRequest { 192 public: 193 // A new directory will be created under a directory specified by 194 // |parent_resource_id|. If this parameter is empty, a new directory will 195 // be created in the root directory. 196 // |callback| must not be null. 197 CreateDirectoryRequest(RequestSender* sender, 198 const GDataWapiUrlGenerator& url_generator, 199 const GetDataCallback& callback, 200 const std::string& parent_resource_id, 201 const std::string& directory_title); 202 virtual ~CreateDirectoryRequest(); 203 204 protected: 205 // UrlFetchRequestBase overrides. 206 virtual GURL GetURL() const OVERRIDE; 207 virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE; 208 virtual bool GetContentData(std::string* upload_content_type, 209 std::string* upload_content) OVERRIDE; 210 211 private: 212 const GDataWapiUrlGenerator url_generator_; 213 const std::string parent_resource_id_; 214 const std::string directory_title_; 215 216 DISALLOW_COPY_AND_ASSIGN(CreateDirectoryRequest); 217}; 218 219//============================ CopyHostedDocumentRequest ===================== 220 221// This class performs the request for making a copy of a hosted document. 222// Note that this function cannot be used to copy regular files, as it's not 223// supported by WAPI. 224class CopyHostedDocumentRequest : public GetDataRequest { 225 public: 226 // |callback| must not be null. 227 CopyHostedDocumentRequest(RequestSender* sender, 228 const GDataWapiUrlGenerator& url_generator, 229 const GetDataCallback& callback, 230 const std::string& resource_id, 231 const std::string& new_title); 232 virtual ~CopyHostedDocumentRequest(); 233 234 protected: 235 // UrlFetchRequestBase overrides. 236 virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE; 237 virtual GURL GetURL() const OVERRIDE; 238 virtual bool GetContentData(std::string* upload_content_type, 239 std::string* upload_content) OVERRIDE; 240 241 private: 242 const GDataWapiUrlGenerator url_generator_; 243 const std::string resource_id_; 244 const std::string new_title_; 245 246 DISALLOW_COPY_AND_ASSIGN(CopyHostedDocumentRequest); 247}; 248 249//=========================== RenameResourceRequest ========================== 250 251// This class performs the request for renaming a document/file/directory. 252class RenameResourceRequest : public EntryActionRequest { 253 public: 254 // |callback| must not be null. 255 RenameResourceRequest(RequestSender* sender, 256 const GDataWapiUrlGenerator& url_generator, 257 const EntryActionCallback& callback, 258 const std::string& resource_id, 259 const std::string& new_title); 260 virtual ~RenameResourceRequest(); 261 262 protected: 263 // UrlFetchRequestBase overrides. 264 virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE; 265 virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE; 266 virtual GURL GetURL() const OVERRIDE; 267 virtual bool GetContentData(std::string* upload_content_type, 268 std::string* upload_content) OVERRIDE; 269 270 private: 271 const GDataWapiUrlGenerator url_generator_; 272 const std::string resource_id_; 273 const std::string new_title_; 274 275 DISALLOW_COPY_AND_ASSIGN(RenameResourceRequest); 276}; 277 278//=========================== AuthorizeAppRequest ========================== 279 280// This class performs the request for authorizing an application specified 281// by |app_id| to access a document specified by |resource_id|. 282class AuthorizeAppRequest : public GetDataRequest { 283 public: 284 // |callback| must not be null. 285 AuthorizeAppRequest(RequestSender* sender, 286 const GDataWapiUrlGenerator& url_generator, 287 const AuthorizeAppCallback& callback, 288 const std::string& resource_id, 289 const std::string& app_id); 290 virtual ~AuthorizeAppRequest(); 291 292 protected: 293 // UrlFetchRequestBase overrides. 294 virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE; 295 virtual bool GetContentData(std::string* upload_content_type, 296 std::string* upload_content) OVERRIDE; 297 virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE; 298 virtual GURL GetURL() const OVERRIDE; 299 300 private: 301 const GDataWapiUrlGenerator url_generator_; 302 const std::string resource_id_; 303 const std::string app_id_; 304 305 DISALLOW_COPY_AND_ASSIGN(AuthorizeAppRequest); 306}; 307 308//======================= AddResourceToDirectoryRequest ====================== 309 310// This class performs the request for adding a document/file/directory 311// to a directory. 312class AddResourceToDirectoryRequest : public EntryActionRequest { 313 public: 314 // |callback| must not be null. 315 AddResourceToDirectoryRequest(RequestSender* sender, 316 const GDataWapiUrlGenerator& url_generator, 317 const EntryActionCallback& callback, 318 const std::string& parent_resource_id, 319 const std::string& resource_id); 320 virtual ~AddResourceToDirectoryRequest(); 321 322 protected: 323 // UrlFetchRequestBase overrides. 324 virtual GURL GetURL() const OVERRIDE; 325 virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE; 326 virtual bool GetContentData(std::string* upload_content_type, 327 std::string* upload_content) OVERRIDE; 328 329 private: 330 const GDataWapiUrlGenerator url_generator_; 331 const std::string parent_resource_id_; 332 const std::string resource_id_; 333 334 DISALLOW_COPY_AND_ASSIGN(AddResourceToDirectoryRequest); 335}; 336 337//==================== RemoveResourceFromDirectoryRequest ==================== 338 339// This class performs the request for removing a document/file/directory 340// from a directory. 341class RemoveResourceFromDirectoryRequest : public EntryActionRequest { 342 public: 343 // |callback| must not be null. 344 RemoveResourceFromDirectoryRequest(RequestSender* sender, 345 const GDataWapiUrlGenerator& url_generator, 346 const EntryActionCallback& callback, 347 const std::string& parent_resource_id, 348 const std::string& resource_id); 349 virtual ~RemoveResourceFromDirectoryRequest(); 350 351 protected: 352 // UrlFetchRequestBase overrides. 353 virtual GURL GetURL() const OVERRIDE; 354 virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE; 355 virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE; 356 357 private: 358 const GDataWapiUrlGenerator url_generator_; 359 const std::string resource_id_; 360 const std::string parent_resource_id_; 361 362 DISALLOW_COPY_AND_ASSIGN(RemoveResourceFromDirectoryRequest); 363}; 364 365//======================= InitiateUploadNewFileRequest ======================= 366 367// This class performs the request for initiating the upload of a new file. 368class InitiateUploadNewFileRequest : public InitiateUploadRequestBase { 369 public: 370 // |title| should be set. 371 // |parent_upload_url| should be the upload_url() of the parent directory. 372 // (resumable-create-media URL) 373 // See also the comments of InitiateUploadRequestBase for more details 374 // about the other parameters. 375 InitiateUploadNewFileRequest(RequestSender* sender, 376 const GDataWapiUrlGenerator& url_generator, 377 const InitiateUploadCallback& callback, 378 const std::string& content_type, 379 int64 content_length, 380 const std::string& parent_resource_id, 381 const std::string& title); 382 virtual ~InitiateUploadNewFileRequest(); 383 384 protected: 385 // UrlFetchRequestBase overrides. 386 virtual GURL GetURL() const OVERRIDE; 387 virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE; 388 virtual bool GetContentData(std::string* upload_content_type, 389 std::string* upload_content) OVERRIDE; 390 391 private: 392 const GDataWapiUrlGenerator url_generator_; 393 const std::string parent_resource_id_; 394 const std::string title_; 395 396 DISALLOW_COPY_AND_ASSIGN(InitiateUploadNewFileRequest); 397}; 398 399//==================== InitiateUploadExistingFileRequest ===================== 400 401// This class performs the request for initiating the upload of an existing 402// file. 403class InitiateUploadExistingFileRequest 404 : public InitiateUploadRequestBase { 405 public: 406 // |upload_url| should be the upload_url() of the file 407 // (resumable-create-media URL) 408 // |etag| should be set if it is available to detect the upload confliction. 409 // See also the comments of InitiateUploadRequestBase for more details 410 // about the other parameters. 411 InitiateUploadExistingFileRequest(RequestSender* sender, 412 const GDataWapiUrlGenerator& url_generator, 413 const InitiateUploadCallback& callback, 414 const std::string& content_type, 415 int64 content_length, 416 const std::string& resource_id, 417 const std::string& etag); 418 virtual ~InitiateUploadExistingFileRequest(); 419 420 protected: 421 // UrlFetchRequestBase overrides. 422 virtual GURL GetURL() const OVERRIDE; 423 virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE; 424 virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE; 425 virtual bool GetContentData(std::string* upload_content_type, 426 std::string* upload_content) OVERRIDE; 427 428 private: 429 const GDataWapiUrlGenerator url_generator_; 430 const std::string resource_id_; 431 const std::string etag_; 432 433 DISALLOW_COPY_AND_ASSIGN(InitiateUploadExistingFileRequest); 434}; 435 436//============================ ResumeUploadRequest =========================== 437 438// Performs the request for resuming the upload of a file. 439class ResumeUploadRequest : public ResumeUploadRequestBase { 440 public: 441 // See also ResumeUploadRequestBase's comment for parameters meaning. 442 // |callback| must not be null. 443 ResumeUploadRequest(RequestSender* sender, 444 const UploadRangeCallback& callback, 445 const ProgressCallback& progress_callback, 446 const GURL& upload_location, 447 int64 start_position, 448 int64 end_position, 449 int64 content_length, 450 const std::string& content_type, 451 const base::FilePath& local_file_path); 452 virtual ~ResumeUploadRequest(); 453 454 protected: 455 // UploadRangeRequestBase overrides. 456 virtual void OnRangeRequestComplete( 457 const UploadRangeResponse& response, 458 scoped_ptr<base::Value> value) OVERRIDE; 459 // content::UrlFetcherDelegate overrides. 460 virtual void OnURLFetchUploadProgress(const net::URLFetcher* source, 461 int64 current, int64 total) OVERRIDE; 462 463 private: 464 const UploadRangeCallback callback_; 465 const ProgressCallback progress_callback_; 466 467 DISALLOW_COPY_AND_ASSIGN(ResumeUploadRequest); 468}; 469 470//========================== GetUploadStatusRequest ========================== 471 472// Performs the request to request the current upload status of a file. 473class GetUploadStatusRequest : public GetUploadStatusRequestBase { 474 public: 475 // See also GetUploadStatusRequestBase's comment for parameters meaning. 476 // |callback| must not be null. 477 GetUploadStatusRequest(RequestSender* sender, 478 const UploadRangeCallback& callback, 479 const GURL& upload_url, 480 int64 content_length); 481 virtual ~GetUploadStatusRequest(); 482 483 protected: 484 // UploadRangeRequestBase overrides. 485 virtual void OnRangeRequestComplete( 486 const UploadRangeResponse& response, 487 scoped_ptr<base::Value> value) OVERRIDE; 488 489 private: 490 const UploadRangeCallback callback_; 491 492 DISALLOW_COPY_AND_ASSIGN(GetUploadStatusRequest); 493}; 494 495 496//========================== DownloadFileRequest ========================== 497 498// This class performs the request for downloading of a specified file. 499class DownloadFileRequest : public DownloadFileRequestBase { 500 public: 501 // See also DownloadFileRequestBase's comment for parameters meaning. 502 DownloadFileRequest(RequestSender* sender, 503 const GDataWapiUrlGenerator& url_generator, 504 const DownloadActionCallback& download_action_callback, 505 const GetContentCallback& get_content_callback, 506 const ProgressCallback& progress_callback, 507 const std::string& resource_id, 508 const base::FilePath& output_file_path); 509 virtual ~DownloadFileRequest(); 510 511 DISALLOW_COPY_AND_ASSIGN(DownloadFileRequest); 512}; 513 514} // namespace google_apis 515 516#endif // GOOGLE_APIS_DRIVE_GDATA_WAPI_REQUESTS_H_ 517