// 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_GDATA_WAPI_REQUESTS_H_
#define GOOGLE_APIS_DRIVE_GDATA_WAPI_REQUESTS_H_
#include <string>
#include <vector>
#include "google_apis/drive/base_requests.h"
#include "google_apis/drive/drive_common_callbacks.h"
#include "google_apis/drive/gdata_wapi_url_generator.h"
namespace google_apis {
class AccountMetadata;
class GDataWapiUrlGenerator;
class ResourceEntry;
//============================ GetResourceListRequest ========================
// This class performs the request for fetching a resource list.
class GetResourceListRequest : public GetDataRequest {
public:
// override_url:
// If empty, a hard-coded base URL of the WAPI server is used to fetch
// the first page of the feed. This parameter is used for fetching 2nd
// page and onward.
//
// start_changestamp:
// This parameter specifies the starting point of a delta feed or 0 if a
// full feed is necessary.
//
// search_string:
// If non-empty, fetches a list of resources that match the search
// string.
//
// directory_resource_id:
// If non-empty, fetches a list of resources in a particular directory.
//
// callback:
// Called once the feed is fetched. Must not be null.
GetResourceListRequest(RequestSender* sender,
const GDataWapiUrlGenerator& url_generator,
const GURL& override_url,
int64 start_changestamp,
const std::string& search_string,
const std::string& directory_resource_id,
const GetResourceListCallback& callback);
virtual ~GetResourceListRequest();
protected:
// UrlFetchRequestBase overrides.
virtual GURL GetURL() const OVERRIDE;
private:
const GDataWapiUrlGenerator url_generator_;
const GURL override_url_;
const int64 start_changestamp_;
const std::string search_string_;
const std::string directory_resource_id_;
DISALLOW_COPY_AND_ASSIGN(GetResourceListRequest);
};
//============================ SearchByTitleRequest ==========================
// This class performs the request for searching resources by title.
class SearchByTitleRequest : public GetDataRequest {
public:
// title: the search query.
//
// directory_resource_id: If given (non-empty), the search target is
// directly under the directory with the |directory_resource_id|.
// If empty, the search target is all the existing resources.
//
// callback:
// Called once the feed is fetched. Must not be null.
SearchByTitleRequest(RequestSender* sender,
const GDataWapiUrlGenerator& url_generator,
const std::string& title,
const std::string& directory_resource_id,
const GetResourceListCallback& callback);
virtual ~SearchByTitleRequest();
protected:
// UrlFetchRequestBase overrides.
virtual GURL GetURL() const OVERRIDE;
private:
const GDataWapiUrlGenerator url_generator_;
const std::string title_;
const std::string directory_resource_id_;
DISALLOW_COPY_AND_ASSIGN(SearchByTitleRequest);
};
//========================= GetResourceEntryRequest ==========================
// This class performs the request for fetching a single resource entry.
class GetResourceEntryRequest : public GetDataRequest {
public:
// |callback| must not be null.
GetResourceEntryRequest(RequestSender* sender,
const GDataWapiUrlGenerator& url_generator,
const std::string& resource_id,
const GURL& embed_origin,
const GetDataCallback& callback);
virtual ~GetResourceEntryRequest();
protected:
// UrlFetchRequestBase overrides.
virtual GURL GetURL() const OVERRIDE;
private:
const GDataWapiUrlGenerator url_generator_;
// Resource id of the requested entry.
const std::string resource_id_;
// Embed origin for an url to the sharing dialog. Can be empty.
const GURL& embed_origin_;
DISALLOW_COPY_AND_ASSIGN(GetResourceEntryRequest);
};
//========================= GetAccountMetadataRequest ========================
// Callback used for GetAccountMetadata().
typedef base::Callback<void(GDataErrorCode error,
scoped_ptr<AccountMetadata> account_metadata)>
GetAccountMetadataCallback;
// This class performs the request for fetching account metadata.
class GetAccountMetadataRequest : public GetDataRequest {
public:
// If |include_installed_apps| is set to true, the result should include
// the list of installed third party applications.
// |callback| must not be null.
GetAccountMetadataRequest(RequestSender* sender,
const GDataWapiUrlGenerator& url_generator,
const GetAccountMetadataCallback& callback,
bool include_installed_apps);
virtual ~GetAccountMetadataRequest();
protected:
// UrlFetchRequestBase overrides.
virtual GURL GetURL() const OVERRIDE;
private:
const GDataWapiUrlGenerator url_generator_;
const bool include_installed_apps_;
DISALLOW_COPY_AND_ASSIGN(GetAccountMetadataRequest);
};
//=========================== DeleteResourceRequest ==========================
// This class performs the request for deleting a resource.
//
// In WAPI, "gd:deleted" means that the resource was put in the trash, and
// "docs:removed" means its permanently gone. Since what the class does is to
// put the resource into trash, we have chosen "Delete" in the name, even though
// we are preferring the term "Remove" in drive/google_api code.
class DeleteResourceRequest : public EntryActionRequest {
public:
// |callback| must not be null.
DeleteResourceRequest(RequestSender* sender,
const GDataWapiUrlGenerator& url_generator,
const EntryActionCallback& callback,
const std::string& resource_id,
const std::string& etag);
virtual ~DeleteResourceRequest();
protected:
// UrlFetchRequestBase overrides.
virtual GURL GetURL() const OVERRIDE;
virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE;
private:
const GDataWapiUrlGenerator url_generator_;
const std::string resource_id_;
const std::string etag_;
DISALLOW_COPY_AND_ASSIGN(DeleteResourceRequest);
};
//========================== CreateDirectoryRequest ==========================
// This class performs the request for creating a directory.
class CreateDirectoryRequest : public GetDataRequest {
public:
// A new directory will be created under a directory specified by
// |parent_resource_id|. If this parameter is empty, a new directory will
// be created in the root directory.
// |callback| must not be null.
CreateDirectoryRequest(RequestSender* sender,
const GDataWapiUrlGenerator& url_generator,
const GetDataCallback& callback,
const std::string& parent_resource_id,
const std::string& directory_title);
virtual ~CreateDirectoryRequest();
protected:
// UrlFetchRequestBase overrides.
virtual GURL GetURL() const OVERRIDE;
virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
virtual bool GetContentData(std::string* upload_content_type,
std::string* upload_content) OVERRIDE;
private:
const GDataWapiUrlGenerator url_generator_;
const std::string parent_resource_id_;
const std::string directory_title_;
DISALLOW_COPY_AND_ASSIGN(CreateDirectoryRequest);
};
//=========================== RenameResourceRequest ==========================
// This class performs the request for renaming a document/file/directory.
class RenameResourceRequest : public EntryActionRequest {
public:
// |callback| must not be null.
RenameResourceRequest(RequestSender* sender,
const GDataWapiUrlGenerator& url_generator,
const EntryActionCallback& callback,
const std::string& resource_id,
const std::string& new_title);
virtual ~RenameResourceRequest();
protected:
// UrlFetchRequestBase overrides.
virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE;
virtual GURL GetURL() const OVERRIDE;
virtual bool GetContentData(std::string* upload_content_type,
std::string* upload_content) OVERRIDE;
private:
const GDataWapiUrlGenerator url_generator_;
const std::string resource_id_;
const std::string new_title_;
DISALLOW_COPY_AND_ASSIGN(RenameResourceRequest);
};
//=========================== AuthorizeAppRequest ==========================
// This class performs the request for authorizing an application specified
// by |app_id| to access a document specified by |resource_id|.
class AuthorizeAppRequest : public GetDataRequest {
public:
// |callback| must not be null.
AuthorizeAppRequest(RequestSender* sender,
const GDataWapiUrlGenerator& url_generator,
const AuthorizeAppCallback& callback,
const std::string& resource_id,
const std::string& app_id);
virtual ~AuthorizeAppRequest();
protected:
// UrlFetchRequestBase overrides.
virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
virtual bool GetContentData(std::string* upload_content_type,
std::string* upload_content) OVERRIDE;
virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE;
virtual GURL GetURL() const OVERRIDE;
private:
const GDataWapiUrlGenerator url_generator_;
const std::string resource_id_;
const std::string app_id_;
DISALLOW_COPY_AND_ASSIGN(AuthorizeAppRequest);
};
//======================= AddResourceToDirectoryRequest ======================
// This class performs the request for adding a document/file/directory
// to a directory.
class AddResourceToDirectoryRequest : public EntryActionRequest {
public:
// |callback| must not be null.
AddResourceToDirectoryRequest(RequestSender* sender,
const GDataWapiUrlGenerator& url_generator,
const EntryActionCallback& callback,
const std::string& parent_resource_id,
const std::string& resource_id);
virtual ~AddResourceToDirectoryRequest();
protected:
// UrlFetchRequestBase overrides.
virtual GURL GetURL() const OVERRIDE;
virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
virtual bool GetContentData(std::string* upload_content_type,
std::string* upload_content) OVERRIDE;
private:
const GDataWapiUrlGenerator url_generator_;
const std::string parent_resource_id_;
const std::string resource_id_;
DISALLOW_COPY_AND_ASSIGN(AddResourceToDirectoryRequest);
};
//==================== RemoveResourceFromDirectoryRequest ====================
// This class performs the request for removing a document/file/directory
// from a directory.
class RemoveResourceFromDirectoryRequest : public EntryActionRequest {
public:
// |callback| must not be null.
RemoveResourceFromDirectoryRequest(RequestSender* sender,
const GDataWapiUrlGenerator& url_generator,
const EntryActionCallback& callback,
const std::string& parent_resource_id,
const std::string& resource_id);
virtual ~RemoveResourceFromDirectoryRequest();
protected:
// UrlFetchRequestBase overrides.
virtual GURL GetURL() const OVERRIDE;
virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE;
private:
const GDataWapiUrlGenerator url_generator_;
const std::string resource_id_;
const std::string parent_resource_id_;
DISALLOW_COPY_AND_ASSIGN(RemoveResourceFromDirectoryRequest);
};
//======================= InitiateUploadNewFileRequest =======================
// This class performs the request for initiating the upload of a new file.
class InitiateUploadNewFileRequest : public InitiateUploadRequestBase {
public:
// |title| should be set.
// |parent_upload_url| should be the upload_url() of the parent directory.
// (resumable-create-media URL)
// See also the comments of InitiateUploadRequestBase for more details
// about the other parameters.
InitiateUploadNewFileRequest(RequestSender* sender,
const GDataWapiUrlGenerator& url_generator,
const InitiateUploadCallback& callback,
const std::string& content_type,
int64 content_length,
const std::string& parent_resource_id,
const std::string& title);
virtual ~InitiateUploadNewFileRequest();
protected:
// UrlFetchRequestBase overrides.
virtual GURL GetURL() const OVERRIDE;
virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
virtual bool GetContentData(std::string* upload_content_type,
std::string* upload_content) OVERRIDE;
private:
const GDataWapiUrlGenerator url_generator_;
const std::string parent_resource_id_;
const std::string title_;
DISALLOW_COPY_AND_ASSIGN(InitiateUploadNewFileRequest);
};
//==================== 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 GDataWapiUrlGenerator& url_generator,
const InitiateUploadCallback& callback,
const std::string& content_type,
int64 content_length,
const std::string& resource_id,
const std::string& etag);
virtual ~InitiateUploadExistingFileRequest();
protected:
// UrlFetchRequestBase overrides.
virtual GURL GetURL() const OVERRIDE;
virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE;
virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE;
virtual bool GetContentData(std::string* upload_content_type,
std::string* upload_content) OVERRIDE;
private:
const GDataWapiUrlGenerator url_generator_;
const std::string resource_id_;
const std::string etag_;
DISALLOW_COPY_AND_ASSIGN(InitiateUploadExistingFileRequest);
};
//============================ 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.
ResumeUploadRequest(RequestSender* sender,
const UploadRangeCallback& callback,
const ProgressCallback& progress_callback,
const GURL& upload_location,
int64 start_position,
int64 end_position,
int64 content_length,
const std::string& content_type,
const base::FilePath& local_file_path);
virtual ~ResumeUploadRequest();
protected:
// UploadRangeRequestBase overrides.
virtual void OnRangeRequestComplete(
const UploadRangeResponse& response,
scoped_ptr<base::Value> value) OVERRIDE;
// content::UrlFetcherDelegate overrides.
virtual void OnURLFetchUploadProgress(const net::URLFetcher* source,
int64 current, int64 total) OVERRIDE;
private:
const UploadRangeCallback callback_;
const ProgressCallback progress_callback_;
DISALLOW_COPY_AND_ASSIGN(ResumeUploadRequest);
};
//========================== GetUploadStatusRequest ==========================
// Performs the request to request 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 UploadRangeCallback& callback,
const GURL& upload_url,
int64 content_length);
virtual ~GetUploadStatusRequest();
protected:
// UploadRangeRequestBase overrides.
virtual void OnRangeRequestComplete(
const UploadRangeResponse& response,
scoped_ptr<base::Value> value) OVERRIDE;
private:
const UploadRangeCallback callback_;
DISALLOW_COPY_AND_ASSIGN(GetUploadStatusRequest);
};
//========================== 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 GDataWapiUrlGenerator& url_generator,
const DownloadActionCallback& download_action_callback,
const GetContentCallback& get_content_callback,
const ProgressCallback& progress_callback,
const std::string& resource_id,
const base::FilePath& output_file_path);
virtual ~DownloadFileRequest();
DISALLOW_COPY_AND_ASSIGN(DownloadFileRequest);
};
} // namespace google_apis
#endif // GOOGLE_APIS_DRIVE_GDATA_WAPI_REQUESTS_H_