Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(236)

Side by Side Diff: webkit/browser/fileapi/file_system_context.h

Issue 18344013: fileapi: Rename FileSystemMountProvider to FileSystemBackend (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address comments Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef WEBKIT_BROWSER_FILEAPI_FILE_SYSTEM_CONTEXT_H_ 5 #ifndef WEBKIT_BROWSER_FILEAPI_FILE_SYSTEM_CONTEXT_H_
6 #define WEBKIT_BROWSER_FILEAPI_FILE_SYSTEM_CONTEXT_H_ 6 #define WEBKIT_BROWSER_FILEAPI_FILE_SYSTEM_CONTEXT_H_
7 7
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 30 matching lines...) Expand all
41 41
42 namespace webkit_blob { 42 namespace webkit_blob {
43 class BlobURLRequestJobTest; 43 class BlobURLRequestJobTest;
44 class FileStreamReader; 44 class FileStreamReader;
45 } 45 }
46 46
47 namespace fileapi { 47 namespace fileapi {
48 48
49 class AsyncFileUtil; 49 class AsyncFileUtil;
50 class CopyOrMoveFileValidatorFactory; 50 class CopyOrMoveFileValidatorFactory;
51 class ExternalFileSystemMountPointProvider; 51 class ExternalFileSystemBackend;
52 class ExternalMountPoints; 52 class ExternalMountPoints;
53 class FileStreamWriter; 53 class FileStreamWriter;
54 class FileSystemFileUtil; 54 class FileSystemFileUtil;
55 class FileSystemMountPointProvider; 55 class FileSystemBackend;
56 class FileSystemOperation; 56 class FileSystemOperation;
57 class FileSystemOperationRunner; 57 class FileSystemOperationRunner;
58 class FileSystemOptions; 58 class FileSystemOptions;
59 class FileSystemQuotaUtil; 59 class FileSystemQuotaUtil;
60 class FileSystemTaskRunners; 60 class FileSystemTaskRunners;
61 class FileSystemURL; 61 class FileSystemURL;
62 class IsolatedMountPointProvider; 62 class IsolatedFileSystemBackend;
63 class MountPoints; 63 class MountPoints;
64 class SandboxMountPointProvider; 64 class SandboxFileSystemBackend;
65 65
66 struct DefaultContextDeleter; 66 struct DefaultContextDeleter;
67 67
68 // This class keeps and provides a file system context for FileSystem API. 68 // This class keeps and provides a file system context for FileSystem API.
69 // An instance of this class is created and owned by profile. 69 // An instance of this class is created and owned by profile.
70 class WEBKIT_STORAGE_BROWSER_EXPORT FileSystemContext 70 class WEBKIT_STORAGE_BROWSER_EXPORT FileSystemContext
71 : public base::RefCountedThreadSafe<FileSystemContext, 71 : public base::RefCountedThreadSafe<FileSystemContext,
72 DefaultContextDeleter> { 72 DefaultContextDeleter> {
73 public: 73 public:
74 // Returns file permission policy we should apply for the given |type|. 74 // Returns file permission policy we should apply for the given |type|.
75 // The return value must be bitwise-or'd of FilePermissionPolicy. 75 // The return value must be bitwise-or'd of FilePermissionPolicy.
76 // 76 //
77 // Note: if a part of a filesystem is returned via 'Isolated' mount point, 77 // Note: if a part of a filesystem is returned via 'Isolated' mount point,
78 // its per-filesystem permission overrides the underlying filesystem's 78 // its per-filesystem permission overrides the underlying filesystem's
79 // permission policy. 79 // permission policy.
80 static int GetPermissionPolicy(FileSystemType type); 80 static int GetPermissionPolicy(FileSystemType type);
81 81
82 // task_runners->file_task_runner() is used as default TaskRunner. 82 // task_runners->file_task_runner() is used as default TaskRunner.
83 // Unless a MountPointProvider is overridden in CreateFileSystemOperation, 83 // Unless a FileSystemBackend is overridden in CreateFileSystemOperation,
84 // it is used for all file operations and file related meta operations. 84 // it is used for all file operations and file related meta operations.
85 // The code assumes that 85 // The code assumes that
86 // task_runners->file_task_runner()->RunsTasksOnCurrentThread() 86 // task_runners->file_task_runner()->RunsTasksOnCurrentThread()
87 // returns false if the current task is not running on the thread that allows 87 // returns false if the current task is not running on the thread that allows
88 // blocking file operations (like SequencedWorkerPool implementation does). 88 // blocking file operations (like SequencedWorkerPool implementation does).
89 // 89 //
90 // |external_mount_points| contains non-system external mount points available 90 // |external_mount_points| contains non-system external mount points available
91 // in the context. If not NULL, it will be used during URL cracking. On 91 // in the context. If not NULL, it will be used during URL cracking.
92 // ChromeOS, it will be passed to external_mount_point_provider.
93 // |external_mount_points| may be NULL only on platforms different from 92 // |external_mount_points| may be NULL only on platforms different from
94 // ChromeOS (i.e. platforms that don't use external_mount_point_provider). 93 // ChromeOS (i.e. platforms that don't use external_mount_point_provider).
95 // 94 //
96 // |additional_providers| are added to the internal provider map 95 // |additional_backends| are added to the internal backend map
97 // to serve filesystem requests for non-regular types. 96 // to serve filesystem requests for non-regular types.
98 // If none is given, this context only handles HTML5 Sandbox FileSystem 97 // If none is given, this context only handles HTML5 Sandbox FileSystem
99 // and Drag-and-drop Isolated FileSystem requests. 98 // and Drag-and-drop Isolated FileSystem requests.
100 FileSystemContext( 99 FileSystemContext(
101 scoped_ptr<FileSystemTaskRunners> task_runners, 100 scoped_ptr<FileSystemTaskRunners> task_runners,
102 ExternalMountPoints* external_mount_points, 101 ExternalMountPoints* external_mount_points,
103 quota::SpecialStoragePolicy* special_storage_policy, 102 quota::SpecialStoragePolicy* special_storage_policy,
104 quota::QuotaManagerProxy* quota_manager_proxy, 103 quota::QuotaManagerProxy* quota_manager_proxy,
105 ScopedVector<FileSystemMountPointProvider> additional_providers, 104 ScopedVector<FileSystemBackend> additional_backends,
106 const base::FilePath& partition_path, 105 const base::FilePath& partition_path,
107 const FileSystemOptions& options); 106 const FileSystemOptions& options);
108 107
109 bool DeleteDataForOriginOnFileThread(const GURL& origin_url); 108 bool DeleteDataForOriginOnFileThread(const GURL& origin_url);
110 109
111 quota::QuotaManagerProxy* quota_manager_proxy() const { 110 quota::QuotaManagerProxy* quota_manager_proxy() const {
112 return quota_manager_proxy_.get(); 111 return quota_manager_proxy_.get();
113 } 112 }
114 113
115 // Returns a quota util for a given filesystem type. This may 114 // Returns a quota util for a given filesystem type. This may
116 // return NULL if the type does not support the usage tracking or 115 // return NULL if the type does not support the usage tracking or
117 // it is not a quota-managed storage. 116 // it is not a quota-managed storage.
118 FileSystemQuotaUtil* GetQuotaUtil(FileSystemType type) const; 117 FileSystemQuotaUtil* GetQuotaUtil(FileSystemType type) const;
119 118
120 // Returns the appropriate AsyncFileUtil instance for the given |type|. 119 // Returns the appropriate AsyncFileUtil instance for the given |type|.
121 AsyncFileUtil* GetAsyncFileUtil(FileSystemType type) const; 120 AsyncFileUtil* GetAsyncFileUtil(FileSystemType type) const;
122 121
123 // Returns the appropriate FileUtil instance for the given |type|. 122 // Returns the appropriate FileUtil instance for the given |type|.
124 // This may return NULL if it is given an invalid type or the filesystem 123 // This may return NULL if it is given an invalid type or the filesystem
125 // does not support synchronous file operations. 124 // does not support synchronous file operations.
126 FileSystemFileUtil* GetFileUtil(FileSystemType type) const; 125 FileSystemFileUtil* GetFileUtil(FileSystemType type) const;
127 126
128 // Returns the appropriate CopyOrMoveFileValidatorFactory for the given 127 // Returns the appropriate CopyOrMoveFileValidatorFactory for the given
129 // |type|. If |error_code| is PLATFORM_FILE_OK and the result is NULL, 128 // |type|. If |error_code| is PLATFORM_FILE_OK and the result is NULL,
130 // then no validator is required. 129 // then no validator is required.
131 CopyOrMoveFileValidatorFactory* GetCopyOrMoveFileValidatorFactory( 130 CopyOrMoveFileValidatorFactory* GetCopyOrMoveFileValidatorFactory(
132 FileSystemType type, base::PlatformFileError* error_code) const; 131 FileSystemType type, base::PlatformFileError* error_code) const;
133 132
134 // Returns the mount point provider instance for the given |type|. 133 // Returns the file system backend instance for the given |type|.
135 // This may return NULL if it is given an invalid or unsupported filesystem 134 // This may return NULL if it is given an invalid or unsupported filesystem
136 // type. 135 // type.
137 FileSystemMountPointProvider* GetMountPointProvider( 136 FileSystemBackend* GetFileSystemBackend(
138 FileSystemType type) const; 137 FileSystemType type) const;
139 138
140 // Returns true for sandboxed filesystems. Currently this does 139 // Returns true for sandboxed filesystems. Currently this does
141 // the same as GetQuotaUtil(type) != NULL. (In an assumption that 140 // the same as GetQuotaUtil(type) != NULL. (In an assumption that
142 // all sandboxed filesystems must cooperate with QuotaManager so that 141 // all sandboxed filesystems must cooperate with QuotaManager so that
143 // they can get deleted) 142 // they can get deleted)
144 bool IsSandboxFileSystem(FileSystemType type) const; 143 bool IsSandboxFileSystem(FileSystemType type) const;
145 144
146 // Returns observers for the given filesystem type. 145 // Returns observers for the given filesystem type.
147 const UpdateObserverList* GetUpdateObservers(FileSystemType type) const; 146 const UpdateObserverList* GetUpdateObservers(FileSystemType type) const;
148 const AccessObserverList* GetAccessObservers(FileSystemType type) const; 147 const AccessObserverList* GetAccessObservers(FileSystemType type) const;
149 148
150 // Returns all registered filesystem types. 149 // Returns all registered filesystem types.
151 void GetFileSystemTypes(std::vector<FileSystemType>* types) const; 150 void GetFileSystemTypes(std::vector<FileSystemType>* types) const;
152 151
153 // Returns a FileSystemMountPointProvider instance for external filesystem 152 // Returns a FileSystemBackend instance for external filesystem
154 // type, which is used only by chromeos for now. This is equivalent to 153 // type, which is used only by chromeos for now. This is equivalent to
155 // calling GetMountPointProvider(kFileSystemTypeExternal). 154 // calling GetFileSystemBackend(kFileSystemTypeExternal).
156 ExternalFileSystemMountPointProvider* external_provider() const; 155 ExternalFileSystemBackend* external_backend() const;
157 156
158 // Used for OpenFileSystem. 157 // Used for OpenFileSystem.
159 typedef base::Callback<void(base::PlatformFileError result, 158 typedef base::Callback<void(base::PlatformFileError result,
160 const std::string& name, 159 const std::string& name,
161 const GURL& root)> OpenFileSystemCallback; 160 const GURL& root)> OpenFileSystemCallback;
162 161
163 // Used for DeleteFileSystem. 162 // Used for DeleteFileSystem.
164 typedef base::Callback<void(base::PlatformFileError result)> 163 typedef base::Callback<void(base::PlatformFileError result)>
165 DeleteFileSystemCallback; 164 DeleteFileSystemCallback;
166 165
(...skipping 15 matching lines...) Expand all
182 FileSystemType type, 181 FileSystemType type,
183 const DeleteFileSystemCallback& callback); 182 const DeleteFileSystemCallback& callback);
184 183
185 // Creates new FileStreamReader instance to read a file pointed by the given 184 // Creates new FileStreamReader instance to read a file pointed by the given
186 // filesystem URL |url| starting from |offset|. |expected_modification_time| 185 // filesystem URL |url| starting from |offset|. |expected_modification_time|
187 // specifies the expected last modification if the value is non-null, the 186 // specifies the expected last modification if the value is non-null, the
188 // reader will check the underlying file's actual modification time to see if 187 // reader will check the underlying file's actual modification time to see if
189 // the file has been modified, and if it does any succeeding read operations 188 // the file has been modified, and if it does any succeeding read operations
190 // should fail with ERR_UPLOAD_FILE_CHANGED error. 189 // should fail with ERR_UPLOAD_FILE_CHANGED error.
191 // This method internally cracks the |url|, get an appropriate 190 // This method internally cracks the |url|, get an appropriate
192 // MountPointProvider for the URL and call the provider's CreateFileReader. 191 // FileSystemBackend for the URL and call the backend's CreateFileReader.
193 // The resolved MountPointProvider could perform further specialization 192 // The resolved FileSystemBackend could perform further specialization
194 // depending on the filesystem type pointed by the |url|. 193 // depending on the filesystem type pointed by the |url|.
195 scoped_ptr<webkit_blob::FileStreamReader> CreateFileStreamReader( 194 scoped_ptr<webkit_blob::FileStreamReader> CreateFileStreamReader(
196 const FileSystemURL& url, 195 const FileSystemURL& url,
197 int64 offset, 196 int64 offset,
198 const base::Time& expected_modification_time); 197 const base::Time& expected_modification_time);
199 198
200 // Creates new FileStreamWriter instance to write into a file pointed by 199 // Creates new FileStreamWriter instance to write into a file pointed by
201 // |url| from |offset|. 200 // |url| from |offset|.
202 scoped_ptr<FileStreamWriter> CreateFileStreamWriter( 201 scoped_ptr<FileStreamWriter> CreateFileStreamWriter(
203 const FileSystemURL& url, 202 const FileSystemURL& url,
(...skipping 25 matching lines...) Expand all
229 FileSystemURL CreateCrackedFileSystemURL(const GURL& origin, 228 FileSystemURL CreateCrackedFileSystemURL(const GURL& origin,
230 FileSystemType type, 229 FileSystemType type,
231 const base::FilePath& path) const; 230 const base::FilePath& path) const;
232 231
233 #if defined(OS_CHROMEOS) && defined(GOOGLE_CHROME_BUILD) 232 #if defined(OS_CHROMEOS) && defined(GOOGLE_CHROME_BUILD)
234 // Used only on ChromeOS for now. 233 // Used only on ChromeOS for now.
235 void EnableTemporaryFileSystemInIncognito(); 234 void EnableTemporaryFileSystemInIncognito();
236 #endif 235 #endif
237 236
238 private: 237 private:
239 typedef std::map<FileSystemType, FileSystemMountPointProvider*> 238 typedef std::map<FileSystemType, FileSystemBackend*>
240 MountPointProviderMap; 239 FileSystemBackendMap;
241 240
242 // For CreateFileSystemOperation. 241 // For CreateFileSystemOperation.
243 friend class FileSystemOperationRunner; 242 friend class FileSystemOperationRunner;
244 243
245 // For sandbox_provider(). 244 // For sandbox_backend().
246 friend class SandboxFileSystemTestHelper; 245 friend class SandboxFileSystemTestHelper;
247 246
248 // Deleters. 247 // Deleters.
249 friend struct DefaultContextDeleter; 248 friend struct DefaultContextDeleter;
250 friend class base::DeleteHelper<FileSystemContext>; 249 friend class base::DeleteHelper<FileSystemContext>;
251 friend class base::RefCountedThreadSafe<FileSystemContext, 250 friend class base::RefCountedThreadSafe<FileSystemContext,
252 DefaultContextDeleter>; 251 DefaultContextDeleter>;
253 ~FileSystemContext(); 252 ~FileSystemContext();
254 253
255 void DeleteOnCorrectThread() const; 254 void DeleteOnCorrectThread() const;
256 255
257 // Creates a new FileSystemOperation instance by getting an appropriate 256 // Creates a new FileSystemOperation instance by getting an appropriate
258 // MountPointProvider for |url| and calling the provider's corresponding 257 // FileSystemBackend for |url| and calling the backend's corresponding
259 // CreateFileSystemOperation method. 258 // CreateFileSystemOperation method.
260 // The resolved MountPointProvider could perform further specialization 259 // The resolved FileSystemBackend could perform further specialization
261 // depending on the filesystem type pointed by the |url|. 260 // depending on the filesystem type pointed by the |url|.
262 // 261 //
263 // Called by FileSystemOperationRunner. 262 // Called by FileSystemOperationRunner.
264 FileSystemOperation* CreateFileSystemOperation( 263 FileSystemOperation* CreateFileSystemOperation(
265 const FileSystemURL& url, 264 const FileSystemURL& url,
266 base::PlatformFileError* error_code); 265 base::PlatformFileError* error_code);
267 266
268 // For non-cracked isolated and external mount points, returns a FileSystemURL 267 // For non-cracked isolated and external mount points, returns a FileSystemURL
269 // created by cracking |url|. The url is cracked using MountPoints registered 268 // created by cracking |url|. The url is cracked using MountPoints registered
270 // as |url_crackers_|. If the url cannot be cracked, returns invalid 269 // as |url_crackers_|. If the url cannot be cracked, returns invalid
271 // FileSystemURL. 270 // FileSystemURL.
272 // 271 //
273 // If the original url does not point to an isolated or external filesystem, 272 // If the original url does not point to an isolated or external filesystem,
274 // returns the original url, without attempting to crack it. 273 // returns the original url, without attempting to crack it.
275 FileSystemURL CrackFileSystemURL(const FileSystemURL& url) const; 274 FileSystemURL CrackFileSystemURL(const FileSystemURL& url) const;
276 275
277 // For initial provider_map construction. This must be called only from 276 // For initial backend_map construction. This must be called only from
278 // the constructor. 277 // the constructor.
279 void RegisterMountPointProvider(FileSystemMountPointProvider* provider); 278 void RegisterBackend(FileSystemBackend* backend);
280 279
281 // Returns a FileSystemMountPointProvider, used only by test code. 280 // Returns a FileSystemBackend, used only by test code.
282 SandboxMountPointProvider* sandbox_provider() const { 281 SandboxFileSystemBackend* sandbox_backend() const {
283 return sandbox_provider_.get(); 282 return sandbox_backend_.get();
284 } 283 }
285 284
286 scoped_ptr<FileSystemTaskRunners> task_runners_; 285 scoped_ptr<FileSystemTaskRunners> task_runners_;
287 286
288 scoped_refptr<quota::QuotaManagerProxy> quota_manager_proxy_; 287 scoped_refptr<quota::QuotaManagerProxy> quota_manager_proxy_;
289 288
290 // Regular mount point providers. 289 // Regular file system backends.
291 scoped_ptr<SandboxMountPointProvider> sandbox_provider_; 290 scoped_ptr<SandboxFileSystemBackend> sandbox_backend_;
292 scoped_ptr<IsolatedMountPointProvider> isolated_provider_; 291 scoped_ptr<IsolatedFileSystemBackend> isolated_backend_;
293 292
294 // Additional mount point providers. 293 // Additional file system backends.
295 ScopedVector<FileSystemMountPointProvider> additional_providers_; 294 ScopedVector<FileSystemBackend> additional_backends_;
296 295
297 // Registered mount point providers. 296 // Registered file system backends.
298 // The map must be constructed in the constructor since it can be accessed 297 // The map must be constructed in the constructor since it can be accessed
299 // on multiple threads. 298 // on multiple threads.
300 // This map itself doesn't retain each provider's ownership; ownerships 299 // This map itself doesn't retain each backend's ownership; ownerships
301 // of the providers are held by additional_providers_ or other scoped_ptr 300 // of the backends are held by additional_backends_ or other scoped_ptr
302 // provider fields. 301 // backend fields.
303 MountPointProviderMap provider_map_; 302 FileSystemBackendMap backend_map_;
304 303
305 // External mount points visible in the file system context (excluding system 304 // External mount points visible in the file system context (excluding system
306 // external mount points). 305 // external mount points).
307 scoped_refptr<ExternalMountPoints> external_mount_points_; 306 scoped_refptr<ExternalMountPoints> external_mount_points_;
308 307
309 // MountPoints used to crack FileSystemURLs. The MountPoints are ordered 308 // MountPoints used to crack FileSystemURLs. The MountPoints are ordered
310 // in order they should try to crack a FileSystemURL. 309 // in order they should try to crack a FileSystemURL.
311 std::vector<MountPoints*> url_crackers_; 310 std::vector<MountPoints*> url_crackers_;
312 311
313 // The base path of the storage partition for this context. 312 // The base path of the storage partition for this context.
(...skipping 10 matching lines...) Expand all
324 323
325 struct DefaultContextDeleter { 324 struct DefaultContextDeleter {
326 static void Destruct(const FileSystemContext* context) { 325 static void Destruct(const FileSystemContext* context) {
327 context->DeleteOnCorrectThread(); 326 context->DeleteOnCorrectThread();
328 } 327 }
329 }; 328 };
330 329
331 } // namespace fileapi 330 } // namespace fileapi
332 331
333 #endif // WEBKIT_BROWSER_FILEAPI_FILE_SYSTEM_CONTEXT_H_ 332 #endif // WEBKIT_BROWSER_FILEAPI_FILE_SYSTEM_CONTEXT_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698