1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
// 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_
|