summaryrefslogtreecommitdiffstats
path: root/chromium/webkit/browser/fileapi/sandbox_directory_database.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/webkit/browser/fileapi/sandbox_directory_database.cc')
-rw-r--r--chromium/webkit/browser/fileapi/sandbox_directory_database.cc38
1 files changed, 24 insertions, 14 deletions
diff --git a/chromium/webkit/browser/fileapi/sandbox_directory_database.cc b/chromium/webkit/browser/fileapi/sandbox_directory_database.cc
index dd376116eef..75aa691d523 100644
--- a/chromium/webkit/browser/fileapi/sandbox_directory_database.cc
+++ b/chromium/webkit/browser/fileapi/sandbox_directory_database.cc
@@ -243,7 +243,7 @@ bool DatabaseCheckHelper::ScanDatabase() {
return false;
// Ensure the backing file exists as a normal file.
- base::PlatformFileInfo platform_file_info;
+ base::File::Info platform_file_info;
if (!base::GetFileInfo(
path_.Append(file_info.data_path), &platform_file_info) ||
platform_file_info.is_directory ||
@@ -410,8 +410,10 @@ SandboxDirectoryDatabase::FileInfo::~FileInfo() {
}
SandboxDirectoryDatabase::SandboxDirectoryDatabase(
- const base::FilePath& filesystem_data_directory)
- : filesystem_data_directory_(filesystem_data_directory) {
+ const base::FilePath& filesystem_data_directory,
+ leveldb::Env* env_override)
+ : filesystem_data_directory_(filesystem_data_directory),
+ env_override_(env_override) {
}
SandboxDirectoryDatabase::~SandboxDirectoryDatabase() {
@@ -518,10 +520,10 @@ bool SandboxDirectoryDatabase::GetFileInfo(FileId file_id, FileInfo* info) {
return false;
}
-base::PlatformFileError SandboxDirectoryDatabase::AddFileInfo(
+base::File::Error SandboxDirectoryDatabase::AddFileInfo(
const FileInfo& info, FileId* file_id) {
if (!Init(REPAIR_ON_CORRUPTION))
- return base::PLATFORM_FILE_ERROR_FAILED;
+ return base::File::FILE_ERROR_FAILED;
DCHECK(file_id);
std::string child_key = GetChildLookupKey(info.parent_id, info.name);
std::string child_id_string;
@@ -529,16 +531,16 @@ base::PlatformFileError SandboxDirectoryDatabase::AddFileInfo(
db_->Get(leveldb::ReadOptions(), child_key, &child_id_string);
if (status.ok()) {
LOG(ERROR) << "File exists already!";
- return base::PLATFORM_FILE_ERROR_EXISTS;
+ return base::File::FILE_ERROR_EXISTS;
}
if (!status.IsNotFound()) {
HandleError(FROM_HERE, status);
- return base::PLATFORM_FILE_ERROR_NOT_FOUND;
+ return base::File::FILE_ERROR_NOT_FOUND;
}
if (!IsDirectory(info.parent_id)) {
LOG(ERROR) << "New parent directory is a file!";
- return base::PLATFORM_FILE_ERROR_NOT_A_DIRECTORY;
+ return base::File::FILE_ERROR_NOT_A_DIRECTORY;
}
// This would be a fine place to limit the number of files in a directory, if
@@ -546,21 +548,21 @@ base::PlatformFileError SandboxDirectoryDatabase::AddFileInfo(
FileId temp_id;
if (!GetLastFileId(&temp_id))
- return base::PLATFORM_FILE_ERROR_FAILED;
+ return base::File::FILE_ERROR_FAILED;
++temp_id;
leveldb::WriteBatch batch;
if (!AddFileInfoHelper(info, temp_id, &batch))
- return base::PLATFORM_FILE_ERROR_FAILED;
+ return base::File::FILE_ERROR_FAILED;
batch.Put(LastFileIdKey(), base::Int64ToString(temp_id));
status = db_->Write(leveldb::WriteOptions(), &batch);
if (!status.ok()) {
HandleError(FROM_HERE, status);
- return base::PLATFORM_FILE_ERROR_FAILED;
+ return base::File::FILE_ERROR_FAILED;
}
*file_id = temp_id;
- return base::PLATFORM_FILE_OK;
+ return base::File::FILE_OK;
}
bool SandboxDirectoryDatabase::RemoveFileInfo(FileId file_id) {
@@ -699,9 +701,13 @@ bool SandboxDirectoryDatabase::GetNextInteger(int64* next) {
}
// static
-bool SandboxDirectoryDatabase::DestroyDatabase(const base::FilePath& path) {
+bool SandboxDirectoryDatabase::DestroyDatabase(const base::FilePath& path,
+ leveldb::Env* env_override) {
std::string name = FilePathToString(path.Append(kDirectoryDatabaseName));
- leveldb::Status status = leveldb::DestroyDB(name, leveldb::Options());
+ leveldb::Options options;
+ if (env_override)
+ options.env = env_override;
+ leveldb::Status status = leveldb::DestroyDB(name, options);
if (status.ok())
return true;
LOG(WARNING) << "Failed to destroy a database with status " <<
@@ -719,6 +725,8 @@ bool SandboxDirectoryDatabase::Init(RecoveryOption recovery_option) {
leveldb::Options options;
options.max_open_files = 0; // Use minimum.
options.create_if_missing = true;
+ if (env_override_)
+ options.env = env_override_;
leveldb::DB* db;
leveldb::Status status = leveldb::DB::Open(options, path, &db);
ReportInitStatus(status);
@@ -766,6 +774,8 @@ bool SandboxDirectoryDatabase::RepairDatabase(const std::string& db_path) {
DCHECK(!db_.get());
leveldb::Options options;
options.max_open_files = 0; // Use minimum.
+ if (env_override_)
+ options.env = env_override_;
if (!leveldb::RepairDB(db_path, options).ok())
return false;
if (!Init(FAIL_ON_CORRUPTION))