Home | History | Annotate | Download | only in fileapi
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "webkit/browser/fileapi/sandbox_isolated_origin_database.h"
      6 
      7 #include "base/file_util.h"
      8 #include "base/logging.h"
      9 #include "webkit/browser/fileapi/sandbox_origin_database.h"
     10 
     11 namespace fileapi {
     12 
     13 // Special directory name for isolated origin.
     14 const base::FilePath::CharType
     15 SandboxIsolatedOriginDatabase::kObsoleteOriginDirectory[] =
     16     FILE_PATH_LITERAL("iso");
     17 
     18 SandboxIsolatedOriginDatabase::SandboxIsolatedOriginDatabase(
     19     const std::string& origin,
     20     const base::FilePath& file_system_directory,
     21     const base::FilePath& origin_directory)
     22     : migration_checked_(false),
     23       origin_(origin),
     24       file_system_directory_(file_system_directory),
     25       origin_directory_(origin_directory) {
     26 }
     27 
     28 SandboxIsolatedOriginDatabase::~SandboxIsolatedOriginDatabase() {
     29 }
     30 
     31 bool SandboxIsolatedOriginDatabase::HasOriginPath(
     32     const std::string& origin) {
     33   return (origin_ == origin);
     34 }
     35 
     36 bool SandboxIsolatedOriginDatabase::GetPathForOrigin(
     37     const std::string& origin, base::FilePath* directory) {
     38   if (origin != origin_)
     39     return false;
     40   *directory = origin_directory_;
     41   return true;
     42 }
     43 
     44 bool SandboxIsolatedOriginDatabase::RemovePathForOrigin(
     45     const std::string& origin) {
     46   return true;
     47 }
     48 
     49 bool SandboxIsolatedOriginDatabase::ListAllOrigins(
     50     std::vector<OriginRecord>* origins) {
     51   origins->push_back(OriginRecord(origin_, origin_directory_));
     52   return true;
     53 }
     54 
     55 void SandboxIsolatedOriginDatabase::DropDatabase() {
     56 }
     57 
     58 void SandboxIsolatedOriginDatabase::MigrateBackFromObsoleteOriginDatabase(
     59     const std::string& origin,
     60     const base::FilePath& file_system_directory,
     61     SandboxOriginDatabase* database) {
     62   base::FilePath isolated_directory =
     63       file_system_directory.Append(kObsoleteOriginDirectory);
     64 
     65   if (database->HasOriginPath(origin)) {
     66     // Don't bother.
     67     base::DeleteFile(isolated_directory, true /* recursive */);
     68     return;
     69   }
     70 
     71   base::FilePath directory_name;
     72   if (database->GetPathForOrigin(origin, &directory_name)) {
     73     base::FilePath origin_directory =
     74         file_system_directory.Append(directory_name);
     75     base::DeleteFile(origin_directory, true /* recursive */);
     76     base::Move(isolated_directory, origin_directory);
     77   }
     78 }
     79 
     80 }  // namespace fileapi
     81