| Index: webkit/browser/fileapi/sandbox_origin_database.cc
|
| diff --git a/webkit/browser/fileapi/sandbox_origin_database.cc b/webkit/browser/fileapi/sandbox_origin_database.cc
|
| index 66aa6861b8e51ffdbb6e18f58accc762ba261d42..fffa006b960b5b299809f8344d734eae9b40ff71 100644
|
| --- a/webkit/browser/fileapi/sandbox_origin_database.cc
|
| +++ b/webkit/browser/fileapi/sandbox_origin_database.cc
|
| @@ -5,6 +5,7 @@
|
| #include "webkit/browser/fileapi/sandbox_origin_database.h"
|
|
|
| #include <set>
|
| +#include <utility>
|
|
|
| #include "base/file_util.h"
|
| #include "base/format_macros.h"
|
| @@ -55,17 +56,6 @@ const char* LastPathKey() {
|
|
|
| namespace fileapi {
|
|
|
| -SandboxOriginDatabase::OriginRecord::OriginRecord() {
|
| -}
|
| -
|
| -SandboxOriginDatabase::OriginRecord::OriginRecord(
|
| - const std::string& origin_in, const base::FilePath& path_in)
|
| - : origin(origin_in), path(path_in) {
|
| -}
|
| -
|
| -SandboxOriginDatabase::OriginRecord::~OriginRecord() {
|
| -}
|
| -
|
| SandboxOriginDatabase::SandboxOriginDatabase(
|
| const base::FilePath& file_system_directory)
|
| : file_system_directory_(file_system_directory) {
|
| @@ -74,12 +64,16 @@ SandboxOriginDatabase::SandboxOriginDatabase(
|
| SandboxOriginDatabase::~SandboxOriginDatabase() {
|
| }
|
|
|
| -bool SandboxOriginDatabase::Init(RecoveryOption recovery_option) {
|
| +bool SandboxOriginDatabase::Init(InitOption init_option,
|
| + RecoveryOption recovery_option) {
|
| if (db_)
|
| return true;
|
|
|
| - std::string path =
|
| - FilePathToString(file_system_directory_.Append(kOriginDatabaseName));
|
| + base::FilePath db_path = GetDatabasePath();
|
| + if (init_option == FAIL_IF_NONEXISTENT && !file_util::PathExists(db_path))
|
| + return false;
|
| +
|
| + std::string path = FilePathToString(db_path);
|
| leveldb::Options options;
|
| options.create_if_missing = true;
|
| leveldb::DB* db;
|
| @@ -117,7 +111,7 @@ bool SandboxOriginDatabase::Init(RecoveryOption recovery_option) {
|
| return false;
|
| if (!file_util::CreateDirectory(file_system_directory_))
|
| return false;
|
| - return Init(FAIL_ON_CORRUPTION);
|
| + return Init(init_option, FAIL_ON_CORRUPTION);
|
| }
|
| NOTREACHED();
|
| return false;
|
| @@ -126,7 +120,7 @@ bool SandboxOriginDatabase::Init(RecoveryOption recovery_option) {
|
| bool SandboxOriginDatabase::RepairDatabase(const std::string& db_path) {
|
| DCHECK(!db_.get());
|
| if (!leveldb::RepairDB(db_path, leveldb::Options()).ok() ||
|
| - !Init(FAIL_ON_CORRUPTION)) {
|
| + !Init(FAIL_IF_NONEXISTENT, FAIL_ON_CORRUPTION)) {
|
| LOG(WARNING) << "Failed to repair SandboxOriginDatabase.";
|
| return false;
|
| }
|
| @@ -214,7 +208,7 @@ void SandboxOriginDatabase::ReportInitStatus(const leveldb::Status& status) {
|
| }
|
|
|
| bool SandboxOriginDatabase::HasOriginPath(const std::string& origin) {
|
| - if (!Init(REPAIR_ON_CORRUPTION))
|
| + if (!Init(FAIL_IF_NONEXISTENT, REPAIR_ON_CORRUPTION))
|
| return false;
|
| if (origin.empty())
|
| return false;
|
| @@ -231,7 +225,7 @@ bool SandboxOriginDatabase::HasOriginPath(const std::string& origin) {
|
|
|
| bool SandboxOriginDatabase::GetPathForOrigin(
|
| const std::string& origin, base::FilePath* directory) {
|
| - if (!Init(REPAIR_ON_CORRUPTION))
|
| + if (!Init(CREATE_IF_NONEXISTENT, REPAIR_ON_CORRUPTION))
|
| return false;
|
| DCHECK(directory);
|
| if (origin.empty())
|
| @@ -264,7 +258,7 @@ bool SandboxOriginDatabase::GetPathForOrigin(
|
| }
|
|
|
| bool SandboxOriginDatabase::RemovePathForOrigin(const std::string& origin) {
|
| - if (!Init(REPAIR_ON_CORRUPTION))
|
| + if (!Init(CREATE_IF_NONEXISTENT, REPAIR_ON_CORRUPTION))
|
| return false;
|
| leveldb::Status status =
|
| db_->Delete(leveldb::WriteOptions(), OriginToOriginKey(origin));
|
| @@ -276,9 +270,11 @@ bool SandboxOriginDatabase::RemovePathForOrigin(const std::string& origin) {
|
|
|
| bool SandboxOriginDatabase::ListAllOrigins(
|
| std::vector<OriginRecord>* origins) {
|
| - if (!Init(REPAIR_ON_CORRUPTION))
|
| - return false;
|
| DCHECK(origins);
|
| + if (!Init(CREATE_IF_NONEXISTENT, REPAIR_ON_CORRUPTION)) {
|
| + origins->clear();
|
| + return false;
|
| + }
|
| scoped_ptr<leveldb::Iterator> iter(db_->NewIterator(leveldb::ReadOptions()));
|
| std::string origin_key_prefix = OriginToOriginKey(std::string());
|
| iter->Seek(origin_key_prefix);
|
| @@ -298,9 +294,17 @@ void SandboxOriginDatabase::DropDatabase() {
|
| db_.reset();
|
| }
|
|
|
| +base::FilePath SandboxOriginDatabase::GetDatabasePath() const {
|
| + return file_system_directory_.Append(kOriginDatabaseName);
|
| +}
|
| +
|
| +void SandboxOriginDatabase::RemoveDatabase() {
|
| + DropDatabase();
|
| + file_util::Delete(GetDatabasePath(), true /* recursive */);
|
| +}
|
| +
|
| bool SandboxOriginDatabase::GetLastPathNumber(int* number) {
|
| - if (!Init(REPAIR_ON_CORRUPTION))
|
| - return false;
|
| + DCHECK(db_);
|
| DCHECK(number);
|
| std::string number_string;
|
| leveldb::Status status =
|
|
|