OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 // | |
5 // This file provides base classes used to implement operations for Google APIs. | |
6 | |
7 #ifndef CHROME_BROWSER_GOOGLE_APIS_BASE_OPERATIONS_H_ | |
8 #define CHROME_BROWSER_GOOGLE_APIS_BASE_OPERATIONS_H_ | |
9 | |
10 #include <string> | |
11 #include <vector> | |
12 | |
13 #include "base/callback.h" | |
14 #include "base/memory/weak_ptr.h" | |
15 #include "chrome/browser/google_apis/gdata_errorcode.h" | |
16 #include "chrome/browser/google_apis/operation_registry.h" | |
17 #include "googleurl/src/gurl.h" | |
18 #include "net/url_request/url_fetcher.h" | |
19 #include "net/url_request/url_fetcher_delegate.h" | |
20 | |
21 namespace base { | |
22 class Value; | |
23 } // namespace base | |
24 | |
25 namespace net { | |
26 class URLRequestContextGetter; | |
27 } // namespace net | |
28 | |
29 namespace google_apis { | |
30 | |
31 class OperationRunner; | |
32 | |
33 // Callback used to pass parsed JSON from ParseJson(). If parsing error occurs, | |
34 // then the passed argument is null. | |
35 typedef base::Callback<void(scoped_ptr<base::Value> value)> ParseJsonCallback; | |
36 | |
37 // Callback used for DownloadOperation and ResumeUploadOperation. | |
38 typedef base::Callback<void(int64 progress, int64 total)> ProgressCallback; | |
39 | |
40 // Parses JSON passed in |json| on blocking pool. Runs |callback| on the calling | |
41 // thread when finished with either success or failure. | |
42 // The callback must not be null. | |
43 void ParseJson(const std::string& json, const ParseJsonCallback& callback); | |
44 | |
45 //======================= AuthenticatedOperationInterface ====================== | |
46 | |
47 // An interface class for implementing an operation which requires OAuth2 | |
48 // authentication. | |
49 class AuthenticatedOperationInterface { | |
50 public: | |
51 // Called when re-authentication is required. See Start() for details. | |
52 typedef base::Callback<void(AuthenticatedOperationInterface* operation)> | |
53 ReAuthenticateCallback; | |
54 | |
55 virtual ~AuthenticatedOperationInterface() {} | |
56 | |
57 // Starts the operation with |access_token|. User-Agent header will be set | |
58 // to |custom_user_agent| if the value is not empty. | |
59 // | |
60 // |callback| is called when re-authentication is needed for a certain | |
61 // number of times (see kMaxReAuthenticateAttemptsPerOperation in .cc). | |
62 // The callback should retry by calling Start() again with a new access | |
63 // token, or just call OnAuthFailed() if a retry is not attempted. | |
64 // |callback| must not be null. | |
65 virtual void Start(const std::string& access_token, | |
66 const std::string& custom_user_agent, | |
67 const ReAuthenticateCallback& callback) = 0; | |
68 | |
69 // Invoked when the authentication failed with an error code |code|. | |
70 virtual void OnAuthFailed(GDataErrorCode code) = 0; | |
71 | |
72 // Gets a weak pointer to this operation object. Since operations may be | |
73 // deleted when it is canceled by user action, for posting asynchronous tasks | |
74 // on the authentication operation object, weak pointers have to be used. | |
75 // TODO(kinaba): crbug.com/134814 use more clean life time management than | |
76 // using weak pointers, while deprecating OperationRegistry. | |
77 virtual base::WeakPtr<AuthenticatedOperationInterface> GetWeakPtr() = 0; | |
78 }; | |
79 | |
80 //============================ UrlFetchOperationBase =========================== | |
81 | |
82 // Base class for operations that are fetching URLs. | |
83 class UrlFetchOperationBase : public AuthenticatedOperationInterface, | |
84 public OperationRegistry::Operation, | |
85 public net::URLFetcherDelegate { | |
86 public: | |
87 // AuthenticatedOperationInterface overrides. | |
88 virtual void Start(const std::string& access_token, | |
89 const std::string& custom_user_agent, | |
90 const ReAuthenticateCallback& callback) OVERRIDE; | |
91 virtual base::WeakPtr<AuthenticatedOperationInterface> GetWeakPtr() OVERRIDE; | |
92 | |
93 protected: | |
94 UrlFetchOperationBase( | |
95 OperationRunner* runner, | |
96 net::URLRequestContextGetter* url_request_context_getter); | |
97 // Use this constructor when you need to implement operations that take a | |
98 // drive file path (ex. for downloading and uploading). | |
99 // |url_request_context_getter| is used to initialize URLFetcher. | |
100 // TODO(satorux): Remove the drive file path hack. crbug.com/163296 | |
101 UrlFetchOperationBase( | |
102 OperationRunner* runner, | |
103 net::URLRequestContextGetter* url_request_context_getter, | |
104 const base::FilePath& drive_file_path); | |
105 virtual ~UrlFetchOperationBase(); | |
106 | |
107 // Gets URL for the request. | |
108 virtual GURL GetURL() const = 0; | |
109 | |
110 // Returns the request type. A derived class should override this method | |
111 // for a request type other than HTTP GET. | |
112 virtual net::URLFetcher::RequestType GetRequestType() const; | |
113 | |
114 // Returns the extra HTTP headers for the request. A derived class should | |
115 // override this method to specify any extra headers needed for the request. | |
116 virtual std::vector<std::string> GetExtraRequestHeaders() const; | |
117 | |
118 // Used by a derived class to add any content data to the request. | |
119 // Returns true if |upload_content_type| and |upload_content| are updated | |
120 // with the content type and data for the request. | |
121 // Note that this and GetContentFile() cannot be used together. | |
122 virtual bool GetContentData(std::string* upload_content_type, | |
123 std::string* upload_content); | |
124 | |
125 // Used by a derived class to add content data which is the whole file or | |
126 // a part of the file at |local_file_path|. | |
127 // Returns true if all the arguments are updated for the content being | |
128 // uploaded. | |
129 // Note that this and GetContentData() cannot be used together. | |
130 virtual bool GetContentFile(base::FilePath* local_file_path, | |
131 int64* range_offset, | |
132 int64* range_length, | |
133 std::string* upload_content_type); | |
134 | |
135 // Invoked by OnURLFetchComplete when the operation completes without an | |
136 // authentication error. Must be implemented by a derived class. | |
137 virtual void ProcessURLFetchResults(const net::URLFetcher* source) = 0; | |
138 | |
139 // Invoked when it needs to notify the status. Chunked operations that | |
140 // constructs a logically single operation from multiple physical operations | |
141 // should notify resume/suspend instead of start/finish. | |
142 virtual void NotifyStartToOperationRegistry(); | |
143 virtual void NotifySuccessToOperationRegistry(); | |
144 | |
145 // Invoked by this base class upon an authentication error or cancel by | |
146 // an user operation. Must be implemented by a derived class. | |
147 virtual void RunCallbackOnPrematureFailure(GDataErrorCode code) = 0; | |
148 | |
149 // Invoked when ProcessURLFetchResults() is completed. | |
150 void OnProcessURLFetchResultsComplete(bool result); | |
151 | |
152 // Returns an appropriate GDataErrorCode based on the HTTP response code and | |
153 // the status of the URLFetcher. | |
154 static GDataErrorCode GetErrorCode(const net::URLFetcher* source); | |
155 | |
156 // By default, no temporary file will be saved. Derived classes can set | |
157 // this to true in their constructors, if they want to save the downloaded | |
158 // content to a temporary file. | |
159 void set_save_temp_file(bool save_temp_file) { | |
160 save_temp_file_ = save_temp_file; | |
161 } | |
162 | |
163 // By default, no file will be saved. Derived classes can set an output | |
164 // file path in their constructors, if they want to save the downloaded | |
165 // content to a file at a specific path. | |
166 void set_output_file_path(const base::FilePath& output_file_path) { | |
167 output_file_path_ = output_file_path; | |
168 } | |
169 | |
170 private: | |
171 // OperationRegistry::Operation overrides. | |
172 virtual void DoCancel() OVERRIDE; | |
173 | |
174 // URLFetcherDelegate overrides. | |
175 virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; | |
176 | |
177 // AuthenticatedOperationInterface overrides. | |
178 virtual void OnAuthFailed(GDataErrorCode code) OVERRIDE; | |
179 | |
180 net::URLRequestContextGetter* url_request_context_getter_; | |
181 ReAuthenticateCallback re_authenticate_callback_; | |
182 int re_authenticate_count_; | |
183 scoped_ptr<net::URLFetcher> url_fetcher_; | |
184 bool started_; | |
185 | |
186 bool save_temp_file_; | |
187 base::FilePath output_file_path_; | |
188 | |
189 // WeakPtrFactory bound to the UI thread. | |
190 // Note: This should remain the last member so it'll be destroyed and | |
191 // invalidate its weak pointers before any other members are destroyed. | |
192 base::WeakPtrFactory<UrlFetchOperationBase> weak_ptr_factory_; | |
193 }; | |
194 | |
195 //============================ EntryActionOperation ============================ | |
196 | |
197 // Callback type for Delete/Move DocumentServiceInterface calls. | |
198 typedef base::Callback<void(GDataErrorCode error)> EntryActionCallback; | |
199 | |
200 // This class performs a simple action over a given entry (document/file). | |
201 // It is meant to be used for operations that return no JSON blobs. | |
202 class EntryActionOperation : public UrlFetchOperationBase { | |
203 public: | |
204 // |url_request_context_getter| is used to initialize URLFetcher. | |
205 // |callback| must not be null. | |
206 EntryActionOperation( | |
207 OperationRunner* runner, | |
208 net::URLRequestContextGetter* url_request_context_getter, | |
209 const EntryActionCallback& callback); | |
210 virtual ~EntryActionOperation(); | |
211 | |
212 protected: | |
213 // Overridden from UrlFetchOperationBase. | |
214 virtual void ProcessURLFetchResults(const net::URLFetcher* source) OVERRIDE; | |
215 virtual void RunCallbackOnPrematureFailure(GDataErrorCode code) OVERRIDE; | |
216 | |
217 private: | |
218 const EntryActionCallback callback_; | |
219 | |
220 DISALLOW_COPY_AND_ASSIGN(EntryActionOperation); | |
221 }; | |
222 | |
223 //============================== GetDataOperation ============================== | |
224 | |
225 // Callback type for DocumentServiceInterface::GetResourceList. | |
226 // Note: json_data argument should be passed using base::Passed(&json_data), not | |
227 // json_data.Pass(). | |
228 typedef base::Callback<void(GDataErrorCode error, | |
229 scoped_ptr<base::Value> json_data)> GetDataCallback; | |
230 | |
231 // This class performs the operation for fetching and converting the fetched | |
232 // content into a base::Value. | |
233 class GetDataOperation : public UrlFetchOperationBase { | |
234 public: | |
235 // |callback| must not be null. | |
236 GetDataOperation(OperationRunner* runner, | |
237 net::URLRequestContextGetter* url_request_context_getter, | |
238 const GetDataCallback& callback); | |
239 virtual ~GetDataOperation(); | |
240 | |
241 // Parses JSON response. | |
242 void ParseResponse(GDataErrorCode fetch_error_code, const std::string& data); | |
243 | |
244 protected: | |
245 // UrlFetchOperationBase overrides. | |
246 virtual void ProcessURLFetchResults(const net::URLFetcher* source) OVERRIDE; | |
247 virtual void RunCallbackOnPrematureFailure( | |
248 GDataErrorCode fetch_error_code) OVERRIDE; | |
249 | |
250 private: | |
251 // Runs |callback_| with the given parameters. | |
252 void RunCallbackOnSuccess(GDataErrorCode fetch_error_code, | |
253 scoped_ptr<base::Value> value); | |
254 | |
255 | |
256 // Called when ParseJsonOnBlockingPool() is completed. | |
257 void OnDataParsed(GDataErrorCode fetch_error_code, | |
258 scoped_ptr<base::Value> value); | |
259 | |
260 const GetDataCallback callback_; | |
261 | |
262 // Note: This should remain the last member so it'll be destroyed and | |
263 // invalidate its weak pointers before any other members are destroyed. | |
264 base::WeakPtrFactory<GetDataOperation> weak_ptr_factory_; | |
265 DISALLOW_COPY_AND_ASSIGN(GetDataOperation); | |
266 }; | |
267 | |
268 | |
269 //=========================== InitiateUploadOperation ========================== | |
270 | |
271 // Callback type for DocumentServiceInterface::InitiateUpload. | |
272 typedef base::Callback<void(GDataErrorCode error, | |
273 const GURL& upload_url)> InitiateUploadCallback; | |
274 | |
275 // This class provides base implementation for performing the operation for | |
276 // initiating the upload of a file. | |
277 // |callback| will be called with the obtained upload URL. The URL will be | |
278 // used with operations for resuming the file uploading. | |
279 // | |
280 // Here's the flow of uploading: | |
281 // 1) Get the upload URL with a class inheriting InitiateUploadOperationBase. | |
282 // 2) Upload the first 512KB (see kUploadChunkSize in drive_uploader.cc) | |
283 // of the target file to the upload URL | |
284 // 3) If there is more data to upload, go to 2). | |
285 // | |
286 class InitiateUploadOperationBase : public UrlFetchOperationBase { | |
287 protected: | |
288 // |callback| will be called with the upload URL, where upload data is | |
289 // uploaded to with ResumeUploadOperation. | |
290 // |callback| must not be null. | |
291 // |content_type| and |content_length| should be the attributes of the | |
292 // uploading file. | |
293 InitiateUploadOperationBase( | |
294 OperationRunner* runner, | |
295 net::URLRequestContextGetter* url_request_context_getter, | |
296 const InitiateUploadCallback& callback, | |
297 const base::FilePath& drive_file_path, | |
298 const std::string& content_type, | |
299 int64 content_length); | |
300 virtual ~InitiateUploadOperationBase(); | |
301 | |
302 // UrlFetchOperationBase overrides. | |
303 virtual void ProcessURLFetchResults(const net::URLFetcher* source) OVERRIDE; | |
304 virtual void NotifySuccessToOperationRegistry() OVERRIDE; | |
305 virtual void RunCallbackOnPrematureFailure(GDataErrorCode code) OVERRIDE; | |
306 virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE; | |
307 | |
308 private: | |
309 const InitiateUploadCallback callback_; | |
310 const base::FilePath drive_file_path_; | |
311 const std::string content_type_; | |
312 const int64 content_length_; | |
313 | |
314 DISALLOW_COPY_AND_ASSIGN(InitiateUploadOperationBase); | |
315 }; | |
316 | |
317 //========================== UploadRangeOperationBase ========================== | |
318 | |
319 // Struct for response to ResumeUpload and GetUploadStatus. | |
320 struct UploadRangeResponse { | |
321 UploadRangeResponse(); | |
322 UploadRangeResponse(GDataErrorCode code, | |
323 int64 start_position_received, | |
324 int64 end_position_received); | |
325 ~UploadRangeResponse(); | |
326 | |
327 GDataErrorCode code; | |
328 // The values of "Range" header returned from the server. The values are | |
329 // used to continue uploading more data. These are set to -1 if an upload | |
330 // is complete. | |
331 // |start_position_received| is inclusive and |end_position_received| is | |
332 // exclusive to follow the common C++ manner, although the response from | |
333 // the server has "Range" header in inclusive format at both sides. | |
334 int64 start_position_received; | |
335 int64 end_position_received; | |
336 }; | |
337 | |
338 // Base class for a URL fetch request expecting the response containing the | |
339 // current uploading range. This class processes the response containing | |
340 // "Range" header and invoke OnRangeOperationComplete. | |
341 class UploadRangeOperationBase : public UrlFetchOperationBase { | |
342 protected: | |
343 // |upload_location| is the URL of where to upload the file to. | |
344 // |drive_file_path| is the path to the file seen in the UI. Not necessary | |
345 // for resuming an upload, but used for adding an entry to OperationRegistry. | |
346 // TODO(satorux): Remove the drive file path hack. crbug.com/163296 | |
347 UploadRangeOperationBase( | |
348 OperationRunner* runner, | |
349 net::URLRequestContextGetter* url_request_context_getter, | |
350 const base::FilePath& drive_file_path, | |
351 const GURL& upload_url); | |
352 virtual ~UploadRangeOperationBase(); | |
353 | |
354 // UrlFetchOperationBase overrides. | |
355 virtual GURL GetURL() const OVERRIDE; | |
356 virtual net::URLFetcher::RequestType GetRequestType() const OVERRIDE; | |
357 virtual void ProcessURLFetchResults(const net::URLFetcher* source) OVERRIDE; | |
358 virtual void NotifySuccessToOperationRegistry() OVERRIDE; | |
359 virtual void RunCallbackOnPrematureFailure(GDataErrorCode code) OVERRIDE; | |
360 | |
361 // This method will be called when the operation is done, regardless of | |
362 // whether it is succeeded or failed. | |
363 // | |
364 // 1) If there is more data to upload, |code| of |response| is set to | |
365 // HTTP_RESUME_INCOMPLETE, and positions are set appropriately. Also, |value| | |
366 // will be set to NULL. | |
367 // 2) If the upload is complete, |code| is set to HTTP_CREATED for a new file | |
368 // or HTTP_SUCCESS for an existing file. Positions are set to -1, and |value| | |
369 // is set to a parsed JSON value representing the uploaded file. | |
370 // 3) If a premature failure is found, |code| is set to a value representing | |
371 // the situation. Positions are set to 0, and |value| is set to NULL. | |
372 // | |
373 // See also the comments for UploadRangeResponse. | |
374 // Note: Subclasses should have responsibility to run some callback | |
375 // in this method to notify the finish status to its clients (or ignore it | |
376 // under its responsibility). | |
377 virtual void OnRangeOperationComplete( | |
378 const UploadRangeResponse& response, scoped_ptr<base::Value> value) = 0; | |
379 | |
380 private: | |
381 // Called when ParseJson() is completed. | |
382 void OnDataParsed(GDataErrorCode code, scoped_ptr<base::Value> value); | |
383 | |
384 const base::FilePath drive_file_path_; | |
385 const GURL upload_url_; | |
386 | |
387 bool last_chunk_completed_; | |
388 | |
389 // Note: This should remain the last member so it'll be destroyed and | |
390 // invalidate its weak pointers before any other members are destroyed. | |
391 base::WeakPtrFactory<UploadRangeOperationBase> weak_ptr_factory_; | |
392 DISALLOW_COPY_AND_ASSIGN(UploadRangeOperationBase); | |
393 }; | |
394 | |
395 //========================== ResumeUploadOperationBase ========================= | |
396 | |
397 // This class performs the operation for resuming the upload of a file. | |
398 // More specifically, this operation uploads a chunk of data carried in |buf| | |
399 // of ResumeUploadResponseBase. This class is designed to share the | |
400 // implementation of upload resuming between GData WAPI and Drive API v2. | |
401 // The subclasses should implement OnRangeOperationComplete inherited by | |
402 // UploadRangeOperationBase, because the type of the response should be | |
403 // different (although the format in the server response is JSON). | |
404 class ResumeUploadOperationBase : public UploadRangeOperationBase { | |
405 protected: | |
406 // |start_position| is the start of range of contents currently stored in | |
407 // |buf|. |end_position| is the end of range of contents currently stared in | |
408 // |buf|. This is exclusive. For instance, if you are to upload the first | |
409 // 500 bytes of data, |start_position| is 0 and |end_position| is 500. | |
410 // |content_length| and |content_type| are the length and type of the | |
411 // file content to be uploaded respectively. | |
412 // |buf| holds current content to be uploaded. | |
413 // See also UploadRangeOperationBase's comment for remaining parameters | |
414 // meaining. | |
415 ResumeUploadOperationBase( | |
416 OperationRunner* runner, | |
417 net::URLRequestContextGetter* url_request_context_getter, | |
418 const base::FilePath& drive_file_path, | |
419 const GURL& upload_location, | |
420 int64 start_position, | |
421 int64 end_position, | |
422 int64 content_length, | |
423 const std::string& content_type, | |
424 const base::FilePath& local_file_path); | |
425 virtual ~ResumeUploadOperationBase(); | |
426 | |
427 // UrlFetchOperationBase overrides. | |
428 virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE; | |
429 virtual bool GetContentFile(base::FilePath* local_file_path, | |
430 int64* range_offset, | |
431 int64* range_length, | |
432 std::string* upload_content_type) OVERRIDE; | |
433 virtual void NotifyStartToOperationRegistry() OVERRIDE; | |
434 | |
435 private: | |
436 // The parameters for the request. See ResumeUploadParams for the details. | |
437 const int64 start_position_; | |
438 const int64 end_position_; | |
439 const int64 content_length_; | |
440 const std::string content_type_; | |
441 const base::FilePath local_file_path_; | |
442 | |
443 DISALLOW_COPY_AND_ASSIGN(ResumeUploadOperationBase); | |
444 }; | |
445 | |
446 //======================== GetUploadStatusOperationBase ======================== | |
447 | |
448 // This class performs the operation for getting the current upload status | |
449 // of a file. | |
450 // This operation calls OnRagneOperationComplete() with: | |
451 // - HTTP_RESUME_INCOMPLETE and the range of previously uploaded data, | |
452 // if a file has been partially uploaded. |value| is not used. | |
453 // - HTTP_SUCCESS or HTTP_CREATED (up to the upload mode) and |value| | |
454 // for the uploaded data, if a file has been completely uploaded. | |
455 // See also UploadRangeOperationBase. | |
456 class GetUploadStatusOperationBase : public UploadRangeOperationBase { | |
457 public: | |
458 // |content_length| is the whole data size to be uploaded. | |
459 // See also UploadRangeOperationBase's constructor comment for other | |
460 // parameters. | |
461 GetUploadStatusOperationBase( | |
462 OperationRunner* runner, | |
463 net::URLRequestContextGetter* url_request_context_getter, | |
464 const base::FilePath& drive_file_path, | |
465 const GURL& upload_url, | |
466 int64 content_length); | |
467 virtual ~GetUploadStatusOperationBase(); | |
468 | |
469 protected: | |
470 // UrlFetchOperationBase overrides. | |
471 virtual std::vector<std::string> GetExtraRequestHeaders() const OVERRIDE; | |
472 | |
473 private: | |
474 const int64 content_length_; | |
475 | |
476 DISALLOW_COPY_AND_ASSIGN(GetUploadStatusOperationBase); | |
477 }; | |
478 | |
479 //============================ DownloadFileOperation =========================== | |
480 | |
481 // Callback type for getting the content from DownloadFileOperation. | |
482 typedef base::Callback<void( | |
483 GDataErrorCode error, | |
484 scoped_ptr<std::string> content)> GetContentCallback; | |
485 | |
486 // Callback type for receiving the completion of DownloadFileOperation. | |
487 typedef base::Callback<void(GDataErrorCode error, | |
488 const base::FilePath& temp_file)> | |
489 DownloadActionCallback; | |
490 | |
491 // This class performs the operation for downloading of a given document/file. | |
492 class DownloadFileOperation : public UrlFetchOperationBase { | |
493 public: | |
494 // download_action_callback: | |
495 // This callback is called when the download is complete. Must not be null. | |
496 // | |
497 // get_content_callback: | |
498 // This callback is called when some part of the content is | |
499 // read. Used to read the download content progressively. May be null. | |
500 // | |
501 // progress_callback: | |
502 // This callback is called for periodically reporting the number of bytes | |
503 // downloaded so far. May be null. | |
504 // | |
505 // download_url: | |
506 // Specifies the target file to download. | |
507 // | |
508 // drive_file_path: | |
509 // Specifies the drive path of the target file. Shown in UI. | |
510 // TODO(satorux): Remove the drive file path hack. crbug.com/163296 | |
511 // | |
512 // output_file_path: | |
513 // Specifies the file path to save the downloaded file. | |
514 // | |
515 DownloadFileOperation( | |
516 OperationRunner* runner, | |
517 net::URLRequestContextGetter* url_request_context_getter, | |
518 const DownloadActionCallback& download_action_callback, | |
519 const GetContentCallback& get_content_callback, | |
520 const ProgressCallback& progress_callback, | |
521 const GURL& download_url, | |
522 const base::FilePath& drive_file_path, | |
523 const base::FilePath& output_file_path); | |
524 virtual ~DownloadFileOperation(); | |
525 | |
526 protected: | |
527 // UrlFetchOperationBase overrides. | |
528 virtual GURL GetURL() const OVERRIDE; | |
529 virtual void ProcessURLFetchResults(const net::URLFetcher* source) OVERRIDE; | |
530 virtual void RunCallbackOnPrematureFailure(GDataErrorCode code) OVERRIDE; | |
531 | |
532 // net::URLFetcherDelegate overrides. | |
533 virtual void OnURLFetchDownloadProgress(const net::URLFetcher* source, | |
534 int64 current, int64 total) OVERRIDE; | |
535 virtual bool ShouldSendDownloadData() OVERRIDE; | |
536 virtual void OnURLFetchDownloadData( | |
537 const net::URLFetcher* source, | |
538 scoped_ptr<std::string> download_data) OVERRIDE; | |
539 | |
540 private: | |
541 const DownloadActionCallback download_action_callback_; | |
542 const GetContentCallback get_content_callback_; | |
543 const ProgressCallback progress_callback_; | |
544 const GURL download_url_; | |
545 | |
546 DISALLOW_COPY_AND_ASSIGN(DownloadFileOperation); | |
547 }; | |
548 | |
549 } // namespace google_apis | |
550 | |
551 #endif // CHROME_BROWSER_GOOGLE_APIS_BASE_OPERATIONS_H_ | |
OLD | NEW |