Index: webkit/fileapi/file_system_context.h |
diff --git a/webkit/fileapi/file_system_context.h b/webkit/fileapi/file_system_context.h |
index 0225a219ba320a311b780d4df1481d3e4ae64b4a..77721c9207b105bf4f6b05e5d8f64a97da15b596 100644 |
--- a/webkit/fileapi/file_system_context.h |
+++ b/webkit/fileapi/file_system_context.h |
@@ -12,6 +12,7 @@ |
#include "base/callback.h" |
#include "base/memory/ref_counted.h" |
#include "base/memory/scoped_ptr.h" |
+#include "base/memory/scoped_vector.h" |
#include "base/platform_file.h" |
#include "base/sequenced_task_runner_helpers.h" |
#include "webkit/fileapi/file_system_types.h" |
@@ -72,16 +73,18 @@ class WEBKIT_STORAGE_EXPORT FileSystemContext |
// returns false if the current task is not running on the thread that allows |
// blocking file operations (like SequencedWorkerPool implementation does). |
// |
- // |external_mount_points| contains non-system external mount points available |
- // in the context. If not NULL, it will be used during URL cracking. On |
- // ChromeOS, it will be passed to external_mount_point_provider. |
- // |external_mount_points| may be NULL only on platforms different from |
- // ChromeOS (i.e. platforms that don't use external_mount_point_provider). |
+ // |additional_providers| are added to the internal provider map |
+ // to serve filesystem requests for non-regular types. |
+ // If none is given, this context only handles HTML5 Sandbox FileSystem |
+ // and Drag-and-drop Isolated FileSystem requests. |
+ // |
+ // |additional_mount_points| is used to crack FileSystemURL in |
+ // CrackFileSystemURL() (in addition to default system-wide mount points). |
FileSystemContext( |
scoped_ptr<FileSystemTaskRunners> task_runners, |
- ExternalMountPoints* external_mount_points, |
- quota::SpecialStoragePolicy* special_storage_policy, |
quota::QuotaManagerProxy* quota_manager_proxy, |
+ ScopedVector<FileSystemMountPointProvider> additional_providers, |
+ const std::vector<MountPoints*>& additional_mount_points, |
const base::FilePath& partition_path, |
const FileSystemOptions& options); |
@@ -193,9 +196,10 @@ class WEBKIT_STORAGE_EXPORT FileSystemContext |
int64 offset); |
// Register a filesystem provider. The ownership of |provider| is |
- // transferred to this instance. |
- void RegisterMountPointProvider(FileSystemType type, |
- FileSystemMountPointProvider* provider); |
+ // transferred to this instance. This must be used only for testing. |
+ void RegisterMountPointProviderForTesting( |
+ FileSystemType type, |
+ FileSystemMountPointProvider* provider); |
FileSystemTaskRunners* task_runners() { return task_runners_.get(); } |
@@ -260,6 +264,10 @@ class WEBKIT_STORAGE_EXPORT FileSystemContext |
// does not support synchronous file operations. |
FileSystemFileUtil* GetFileUtil(FileSystemType type) const; |
+ // For initial provider_map construction. This must be called only from |
+ // the constructor. |
+ void RegisterMountPointProvider(FileSystemMountPointProvider* provider); |
+ |
scoped_ptr<FileSystemTaskRunners> task_runners_; |
scoped_refptr<quota::QuotaManagerProxy> quota_manager_proxy_; |
@@ -267,15 +275,16 @@ class WEBKIT_STORAGE_EXPORT FileSystemContext |
// Regular mount point providers. |
scoped_ptr<SandboxMountPointProvider> sandbox_provider_; |
scoped_ptr<IsolatedMountPointProvider> isolated_provider_; |
- scoped_ptr<ExternalFileSystemMountPointProvider> external_provider_; |
+ |
+ // Additional mount point providers. |
+ ScopedVector<FileSystemMountPointProvider> additional_providers_; |
// Registered mount point providers. |
+ // The map must be constructed in the constructor (other than for testing) |
+ // since it can be accessed on multiple threads. |
+ // The ownership of each provider is held by mount_point_providers_. |
std::map<FileSystemType, FileSystemMountPointProvider*> provider_map_; |
- // External mount points visible in the file system context (excluding system |
- // external mount points). |
- scoped_refptr<ExternalMountPoints> external_mount_points_; |
- |
// MountPoints used to crack FileSystemURLs. The MountPoints are ordered |
// in order they should try to crack a FileSystemURL. |
std::vector<MountPoints*> url_crackers_; |