// 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 // 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_