diff options
Diffstat (limited to 'components/drive/service/drive_api_service.h')
-rw-r--r-- | components/drive/service/drive_api_service.h | 269 |
1 files changed, 269 insertions, 0 deletions
diff --git a/components/drive/service/drive_api_service.h b/components/drive/service/drive_api_service.h new file mode 100644 index 0000000..22bb7d4 --- /dev/null +++ b/components/drive/service/drive_api_service.h @@ -0,0 +1,269 @@ +// 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 COMPONENTS_DRIVE_SERVICE_DRIVE_API_SERVICE_H_ +#define COMPONENTS_DRIVE_SERVICE_DRIVE_API_SERVICE_H_ + +#include <string> + +#include "base/memory/ref_counted.h" +#include "base/memory/scoped_ptr.h" +#include "base/memory/weak_ptr.h" +#include "base/observer_list.h" +#include "base/threading/thread_checker.h" +#include "components/drive/service/drive_service_interface.h" +#include "google_apis/drive/auth_service_interface.h" +#include "google_apis/drive/auth_service_observer.h" +#include "google_apis/drive/drive_api_url_generator.h" + +class GURL; +class OAuth2TokenService; + +namespace base { +class FilePath; +class SequencedTaskRunner; +} + +namespace google_apis { +class FilesListRequestRunner; +class RequestSender; +namespace drive { +class BatchUploadRequest; +} // namespace drive +} // namespace google_apis + +namespace net { +class URLRequestContextGetter; +} // namespace net + +namespace drive { + +// Builder for batch request returned by |DriveAPIService|. +class BatchRequestConfigurator : public BatchRequestConfiguratorInterface, + public base::NonThreadSafe { + public: + BatchRequestConfigurator( + const base::WeakPtr<google_apis::drive::BatchUploadRequest>& + batch_request, + base::SequencedTaskRunner* task_runner, + const google_apis::DriveApiUrlGenerator& url_generator, + const google_apis::CancelCallback& cancel_callback); + ~BatchRequestConfigurator() override; + + // BatchRequestConfiguratorInterface overrides. + google_apis::CancelCallback MultipartUploadNewFile( + const std::string& content_type, + int64 content_length, + const std::string& parent_resource_id, + const std::string& title, + const base::FilePath& local_file_path, + const UploadNewFileOptions& options, + const google_apis::FileResourceCallback& callback, + const google_apis::ProgressCallback& progress_callback) override; + google_apis::CancelCallback MultipartUploadExistingFile( + const std::string& content_type, + int64 content_length, + const std::string& resource_id, + const base::FilePath& local_file_path, + const UploadExistingFileOptions& options, + const google_apis::FileResourceCallback& callback, + const google_apis::ProgressCallback& progress_callback) override; + void Commit() override; + + private: + // Reference to batch request. It turns to null after committing. + base::WeakPtr<google_apis::drive::BatchUploadRequest> batch_request_; + scoped_refptr<base::SequencedTaskRunner> task_runner_; + google_apis::DriveApiUrlGenerator url_generator_; + google_apis::CancelCallback cancel_callback_; + + DISALLOW_COPY_AND_ASSIGN(BatchRequestConfigurator); +}; + +// This class provides Drive request calls using Drive V2 API. +// Details of API call are abstracted in each request class and this class +// works as a thin wrapper for the API. +class DriveAPIService : public DriveServiceInterface, + public google_apis::AuthServiceObserver { + public: + // |oauth2_token_service| is used for obtaining OAuth2 access tokens. + // |url_request_context_getter| is used to initialize URLFetcher. + // |blocking_task_runner| is used to run blocking tasks (like parsing JSON). + // |base_url| is used to generate URLs for communication with the drive API. + // |base_download_url| is used to generate URLs for downloading file from the + // drive API. + // |custom_user_agent| will be used for the User-Agent header in HTTP + // requests issues through the service if the value is not empty. + DriveAPIService( + OAuth2TokenService* oauth2_token_service, + net::URLRequestContextGetter* url_request_context_getter, + base::SequencedTaskRunner* blocking_task_runner, + const GURL& base_url, + const GURL& base_download_url, + const std::string& custom_user_agent); + ~DriveAPIService() override; + + // DriveServiceInterface Overrides + void Initialize(const std::string& account_id) override; + void AddObserver(DriveServiceObserver* observer) override; + void RemoveObserver(DriveServiceObserver* observer) override; + bool CanSendRequest() const override; + bool HasAccessToken() const override; + void RequestAccessToken( + const google_apis::AuthStatusCallback& callback) override; + bool HasRefreshToken() const override; + void ClearAccessToken() override; + void ClearRefreshToken() override; + std::string GetRootResourceId() const override; + google_apis::CancelCallback GetAllFileList( + const google_apis::FileListCallback& callback) override; + google_apis::CancelCallback GetFileListInDirectory( + const std::string& directory_resource_id, + const google_apis::FileListCallback& callback) override; + google_apis::CancelCallback Search( + const std::string& search_query, + const google_apis::FileListCallback& callback) override; + google_apis::CancelCallback SearchByTitle( + const std::string& title, + const std::string& directory_resource_id, + const google_apis::FileListCallback& callback) override; + google_apis::CancelCallback GetChangeList( + int64 start_changestamp, + const google_apis::ChangeListCallback& callback) override; + google_apis::CancelCallback GetRemainingChangeList( + const GURL& next_link, + const google_apis::ChangeListCallback& callback) override; + google_apis::CancelCallback GetRemainingFileList( + const GURL& next_link, + const google_apis::FileListCallback& callback) override; + google_apis::CancelCallback GetFileResource( + const std::string& resource_id, + const google_apis::FileResourceCallback& callback) override; + google_apis::CancelCallback GetShareUrl( + const std::string& resource_id, + const GURL& embed_origin, + const google_apis::GetShareUrlCallback& callback) override; + google_apis::CancelCallback GetAboutResource( + const google_apis::AboutResourceCallback& callback) override; + google_apis::CancelCallback GetAppList( + const google_apis::AppListCallback& callback) override; + google_apis::CancelCallback DeleteResource( + const std::string& resource_id, + const std::string& etag, + const google_apis::EntryActionCallback& callback) override; + google_apis::CancelCallback TrashResource( + const std::string& resource_id, + const google_apis::EntryActionCallback& callback) override; + google_apis::CancelCallback DownloadFile( + const base::FilePath& local_cache_path, + const std::string& resource_id, + const google_apis::DownloadActionCallback& download_action_callback, + const google_apis::GetContentCallback& get_content_callback, + const google_apis::ProgressCallback& progress_callback) override; + google_apis::CancelCallback CopyResource( + const std::string& resource_id, + const std::string& parent_resource_id, + const std::string& new_title, + const base::Time& last_modified, + const google_apis::FileResourceCallback& callback) override; + google_apis::CancelCallback UpdateResource( + const std::string& resource_id, + const std::string& parent_resource_id, + const std::string& new_title, + const base::Time& last_modified, + const base::Time& last_viewed_by_me, + const google_apis::drive::Properties& properties, + const google_apis::FileResourceCallback& callback) override; + google_apis::CancelCallback AddResourceToDirectory( + const std::string& parent_resource_id, + const std::string& resource_id, + const google_apis::EntryActionCallback& callback) override; + google_apis::CancelCallback RemoveResourceFromDirectory( + const std::string& parent_resource_id, + const std::string& resource_id, + const google_apis::EntryActionCallback& callback) override; + google_apis::CancelCallback AddNewDirectory( + const std::string& parent_resource_id, + const std::string& directory_title, + const AddNewDirectoryOptions& options, + const google_apis::FileResourceCallback& callback) override; + google_apis::CancelCallback InitiateUploadNewFile( + const std::string& content_type, + int64 content_length, + const std::string& parent_resource_id, + const std::string& title, + const UploadNewFileOptions& options, + const google_apis::InitiateUploadCallback& callback) override; + google_apis::CancelCallback InitiateUploadExistingFile( + const std::string& content_type, + int64 content_length, + const std::string& resource_id, + const UploadExistingFileOptions& options, + const google_apis::InitiateUploadCallback& callback) override; + google_apis::CancelCallback ResumeUpload( + const GURL& upload_url, + int64 start_position, + int64 end_position, + int64 content_length, + const std::string& content_type, + const base::FilePath& local_file_path, + const google_apis::drive::UploadRangeCallback& callback, + const google_apis::ProgressCallback& progress_callback) override; + google_apis::CancelCallback GetUploadStatus( + const GURL& upload_url, + int64 content_length, + const google_apis::drive::UploadRangeCallback& callback) override; + google_apis::CancelCallback MultipartUploadNewFile( + const std::string& content_type, + int64 content_length, + const std::string& parent_resource_id, + const std::string& title, + const base::FilePath& local_file_path, + const drive::UploadNewFileOptions& options, + const google_apis::FileResourceCallback& callback, + const google_apis::ProgressCallback& progress_callback) override; + google_apis::CancelCallback MultipartUploadExistingFile( + const std::string& content_type, + int64 content_length, + const std::string& resource_id, + const base::FilePath& local_file_path, + const drive::UploadExistingFileOptions& options, + const google_apis::FileResourceCallback& callback, + const google_apis::ProgressCallback& progress_callback) override; + google_apis::CancelCallback AuthorizeApp( + const std::string& resource_id, + const std::string& app_id, + const google_apis::AuthorizeAppCallback& callback) override; + google_apis::CancelCallback UninstallApp( + const std::string& app_id, + const google_apis::EntryActionCallback& callback) override; + google_apis::CancelCallback AddPermission( + const std::string& resource_id, + const std::string& email, + google_apis::drive::PermissionRole role, + const google_apis::EntryActionCallback& callback) override; + scoped_ptr<BatchRequestConfiguratorInterface> StartBatchRequest() override; + + private: + // AuthServiceObserver override. + void OnOAuth2RefreshTokenChanged() override; + + // The class is expected to run on UI thread. + base::ThreadChecker thread_checker_; + + OAuth2TokenService* oauth2_token_service_; + scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; + scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_; + scoped_ptr<google_apis::RequestSender> sender_; + scoped_ptr<google_apis::FilesListRequestRunner> files_list_request_runner_; + base::ObserverList<DriveServiceObserver> observers_; + google_apis::DriveApiUrlGenerator url_generator_; + const std::string custom_user_agent_; + + DISALLOW_COPY_AND_ASSIGN(DriveAPIService); +}; + +} // namespace drive + +#endif // COMPONENTS_DRIVE_SERVICE_DRIVE_API_SERVICE_H_ |