1// Copyright (c) 2012 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 STORAGE_BROWSER_FILEAPI_SANDBOX_FILE_SYSTEM_BACKEND_H_ 6#define STORAGE_BROWSER_FILEAPI_SANDBOX_FILE_SYSTEM_BACKEND_H_ 7 8#include <set> 9#include <string> 10 11#include "base/compiler_specific.h" 12#include "base/files/file_path.h" 13#include "base/memory/ref_counted.h" 14#include "base/memory/scoped_ptr.h" 15#include "storage/browser/fileapi/file_system_backend.h" 16#include "storage/browser/fileapi/file_system_quota_util.h" 17#include "storage/browser/fileapi/sandbox_file_system_backend_delegate.h" 18#include "storage/browser/fileapi/task_runner_bound_observer_list.h" 19#include "storage/browser/quota/special_storage_policy.h" 20#include "storage/browser/storage_browser_export.h" 21 22namespace storage { 23 24// TEMPORARY or PERSISTENT filesystems, which are placed under the user's 25// profile directory in a sandboxed way. 26// This interface also lets one enumerate and remove storage for the origins 27// that use the filesystem. 28class STORAGE_EXPORT SandboxFileSystemBackend 29 : public FileSystemBackend { 30 public: 31 explicit SandboxFileSystemBackend(SandboxFileSystemBackendDelegate* delegate); 32 virtual ~SandboxFileSystemBackend(); 33 34 // FileSystemBackend overrides. 35 virtual bool CanHandleType(FileSystemType type) const OVERRIDE; 36 virtual void Initialize(FileSystemContext* context) OVERRIDE; 37 virtual void ResolveURL(const FileSystemURL& url, 38 OpenFileSystemMode mode, 39 const OpenFileSystemCallback& callback) OVERRIDE; 40 virtual AsyncFileUtil* GetAsyncFileUtil(FileSystemType type) OVERRIDE; 41 virtual WatcherManager* GetWatcherManager(FileSystemType type) OVERRIDE; 42 virtual CopyOrMoveFileValidatorFactory* GetCopyOrMoveFileValidatorFactory( 43 FileSystemType type, 44 base::File::Error* error_code) OVERRIDE; 45 virtual FileSystemOperation* CreateFileSystemOperation( 46 const FileSystemURL& url, 47 FileSystemContext* context, 48 base::File::Error* error_code) const OVERRIDE; 49 virtual bool SupportsStreaming(const FileSystemURL& url) const OVERRIDE; 50 virtual bool HasInplaceCopyImplementation( 51 storage::FileSystemType type) const OVERRIDE; 52 virtual scoped_ptr<storage::FileStreamReader> CreateFileStreamReader( 53 const FileSystemURL& url, 54 int64 offset, 55 int64 max_bytes_to_read, 56 const base::Time& expected_modification_time, 57 FileSystemContext* context) const OVERRIDE; 58 virtual scoped_ptr<FileStreamWriter> CreateFileStreamWriter( 59 const FileSystemURL& url, 60 int64 offset, 61 FileSystemContext* context) const OVERRIDE; 62 virtual FileSystemQuotaUtil* GetQuotaUtil() OVERRIDE; 63 virtual const UpdateObserverList* GetUpdateObservers( 64 FileSystemType type) const OVERRIDE; 65 virtual const ChangeObserverList* GetChangeObservers( 66 FileSystemType type) const OVERRIDE; 67 virtual const AccessObserverList* GetAccessObservers( 68 FileSystemType type) const OVERRIDE; 69 70 // Returns an origin enumerator of this backend. 71 // This method can only be called on the file thread. 72 SandboxFileSystemBackendDelegate::OriginEnumerator* CreateOriginEnumerator(); 73 74 void set_enable_temporary_file_system_in_incognito(bool enable) { 75 enable_temporary_file_system_in_incognito_ = enable; 76 } 77 bool enable_temporary_file_system_in_incognito() const { 78 return enable_temporary_file_system_in_incognito_; 79 } 80 81 82 private: 83 SandboxFileSystemBackendDelegate* delegate_; // Not owned. 84 85 bool enable_temporary_file_system_in_incognito_; 86 87 DISALLOW_COPY_AND_ASSIGN(SandboxFileSystemBackend); 88}; 89 90} // namespace storage 91 92#endif // STORAGE_BROWSER_FILEAPI_SANDBOX_FILE_SYSTEM_BACKEND_H_ 93