Chromium Code Reviews| OLD | NEW |
|---|---|
| 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_FILEAPI_FILE_SYSTEM_CONTEXT_H_ | 5 #ifndef WEBKIT_FILEAPI_FILE_SYSTEM_CONTEXT_H_ |
| 6 #define WEBKIT_FILEAPI_FILE_SYSTEM_CONTEXT_H_ | 6 #define WEBKIT_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> |
| 11 | 11 |
| 12 #include "base/callback.h" | 12 #include "base/callback.h" |
| 13 #include "base/memory/ref_counted.h" | 13 #include "base/memory/ref_counted.h" |
| 14 #include "base/memory/scoped_ptr.h" | 14 #include "base/memory/scoped_ptr.h" |
| 15 #include "base/memory/scoped_vector.h" | |
| 15 #include "base/platform_file.h" | 16 #include "base/platform_file.h" |
| 16 #include "base/sequenced_task_runner_helpers.h" | 17 #include "base/sequenced_task_runner_helpers.h" |
| 17 #include "webkit/fileapi/file_system_types.h" | 18 #include "webkit/fileapi/file_system_types.h" |
| 18 #include "webkit/fileapi/file_system_url.h" | 19 #include "webkit/fileapi/file_system_url.h" |
| 19 #include "webkit/fileapi/task_runner_bound_observer_list.h" | 20 #include "webkit/fileapi/task_runner_bound_observer_list.h" |
| 20 #include "webkit/storage/webkit_storage_export.h" | 21 #include "webkit/storage/webkit_storage_export.h" |
| 21 | 22 |
| 22 namespace base { | 23 namespace base { |
| 23 class FilePath; | 24 class FilePath; |
| 24 } | 25 } |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 70 // The code assumes that | 71 // The code assumes that |
| 71 // task_runners->file_task_runner()->RunsTasksOnCurrentThread() | 72 // task_runners->file_task_runner()->RunsTasksOnCurrentThread() |
| 72 // returns false if the current task is not running on the thread that allows | 73 // returns false if the current task is not running on the thread that allows |
| 73 // blocking file operations (like SequencedWorkerPool implementation does). | 74 // blocking file operations (like SequencedWorkerPool implementation does). |
| 74 // | 75 // |
| 75 // |external_mount_points| contains non-system external mount points available | 76 // |external_mount_points| contains non-system external mount points available |
| 76 // in the context. If not NULL, it will be used during URL cracking. On | 77 // in the context. If not NULL, it will be used during URL cracking. On |
| 77 // ChromeOS, it will be passed to external_mount_point_provider. | 78 // ChromeOS, it will be passed to external_mount_point_provider. |
| 78 // |external_mount_points| may be NULL only on platforms different from | 79 // |external_mount_points| may be NULL only on platforms different from |
| 79 // ChromeOS (i.e. platforms that don't use external_mount_point_provider). | 80 // ChromeOS (i.e. platforms that don't use external_mount_point_provider). |
| 81 // | |
| 82 // |additional_providers| are added to the internal provider map | |
| 83 // to serve filesystem requests for non-regular types. | |
| 84 // If none is given, this context only handles HTML5 Sandbox FileSystem | |
| 85 // and Drag-and-drop Isolated FileSystem requests. | |
| 80 FileSystemContext( | 86 FileSystemContext( |
| 81 scoped_ptr<FileSystemTaskRunners> task_runners, | 87 scoped_ptr<FileSystemTaskRunners> task_runners, |
| 82 ExternalMountPoints* external_mount_points, | 88 ExternalMountPoints* external_mount_points, |
| 83 quota::SpecialStoragePolicy* special_storage_policy, | 89 quota::SpecialStoragePolicy* special_storage_policy, |
| 84 quota::QuotaManagerProxy* quota_manager_proxy, | 90 quota::QuotaManagerProxy* quota_manager_proxy, |
| 91 ScopedVector<FileSystemMountPointProvider> additional_providers, | |
| 85 const base::FilePath& partition_path, | 92 const base::FilePath& partition_path, |
| 86 const FileSystemOptions& options); | 93 const FileSystemOptions& options); |
| 87 | 94 |
| 88 bool DeleteDataForOriginOnFileThread(const GURL& origin_url); | 95 bool DeleteDataForOriginOnFileThread(const GURL& origin_url); |
| 89 | 96 |
| 90 quota::QuotaManagerProxy* quota_manager_proxy() const { | 97 quota::QuotaManagerProxy* quota_manager_proxy() const { |
| 91 return quota_manager_proxy_.get(); | 98 return quota_manager_proxy_.get(); |
| 92 } | 99 } |
| 93 | 100 |
| 94 // Returns a quota util for a given filesystem type. This may | 101 // Returns a quota util for a given filesystem type. This may |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 185 const FileSystemURL& url, | 192 const FileSystemURL& url, |
| 186 int64 offset, | 193 int64 offset, |
| 187 const base::Time& expected_modification_time); | 194 const base::Time& expected_modification_time); |
| 188 | 195 |
| 189 // Creates new FileStreamWriter instance to write into a file pointed by | 196 // Creates new FileStreamWriter instance to write into a file pointed by |
| 190 // |url| from |offset|. | 197 // |url| from |offset|. |
| 191 scoped_ptr<FileStreamWriter> CreateFileStreamWriter( | 198 scoped_ptr<FileStreamWriter> CreateFileStreamWriter( |
| 192 const FileSystemURL& url, | 199 const FileSystemURL& url, |
| 193 int64 offset); | 200 int64 offset); |
| 194 | 201 |
| 195 // Register a filesystem provider. The ownership of |provider| is | |
| 196 // transferred to this instance. | |
| 197 void RegisterMountPointProvider(FileSystemType type, | |
| 198 FileSystemMountPointProvider* provider); | |
| 199 | |
| 200 FileSystemTaskRunners* task_runners() { return task_runners_.get(); } | 202 FileSystemTaskRunners* task_runners() { return task_runners_.get(); } |
| 201 | 203 |
| 202 sync_file_system::LocalFileChangeTracker* change_tracker() { | 204 sync_file_system::LocalFileChangeTracker* change_tracker() { |
| 203 return change_tracker_.get(); | 205 return change_tracker_.get(); |
| 204 } | 206 } |
| 205 void SetLocalFileChangeTracker( | 207 void SetLocalFileChangeTracker( |
| 206 scoped_ptr<sync_file_system::LocalFileChangeTracker> tracker); | 208 scoped_ptr<sync_file_system::LocalFileChangeTracker> tracker); |
| 207 | 209 |
| 208 sync_file_system::LocalFileSyncContext* sync_context() { | 210 sync_file_system::LocalFileSyncContext* sync_context() { |
| 209 return sync_context_.get(); | 211 return sync_context_.get(); |
| 210 } | 212 } |
| 211 void set_sync_context(sync_file_system::LocalFileSyncContext* sync_context); | 213 void set_sync_context(sync_file_system::LocalFileSyncContext* sync_context); |
| 212 | 214 |
| 213 const base::FilePath& partition_path() const { return partition_path_; } | 215 const base::FilePath& partition_path() const { return partition_path_; } |
| 214 | 216 |
| 215 // Same as |CrackFileSystemURL|, but cracks FileSystemURL created from |url|. | 217 // Same as |CrackFileSystemURL|, but cracks FileSystemURL created from |url|. |
| 216 FileSystemURL CrackURL(const GURL& url) const; | 218 FileSystemURL CrackURL(const GURL& url) const; |
| 217 // Same as |CrackFileSystemURL|, but cracks FileSystemURL created from method | 219 // Same as |CrackFileSystemURL|, but cracks FileSystemURL created from method |
| 218 // arguments. | 220 // arguments. |
| 219 FileSystemURL CreateCrackedFileSystemURL(const GURL& origin, | 221 FileSystemURL CreateCrackedFileSystemURL(const GURL& origin, |
| 220 FileSystemType type, | 222 FileSystemType type, |
| 221 const base::FilePath& path) const; | 223 const base::FilePath& path) const; |
| 222 | 224 |
| 223 private: | 225 private: |
| 226 typedef std::map<FileSystemType, FileSystemMountPointProvider*> | |
| 227 MountPointProviderMap; | |
| 228 | |
| 224 // Friended for GetFileUtil. | 229 // Friended for GetFileUtil. |
| 225 // These classes know the target filesystem (i.e. sandbox filesystem) | 230 // These classes know the target filesystem (i.e. sandbox filesystem) |
| 226 // supports synchronous FileUtil. | 231 // supports synchronous FileUtil. |
| 227 friend class LocalFileSystemOperation; | 232 friend class LocalFileSystemOperation; |
| 228 friend class sync_file_system::LocalFileChangeTracker; | 233 friend class sync_file_system::LocalFileChangeTracker; |
| 229 friend class sync_file_system::LocalFileSyncContext; | 234 friend class sync_file_system::LocalFileSyncContext; |
| 230 | 235 |
| 231 // Friended for GetFileUtil. | 236 // Friended for GetFileUtil. |
| 232 // Test classes that rely on synchronous FileUtils. | 237 // Test classes that rely on synchronous FileUtils. |
| 233 friend class webkit_blob::BlobURLRequestJobTest; | 238 friend class webkit_blob::BlobURLRequestJobTest; |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 253 // | 258 // |
| 254 // If the original url does not point to an isolated or external filesystem, | 259 // If the original url does not point to an isolated or external filesystem, |
| 255 // returns the original url, without attempting to crack it. | 260 // returns the original url, without attempting to crack it. |
| 256 FileSystemURL CrackFileSystemURL(const FileSystemURL& url) const; | 261 FileSystemURL CrackFileSystemURL(const FileSystemURL& url) const; |
| 257 | 262 |
| 258 // Returns the appropriate FileUtil instance for the given |type|. | 263 // Returns the appropriate FileUtil instance for the given |type|. |
| 259 // This may return NULL if it is given an invalid type or the filesystem | 264 // This may return NULL if it is given an invalid type or the filesystem |
| 260 // does not support synchronous file operations. | 265 // does not support synchronous file operations. |
| 261 FileSystemFileUtil* GetFileUtil(FileSystemType type) const; | 266 FileSystemFileUtil* GetFileUtil(FileSystemType type) const; |
| 262 | 267 |
| 268 // For initial provider_map construction. This must be called only from | |
| 269 // the constructor. | |
| 270 void RegisterMountPointProvider(FileSystemMountPointProvider* provider); | |
| 271 | |
| 263 scoped_ptr<FileSystemTaskRunners> task_runners_; | 272 scoped_ptr<FileSystemTaskRunners> task_runners_; |
| 264 | 273 |
| 265 scoped_refptr<quota::QuotaManagerProxy> quota_manager_proxy_; | 274 scoped_refptr<quota::QuotaManagerProxy> quota_manager_proxy_; |
| 266 | 275 |
| 267 // Regular mount point providers. | 276 // Regular mount point providers. |
| 268 scoped_ptr<SandboxMountPointProvider> sandbox_provider_; | 277 scoped_ptr<SandboxMountPointProvider> sandbox_provider_; |
| 269 scoped_ptr<IsolatedMountPointProvider> isolated_provider_; | 278 scoped_ptr<IsolatedMountPointProvider> isolated_provider_; |
| 270 scoped_ptr<ExternalFileSystemMountPointProvider> external_provider_; | 279 scoped_ptr<ExternalFileSystemMountPointProvider> external_provider_; |
| 271 | 280 |
| 281 // Additional mount point providers. | |
| 282 ScopedVector<FileSystemMountPointProvider> additional_providers_; | |
| 283 | |
| 272 // Registered mount point providers. | 284 // Registered mount point providers. |
| 273 std::map<FileSystemType, FileSystemMountPointProvider*> provider_map_; | 285 // The map must be constructed in the constructor since it can be accessed |
| 274 | 286 // on multiple threads. |
| 287 // The ownership of each provider is held by mount_point_providers_. | |
| 288 MountPointProviderMap provider_map_; | |
| 275 // External mount points visible in the file system context (excluding system | 289 // External mount points visible in the file system context (excluding system |
| 276 // external mount points). | 290 // external mount points). |
| 277 scoped_refptr<ExternalMountPoints> external_mount_points_; | 291 scoped_refptr<ExternalMountPoints> external_mount_points_; |
| 278 | 292 |
| 279 // MountPoints used to crack FileSystemURLs. The MountPoints are ordered | 293 // MountPoints used to crack FileSystemURLs. The MountPoints are ordered |
| 280 // in order they should try to crack a FileSystemURL. | 294 // in order they should try to crack a FileSystemURL. |
| 281 std::vector<MountPoints*> url_crackers_; | 295 std::vector<MountPoints*> url_crackers_; |
| 282 | 296 |
| 297 | |
|
kinuko
2013/04/17 14:27:29
(will remove this empty line)
| |
| 283 // The base path of the storage partition for this context. | 298 // The base path of the storage partition for this context. |
| 284 const base::FilePath partition_path_; | 299 const base::FilePath partition_path_; |
| 285 | 300 |
| 286 // For syncable file systems. | 301 // For syncable file systems. |
| 287 scoped_ptr<sync_file_system::LocalFileChangeTracker> change_tracker_; | 302 scoped_ptr<sync_file_system::LocalFileChangeTracker> change_tracker_; |
| 288 scoped_refptr<sync_file_system::LocalFileSyncContext> sync_context_; | 303 scoped_refptr<sync_file_system::LocalFileSyncContext> sync_context_; |
| 289 | 304 |
| 290 DISALLOW_IMPLICIT_CONSTRUCTORS(FileSystemContext); | 305 DISALLOW_IMPLICIT_CONSTRUCTORS(FileSystemContext); |
| 291 }; | 306 }; |
| 292 | 307 |
| 293 struct DefaultContextDeleter { | 308 struct DefaultContextDeleter { |
| 294 static void Destruct(const FileSystemContext* context) { | 309 static void Destruct(const FileSystemContext* context) { |
| 295 context->DeleteOnCorrectThread(); | 310 context->DeleteOnCorrectThread(); |
| 296 } | 311 } |
| 297 }; | 312 }; |
| 298 | 313 |
| 299 } // namespace fileapi | 314 } // namespace fileapi |
| 300 | 315 |
| 301 #endif // WEBKIT_FILEAPI_FILE_SYSTEM_CONTEXT_H_ | 316 #endif // WEBKIT_FILEAPI_FILE_SYSTEM_CONTEXT_H_ |
| OLD | NEW |