1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_PROVIDED_FILE_SYSTEM_H_ 6 #define CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_PROVIDED_FILE_SYSTEM_H_ 7 8 #include "base/memory/weak_ptr.h" 9 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h" 10 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_interface.h" 11 #include "chrome/browser/chromeos/file_system_provider/request_manager.h" 12 #include "storage/browser/fileapi/async_file_util.h" 13 14 class Profile; 15 16 namespace net { 17 class IOBuffer; 18 } // namespace net 19 20 namespace base { 21 class FilePath; 22 } // namespace base 23 24 namespace extensions { 25 class EventRouter; 26 } // namespace extensions 27 28 namespace chromeos { 29 namespace file_system_provider { 30 31 class NotificationManagerInterface; 32 33 // Provided file system implementation. Forwards requests between providers and 34 // clients. 35 class ProvidedFileSystem : public ProvidedFileSystemInterface { 36 public: 37 ProvidedFileSystem(Profile* profile, 38 const ProvidedFileSystemInfo& file_system_info); 39 virtual ~ProvidedFileSystem(); 40 41 // ProvidedFileSystemInterface overrides. 42 virtual AbortCallback RequestUnmount( 43 const storage::AsyncFileUtil::StatusCallback& callback) OVERRIDE; 44 virtual AbortCallback GetMetadata( 45 const base::FilePath& entry_path, 46 MetadataFieldMask fields, 47 const GetMetadataCallback& callback) OVERRIDE; 48 virtual AbortCallback ReadDirectory( 49 const base::FilePath& directory_path, 50 const storage::AsyncFileUtil::ReadDirectoryCallback& callback) OVERRIDE; 51 virtual AbortCallback OpenFile(const base::FilePath& file_path, 52 OpenFileMode mode, 53 const OpenFileCallback& callback) OVERRIDE; 54 virtual AbortCallback CloseFile( 55 int file_handle, 56 const storage::AsyncFileUtil::StatusCallback& callback) OVERRIDE; 57 virtual AbortCallback ReadFile( 58 int file_handle, 59 net::IOBuffer* buffer, 60 int64 offset, 61 int length, 62 const ReadChunkReceivedCallback& callback) OVERRIDE; 63 virtual AbortCallback CreateDirectory( 64 const base::FilePath& directory_path, 65 bool recursive, 66 const storage::AsyncFileUtil::StatusCallback& callback) OVERRIDE; 67 virtual AbortCallback DeleteEntry( 68 const base::FilePath& entry_path, 69 bool recursive, 70 const storage::AsyncFileUtil::StatusCallback& callback) OVERRIDE; 71 virtual AbortCallback CreateFile( 72 const base::FilePath& file_path, 73 const storage::AsyncFileUtil::StatusCallback& callback) OVERRIDE; 74 virtual AbortCallback CopyEntry( 75 const base::FilePath& source_path, 76 const base::FilePath& target_path, 77 const storage::AsyncFileUtil::StatusCallback& callback) OVERRIDE; 78 virtual AbortCallback MoveEntry( 79 const base::FilePath& source_path, 80 const base::FilePath& target_path, 81 const storage::AsyncFileUtil::StatusCallback& callback) OVERRIDE; 82 virtual AbortCallback Truncate( 83 const base::FilePath& file_path, 84 int64 length, 85 const storage::AsyncFileUtil::StatusCallback& callback) OVERRIDE; 86 virtual AbortCallback WriteFile( 87 int file_handle, 88 net::IOBuffer* buffer, 89 int64 offset, 90 int length, 91 const storage::AsyncFileUtil::StatusCallback& callback) OVERRIDE; 92 virtual const ProvidedFileSystemInfo& GetFileSystemInfo() const OVERRIDE; 93 virtual RequestManager* GetRequestManager() OVERRIDE; 94 virtual base::WeakPtr<ProvidedFileSystemInterface> GetWeakPtr() OVERRIDE; 95 96 private: 97 // Aborts an operation executed with a request id equal to 98 // |operation_request_id|. The request is removed immediately on the C++ side 99 // despite being handled by the providing extension or not. 100 void Abort(int operation_request_id, 101 const storage::AsyncFileUtil::StatusCallback& callback); 102 103 Profile* profile_; // Not owned. 104 extensions::EventRouter* event_router_; // Not owned. May be NULL. 105 ProvidedFileSystemInfo file_system_info_; 106 scoped_ptr<NotificationManagerInterface> notification_manager_; 107 RequestManager request_manager_; 108 109 base::WeakPtrFactory<ProvidedFileSystem> weak_ptr_factory_; 110 DISALLOW_COPY_AND_ASSIGN(ProvidedFileSystem); 111 }; 112 113 } // namespace file_system_provider 114 } // namespace chromeos 115 116 #endif // CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_PROVIDED_FILE_SYSTEM_H_ 117