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 #ifndef STORAGE_BROWSER_FILEAPI_PLUGIN_PRIVATE_FILE_SYSTEM_BACKEND_H_
      6 #define STORAGE_BROWSER_FILEAPI_PLUGIN_PRIVATE_FILE_SYSTEM_BACKEND_H_
      7 
      8 #include <set>
      9 #include <string>
     10 
     11 #include "base/memory/ref_counted.h"
     12 #include "base/memory/weak_ptr.h"
     13 #include "storage/browser/fileapi/file_system_backend.h"
     14 #include "storage/browser/fileapi/file_system_options.h"
     15 #include "storage/browser/fileapi/file_system_quota_util.h"
     16 #include "storage/browser/fileapi/task_runner_bound_observer_list.h"
     17 
     18 namespace base {
     19 class SequencedTaskRunner;
     20 }
     21 
     22 namespace content {
     23 class PluginPrivateFileSystemBackendTest;
     24 }
     25 
     26 namespace storage {
     27 class SpecialStoragePolicy;
     28 }
     29 
     30 namespace storage {
     31 
     32 class ObfuscatedFileUtil;
     33 class WatcherManager;
     34 
     35 class STORAGE_EXPORT PluginPrivateFileSystemBackend
     36     : public FileSystemBackend,
     37       public FileSystemQuotaUtil {
     38  public:
     39   class FileSystemIDToPluginMap;
     40   typedef base::Callback<void(base::File::Error result)> StatusCallback;
     41 
     42   PluginPrivateFileSystemBackend(
     43       base::SequencedTaskRunner* file_task_runner,
     44       const base::FilePath& profile_path,
     45       storage::SpecialStoragePolicy* special_storage_policy,
     46       const FileSystemOptions& file_system_options);
     47   virtual ~PluginPrivateFileSystemBackend();
     48 
     49   // This must be used to open 'private' filesystem instead of regular
     50   // OpenFileSystem.
     51   // |plugin_id| must be an identifier string for per-plugin
     52   // isolation, e.g. name, MIME type etc.
     53   // NOTE: |plugin_id| must be sanitized ASCII string that doesn't
     54   // include *any* dangerous character like '/'.
     55   void OpenPrivateFileSystem(
     56       const GURL& origin_url,
     57       FileSystemType type,
     58       const std::string& filesystem_id,
     59       const std::string& plugin_id,
     60       OpenFileSystemMode mode,
     61       const StatusCallback& callback);
     62 
     63   // FileSystemBackend overrides.
     64   virtual bool CanHandleType(FileSystemType type) const OVERRIDE;
     65   virtual void Initialize(FileSystemContext* context) OVERRIDE;
     66   virtual void ResolveURL(const FileSystemURL& url,
     67                           OpenFileSystemMode mode,
     68                           const OpenFileSystemCallback& callback) OVERRIDE;
     69   virtual AsyncFileUtil* GetAsyncFileUtil(FileSystemType type) OVERRIDE;
     70   virtual WatcherManager* GetWatcherManager(FileSystemType type) OVERRIDE;
     71   virtual CopyOrMoveFileValidatorFactory* GetCopyOrMoveFileValidatorFactory(
     72       FileSystemType type,
     73       base::File::Error* error_code) OVERRIDE;
     74   virtual FileSystemOperation* CreateFileSystemOperation(
     75       const FileSystemURL& url,
     76       FileSystemContext* context,
     77       base::File::Error* error_code) const OVERRIDE;
     78   virtual bool SupportsStreaming(const FileSystemURL& url) const OVERRIDE;
     79   virtual bool HasInplaceCopyImplementation(
     80       storage::FileSystemType type) const OVERRIDE;
     81   virtual scoped_ptr<storage::FileStreamReader> CreateFileStreamReader(
     82       const FileSystemURL& url,
     83       int64 offset,
     84       int64 max_bytes_to_read,
     85       const base::Time& expected_modification_time,
     86       FileSystemContext* context) const OVERRIDE;
     87   virtual scoped_ptr<FileStreamWriter> CreateFileStreamWriter(
     88       const FileSystemURL& url,
     89       int64 offset,
     90       FileSystemContext* context) const OVERRIDE;
     91   virtual FileSystemQuotaUtil* GetQuotaUtil() OVERRIDE;
     92   virtual const UpdateObserverList* GetUpdateObservers(
     93       FileSystemType type) const OVERRIDE;
     94   virtual const ChangeObserverList* GetChangeObservers(
     95       FileSystemType type) const OVERRIDE;
     96   virtual const AccessObserverList* GetAccessObservers(
     97       FileSystemType type) const OVERRIDE;
     98 
     99   // FileSystemQuotaUtil overrides.
    100   virtual base::File::Error DeleteOriginDataOnFileTaskRunner(
    101       FileSystemContext* context,
    102       storage::QuotaManagerProxy* proxy,
    103       const GURL& origin_url,
    104       FileSystemType type) OVERRIDE;
    105   virtual void GetOriginsForTypeOnFileTaskRunner(
    106       FileSystemType type,
    107       std::set<GURL>* origins) OVERRIDE;
    108   virtual void GetOriginsForHostOnFileTaskRunner(
    109       FileSystemType type,
    110       const std::string& host,
    111       std::set<GURL>* origins) OVERRIDE;
    112   virtual int64 GetOriginUsageOnFileTaskRunner(
    113       FileSystemContext* context,
    114       const GURL& origin_url,
    115       FileSystemType type) OVERRIDE;
    116   virtual scoped_refptr<QuotaReservation>
    117       CreateQuotaReservationOnFileTaskRunner(
    118           const GURL& origin_url,
    119           FileSystemType type) OVERRIDE;
    120 
    121  private:
    122   friend class content::PluginPrivateFileSystemBackendTest;
    123 
    124   ObfuscatedFileUtil* obfuscated_file_util();
    125   const base::FilePath& base_path() const { return base_path_; }
    126 
    127   scoped_refptr<base::SequencedTaskRunner> file_task_runner_;
    128   const FileSystemOptions file_system_options_;
    129   const base::FilePath base_path_;
    130   scoped_ptr<AsyncFileUtil> file_util_;
    131   FileSystemIDToPluginMap* plugin_map_;  // Owned by file_util_.
    132   base::WeakPtrFactory<PluginPrivateFileSystemBackend> weak_factory_;
    133 
    134   DISALLOW_COPY_AND_ASSIGN(PluginPrivateFileSystemBackend);
    135 };
    136 
    137 }  // namespace storage
    138 
    139 #endif  // STORAGE_BROWSER_FILEAPI_PLUGIN_PRIVATE_FILE_SYSTEM_BACKEND_H_
    140