15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
57d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#ifndef CHROME_BROWSER_DRIVE_DRIVE_UPLOADER_H_
67d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define CHROME_BROWSER_DRIVE_DRIVE_UPLOADER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/callback_forward.h"
12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/memory/ref_counted.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h"
147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/drive/drive_service_interface.h"
15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "google_apis/drive/gdata_errorcode.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base {
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FilePath;
21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass TaskRunner;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace google_apis {
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct UploadRangeResponse;
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace drive {
29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass DriveServiceInterface;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Callback to be invoked once the upload has completed.
3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// |upload_location| will be returned when the uploading process is started but
3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// terminated before the completion due to some errors. It can be used to
3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// resume it.
35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochtypedef base::Callback<void(
36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    google_apis::GDataErrorCode error,
37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    const GURL& upload_location,
3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    scoped_ptr<google_apis::FileResource> resource_entry)>
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    UploadCompletionCallback;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DriveUploaderInterface {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  typedef DriveServiceInterface::InitiateUploadNewFileOptions
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      UploadNewFileOptions;
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  typedef DriveServiceInterface::InitiateUploadExistingFileOptions
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      UploadExistingFileOptions;
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~DriveUploaderInterface() {}
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Uploads a new file to a directory specified by |upload_location|.
517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Returns a callback for cancelling the uploading job.
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // parent_resource_id:
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //   resource id of the destination directory.
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // local_file_path:
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //   The path to the local file to be uploaded.
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // title:
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //   The title (file name) of the file to be uploaded.
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // content_type:
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //   The content type of the file to be uploaded.
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // callback:
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //   Called when an upload is done regardless of it was successful or not.
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //   Must not be null.
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  //
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // progress_callback:
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  //   Periodically called back with the total number of bytes sent so far.
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  //   May be null if the information is not needed.
72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual google_apis::CancelCallback UploadNewFile(
737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      const std::string& parent_resource_id,
747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      const base::FilePath& local_file_path,
757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      const std::string& title,
767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      const std::string& content_type,
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const UploadNewFileOptions& options,
787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      const UploadCompletionCallback& callback,
79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const google_apis::ProgressCallback& progress_callback) = 0;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Uploads an existing file (a file that already exists on Drive).
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //
837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // See comments at UploadNewFile about common parameters and the return value.
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // resource_id:
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //   resource id of the existing file to be overwritten.
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // etag:
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //   Expected ETag for the destination file. If it does not match, the upload
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //   fails with UPLOAD_ERROR_CONFLICT.
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  //   If |etag| is empty, the test is skipped.
92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual google_apis::CancelCallback UploadExistingFile(
93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const std::string& resource_id,
94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const base::FilePath& local_file_path,
95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const std::string& content_type,
965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const UploadExistingFileOptions& options,
97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const UploadCompletionCallback& callback,
98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const google_apis::ProgressCallback& progress_callback) = 0;
9990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Resumes the uploading process terminated before the completion.
10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // |upload_location| should be the one returned via UploadCompletionCallback
10290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // for previous invocation. |drive_file_path|, |local_file_path| and
10390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // |content_type| must be set to the same ones for previous invocation.
10490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  //
1057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // See comments at UploadNewFile about common parameters and the return value.
106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual google_apis::CancelCallback ResumeUploadFile(
10790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      const GURL& upload_location,
10890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      const base::FilePath& local_file_path,
10990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      const std::string& content_type,
11090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      const UploadCompletionCallback& callback,
111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const google_apis::ProgressCallback& progress_callback) = 0;
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DriveUploader : public DriveUploaderInterface {
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DriveUploader(DriveServiceInterface* drive_service,
1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                const scoped_refptr<base::TaskRunner>& blocking_task_runner);
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~DriveUploader();
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // DriveUploaderInterface overrides.
121eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual google_apis::CancelCallback UploadNewFile(
122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const std::string& parent_resource_id,
123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const base::FilePath& local_file_path,
124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const std::string& title,
125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const std::string& content_type,
1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const UploadNewFileOptions& options,
127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const UploadCompletionCallback& callback,
128eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const google_apis::ProgressCallback& progress_callback) OVERRIDE;
129eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual google_apis::CancelCallback UploadExistingFile(
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const std::string& resource_id,
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::FilePath& local_file_path,
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::string& content_type,
1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const UploadExistingFileOptions& options,
134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const UploadCompletionCallback& callback,
135eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const google_apis::ProgressCallback& progress_callback) OVERRIDE;
136eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual google_apis::CancelCallback ResumeUploadFile(
13790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      const GURL& upload_location,
13890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      const base::FilePath& local_file_path,
13990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      const std::string& content_type,
14090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      const UploadCompletionCallback& callback,
141eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const google_apis::ProgressCallback& progress_callback) OVERRIDE;
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  struct UploadFileInfo;
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  typedef base::Callback<void(scoped_ptr<UploadFileInfo> upload_file_info)>
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      StartInitiateUploadCallback;
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Starts uploading a file with |upload_file_info|.
149eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  google_apis::CancelCallback StartUploadFile(
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<UploadFileInfo> upload_file_info,
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const StartInitiateUploadCallback& start_initiate_upload_callback);
152a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  void StartUploadFileAfterGetFileSize(
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<UploadFileInfo> upload_file_info,
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const StartInitiateUploadCallback& start_initiate_upload_callback,
155a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)      bool get_file_size_result);
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Starts to initiate the new file uploading.
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Upon completion, OnUploadLocationReceived should be called.
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void StartInitiateUploadNewFile(
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const std::string& parent_resource_id,
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const std::string& title,
1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const UploadNewFileOptions& options,
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<UploadFileInfo> upload_file_info);
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Starts to initiate the existing file uploading.
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Upon completion, OnUploadLocationReceived should be called.
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void StartInitiateUploadExistingFile(
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const std::string& resource_id,
1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const UploadExistingFileOptions& options,
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<UploadFileInfo> upload_file_info);
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // DriveService callback for InitiateUpload.
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnUploadLocationReceived(scoped_ptr<UploadFileInfo> upload_file_info,
174eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                google_apis::GDataErrorCode code,
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                const GURL& upload_location);
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Starts to get the current upload status for the file uploading.
17890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Upon completion, OnUploadRangeResponseReceived should be called.
17990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void StartGetUploadStatus(scoped_ptr<UploadFileInfo> upload_file_info);
18090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Uploads the next chunk of data from the file.
1822385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  void UploadNextChunk(scoped_ptr<UploadFileInfo> upload_file_info);
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // DriveService callback for ResumeUpload.
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnUploadRangeResponseReceived(
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<UploadFileInfo> upload_file_info,
187eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const google_apis::UploadRangeResponse& response,
18846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      scoped_ptr<google_apis::FileResource> entry);
189eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void OnUploadProgress(const google_apis::ProgressCallback& callback,
190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                        int64 start_position,
191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                        int64 total_size,
192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                        int64 progress_of_chunk,
193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                        int64 total_of_chunk);
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Handle failed uploads.
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void UploadFailed(scoped_ptr<UploadFileInfo> upload_file_info,
197eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                    google_apis::GDataErrorCode error);
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // The lifetime of this object should be guaranteed to exceed that of the
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // DriveUploader instance.
20190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  DriveServiceInterface* drive_service_;  // Not owned by this class.
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
203eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  scoped_refptr<base::TaskRunner> blocking_task_runner_;
204eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Note: This should remain the last member so it'll be destroyed and
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // invalidate its weak pointers before any other members are destroyed.
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::WeakPtrFactory<DriveUploader> weak_ptr_factory_;
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(DriveUploader);
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
211eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace drive
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif  // CHROME_BROWSER_DRIVE_DRIVE_UPLOADER_H_
214