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

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

Issue 26784003: google_apis: Implement google_apis::ResponseWriter (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix comment Created 7 years, 2 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 | « no previous file | chrome/browser/google_apis/base_requests.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/google_apis/base_requests.h
diff --git a/chrome/browser/google_apis/base_requests.h b/chrome/browser/google_apis/base_requests.h
index b0eec46202d9c7eef30bea147fba672a9cb04ec0..6ebdcf6921a093043062db903c34009c4ce09dc6 100644
--- a/chrome/browser/google_apis/base_requests.h
+++ b/chrome/browser/google_apis/base_requests.h
@@ -18,6 +18,7 @@
#include "chrome/browser/google_apis/gdata_errorcode.h"
#include "net/url_request/url_fetcher.h"
#include "net/url_request/url_fetcher_delegate.h"
+#include "net/url_request/url_fetcher_response_writer.h"
#include "url/gurl.h"
namespace base {
@@ -35,6 +36,11 @@ typedef base::Callback<void(scoped_ptr<base::Value> value)> ParseJsonCallback;
// Callback used for DownloadFileRequest and ResumeUploadRequestBase.
typedef base::Callback<void(int64 progress, int64 total)> ProgressCallback;
+// Callback used to get the content from DownloadFileRequest.
+typedef base::Callback<void(
+ GDataErrorCode error,
+ scoped_ptr<std::string> content)> GetContentCallback;
+
// Parses JSON passed in |json| on |blocking_task_runner|. Runs |callback| on
// the calling thread when finished with either success or failure.
// The callback must not be null.
@@ -81,6 +87,38 @@ class AuthenticatedRequestInterface {
virtual void Cancel() = 0;
};
+//=========================== ResponseWriter ==================================
+
+// Saves the response for the request to a file or string.
+class ResponseWriter : public net::URLFetcherResponseWriter {
+ public:
+ // If file_path is not empty, the response will be saved with file_writer_,
+ // otherwise it will be saved to data_.
+ ResponseWriter(base::TaskRunner* file_task_runner,
+ const base::FilePath& file_path,
+ const GetContentCallback& get_content_callback);
+ virtual ~ResponseWriter();
+
+ const std::string& data() const { return data_; }
+
+ // Disowns the output file.
+ void DisownFile();
+
+ // URLFetcherResponseWriter overrides:
+ virtual int Initialize(const net::CompletionCallback& callback) OVERRIDE;
+ virtual int Write(net::IOBuffer* buffer,
+ int num_bytes,
+ const net::CompletionCallback& callback) OVERRIDE;
+ virtual int Finish(const net::CompletionCallback& callback) OVERRIDE;
+
+ private:
+ const GetContentCallback get_content_callback_;
+ std::string data_;
+ scoped_ptr<net::URLFetcherFileWriter> file_writer_;
+
+ DISALLOW_COPY_AND_ASSIGN(ResponseWriter);
+};
+
//============================ UrlFetchRequestBase ===========================
// Base class for requests that are fetching URLs.
@@ -128,7 +166,10 @@ class UrlFetchRequestBase : public AuthenticatedRequestInterface,
// Used by a derived class to set an output file path if they want to save
// the downloaded content to a file at a specific path.
- virtual bool GetOutputFilePath(base::FilePath* local_file_path);
+ // Sets |get_content_callback|, which is called when some part of the response
+ // is read.
+ virtual void GetOutputFilePath(base::FilePath* local_file_path,
+ GetContentCallback* get_content_callback);
// Invoked by OnURLFetchComplete when the request completes without an
// authentication error. Must be implemented by a derived class.
@@ -148,6 +189,9 @@ class UrlFetchRequestBase : public AuthenticatedRequestInterface,
// Returns true if called on the thread where the constructor was called.
bool CalledOnValidThread();
+ // Returns the writer which is used to save the response for the request.
+ ResponseWriter* response_writer() const { return response_writer_; }
+
// Returns the task runner that should be used for blocking tasks.
base::TaskRunner* blocking_task_runner() const;
@@ -161,6 +205,7 @@ class UrlFetchRequestBase : public AuthenticatedRequestInterface,
ReAuthenticateCallback re_authenticate_callback_;
int re_authenticate_count_;
scoped_ptr<net::URLFetcher> url_fetcher_;
+ ResponseWriter* response_writer_; // Owned by |url_fetcher_|.
RequestSender* sender_;
base::ThreadChecker thread_checker_;
@@ -426,11 +471,6 @@ class GetUploadStatusRequestBase : public UploadRangeRequestBase {
//============================ DownloadFileRequest ===========================
-// Callback type for getting the content from DownloadFileRequest.
-typedef base::Callback<void(
- GDataErrorCode error,
- scoped_ptr<std::string> content)> GetContentCallback;
-
// Callback type for receiving the completion of DownloadFileRequest.
typedef base::Callback<void(GDataErrorCode error,
const base::FilePath& temp_file)>
@@ -468,17 +508,15 @@ class DownloadFileRequestBase : public UrlFetchRequestBase {
protected:
// UrlFetchRequestBase overrides.
virtual GURL GetURL() const OVERRIDE;
- virtual bool GetOutputFilePath(base::FilePath* local_file_path) OVERRIDE;
+ virtual void GetOutputFilePath(
+ base::FilePath* local_file_path,
+ GetContentCallback* get_content_callback) 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_;
« no previous file with comments | « no previous file | chrome/browser/google_apis/base_requests.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698