sandbox_file_system_test_helper.h revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
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#ifndef CONTENT_PUBLIC_TEST_SANDBOX_FILE_SYSTEM_TEST_HELPER_H_ 6#define CONTENT_PUBLIC_TEST_SANDBOX_FILE_SYSTEM_TEST_HELPER_H_ 7 8#include <string> 9 10#include "base/files/file_path.h" 11#include "base/memory/ref_counted.h" 12#include "storage/browser/fileapi/file_system_url.h" 13#include "storage/browser/fileapi/file_system_usage_cache.h" 14#include "storage/browser/fileapi/task_runner_bound_observer_list.h" 15#include "storage/common/fileapi/file_system_types.h" 16#include "storage/common/fileapi/file_system_util.h" 17#include "storage/common/quota/quota_types.h" 18#include "url/gurl.h" 19 20namespace base { 21class FilePath; 22} 23 24namespace storage { 25class QuotaManagerProxy; 26} 27 28namespace storage { 29class FileSystemContext; 30class FileSystemFileUtil; 31class FileSystemOperationContext; 32class FileSystemOperationRunner; 33} 34 35namespace content { 36 37// Filesystem test helper class that encapsulates test environment for 38// a given {origin, type} pair. This helper only works for sandboxed 39// file systems (Temporary or Persistent). 40class SandboxFileSystemTestHelper { 41 public: 42 SandboxFileSystemTestHelper(const GURL& origin, storage::FileSystemType type); 43 SandboxFileSystemTestHelper(); 44 ~SandboxFileSystemTestHelper(); 45 46 void SetUp(const base::FilePath& base_dir); 47 // If you want to use more than one SandboxFileSystemTestHelper in 48 // a single base directory, they have to share a context, so that they don't 49 // have multiple databases fighting over the lock to the origin directory 50 // [deep down inside ObfuscatedFileUtil]. 51 void SetUp(storage::FileSystemContext* file_system_context); 52 void SetUp(const base::FilePath& base_dir, 53 storage::QuotaManagerProxy* quota_manager_proxy); 54 void TearDown(); 55 56 base::FilePath GetOriginRootPath(); 57 base::FilePath GetLocalPath(const base::FilePath& path); 58 base::FilePath GetLocalPathFromASCII(const std::string& path); 59 60 // Returns empty path if filesystem type is neither temporary nor persistent. 61 base::FilePath GetUsageCachePath() const; 62 63 storage::FileSystemURL CreateURL(const base::FilePath& path) const; 64 storage::FileSystemURL CreateURLFromUTF8(const std::string& utf8) const { 65 return CreateURL(base::FilePath::FromUTF8Unsafe(utf8)); 66 } 67 68 // This returns cached usage size returned by QuotaUtil. 69 int64 GetCachedOriginUsage() const; 70 71 // This doesn't work with OFSFU. 72 int64 ComputeCurrentOriginUsage(); 73 74 int64 ComputeCurrentDirectoryDatabaseUsage(); 75 76 storage::FileSystemOperationRunner* operation_runner(); 77 storage::FileSystemOperationContext* NewOperationContext(); 78 79 void AddFileChangeObserver(storage::FileChangeObserver* observer); 80 void AddFileUpdateObserver(storage::FileUpdateObserver* observer); 81 82 storage::FileSystemContext* file_system_context() const { 83 return file_system_context_.get(); 84 } 85 86 const GURL& origin() const { return origin_; } 87 storage::FileSystemType type() const { return type_; } 88 storage::StorageType storage_type() const { 89 return storage::FileSystemTypeToQuotaStorageType(type_); 90 } 91 storage::FileSystemFileUtil* file_util() const { return file_util_; } 92 storage::FileSystemUsageCache* usage_cache(); 93 94 private: 95 void SetUpFileSystem(); 96 97 scoped_refptr<storage::FileSystemContext> file_system_context_; 98 99 const GURL origin_; 100 const storage::FileSystemType type_; 101 storage::FileSystemFileUtil* file_util_; 102}; 103 104} // namespace content 105 106#endif // CONTENT_PUBLIC_TEST_SANDBOX_FILE_SYSTEM_TEST_HELPER_H_ 107