Home | History | Annotate | Download | only in fileapi
      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 
     22 namespace 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.
     28 class 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