blob: 3e3c21803308382f18a17572b646ee4684ba5881 [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "storage/browser/fileapi/sandbox_isolated_origin_database.h"
#include "base/files/file_util.h"
#include "base/logging.h"
#include "storage/browser/fileapi/sandbox_origin_database.h"
namespace storage {
// Special directory name for isolated origin.
const base::FilePath::CharType
SandboxIsolatedOriginDatabase::kObsoleteOriginDirectory[] =
FILE_PATH_LITERAL("iso");
SandboxIsolatedOriginDatabase::SandboxIsolatedOriginDatabase(
const std::string& origin,
const base::FilePath& file_system_directory,
const base::FilePath& origin_directory)
: migration_checked_(false),
origin_(origin),
file_system_directory_(file_system_directory),
origin_directory_(origin_directory) {
}
SandboxIsolatedOriginDatabase::~SandboxIsolatedOriginDatabase() {
}
bool SandboxIsolatedOriginDatabase::HasOriginPath(
const std::string& origin) {
return (origin_ == origin);
}
bool SandboxIsolatedOriginDatabase::GetPathForOrigin(
const std::string& origin, base::FilePath* directory) {
if (origin != origin_)
return false;
*directory = origin_directory_;
return true;
}
bool SandboxIsolatedOriginDatabase::RemovePathForOrigin(
const std::string& origin) {
return true;
}
bool SandboxIsolatedOriginDatabase::ListAllOrigins(
std::vector<OriginRecord>* origins) {
origins->push_back(OriginRecord(origin_, origin_directory_));
return true;
}
void SandboxIsolatedOriginDatabase::DropDatabase() {
}
void SandboxIsolatedOriginDatabase::MigrateBackFromObsoleteOriginDatabase(
const std::string& origin,
const base::FilePath& file_system_directory,
SandboxOriginDatabase* database) {
base::FilePath isolated_directory =
file_system_directory.Append(kObsoleteOriginDirectory);
if (database->HasOriginPath(origin)) {
// Don't bother.
base::DeleteFile(isolated_directory, true /* recursive */);
return;
}
base::FilePath directory_name;
if (database->GetPathForOrigin(origin, &directory_name)) {
base::FilePath origin_directory =
file_system_directory.Append(directory_name);
base::DeleteFile(origin_directory, true /* recursive */);
base::Move(isolated_directory, origin_directory);
}
}
} // namespace storage