#ifndef SQL_SANDBOXED_VFS_FILE_H_
#define SQL_SANDBOXED_VFS_FILE_H_
#include "base/component_export.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/raw_ptr_exclusion.h"
#include "third_party/sqlite/sqlite3.h"
namespace sql {
class COMPONENT_EXPORT(SQL) SandboxedVfsFile {
public:
SandboxedVfsFile();
virtual ~SandboxedVfsFile();
static void BindSandboxedFile(SandboxedVfsFile* vfs_file,
sqlite3_file& buffer);
static SandboxedVfsFile& FromSqliteFile(sqlite3_file& sqlite_file);
virtual int Close() = 0;
virtual int Read(void* buffer, int size, sqlite3_int64 offset) = 0;
virtual int Write(const void* buffer, int size, sqlite3_int64 offset) = 0;
virtual int Truncate(sqlite3_int64 size) = 0;
virtual int Sync(int flags) = 0;
virtual int FileSize(sqlite3_int64* result_size) = 0;
virtual int Lock(int mode) = 0;
virtual int Unlock(int mode) = 0;
virtual int CheckReservedLock(int* has_reserved_lock) = 0;
virtual int FileControl(int opcode, void* data) = 0;
virtual int SectorSize() = 0;
virtual int DeviceCharacteristics() = 0;
virtual int ShmMap(int page_index,
int page_size,
int extend_file_if_needed,
void volatile** result) = 0;
virtual int ShmLock(int offset, int size, int flags) = 0;
virtual void ShmBarrier() = 0;
virtual int ShmUnmap(int also_delete_file) = 0;
virtual int Fetch(sqlite3_int64 offset, int size, void** result) = 0;
virtual int Unfetch(sqlite3_int64 offset, void* fetch_result) = 0;
};
struct SandboxedVfsFileSqliteBridge {
sqlite3_file sqlite_file;
RAW_PTR_EXCLUSION SandboxedVfsFile* sandboxed_vfs_file;
static SandboxedVfsFileSqliteBridge& FromSqliteFile(
sqlite3_file& sqlite_file);
};
}
#endif