Index: chrome/browser/google_apis/base_operations.h |
diff --git a/chrome/browser/google_apis/base_operations.h b/chrome/browser/google_apis/base_operations.h |
deleted file mode 100644 |
index 1c0db750664f7aa897a4300f6ad79c7d0780170c..0000000000000000000000000000000000000000 |
--- a/chrome/browser/google_apis/base_operations.h |
+++ /dev/null |
@@ -1,551 +0,0 @@ |
-// 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. |
-// |
-// This file provides base classes used to implement operations for Google APIs. |
- |
-#ifndef CHROME_BROWSER_GOOGLE_APIS_BASE_OPERATIONS_H_ |
-#define CHROME_BROWSER_GOOGLE_APIS_BASE_OPERATIONS_H_ |
- |
-#include <string> |
-#include <vector> |
- |
-#include "base/callback.h" |
-#include "base/memory/weak_ptr.h" |
-#include "chrome/browser/google_apis/gdata_errorcode.h" |
-#include "chrome/browser/google_apis/operation_registry.h" |
-#include "googleurl/src/gurl.h" |
-#include "net/url_request/url_fetcher.h" |
-#include "net/url_request/url_fetcher_delegate.h" |
- |
-namespace base { |
-class Value; |
-} // namespace base |
- |
-namespace net { |
-class URLRequestContextGetter; |
-} // namespace net |
- |
-namespace google_apis { |
- |
-class OperationRunner; |
- |
-// Callback used to pass parsed JSON from ParseJson(). If parsing error occurs, |
-// then the passed argument is null. |
-typedef base::Callback<void(scoped_ptr<base::Value> value)> ParseJsonCallback; |
- |
-// Callback used for DownloadOperation and ResumeUploadOperation. |
-typedef base::Callback<void(int64 progress, int64 total)> ProgressCallback; |
- |
-// Parses JSON passed in |json| on blocking pool. Runs |callback| on the calling |
-// thread when finished with either success or failure. |
-// The callback must not be null. |
-void ParseJson(const std::string& json, const ParseJsonCallback& callback); |
- |
-//======================= AuthenticatedOperationInterface ====================== |
- |
-// An interface class for implementing an operation which requires OAuth2 |
-// authentication. |
-class AuthenticatedOperationInterface { |
- public: |
- // Called when re-authentication is required. See Start() for details. |
- typedef base::Callback<void(AuthenticatedOperationInterface* operation)> |
- ReAuthenticateCallback; |
- |
- virtual ~AuthenticatedOperationInterface() {} |
- |
- // Starts the operation with |access_token|. User-Agent header will be set |
- // to |custom_user_agent| if the value is not empty. |
- // |
- // |callback| is called when re-authentication is needed for a certain |
- // number of times (see kMaxReAuthenticateAttemptsPerOperation in .cc). |
- // The callback should retry by calling Start() again with a new access |
- // token, or just call OnAuthFailed() if a retry is not attempted. |
- // |callback| must not be null. |
- virtual void Start(const std::string& access_token, |
- const std::string& custom_user_agent, |
- const ReAuthenticateCallback& callback) = 0; |
- |
- // Invoked when the authentication failed with an error code |code|. |
- virtual void OnAuthFailed(GDataErrorCode code) = 0; |
- |
- // Gets a weak pointer to this operation object. Since operations may be |
- // deleted when it is canceled by user action, for posting asynchronous tasks |
- // on the authentication operation object, weak pointers have to be used. |
- // TODO(kinaba): crbug.com/134814 use more clean life time management than |
- // using weak pointers, while deprecating OperationRegistry. |
- virtual base::WeakPtr<AuthenticatedOperationInterface> GetWeakPtr() = 0; |
-}; |
- |
-//============================ UrlFetchOperationBase =========================== |
- |
-// Base class for operations that are fetching URLs. |
-class UrlFetchOperationBase : public AuthenticatedOperationInterface, |
- public OperationRegistry::Operation, |
- public net::URLFetcherDelegate { |
- public: |
- // AuthenticatedOperationInterface overrides. |
- virtual void Start(const std::string& access_token, |
- const std::string& custom_user_agent, |
- const ReAuthenticateCallback& callback) OVERRIDE; |
- virtual base::WeakPtr<AuthenticatedOperationInterface> GetWeakPtr() OVERRIDE; |
- |
- protected: |
- UrlFetchOperationBase( |
- OperationRunner* runner, |
- net::URLRequestContextGetter* url_request_context_getter); |
- // Use this constructor when you need to implement operations that take a |
- // drive file path (ex. for downloading and uploading). |
- // |url_request_context_getter| is used to initialize URLFetcher. |
- // TODO(satorux): Remove the drive file path hack. crbug.com/163296 |
- UrlFetchOperationBase( |
- OperationRunner* runner, |
- net::URLRequestContextGetter* url_request_context_getter, |
- const base::FilePath& drive_file_path); |
- virtual ~UrlFetchOperationBase(); |
- |
- // Gets URL for the request. |
- virtual GURL GetURL() const = 0; |
- |
- // Returns the request type. A derived class should override this method |
- // for a request type other than HTTP GET. |
- virtual net::URLFetcher::RequestType GetRequestType() const; |
- |
- // Returns the extra HTTP headers for the request. A derived class should |
- // override this method to specify any extra headers needed for the request. |
- virtual std::vector<std::string> GetExtraRequestHeaders() const; |
- |
- // Used by a derived class to add any content data to the request. |
- // Returns true if |upload_content_type| and |upload_content| are updated |
- // with the content type and data for the request. |
- // Note that this and GetContentFile() cannot be used together. |
- virtual bool GetContentData(std::string* upload_content_type, |
- std::string* upload_content); |
- |
- // Used by a derived class to add content data which is the whole file or |
- // a part of the file at |local_file_path|. |
- // Returns true if all the arguments are updated for the content being |
- // uploaded. |
- // Note that this and GetContentData() cannot be used together. |
- virtual bool GetContentFile(base::FilePath* local_file_path, |
- int64* range_offset, |
- int64* range_length, |
- std::string* upload_content_type); |
- |
- // Invoked by OnURLFetchComplete when the operation completes without an |
- // authentication error. Must be implemented by a derived class. |
- virtual void ProcessURLFetchResults(const net::URLFetcher* source) = 0; |
- |
- // Invoked when it needs to notify the status. Chunked operations that |
- // constructs a logically single operation from multiple physical operations |
- // should notify resume/suspend instead of start/finish. |
- virtual void NotifyStartToOperationRegistry(); |
- virtual void NotifySuccessToOperationRegistry(); |
- |
- // Invoked by this base class upon an authentication error or cancel by |
- // an user operation. Must be implemented by a derived class. |
- virtual void RunCallbackOnPrematureFailure(GDataErrorCode code) = 0; |
- |
- // Invoked when ProcessURLFetchResults() is completed. |
- void OnProcessURLFetchResultsComplete(bool result); |
- |
- // Returns an appropriate GDataErrorCode based on the HTTP response code and |
- // the status of the URLFetcher. |
- static GDataErrorCode GetErrorCode(const net::URLFetcher* source); |
- |
- // By default, no temporary file will be saved. Derived classes can set |
- // this to true in their constructors, if they want to save the downloaded |
- // content to a temporary file. |
- void set_save_temp_file(bool save_temp_file) { |
- save_temp_file_ = save_temp_file; |
- } |
- |
- // By default, no file will be saved. Derived classes can set an output |
- // file path in their constructors, if they want to save the downloaded |
- // content to a file at a specific path. |
- void set_output_file_path(const base::FilePath& output_file_path) { |
- output_file_path_ = output_file_path; |
- } |
- |
- private: |
- // OperationRegistry::Operation overrides. |
- virtual void DoCancel() OVERRIDE; |
- |
- // URLFetcherDelegate overrides. |
- virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; |
- |
- // AuthenticatedOperationInterface overrides. |
- virtual void OnAuthFailed(GDataErrorCode code) OVERRIDE; |
- |
- net::URLRequestContextGetter* url_request_context_getter_; |
- ReAuthenticateCallback re_authenticate_callback_; |
- int re_authenticate_count_; |
- scoped_ptr<net::URLFetcher> url_fetcher_; |
- bool started_; |
- |
- bool save_temp_file_; |
- base::FilePath output_file_path_; |
- |
- // WeakPtrFactory bound to the UI thread. |
- // 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<UrlFetchOperationBase> weak_ptr_factory_; |
-}; |
- |
-//============================ EntryActionOperation ============================ |
- |
-// Callback type for Delete/Move DocumentServiceInterface calls. |
-typedef base::Callback<void(GDataErrorCode error)> EntryActionCallback; |
- |
-// This class performs a simple action over a given entry (document/file). |
-// It is meant to be used for operations that return no JSON blobs. |
-class EntryActionOperation : public UrlFetchOperationBase { |
- public: |
- // |url_request_context_getter| is used to initialize URLFetcher. |
- // |callback| must not be null. |
- EntryActionOperation( |
- OperationRunner* runner, |
- net::URLRequestContextGetter* url_request_context_getter, |
- const EntryActionCallback& callback); |
- virtual ~EntryActionOperation(); |
- |
- protected: |
- // Overridden from UrlFetchOperationBase. |
- virtual void ProcessURLFetchResults(const net::URLFetcher* source) OVERRIDE; |
- virtual void RunCallbackOnPrematureFailure(GDataErrorCode code) OVERRIDE; |
- |
- private: |
- const EntryActionCallback callback_; |
- |
- DISALLOW_COPY_AND_ASSIGN(EntryActionOperation); |
-}; |
- |
-//============================== GetDataOperation ============================== |
- |
-// Callback type for DocumentServiceInterface::GetResourceList. |
-// Note: json_data argument should be passed using base::Passed(&json_data), not |
-// json_data.Pass(). |
-typedef base::Callback<void(GDataErrorCode error, |
- scoped_ptr<base::Value> json_data)> GetDataCallback; |
- |
-// This class performs the operation for fetching and converting the fetched |
-// content into a base::Value. |
-class GetDataOperation : public UrlFetchOperationBase { |
- public: |
- // |callback| must not be null. |
- GetDataOperation(OperationRunner* runner, |
- net::URLRequestContextGetter* url_request_context_getter, |
- const GetDataCallback& callback); |
- virtual ~GetDataOperation(); |
- |
- // Parses JSON response. |
- void ParseResponse(GDataErrorCode fetch_error_code, const std::string& data); |
- |
- protected: |
- // UrlFetchOperationBase overrides. |
- virtual void ProcessURLFetchResults(const net::URLFetcher* source) OVERRIDE; |
- virtual void RunCallbackOnPrematureFailure( |
- GDataErrorCode fetch_error_code) OVERRIDE; |
- |
- private: |
- // Runs |callback_| with the given parameters. |
- void RunCallbackOnSuccess(GDataErrorCode fetch_error_code, |
- scoped_ptr<base::Value> value); |
- |
- |
- // Called when ParseJsonOnBlockingPool() is completed. |
- void OnDataParsed(GDataErrorCode fetch_error_code, |
- scoped_ptr<base::Value> value); |
- |
- const GetDataCallback 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<GetDataOperation> weak_ptr_factory_; |
- DISALLOW_COPY_AND_ASSIGN(GetDataOperation); |
-}; |
- |
- |
-//=========================== InitiateUploadOperation ========================== |
- |
-// Callback type for DocumentServiceInterface::InitiateUpload. |
-typedef base::Callback<void(GDataErrorCode error, |
- const GURL& upload_url)> InitiateUploadCallback; |
- |
-// This class provides base implementation for performing the operation for |
-// initiating the upload of a file. |
-// |callback| will be called with the obtained upload URL. The URL will be |
-// used with operations for resuming the file uploading. |
-// |
-// Here's the flow of uploading: |
-// 1) Get the upload URL with a class inheriting InitiateUploadOperationBase. |
-// 2) Upload the first 512KB (see kUploadChunkSize in drive_uploader.cc) |
-// of the target file to the upload URL |
-// 3) If there is more data to upload, go to 2). |
-// |
-class InitiateUploadOperationBase : public UrlFetchOperationBase { |
- protected: |
- // |callback| will be called with the upload URL, where upload data is |
- // uploaded to with ResumeUploadOperation. |
- // |callback| must not be null. |
- // |content_type| and |content_length| should be the attributes of the |
- // uploading file. |
- InitiateUploadOperationBase( |
- OperationRunner* runner, |
- net::URLRequestContextGetter* url_request_context_getter, |
- const InitiateUploadCallback& callback, |
- const base::FilePath& drive_file_path, |
- const std::string& content_type, |
- int64 content_length); |
- virtual ~InitiateUploadOperationBase(); |
- |
- // UrlFetchOperationBase overrides. |
- virtual void ProcessURLFetchResults(const net::URLFetcher* source) OVERRIDE; |
- virtual void NotifySuccessToOperationRegistry() OVERRIDE; |
- virtual void RunCallbackOnPrematureFailure(GDataErrorCode code) OVERRIDE; |
- virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE; |
- |
- private: |
- const InitiateUploadCallback callback_; |
- const base::FilePath drive_file_path_; |
- const std::string content_type_; |
- const int64 content_length_; |
- |
- DISALLOW_COPY_AND_ASSIGN(InitiateUploadOperationBase); |
-}; |
- |
-//========================== UploadRangeOperationBase ========================== |
- |
-// Struct for response to ResumeUpload and GetUploadStatus. |
-struct UploadRangeResponse { |
- UploadRangeResponse(); |
- UploadRangeResponse(GDataErrorCode code, |
- int64 start_position_received, |
- int64 end_position_received); |
- ~UploadRangeResponse(); |
- |
- GDataErrorCode code; |
- // The values of "Range" header returned from the server. The values are |
- // used to continue uploading more data. These are set to -1 if an upload |
- // is complete. |
- // |start_position_received| is inclusive and |end_position_received| is |
- // exclusive to follow the common C++ manner, although the response from |
- // the server has "Range" header in inclusive format at both sides. |
- int64 start_position_received; |
- int64 end_position_received; |
-}; |
- |
-// Base class for a URL fetch request expecting the response containing the |
-// current uploading range. This class processes the response containing |
-// "Range" header and invoke OnRangeOperationComplete. |
-class UploadRangeOperationBase : public UrlFetchOperationBase { |
- protected: |
- // |upload_location| is the URL of where to upload the file to. |
- // |drive_file_path| is the path to the file seen in the UI. Not necessary |
- // for resuming an upload, but used for adding an entry to OperationRegistry. |
- // TODO(satorux): Remove the drive file path hack. crbug.com/163296 |
- UploadRangeOperationBase( |
- OperationRunner* runner, |
- net::URLRequestContextGetter* url_request_context_getter, |
- const base::FilePath& drive_file_path, |
- const GURL& upload_url); |
- virtual ~UploadRangeOperationBase(); |
- |
- // UrlFetchOperationBase overrides. |
- virtual GURL GetURL() const OVERRIDE; |
- virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE; |
- virtual void ProcessURLFetchResults(const net::URLFetcher* source) OVERRIDE; |
- virtual void NotifySuccessToOperationRegistry() OVERRIDE; |
- virtual void RunCallbackOnPrematureFailure(GDataErrorCode code) OVERRIDE; |
- |
- // This method will be called when the operation is done, regardless of |
- // whether it is succeeded or failed. |
- // |
- // 1) If there is more data to upload, |code| of |response| is set to |
- // HTTP_RESUME_INCOMPLETE, and positions are set appropriately. Also, |value| |
- // will be set to NULL. |
- // 2) If the upload is complete, |code| is set to HTTP_CREATED for a new file |
- // or HTTP_SUCCESS for an existing file. Positions are set to -1, and |value| |
- // is set to a parsed JSON value representing the uploaded file. |
- // 3) If a premature failure is found, |code| is set to a value representing |
- // the situation. Positions are set to 0, and |value| is set to NULL. |
- // |
- // See also the comments for UploadRangeResponse. |
- // Note: Subclasses should have responsibility to run some callback |
- // in this method to notify the finish status to its clients (or ignore it |
- // under its responsibility). |
- virtual void OnRangeOperationComplete( |
- const UploadRangeResponse& response, scoped_ptr<base::Value> value) = 0; |
- |
- private: |
- // Called when ParseJson() is completed. |
- void OnDataParsed(GDataErrorCode code, scoped_ptr<base::Value> value); |
- |
- const base::FilePath drive_file_path_; |
- const GURL upload_url_; |
- |
- bool last_chunk_completed_; |
- |
- // 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<UploadRangeOperationBase> weak_ptr_factory_; |
- DISALLOW_COPY_AND_ASSIGN(UploadRangeOperationBase); |
-}; |
- |
-//========================== ResumeUploadOperationBase ========================= |
- |
-// This class performs the operation for resuming the upload of a file. |
-// More specifically, this operation uploads a chunk of data carried in |buf| |
-// of ResumeUploadResponseBase. This class is designed to share the |
-// implementation of upload resuming between GData WAPI and Drive API v2. |
-// The subclasses should implement OnRangeOperationComplete inherited by |
-// UploadRangeOperationBase, because the type of the response should be |
-// different (although the format in the server response is JSON). |
-class ResumeUploadOperationBase : public UploadRangeOperationBase { |
- protected: |
- // |start_position| is the start of range of contents currently stored in |
- // |buf|. |end_position| is the end of range of contents currently stared in |
- // |buf|. This is exclusive. For instance, if you are to upload the first |
- // 500 bytes of data, |start_position| is 0 and |end_position| is 500. |
- // |content_length| and |content_type| are the length and type of the |
- // file content to be uploaded respectively. |
- // |buf| holds current content to be uploaded. |
- // See also UploadRangeOperationBase's comment for remaining parameters |
- // meaining. |
- ResumeUploadOperationBase( |
- OperationRunner* runner, |
- net::URLRequestContextGetter* url_request_context_getter, |
- const base::FilePath& drive_file_path, |
- 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 ~ResumeUploadOperationBase(); |
- |
- // UrlFetchOperationBase overrides. |
- virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE; |
- virtual bool GetContentFile(base::FilePath* local_file_path, |
- int64* range_offset, |
- int64* range_length, |
- std::string* upload_content_type) OVERRIDE; |
- virtual void NotifyStartToOperationRegistry() OVERRIDE; |
- |
- private: |
- // The parameters for the request. See ResumeUploadParams for the details. |
- const int64 start_position_; |
- const int64 end_position_; |
- const int64 content_length_; |
- const std::string content_type_; |
- const base::FilePath local_file_path_; |
- |
- DISALLOW_COPY_AND_ASSIGN(ResumeUploadOperationBase); |
-}; |
- |
-//======================== GetUploadStatusOperationBase ======================== |
- |
-// This class performs the operation for getting the current upload status |
-// of a file. |
-// This operation calls OnRagneOperationComplete() with: |
-// - HTTP_RESUME_INCOMPLETE and the range of previously uploaded data, |
-// if a file has been partially uploaded. |value| is not used. |
-// - HTTP_SUCCESS or HTTP_CREATED (up to the upload mode) and |value| |
-// for the uploaded data, if a file has been completely uploaded. |
-// See also UploadRangeOperationBase. |
-class GetUploadStatusOperationBase : public UploadRangeOperationBase { |
- public: |
- // |content_length| is the whole data size to be uploaded. |
- // See also UploadRangeOperationBase's constructor comment for other |
- // parameters. |
- GetUploadStatusOperationBase( |
- OperationRunner* runner, |
- net::URLRequestContextGetter* url_request_context_getter, |
- const base::FilePath& drive_file_path, |
- const GURL& upload_url, |
- int64 content_length); |
- virtual ~GetUploadStatusOperationBase(); |
- |
- protected: |
- // UrlFetchOperationBase overrides. |
- virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE; |
- |
- private: |
- const int64 content_length_; |
- |
- DISALLOW_COPY_AND_ASSIGN(GetUploadStatusOperationBase); |
-}; |
- |
-//============================ DownloadFileOperation =========================== |
- |
-// Callback type for getting the content from DownloadFileOperation. |
-typedef base::Callback<void( |
- GDataErrorCode error, |
- scoped_ptr<std::string> content)> GetContentCallback; |
- |
-// Callback type for receiving the completion of DownloadFileOperation. |
-typedef base::Callback<void(GDataErrorCode error, |
- const base::FilePath& temp_file)> |
- DownloadActionCallback; |
- |
-// This class performs the operation for downloading of a given document/file. |
-class DownloadFileOperation : public UrlFetchOperationBase { |
- public: |
- // download_action_callback: |
- // This callback is called when the download is complete. Must not be null. |
- // |
- // get_content_callback: |
- // This callback is called when some part of the content is |
- // read. Used to read the download content progressively. May be null. |
- // |
- // progress_callback: |
- // This callback is called for periodically reporting the number of bytes |
- // downloaded so far. May be null. |
- // |
- // download_url: |
- // Specifies the target file to download. |
- // |
- // drive_file_path: |
- // Specifies the drive path of the target file. Shown in UI. |
- // TODO(satorux): Remove the drive file path hack. crbug.com/163296 |
- // |
- // output_file_path: |
- // Specifies the file path to save the downloaded file. |
- // |
- DownloadFileOperation( |
- OperationRunner* runner, |
- net::URLRequestContextGetter* url_request_context_getter, |
- const DownloadActionCallback& download_action_callback, |
- const GetContentCallback& get_content_callback, |
- const ProgressCallback& progress_callback, |
- const GURL& download_url, |
- const base::FilePath& drive_file_path, |
- const base::FilePath& output_file_path); |
- virtual ~DownloadFileOperation(); |
- |
- protected: |
- // UrlFetchOperationBase overrides. |
- virtual GURL GetURL() const OVERRIDE; |
- virtual void ProcessURLFetchResults(const net::URLFetcher* source) OVERRIDE; |
- virtual void RunCallbackOnPrematureFailure(GDataErrorCode code) OVERRIDE; |
- |
- // net::URLFetcherDelegate overrides. |
- virtual void OnURLFetchDownloadProgress(const net::URLFetcher* source, |
- int64 current, int64 total) OVERRIDE; |
- virtual bool ShouldSendDownloadData() OVERRIDE; |
- virtual void OnURLFetchDownloadData( |
- const net::URLFetcher* source, |
- scoped_ptr<std::string> download_data) OVERRIDE; |
- |
- private: |
- const DownloadActionCallback download_action_callback_; |
- const GetContentCallback get_content_callback_; |
- const ProgressCallback progress_callback_; |
- const GURL download_url_; |
- |
- DISALLOW_COPY_AND_ASSIGN(DownloadFileOperation); |
-}; |
- |
-} // namespace google_apis |
- |
-#endif // CHROME_BROWSER_GOOGLE_APIS_BASE_OPERATIONS_H_ |