Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(245)

Unified Diff: chrome/browser/google_apis/base_operations.h

Issue 16424004: google_apis: Rename base_operations.h/cc to base_requests.h/cc (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/google_apis/auth_service_interface.h ('k') | chrome/browser/google_apis/base_operations.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_
« no previous file with comments | « chrome/browser/google_apis/auth_service_interface.h ('k') | chrome/browser/google_apis/base_operations.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698