sandbox_file_system_test_helper.h revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
16bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// Copyright 2013 The Chromium Authors. All rights reserved. 26bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// Use of this source code is governed by a BSD-style license that can be 36bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// found in the LICENSE file. 46bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 56bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#ifndef CONTENT_PUBLIC_TEST_SANDBOX_FILE_SYSTEM_TEST_HELPER_H_ 66bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define CONTENT_PUBLIC_TEST_SANDBOX_FILE_SYSTEM_TEST_HELPER_H_ 76bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 86bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#include <string> 96bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 106bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#include "base/files/file_path.h" 116bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#include "base/memory/ref_counted.h" 126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#include "url/gurl.h" 136bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#include "webkit/browser/fileapi/file_system_url.h" 146bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#include "webkit/browser/fileapi/file_system_usage_cache.h" 156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#include "webkit/browser/fileapi/task_runner_bound_observer_list.h" 166bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#include "webkit/common/fileapi/file_system_types.h" 176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#include "webkit/common/fileapi/file_system_util.h" 186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#include "webkit/common/quota/quota_types.h" 196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 206bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesnamespace base { 216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesclass FilePath; 226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 236bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesnamespace quota { 256bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesclass QuotaManagerProxy; 266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 276bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 286bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesnamespace fileapi { 296bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesclass FileSystemContext; 306bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesclass FileSystemFileUtil; 316bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesclass FileSystemOperationContext; 326bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesclass FileSystemOperationRunner; 336bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 346bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 356bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesnamespace content { 366bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 376bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// Filesystem test helper class that encapsulates test environment for 386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// a given {origin, type} pair. This helper only works for sandboxed 396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// file systems (Temporary or Persistent). 406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesclass SandboxFileSystemTestHelper { 416bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines public: 426bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines SandboxFileSystemTestHelper(const GURL& origin, fileapi::FileSystemType type); 436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines SandboxFileSystemTestHelper(); 446bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines ~SandboxFileSystemTestHelper(); 456bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 466bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines void SetUp(const base::FilePath& base_dir); 476bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // If you want to use more than one SandboxFileSystemTestHelper in 486bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // a single base directory, they have to share a context, so that they don't 496bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // have multiple databases fighting over the lock to the origin directory 506bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // [deep down inside ObfuscatedFileUtil]. 516bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines void SetUp(fileapi::FileSystemContext* file_system_context); 526bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines void SetUp(const base::FilePath& base_dir, 536bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines quota::QuotaManagerProxy* quota_manager_proxy); 546bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines void TearDown(); 556bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 566bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines base::FilePath GetOriginRootPath(); 576bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines base::FilePath GetLocalPath(const base::FilePath& path); 586bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines base::FilePath GetLocalPathFromASCII(const std::string& path); 596bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 606bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // Returns empty path if filesystem type is neither temporary nor persistent. 616bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines base::FilePath GetUsageCachePath() const; 626bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 636bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines fileapi::FileSystemURL CreateURL(const base::FilePath& path) const; 646bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines fileapi::FileSystemURL CreateURLFromUTF8(const std::string& utf8) const { 656bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return CreateURL(base::FilePath::FromUTF8Unsafe(utf8)); 666bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines } 676bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 686bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // This returns cached usage size returned by QuotaUtil. 696bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines int64 GetCachedOriginUsage() const; 706bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 716bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // This doesn't work with OFSFU. 726bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines int64 ComputeCurrentOriginUsage(); 736bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 746bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines int64 ComputeCurrentDirectoryDatabaseUsage(); 756bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 766bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines fileapi::FileSystemOperationRunner* operation_runner(); 776bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines fileapi::FileSystemOperationContext* NewOperationContext(); 786bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 796bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines void AddFileChangeObserver(fileapi::FileChangeObserver* observer); 806bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 816bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines fileapi::FileSystemContext* file_system_context() const { 826bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return file_system_context_.get(); 836bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines } 846bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 856bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines const GURL& origin() const { return origin_; } 866bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines fileapi::FileSystemType type() const { return type_; } 876bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines quota::StorageType storage_type() const { 886bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return fileapi::FileSystemTypeToQuotaStorageType(type_); 896bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines } 906bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines fileapi::FileSystemFileUtil* file_util() const { return file_util_; } 916bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines fileapi::FileSystemUsageCache* usage_cache(); 926bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 936bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines private: 946bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines void SetUpFileSystem(); 956bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 966bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines scoped_refptr<fileapi::FileSystemContext> file_system_context_; 976bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 986bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines const GURL origin_; 996bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines const fileapi::FileSystemType type_; 1006bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines fileapi::FileSystemFileUtil* file_util_; 1016bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines}; 1026bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 1036bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} // namespace content 1046bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 1056bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#endif // CONTENT_PUBLIC_TEST_SANDBOX_FILE_SYSTEM_TEST_HELPER_H_ 1066bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines