root/chrome/browser/sync_file_system/drive_backend_v1/api_util_interface.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


// Copyright 2013 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.

#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_V1_API_UTIL_INTERFACE_H_
#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_V1_API_UTIL_INTERFACE_H_

#include <string>

#include "base/callback_forward.h"
#include "google_apis/drive/gdata_errorcode.h"
#include "google_apis/drive/gdata_wapi_parser.h"

class GURL;
class Profile;

namespace base {
class Time;
}

namespace google_apis {
class DriveUploaderInterface;
}

namespace webkit_blob {
class ScopedFile;
}

namespace sync_file_system {
namespace drive_backend {

class APIUtilObserver {
 public:
  APIUtilObserver() {}
  virtual ~APIUtilObserver() {}
  virtual void OnAuthenticated() = 0;
  virtual void OnNetworkConnected() = 0;

 private:
  DISALLOW_COPY_AND_ASSIGN(APIUtilObserver);
};

// The implementation of this class is responsible for talking to the Drive
// service to get and put Drive directories, files and metadata.
// This class is owned by DriveFileSyncService.
class APIUtilInterface {
 public:
  typedef base::Callback<void(google_apis::GDataErrorCode error)>
      GDataErrorCallback;
  typedef base::Callback<void(google_apis::GDataErrorCode error,
                              const std::string& file_md5,
                              int64 file_size,
                              const base::Time& last_updated,
                              webkit_blob::ScopedFile downloaded)>
      DownloadFileCallback;
  typedef base::Callback<void(google_apis::GDataErrorCode error,
                              const std::string& resource_id,
                              const std::string& file_md5)> UploadFileCallback;
  typedef base::Callback<
      void(google_apis::GDataErrorCode error, const std::string& resource_id)>
      ResourceIdCallback;
  typedef base::Callback<void(google_apis::GDataErrorCode error,
                              int64 changestamp)> ChangeStampCallback;
  typedef base::Callback<void(google_apis::GDataErrorCode error,
                              scoped_ptr<google_apis::ResourceList> feed)>
      ResourceListCallback;
  typedef base::Callback<void(google_apis::GDataErrorCode error,
                              scoped_ptr<google_apis::ResourceEntry> entry)>
      ResourceEntryCallback;

  APIUtilInterface() {}
  virtual ~APIUtilInterface() {}

  virtual void AddObserver(APIUtilObserver* observer) = 0;
  virtual void RemoveObserver(APIUtilObserver* observer) = 0;

  // Fetches Resource ID of the directory where we should place all files to
  // sync.  Upon completion, invokes |callback|.
  // If the directory does not exist on the server this also creates
  // the directory.
  //
  // Returns HTTP_SUCCESS if the directory already exists.
  // Returns HTTP_CREATED if the directory was not found and created.
  virtual void GetDriveDirectoryForSyncRoot(
      const ResourceIdCallback& callback) = 0;

  // Fetches Resource ID of the directory for the |origin|.
  // Upon completion, invokes |callback|.
  // If the directory does not exist on the server this also creates
  // the directory.
  //
  // Returns HTTP_SUCCESS if the directory already exists.
  // Returns HTTP_CREATED if the directory was not found and created.
  virtual void GetDriveDirectoryForOrigin(
      const std::string& sync_root_resource_id,
      const GURL& origin,
      const ResourceIdCallback& callback) = 0;

  // Fetches the largest changestamp for the signed-in account.
  // Upon completion, invokes |callback|.
  virtual void GetLargestChangeStamp(const ChangeStampCallback& callback) = 0;

  // Fetches the resource entry for the file identified by |resource_id|.
  // Upon completion, invokes |callback|.
  virtual void GetResourceEntry(const std::string& resource_id,
                                const ResourceEntryCallback& callback) = 0;

  // Lists files in the directory identified by |resource_id|.
  // Upon completion, invokes |callback|.
  // The result may be chunked and may have successive results. The caller needs
  // to call ContunueListing with the result of GetNextFeedURL to get complete
  // list of files.
  virtual void ListFiles(const std::string& directory_resource_id,
                         const ResourceListCallback& callback) = 0;

  // Lists changes that happened after |start_changestamp|.
  // Upon completion, invokes |callback|.
  // The result may be chunked and may have successive results. The caller needs
  // to call ContunueListing with the result of GetNextFeedURL to get complete
  // list of changes.
  virtual void ListChanges(int64 start_changestamp,
                           const ResourceListCallback& callback) = 0;

  // Fetches the next chunk of ResourceList identified by |next_link|.
  // Upon completion, invokes |callback|.
  virtual void ContinueListing(const GURL& next_link,
                               const ResourceListCallback& callback) = 0;

  // Downloads the file identified by |resource_id| from Drive to
  // |local_file_path|.
  // |local_file_md5| represents the hash value of the local file to be updated.
  // If |local_file_md5| is equal to remote file's value, cancels the download
  // and invokes |callback| with GDataErrorCode::HTTP_NOT_MODIFIED immediately.
  // When there is no local file to be updated, |local_file_md5| should be
  // empty.
  virtual void DownloadFile(const std::string& resource_id,
                            const std::string& local_file_md5,
                            const DownloadFileCallback& callback) = 0;

  // Uploads the new file |local_file_path| with specified |title| into the
  // directory identified by |directory_resource_id|.
  // Upon completion, invokes |callback| and returns HTTP_CREATED if the file
  // is created.
  virtual void UploadNewFile(const std::string& directory_resource_id,
                             const base::FilePath& local_file_path,
                             const std::string& title,
                             const UploadFileCallback& callback) = 0;

  // Uploads the existing file identified by |local_file_path|.
  // |remote_file_md5| represents the expected hash value of the file to be
  // updated on Drive. If |remote_file_md5| is different from the actual value,
  // cancels the upload and invokes |callback| with
  // GDataErrorCode::HTTP_CONFLICT immediately.
  // Returns HTTP_SUCCESS if the file uploaded successfully.
  virtual void UploadExistingFile(const std::string& resource_id,
                                  const std::string& remote_file_md5,
                                  const base::FilePath& local_file_path,
                                  const UploadFileCallback& callback) = 0;

  // Creates a new directory with specified |title| into the directory
  // identified by |parent_resource_id|.
  // Upon completion, invokes |callback| and returns HTTP_CREATED if
  // the directory is created.
  virtual void CreateDirectory(const std::string& parent_resource_id,
                               const std::string& title,
                               const ResourceIdCallback& callback) = 0;

  // Returns true if the user is authenticated.
  virtual bool IsAuthenticated() const = 0;

  // Deletes the file identified by |resource_id|.
  // A directory is considered a file and will cause a recursive delete if
  // given as the |resource_id|.
  // TODO(tzik): Rename this function to DeleteResource.
  //
  // |remote_file_md5| represents the expected hash value of the file to be
  // deleted from Drive. If |remote_file_md5| is empty, then it's implied that
  // the file should be deleted on the remote side regardless. If
  // |remote_file_md5| is not empty and is different from the actual value,
  // the deletion operation is canceled and the |callback| with
  // GDataErrorCode::HTTP_CONFLICT is invoked immediately.
  virtual void DeleteFile(const std::string& resource_id,
                          const std::string& remote_file_md5,
                          const GDataErrorCallback& callback) = 0;

  // Ensures the sync root directory is not in 'My Drive'. Even if the directory
  // is in directories other than 'My Drive', it will not be removed from there.
  virtual void EnsureSyncRootIsNotInMyDrive(
      const std::string& sync_root_resource_id) = 0;

 private:
  DISALLOW_COPY_AND_ASSIGN(APIUtilInterface);
};

}  // namespace drive_backend
}  // namespace sync_file_system

#endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_V1_API_UTIL_INTERFACE_H_

/* [<][>][^][v][top][bottom][index][help] */