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