| // Copyright 2012 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_NATIVE_MEDIA_FILE_UTIL_H_ |
| #define CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_NATIVE_MEDIA_FILE_UTIL_H_ |
| |
| #include <stddef.h> |
| #include <stdint.h> |
| |
| #include <memory> |
| |
| #include "base/task/sequenced_task_runner.h" |
| #include "storage/browser/file_system/async_file_util.h" |
| |
| namespace net { |
| class IOBuffer; |
| } |
| |
| // Implements the AsyncFileUtil interface to perform native file system |
| // operations, restricted to operating only on media files. |
| // Instances must be used, and torn-down, only on the browser IO-thread. |
| class NativeMediaFileUtil : public storage::AsyncFileUtil { |
| public: |
| // |media_task_runner| specifies the TaskRunner on which to perform all |
| // native file system operations, and media file filtering. This must |
| // be the same TaskRunner passed in each FileSystemOperationContext. |
| explicit NativeMediaFileUtil( |
| scoped_refptr<base::SequencedTaskRunner> media_task_runner); |
| |
| NativeMediaFileUtil(const NativeMediaFileUtil&) = delete; |
| NativeMediaFileUtil& operator=(const NativeMediaFileUtil&) = delete; |
| |
| ~NativeMediaFileUtil() override; |
| |
| // Uses the MIME sniffer code, which actually looks into the file, |
| // to determine if it is really a media file (to avoid exposing |
| // non-media files with a media file extension.) |
| static base::File::Error IsMediaFile(const base::FilePath& path); |
| static base::File::Error BufferIsMediaHeader(net::IOBuffer* buf, |
| size_t length); |
| |
| // Methods to support CreateOrOpen. Public so they can be shared with |
| // DeviceMediaAsyncFileUtil. |
| static void CreatedSnapshotFileForCreateOrOpen( |
| base::SequencedTaskRunner* media_task_runner, |
| uint32_t file_flags, |
| storage::AsyncFileUtil::CreateOrOpenCallback callback, |
| base::File::Error result, |
| const base::File::Info& file_info, |
| const base::FilePath& platform_path, |
| scoped_refptr<storage::ShareableFileReference> file_ref); |
| |
| // AsyncFileUtil overrides. |
| void CreateOrOpen( |
| std::unique_ptr<storage::FileSystemOperationContext> context, |
| const storage::FileSystemURL& url, |
| uint32_t file_flags, |
| CreateOrOpenCallback callback) override; |
| void EnsureFileExists( |
| std::unique_ptr<storage::FileSystemOperationContext> context, |
| const storage::FileSystemURL& url, |
| EnsureFileExistsCallback callback) override; |
| void CreateDirectory( |
| std::unique_ptr<storage::FileSystemOperationContext> context, |
| const storage::FileSystemURL& url, |
| bool exclusive, |
| bool recursive, |
| StatusCallback callback) override; |
| void GetFileInfo(std::unique_ptr<storage::FileSystemOperationContext> context, |
| const storage::FileSystemURL& url, |
| GetMetadataFieldSet fields, |
| GetFileInfoCallback callback) override; |
| void ReadDirectory( |
| std::unique_ptr<storage::FileSystemOperationContext> context, |
| const storage::FileSystemURL& url, |
| ReadDirectoryCallback callback) override; |
| void Touch(std::unique_ptr<storage::FileSystemOperationContext> context, |
| const storage::FileSystemURL& url, |
| const base::Time& last_access_time, |
| const base::Time& last_modified_time, |
| StatusCallback callback) override; |
| void Truncate(std::unique_ptr<storage::FileSystemOperationContext> context, |
| const storage::FileSystemURL& url, |
| int64_t length, |
| StatusCallback callback) override; |
| void CopyFileLocal( |
| std::unique_ptr<storage::FileSystemOperationContext> context, |
| const storage::FileSystemURL& src_url, |
| const storage::FileSystemURL& dest_url, |
| CopyOrMoveOptionSet options, |
| CopyFileProgressCallback progress_callback, |
| StatusCallback callback) override; |
| void MoveFileLocal( |
| std::unique_ptr<storage::FileSystemOperationContext> context, |
| const storage::FileSystemURL& src_url, |
| const storage::FileSystemURL& dest_url, |
| CopyOrMoveOptionSet options, |
| StatusCallback callback) override; |
| void CopyInForeignFile( |
| std::unique_ptr<storage::FileSystemOperationContext> context, |
| const base::FilePath& src_file_path, |
| const storage::FileSystemURL& dest_url, |
| StatusCallback callback) override; |
| void DeleteFile(std::unique_ptr<storage::FileSystemOperationContext> context, |
| const storage::FileSystemURL& url, |
| StatusCallback callback) override; |
| void DeleteDirectory( |
| std::unique_ptr<storage::FileSystemOperationContext> context, |
| const storage::FileSystemURL& url, |
| StatusCallback callback) override; |
| void DeleteRecursively( |
| std::unique_ptr<storage::FileSystemOperationContext> context, |
| const storage::FileSystemURL& url, |
| StatusCallback callback) override; |
| void CreateSnapshotFile( |
| std::unique_ptr<storage::FileSystemOperationContext> context, |
| const storage::FileSystemURL& url, |
| CreateSnapshotFileCallback callback) override; |
| |
| private: |
| // |core_| holds state which must be used and torn-down on the |
| // |media_task_runner_|, rather than on the IO-thread. |
| class Core; |
| |
| scoped_refptr<base::SequencedTaskRunner> media_task_runner_; |
| std::unique_ptr<Core> core_; |
| }; |
| |
| #endif // CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_NATIVE_MEDIA_FILE_UTIL_H_ |