| // 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_FILE_SYSTEM_PROXY_H_ |
| #define CHROME_BROWSER_CHROMEOS_GDATA_DRIVE_FILE_SYSTEM_PROXY_H_ |
| |
| #include "chrome/browser/google_apis/gdata_errorcode.h" |
| #include "webkit/chromeos/fileapi/remote_file_system_proxy.h" |
| |
| namespace fileapi { |
| class FileSystemURL; |
| } |
| |
| namespace gdata { |
| |
| class DriveEntryProto; |
| class DriveFileSystemInterface; |
| |
| typedef std::vector<DriveEntryProto> DriveEntryProtoVector; |
| |
| // Implementation of File API's remote file system proxy for Drive file system. |
| class DriveFileSystemProxy : public fileapi::RemoteFileSystemProxyInterface { |
| public: |
| // |file_system| is the DriveFileSystem instance owned by DriveSystemService. |
| explicit DriveFileSystemProxy(DriveFileSystemInterface* file_system); |
| |
| // fileapi::RemoteFileSystemProxyInterface overrides. |
| virtual void GetFileInfo( |
| const fileapi::FileSystemURL& url, |
| const fileapi::FileSystemOperation::GetMetadataCallback& |
| callback) OVERRIDE; |
| virtual void Copy( |
| const fileapi::FileSystemURL& src_url, |
| const fileapi::FileSystemURL& dest_url, |
| const fileapi::FileSystemOperation::StatusCallback& callback) |
| OVERRIDE; |
| virtual void Move( |
| const fileapi::FileSystemURL& src_url, |
| const fileapi::FileSystemURL& dest_url, |
| const fileapi::FileSystemOperation::StatusCallback& callback) |
| OVERRIDE; |
| virtual void ReadDirectory(const fileapi::FileSystemURL& url, |
| const fileapi::FileSystemOperation::ReadDirectoryCallback& |
| callback) OVERRIDE; |
| virtual void Remove( |
| const fileapi::FileSystemURL& url, bool recursive, |
| const fileapi::FileSystemOperation::StatusCallback& callback) |
| OVERRIDE; |
| virtual void CreateDirectory( |
| const fileapi::FileSystemURL& file_url, |
| bool exclusive, |
| bool recursive, |
| const fileapi::FileSystemOperation::StatusCallback& callback) |
| OVERRIDE; |
| virtual void CreateFile( |
| const fileapi::FileSystemURL& file_url, |
| bool exclusive, |
| const fileapi::FileSystemOperation::StatusCallback& callback) |
| OVERRIDE; |
| virtual void Truncate( |
| const fileapi::FileSystemURL& file_url, int64 length, |
| const fileapi::FileSystemOperation::StatusCallback& callback) |
| OVERRIDE; |
| virtual void CreateSnapshotFile( |
| const fileapi::FileSystemURL& url, |
| const fileapi::FileSystemOperation::SnapshotFileCallback& |
| callback) OVERRIDE; |
| virtual void CreateWritableSnapshotFile( |
| const fileapi::FileSystemURL& url, |
| const fileapi::WritableSnapshotFile& callback) OVERRIDE; |
| virtual void OpenFile( |
| const fileapi::FileSystemURL& url, |
| int file_flags, |
| base::ProcessHandle peer_handle, |
| const fileapi::FileSystemOperation::OpenFileCallback& |
| callback) OVERRIDE; |
| virtual void NotifyCloseFile(const fileapi::FileSystemURL& url) OVERRIDE; |
| virtual void TouchFile( |
| const fileapi::FileSystemURL& url, |
| const base::Time& last_access_time, |
| const base::Time& last_modified_time, |
| const fileapi::FileSystemOperation::StatusCallback& callback) |
| OVERRIDE; |
| |
| protected: |
| virtual ~DriveFileSystemProxy(); |
| |
| private: |
| // Checks if a given |url| belongs to this file system. If it does, |
| // the call will return true and fill in |file_path| with a file path of |
| // a corresponding element within this file system. |
| static bool ValidateUrl(const fileapi::FileSystemURL& url, |
| FilePath* file_path); |
| |
| // Helper callback for relaying reply for status callbacks to the |
| // calling thread. |
| void OnStatusCallback( |
| const fileapi::FileSystemOperation::StatusCallback& callback, |
| DriveFileError error); |
| |
| // Helper callback for relaying reply for metadata retrieval request to the |
| // calling thread. |
| void OnGetMetadata( |
| const FilePath& file_path, |
| const fileapi::FileSystemOperation::GetMetadataCallback& |
| callback, |
| DriveFileError error, |
| scoped_ptr<DriveEntryProto> entry_proto); |
| |
| // Helper callback for relaying reply for GetEntryInfoByPath() to the |
| // calling thread. |
| void OnGetEntryInfoByPath( |
| const FilePath& entry_path, |
| const fileapi::FileSystemOperation::SnapshotFileCallback& |
| callback, |
| DriveFileError error, |
| scoped_ptr<DriveEntryProto> entry_proto); |
| |
| // Helper callback for relaying reply for ReadDirectory() to the calling |
| // thread. |
| void OnReadDirectory( |
| const fileapi::FileSystemOperation::ReadDirectoryCallback& |
| callback, |
| DriveFileError error, |
| bool hide_hosted_documents, |
| scoped_ptr<DriveEntryProtoVector> proto_entries); |
| |
| // Helper callback for relaying reply for CreateWritableSnapshotFile() to |
| // the calling thread. |
| void OnCreateWritableSnapshotFile( |
| const FilePath& virtual_path, |
| const fileapi::WritableSnapshotFile& callback, |
| DriveFileError result, |
| const FilePath& local_path); |
| |
| // Helper callback for closing the local cache file and committing the dirty |
| // flag. This is triggered when the callback for CreateWritableSnapshotFile |
| // released the refcounted reference to the file. |
| void CloseWritableSnapshotFile( |
| const FilePath& virtual_path, |
| const FilePath& local_path); |
| |
| // Invoked during Truncate() operation. This is called when a local modifiable |
| // cache is ready for truncation. |
| void OnFileOpenedForTruncate( |
| const FilePath& virtual_path, |
| int64 length, |
| const fileapi::FileSystemOperation::StatusCallback& callback, |
| DriveFileError open_result, |
| const FilePath& local_cache_path); |
| |
| // Invoked during Truncate() operation. This is called when the truncation of |
| // a local cache file is finished on FILE thread. |
| void DidTruncate( |
| const FilePath& virtual_path, |
| const fileapi::FileSystemOperation::StatusCallback& callback, |
| base::PlatformFileError* truncate_result); |
| |
| // Invoked during OpenFile() operation when truncate or write flags are set. |
| // This is called when a local modifiable cached file is ready for such |
| // operation. |
| void OnOpenFileForWriting( |
| int file_flags, |
| base::ProcessHandle peer_handle, |
| const fileapi::FileSystemOperation::OpenFileCallback& callback, |
| DriveFileError file_error, |
| const FilePath& local_cache_path); |
| |
| // Invoked during OpenFile() operation when file create flags are set. |
| void OnCreateFileForOpen( |
| const FilePath& file_path, |
| int file_flags, |
| base::ProcessHandle peer_handle, |
| const fileapi::FileSystemOperation::OpenFileCallback& callback, |
| DriveFileError file_error); |
| |
| // Invoked during OpenFile() operation when base::PLATFORM_FILE_OPEN_TRUNCATED |
| // flag is set. This is called when the truncation of a local cache file is |
| // finished on FILE thread. |
| void OnOpenAndTruncate( |
| base::ProcessHandle peer_handle, |
| const fileapi::FileSystemOperation::OpenFileCallback& callback, |
| base::PlatformFile* platform_file, |
| base::PlatformFileError* truncate_result); |
| |
| // DriveFileSystem is owned by Profile, which outlives DriveFileSystemProxy, |
| // which is owned by CrosMountPointProvider (i.e. by the time Profile is |
| // removed, the file manager is already gone). Hence it's safe to use this as |
| // a raw pointer. |
| DriveFileSystemInterface* file_system_; |
| }; |
| |
| } // namespace chromeos |
| |
| #endif // CHROME_BROWSER_CHROMEOS_GDATA_DRIVE_FILE_SYSTEM_PROXY_H_ |