| // 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 |