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