blob: bc55152a59cb0f5b3e2140dd4e12a39f051d7f09 [file] [log] [blame]
// Copyright (c) 2012 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_CHROMEOS_GDATA_DRIVE_SERVICE_INTERFACE_H_
#define CHROME_BROWSER_CHROMEOS_GDATA_DRIVE_SERVICE_INTERFACE_H_
#include <string>
// TODO(kochi): Further split gdata_operations.h and include only necessary
// headers. http://crbug.com/141469
// DownloadActionCallback/InitiateUploadParams/ResulmeUploadParams
#include "chrome/browser/google_apis/gdata_operations.h"
#include "chrome/browser/google_apis/operations_base.h"
class Profile;
namespace gdata {
class OperationRegistry;
// Document export format.
enum DocumentExportFormat {
PDF, // Portable Document Format. (all documents)
PNG, // Portable Networks Graphic Image Format (all documents)
HTML, // HTML Format (text documents and spreadsheets).
TXT, // Text file (text documents and presentations).
DOC, // Word (text documents only).
ODT, // Open Document Format (text documents only).
RTF, // Rich Text Format (text documents only).
ZIP, // ZIP archive (text documents only). Contains the images (if any)
// used in the document as well as a .html file containing the
// document's text.
JPEG, // JPEG (drawings only).
SVG, // Scalable Vector Graphics Image Format (drawings only).
PPT, // Powerpoint (presentations only).
XLS, // Excel (spreadsheets only).
CSV, // Excel (spreadsheets only).
ODS, // Open Document Spreadsheet (spreadsheets only).
TSV, // Tab Separated Value (spreadsheets only). Only the first worksheet
// is returned in TSV by default.
};
// Observer interface for DriveServiceInterface.
class DriveServiceObserver {
public:
// Triggered when the service gets ready to perform operations.
virtual void OnReadyToPerformOperations() {}
// Called when an operation started, made some progress, or finished.
virtual void OnProgressUpdate(const OperationProgressStatusList& list) {}
// Called when GData authentication failed.
virtual void OnAuthenticationFailed() {}
protected:
virtual ~DriveServiceObserver() {}
};
// This defines an interface for sharing by DocumentService and
// MockDocumentService so that we can do testing of clients of DocumentService.
//
// All functions must be called on UI thread. DocumentService is built on top
// of URLFetcher that runs on UI thread.
//
// TODO(zel,benchan): Make the terminology/naming convention (e.g. file vs
// document vs resource, directory vs collection) more consistent and precise.
class DriveServiceInterface {
public:
virtual ~DriveServiceInterface() {}
// Common service:
// Initializes the documents service tied with |profile|.
virtual void Initialize(Profile* profile) = 0;
// Adds an observer.
virtual void AddObserver(DriveServiceObserver* observer) = 0;
// Removes an observer.
virtual void RemoveObserver(DriveServiceObserver* observer) = 0;
// True if ready to start operations.
virtual bool CanStartOperation() const = 0;
// Cancels all in-flight operations.
virtual void CancelAll() = 0;
// Cancels ongoing operation for a given virtual |file_path|. Returns true if
// the operation was found and canceled.
virtual bool CancelForFilePath(const FilePath& file_path) = 0;
// Obtains the list of currently active operations.
virtual OperationProgressStatusList GetProgressStatusList() const = 0;
// Authentication service:
// Authenticates the user by fetching the auth token as
// needed. |callback| will be run with the error code and the auth
// token, on the thread this function is run.
virtual void Authenticate(const AuthStatusCallback& callback) = 0;
// True if OAuth2 access token is retrieved and believed to be fresh.
virtual bool HasAccessToken() const = 0;
// True if OAuth2 refresh token is present.
virtual bool HasRefreshToken() const = 0;
// Document access:
// Fetches the document feed from |feed_url| with |start_changestamp|. If this
// URL is empty, the call will fetch the default root or change document feed.
// |start_changestamp| specifies the starting point from change feeds only.
// Value different than 0, it would trigger delta feed fetching.
//
// |search_query| specifies search query to be sent to the server. It will be
// used only if |start_changestamp| is 0. If empty string is passed,
// |search_query| is ignored.
//
// |directory_resource_id| specifies the directory from which documents are
// fetched. It will be used only if |start_changestamp| is 0. If empty
// string is passed, |directory_resource_id| is ignored.
//
// Upon completion, invokes |callback| with results on the calling thread.
// TODO(satorux): Refactor this function: crbug.com/128746
virtual void GetDocuments(const GURL& feed_url,
int64 start_changestamp,
const std::string& search_query,
const std::string& directory_resource_id,
const GetDataCallback& callback) = 0;
// Fetches single entry metadata from server. The entry's resource id equals
// |resource_id|.
// Upon completion, invokes |callback| with results on the calling thread.
virtual void GetDocumentEntry(const std::string& resource_id,
const GetDataCallback& callback) = 0;
// Gets the account metadata from the server using the default account
// metadata URL. Upon completion, invokes |callback| with results on the
// calling thread.
virtual void GetAccountMetadata(const GetDataCallback& callback) = 0;
// Gets the application information from the server.
// Upon completion, invokes |callback| with results on the calling thread.
virtual void GetApplicationInfo(const GetDataCallback& callback) = 0;
// Deletes a document identified by its 'self' |url| and |etag|.
// Upon completion, invokes |callback| with results on the calling thread.
virtual void DeleteDocument(const GURL& document_url,
const EntryActionCallback& callback) = 0;
// Downloads a document identified by its |content_url| in a given |format|.
// Upon completion, invokes |callback| with results on the calling thread.
virtual void DownloadDocument(const FilePath& virtual_path,
const FilePath& local_cache_path,
const GURL& content_url,
DocumentExportFormat format,
const DownloadActionCallback& callback) = 0;
// Makes a copy of a document identified by its |resource_id|.
// The copy is named as the UTF-8 encoded |new_name| and is not added to any
// collection. Use AddResourceToDirectory() to add the copy to a collection
// when needed. Upon completion, invokes |callback| with results on the
// calling thread.
virtual void CopyDocument(const std::string& resource_id,
const FilePath::StringType& new_name,
const GetDataCallback& callback) = 0;
// Renames a document or collection identified by its 'self' link
// |document_url| to the UTF-8 encoded |new_name|. Upon completion,
// invokes |callback| with results on the calling thread.
virtual void RenameResource(const GURL& resource_url,
const FilePath::StringType& new_name,
const EntryActionCallback& callback) = 0;
// Adds a resource (document, file, or collection) identified by its
// 'self' link |resource_url| to a collection with a content link
// |parent_content_url|. Upon completion, invokes |callback| with
// results on the calling thread.
virtual void AddResourceToDirectory(const GURL& parent_content_url,
const GURL& resource_url,
const EntryActionCallback& callback) = 0;
// Removes a resource (document, file, collection) identified by its
// 'self' link |resource_url| from a collection with a content link
// |parent_content_url|. Upon completion, invokes |callback| with
// results on the calling thread.
virtual void RemoveResourceFromDirectory(
const GURL& parent_content_url,
const GURL& resource_url,
const std::string& resource_id,
const EntryActionCallback& callback) = 0;
// Creates new collection with |directory_name| under parent directory
// identified with |parent_content_url|. If |parent_content_url| is empty,
// the new collection will be created in the root. Upon completion,
// invokes |callback| and passes newly created entry on the calling thread.
virtual void CreateDirectory(const GURL& parent_content_url,
const FilePath::StringType& directory_name,
const GetDataCallback& callback) = 0;
// Downloads a file identified by its |content_url|. The downloaded file will
// be stored at |local_cache_path| location. Upon completion, invokes
// |download_action_callback| with results on the calling thread.
// If |get_content_callback| is not empty,
// URLFetcherDelegate::OnURLFetchDownloadData will be called, which will in
// turn invoke |get_content_callback| on the calling thread.
virtual void DownloadFile(
const FilePath& virtual_path,
const FilePath& local_cache_path,
const GURL& content_url,
const DownloadActionCallback& download_action_callback,
const GetContentCallback& get_content_callback) = 0;
// Initiates uploading of a document/file.
virtual void InitiateUpload(const InitiateUploadParams& params,
const InitiateUploadCallback& callback) = 0;
// Resumes uploading of a document/file on the calling thread.
virtual void ResumeUpload(const ResumeUploadParams& params,
const ResumeUploadCallback& callback) = 0;
// Authorizes a Drive app with the id |app_id| to open the given document.
// Upon completion, invokes |callback| with results on the calling thread.
virtual void AuthorizeApp(const GURL& resource_url,
const std::string& app_id,
const GetDataCallback& callback) = 0;
};
} // namespace gdata
#endif // CHROME_BROWSER_CHROMEOS_GDATA_DRIVE_SERVICE_INTERFACE_H_