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

Side by Side Diff: chrome/browser/chromeos/gdata/operations_base.h

Issue 10808027: gdrive: Get JSON feeds parsing off the UI thread. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix reviews and rebase Created 8 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_BROWSER_CHROMEOS_GDATA_OPERATIONS_BASE_H_ 5 #ifndef CHROME_BROWSER_CHROMEOS_GDATA_OPERATIONS_BASE_H_
6 #define CHROME_BROWSER_CHROMEOS_GDATA_OPERATIONS_BASE_H_ 6 #define CHROME_BROWSER_CHROMEOS_GDATA_OPERATIONS_BASE_H_
7 7
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "chrome/browser/chromeos/gdata/gdata_operation_registry.h" 11 #include "chrome/browser/chromeos/gdata/gdata_operation_registry.h"
12 #include "chrome/browser/chromeos/gdata/gdata_params.h" 12 #include "chrome/browser/chromeos/gdata/gdata_params.h"
13 #include "chrome/common/net/gaia/oauth2_access_token_consumer.h" 13 #include "chrome/common/net/gaia/oauth2_access_token_consumer.h"
14 #include "net/http/http_response_headers.h" 14 #include "net/http/http_response_headers.h"
15 #include "net/url_request/url_fetcher.h" 15 #include "net/url_request/url_fetcher.h"
16 #include "net/url_request/url_fetcher_delegate.h" 16 #include "net/url_request/url_fetcher_delegate.h"
17 17
18 class Profile; 18 class Profile;
19 class OAuth2AccessTokenFetcher; 19 class OAuth2AccessTokenFetcher;
20 20
21 namespace gdata { 21 namespace gdata {
22 22
23 // Callback type for ProcessURLFetchResults.
24 typedef base::Callback<void(bool result)> ProcessURLFetchResultsCallback;
25
23 //================================ AuthOperation =============================== 26 //================================ AuthOperation ===============================
24 27
25 // OAuth2 authorization token retrieval operation. 28 // OAuth2 authorization token retrieval operation.
26 class AuthOperation : public GDataOperationRegistry::Operation, 29 class AuthOperation : public GDataOperationRegistry::Operation,
27 public OAuth2AccessTokenConsumer { 30 public OAuth2AccessTokenConsumer {
28 public: 31 public:
29 AuthOperation(GDataOperationRegistry* registry, 32 AuthOperation(GDataOperationRegistry* registry,
30 Profile* profile, 33 Profile* profile,
31 const AuthStatusCallback& callback, 34 const AuthStatusCallback& callback,
32 const std::string& refresh_token); 35 const std::string& refresh_token);
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 // override this method to specify any extra headers needed for the request. 108 // override this method to specify any extra headers needed for the request.
106 virtual std::vector<std::string> GetExtraRequestHeaders() const; 109 virtual std::vector<std::string> GetExtraRequestHeaders() const;
107 // Used by a derived class to add any content data to the request. 110 // Used by a derived class to add any content data to the request.
108 // Returns true if |upload_content_type| and |upload_content| are updated 111 // Returns true if |upload_content_type| and |upload_content| are updated
109 // with the content type and data for the request. 112 // with the content type and data for the request.
110 virtual bool GetContentData(std::string* upload_content_type, 113 virtual bool GetContentData(std::string* upload_content_type,
111 std::string* upload_content); 114 std::string* upload_content);
112 115
113 // Invoked by OnURLFetchComplete when the operation completes without an 116 // Invoked by OnURLFetchComplete when the operation completes without an
114 // authentication error. Must be implemented by a derived class. 117 // authentication error. Must be implemented by a derived class.
115 virtual bool ProcessURLFetchResults(const net::URLFetcher* source) = 0; 118 virtual void ProcessURLFetchResults(
119 const net::URLFetcher* source,
120 const ProcessURLFetchResultsCallback& callback) = 0;
116 121
117 // Invoked when it needs to notify the status. Chunked operations that 122 // Invoked when it needs to notify the status. Chunked operations that
118 // constructs a logically single operation from multiple physical operations 123 // constructs a logically single operation from multiple physical operations
119 // should notify resume/suspend instead of start/finish. 124 // should notify resume/suspend instead of start/finish.
120 virtual void NotifyStartToOperationRegistry(); 125 virtual void NotifyStartToOperationRegistry();
121 virtual void NotifySuccessToOperationRegistry(); 126 virtual void NotifySuccessToOperationRegistry();
122 127
123 // Invoked by this base class upon an authentication error or cancel by 128 // Invoked by this base class upon an authentication error or cancel by
124 // an user operation. Must be implemented by a derived class. 129 // an user operation. Must be implemented by a derived class.
125 virtual void RunCallbackOnPrematureFailure(GDataErrorCode code) = 0; 130 virtual void RunCallbackOnPrematureFailure(GDataErrorCode code) = 0;
126 131
127 // Implement GDataOperationRegistry::Operation 132 // Implement GDataOperationRegistry::Operation
128 virtual void DoCancel() OVERRIDE; 133 virtual void DoCancel() OVERRIDE;
129 134
130 // Overridden from URLFetcherDelegate. 135 // Overridden from URLFetcherDelegate.
131 virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; 136 virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;
132 137
138 // Invoked when ProcessURLFetchResults() is completed.
139 void OnProcessURLFetchResultsComplete(bool result);
140
133 // Overridden from GDataOperationInterface. 141 // Overridden from GDataOperationInterface.
134 virtual void OnAuthFailed(GDataErrorCode code) OVERRIDE; 142 virtual void OnAuthFailed(GDataErrorCode code) OVERRIDE;
135 143
136 // Returns an appropriate GDataErrorCode based on the HTTP response code and 144 // Returns an appropriate GDataErrorCode based on the HTTP response code and
137 // the status of the URLFetcher. 145 // the status of the URLFetcher.
138 GDataErrorCode GetErrorCode(const net::URLFetcher* source) const; 146 GDataErrorCode GetErrorCode(const net::URLFetcher* source) const;
139 147
140 std::string GetResponseHeadersAsString( 148 std::string GetResponseHeadersAsString(
141 const net::URLFetcher* url_fetcher); 149 const net::URLFetcher* url_fetcher);
142 150
143 Profile* profile_; 151 Profile* profile_;
144 ReAuthenticateCallback re_authenticate_callback_; 152 ReAuthenticateCallback re_authenticate_callback_;
145 int re_authenticate_count_; 153 int re_authenticate_count_;
146 bool save_temp_file_; 154 bool save_temp_file_;
147 FilePath output_file_path_; 155 FilePath output_file_path_;
148 scoped_ptr<net::URLFetcher> url_fetcher_; 156 scoped_ptr<net::URLFetcher> url_fetcher_;
149 bool started_; 157 bool started_;
158
159 private:
160 base::WeakPtrFactory<UrlFetchOperationBase> weak_ptr_factory_;
150 }; 161 };
151 162
152 //============================ EntryActionOperation ============================ 163 //============================ EntryActionOperation ============================
153 164
154 // This class performs a simple action over a given entry (document/file). 165 // This class performs a simple action over a given entry (document/file).
155 // It is meant to be used for operations that return no JSON blobs. 166 // It is meant to be used for operations that return no JSON blobs.
156 class EntryActionOperation : public UrlFetchOperationBase { 167 class EntryActionOperation : public UrlFetchOperationBase {
157 public: 168 public:
158 EntryActionOperation(GDataOperationRegistry* registry, 169 EntryActionOperation(GDataOperationRegistry* registry,
159 Profile* profile, 170 Profile* profile,
160 const EntryActionCallback& callback, 171 const EntryActionCallback& callback,
161 const GURL& document_url); 172 const GURL& document_url);
162 virtual ~EntryActionOperation(); 173 virtual ~EntryActionOperation();
163 174
164 protected: 175 protected:
165 // Overridden from UrlFetchOperationBase. 176 // Overridden from UrlFetchOperationBase.
166 virtual bool ProcessURLFetchResults(const net::URLFetcher* source) OVERRIDE; 177 virtual void ProcessURLFetchResults(
178 const net::URLFetcher* source,
179 const ProcessURLFetchResultsCallback& callback) OVERRIDE;
167 virtual void RunCallbackOnPrematureFailure(GDataErrorCode code) OVERRIDE; 180 virtual void RunCallbackOnPrematureFailure(GDataErrorCode code) OVERRIDE;
168 181
169 const GURL& document_url() const { return document_url_; } 182 const GURL& document_url() const { return document_url_; }
170 183
171 private: 184 private:
172 EntryActionCallback callback_; 185 EntryActionCallback callback_;
173 GURL document_url_; 186 GURL document_url_;
174 187
175 DISALLOW_COPY_AND_ASSIGN(EntryActionOperation); 188 DISALLOW_COPY_AND_ASSIGN(EntryActionOperation);
176 }; 189 };
177 190
178 //============================== GetDataOperation ============================== 191 //============================== GetDataOperation ==============================
179 192
180 // This class performs the operation for fetching and parsing JSON data content. 193 // This class performs the operation for fetching and parsing JSON data content.
181 class GetDataOperation : public UrlFetchOperationBase { 194 class GetDataOperation : public UrlFetchOperationBase {
182 public: 195 public:
183 GetDataOperation(GDataOperationRegistry* registry, 196 GetDataOperation(GDataOperationRegistry* registry,
184 Profile* profile, 197 Profile* profile,
185 const GetDataCallback& callback); 198 const GetDataCallback& callback);
186 virtual ~GetDataOperation(); 199 virtual ~GetDataOperation();
187 200
188 // Parse GData JSON response. 201 // Parse GData JSON response.
189 virtual base::Value* ParseResponse(const std::string& data); 202 virtual void ParseResponse(
203 GDataErrorCode fetch_error_code,
204 const std::string& data,
205 const ProcessURLFetchResultsCallback& result_callback);
190 206
191 protected: 207 protected:
192 // Overridden from UrlFetchOperationBase. 208 // Overridden from UrlFetchOperationBase.
193 virtual bool ProcessURLFetchResults(const net::URLFetcher* source) OVERRIDE; 209 virtual void ProcessURLFetchResults(
194 virtual void RunCallbackOnPrematureFailure(GDataErrorCode code) OVERRIDE; 210 const net::URLFetcher* source,
211 const ProcessURLFetchResultsCallback& callback) OVERRIDE;
212 virtual void RunCallbackOnPrematureFailure(
213 GDataErrorCode fetch_error_code) OVERRIDE;
214 void RunCallback(GDataErrorCode fetch_error_code,
215 scoped_ptr<base::Value> value);
195 216
196 private: 217 private:
197 GetDataCallback callback_; 218 GetDataCallback callback_;
219
198 DISALLOW_COPY_AND_ASSIGN(GetDataOperation); 220 DISALLOW_COPY_AND_ASSIGN(GetDataOperation);
199 }; 221 };
200 222
201 } // namespace gdata 223 } // namespace gdata
202 224
203 #endif // CHROME_BROWSER_CHROMEOS_GDATA_OPERATIONS_BASE_H_ 225 #endif // CHROME_BROWSER_CHROMEOS_GDATA_OPERATIONS_BASE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698